diff options
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/sip/net/AutoProxyConnection.java | 8 | ||||
-rw-r--r-- | test/net/java/sip/communicator/slick/protocol/sip/TestAutoProxyDetection.java | 44 |
2 files changed, 50 insertions, 2 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/sip/net/AutoProxyConnection.java b/src/net/java/sip/communicator/impl/protocol/sip/net/AutoProxyConnection.java index 9dc01ac..4846bb8 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/net/AutoProxyConnection.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/net/AutoProxyConnection.java @@ -303,6 +303,11 @@ public class AutoProxyConnection }
return false;
case SrvHosts:
+ if(srvRecordsIndex >= srvRecords.length)
+ {
+ state = State.Srv;
+ return getNextAddressFromDns(); //backtrack to next srv record
+ }
for(; srvRecordsIndex < srvRecords.length; srvRecordsIndex++)
{
socketAddresses = nu.getAandAAAARecords(
@@ -319,8 +324,7 @@ public class AutoProxyConnection }
}
}
- state = State.Srv;
- return getNextAddressFromDns(); //backtrack to next srv record
+ return false;
case SrvHostIPs:
if(socketAddressIndex >= socketAddresses.length)
{
diff --git a/test/net/java/sip/communicator/slick/protocol/sip/TestAutoProxyDetection.java b/test/net/java/sip/communicator/slick/protocol/sip/TestAutoProxyDetection.java index 634d275..06cb70d 100644 --- a/test/net/java/sip/communicator/slick/protocol/sip/TestAutoProxyDetection.java +++ b/test/net/java/sip/communicator/slick/protocol/sip/TestAutoProxyDetection.java @@ -281,6 +281,22 @@ public class TestAutoProxyDetection verify(account, nu);
}
+ public void testOneSrvNoA() throws ParseException, DnssecException
+ {
+ expect(nu.getNAPTRRecords(DOMAIN)).andReturn(new String[][]{});
+ expect(nu.getSRVRecords("sips", "TCP", DOMAIN)).andReturn(null);
+ expect(nu.getSRVRecords("sip", "TCP", DOMAIN)).andReturn(null);
+ expect(nu.getSRVRecords("sip", "UDP", DOMAIN))
+ .andReturn(new SRVRecord[]{srv1});
+ expect(nu.getAandAAAARecords("proxy1." + DOMAIN, 5060))
+ .andReturn(null);
+
+ replay(nu, srv1);
+
+ assertFalse(apd.getNextAddress());
+ verify(account, nu, srv1);
+ }
+
public void testOneSrvOneA() throws ParseException, DnssecException
{
expect(nu.getNAPTRRecords(DOMAIN)).andReturn(new String[][]{});
@@ -352,6 +368,34 @@ public class TestAutoProxyDetection verify(account, nu, srv1, srv2);
}
+ public void testTwoSameSrvOneA() throws ParseException, DnssecException
+ {
+ expect(nu.getNAPTRRecords(DOMAIN)).andReturn(new String[][]{});
+ expect(nu.getSRVRecords("sips", "TCP", DOMAIN))
+ .andReturn(new SRVRecord[]{srv1, srv2});
+ expect(nu.getSRVRecords("sip", "TCP", DOMAIN)).andReturn(null);
+ expect(nu.getSRVRecords("sip", "UDP", DOMAIN)).andReturn(null);
+ expect(nu.getAandAAAARecords("proxy1." + DOMAIN, 5060))
+ .andReturn(new InetSocketAddress[]{a1});
+ expect(nu.getAandAAAARecords("proxy2." + DOMAIN, 5061))
+ .andReturn(new InetSocketAddress[]{a2});
+
+ replay(nu, srv1, srv2);
+
+ assertTrue(apd.getNextAddress());
+ assertEquals(a1, apd.getAddress());
+ assertEquals("TLS", apd.getTransport());
+ assertEquals(5060, apd.getAddress().getPort());
+
+ assertTrue(apd.getNextAddress());
+ assertEquals(a2, apd.getAddress());
+ assertEquals("TLS", apd.getTransport());
+ assertEquals(5061, apd.getAddress().getPort());
+
+ assertFalse(apd.getNextAddress());
+ verify(account, nu, srv1, srv2);
+ }
+
//----------------------
public void testNoA() throws ParseException, DnssecException
|