Fix stackoverflow on SIP server resolution when SRV host entry is unresolvable

cusax-fix
Ingo Bauersachs 14 years ago
parent 7ac553e63b
commit ec7caabb71

@ -303,6 +303,11 @@ else if(TCP.equalsIgnoreCase(naptrRecords[naptrIndex][1]))
}
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 @@ else if(TCP.equalsIgnoreCase(naptrRecords[naptrIndex][1]))
}
}
}
state = State.Srv;
return getNextAddressFromDns(); //backtrack to next srv record
return false;
case SrvHostIPs:
if(socketAddressIndex >= socketAddresses.length)
{

@ -281,6 +281,22 @@ public void testNoSrvOneA() throws ParseException, DnssecException
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 void testTwoSrvOneA() throws ParseException, DnssecException
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

Loading…
Cancel
Save