Skip to content

Commit

Permalink
Working on #703: Investigate impacts for DNS SRV introduction in Andr…
Browse files Browse the repository at this point in the history
…oid SDK
  • Loading branch information
Antonis committed Sep 22, 2017
1 parent 77b6642 commit 91a32c5
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 10 deletions.
4 changes: 3 additions & 1 deletion Examples/restcomm-olympus/app/app.iml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,9 @@
<orderEntry type="library" exported="" name="libwebrtc-1.0.0-beta5-16765" level="project" />
<orderEntry type="library" exported="" name="testfairy-android-sdk-1.5.5" level="project" />
<orderEntry type="module" module-name="restcomm.android.sdk" exported="" />
<orderEntry type="library" exported="" name="android-jain-sip-ext-1.3.0-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="android-jain-sip-ri-1.2.293" level="project" />
<orderEntry type="library" exported="" name="dnsjava-2.1.8" level="project" />
<orderEntry type="library" exported="" name="core-1.54.0.0" level="project" />
<orderEntry type="library" exported="" name="support-core-ui-25.3.1" level="project" />
<orderEntry type="library" exported="" name="prov-1.54.0.0" level="project" />
Expand All @@ -146,4 +148,4 @@
<orderEntry type="library" exported="" name="support-fragment-25.3.1" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-25.3.1" level="project" />
</component>
</module>
</module>
6 changes: 3 additions & 3 deletions restcomm.android.sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ repositories {

dependencies {
//compile project(':libwebrtc')
compile(group: 'org.restcomm.android', name: 'libwebrtc', version: '1.0.0-beta5-16765', ext: 'aar')

compile 'org.restcomm.android:libwebrtc:1.0.0-beta5-16765@aar'
//compile files('libs/libjingle_peerconnection_java.jar')
compile 'com.android.support:appcompat-v7:25.3.1'
// Notice that log4j 2.7 doesn't work on account of JAIN SIP expecting log4j GroupId, not org.apache.logging.log4j
Expand All @@ -95,9 +94,10 @@ dependencies {
compile 'com.madgag.spongycastle:core:1.54.0.0'
compile 'com.madgag.spongycastle:prov:1.54.0.0'
compile 'com.madgag.spongycastle:pkix:1.54.0.0'

// Required for local unit tests (JUnit 4 framework)
//testCompile 'junit:junit:4.12'
compile files('libs/android-jain-sip-ext-1.3.0-SNAPSHOT.jar')
compile 'dnsjava:dnsjava:2.1.8'
}

// Upload to sonatype stuff
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ public ClientTransaction jainSipCallHangup(JainSipJob jainSipJob, HashMap<String
RCLogger.v(TAG, "jainSipCallHangup(): jobId: " + jainSipJob.jobId);
Request byeRequest = null;
try {
byeRequest = jainSipClient.jainSipMessageBuilder.buildByeRequest(jainSipJob.transaction.getDialog(), reason, clientConfiguration);
byeRequest = jainSipClient.jainSipMessageBuilder.buildByeRequest(jainSipJob.transaction.getDialog(), reason, jainSipClient.jainSipListeningPoint, clientConfiguration);
RCLogger.i(TAG, "Sending SIP request: \n" + byeRequest.toString());

ClientTransaction transaction = jainSipClient.jainSipProvider.getNewClientTransaction(byeRequest);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import android.javax.sip.message.Response;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.org.mobicents.ext.javax.sip.dns.DNSAwareRouter;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
Expand Down Expand Up @@ -179,6 +180,9 @@ public void open(String jobId, Context androidContext, HashMap<String, Object> c
Properties properties = new Properties();
properties.setProperty("android.javax.sip.STACK_NAME", "androidSip");
properties.setProperty("android.gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY", "android.gov.nist.javax.sip.stack.NioMessageProcessorFactory");
// DNS SRV
// Important: for jain-sip.ext especially, we need to drop the 'android' part
properties.setProperty("javax.sip.ROUTER_PATH", DNSAwareRouter.class.getCanonicalName());

// Setup TLS even if currently we aren't using it, so that if user changes the setting later
// the SIP stack is ready to support it
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import android.javax.sip.SipProvider;
import android.javax.sip.address.Address;
import android.javax.sip.address.AddressFactory;
import android.javax.sip.address.Hop;
import android.javax.sip.address.SipURI;
import android.javax.sip.address.URI;
import android.javax.sip.header.ContactHeader;
Expand All @@ -48,22 +49,28 @@
import android.javax.sip.message.MessageFactory;
import android.javax.sip.message.Request;
import android.javax.sip.message.Response;
import android.org.mobicents.ext.javax.sip.dns.DNSAwareRouter;
import android.org.mobicents.ext.javax.sip.dns.DefaultDNSServerLocator;


import org.restcomm.android.sdk.BuildConfig;
import org.restcomm.android.sdk.RCClient;
import org.restcomm.android.sdk.RCConnection;
import org.restcomm.android.sdk.RCDevice;
import org.restcomm.android.sdk.util.RCLogger;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Resolver;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Queue;
import java.util.Set;

class JainSipMessageBuilder {
Expand Down Expand Up @@ -140,7 +147,7 @@ private Request buildBaseRequest(String method, String username, String domain,

// Add route header with the proxy first, if proxy exists (i.e. non registrar-less)
if (domain != null && !domain.equals("")) {
RouteHeader routeHeader = createRouteHeader(domain);
RouteHeader routeHeader = createRouteHeader(domain, listeningPoint);
request.addFirst(routeHeader);
}

Expand Down Expand Up @@ -276,7 +283,7 @@ public Request buildMessageRequest(String toSipUri, String message, ListeningPoi
}
}

public Request buildByeRequest(android.javax.sip.Dialog dialog, String reason, HashMap<String, Object> clientConfiguration) throws JainSipException
public Request buildByeRequest(android.javax.sip.Dialog dialog, String reason, ListeningPoint listeningPoint, HashMap<String, Object> clientConfiguration) throws JainSipException
{
try {
Request request = dialog.createRequest(Request.BYE);
Expand All @@ -285,7 +292,7 @@ public Request buildByeRequest(android.javax.sip.Dialog dialog, String reason, H
!clientConfiguration.get(RCDevice.ParameterKeys.SIGNALING_DOMAIN).equals("")) {
// we only need this for non-registrarless calls since the problem is only for incoming calls,
// and when working in registrarless mode there are no incoming calls
RouteHeader routeHeader = createRouteHeader((String) clientConfiguration.get(RCDevice.ParameterKeys.SIGNALING_DOMAIN));
RouteHeader routeHeader = createRouteHeader((String) clientConfiguration.get(RCDevice.ParameterKeys.SIGNALING_DOMAIN), listeningPoint);
request.addFirst(routeHeader);
}

Expand Down Expand Up @@ -463,10 +470,24 @@ public void normalizePeer(HashMap<String, Object> peerParameters, HashMap<String
}
}

private RouteHeader createRouteHeader(String route)
private RouteHeader createRouteHeader(String route, ListeningPoint listeningPoint)
{
try {
SipURI routeUri = (SipURI) jainSipAddressFactory.createURI(route);
//SipURI routeUri = (SipURI) jainSipAddressFactory.createURI(route);

Set<String> supportedTransports = new HashSet<String>();
supportedTransports.add(ListeningPoint.TLS);
//supportedTransports.add(listeningPoint.getTransport());
DefaultDNSServerLocator dnsServerLocator = new DefaultDNSServerLocator(supportedTransports);
Queue<Hop> hops = dnsServerLocator.locateHops(jainSipAddressFactory.createURI(route));
SipURI routeUri = jainSipAddressFactory.createSipURI(null, hops.peek().getHost());
routeUri.setParameter(DNSAwareRouter.DNS_ROUTE, Boolean.TRUE.toString());
routeUri.setPort(hops.peek().getPort());
if (hops.peek().getTransport() != null) {
routeUri.setTransportParam(hops.peek().getTransport());
}
/////////

routeUri.setLrParam();
Address routeAddress = jainSipAddressFactory.createAddress(routeUri);
return jainSipHeaderFactory.createRouteHeader(routeAddress);
Expand Down

0 comments on commit 91a32c5

Please sign in to comment.