Skip to content

Commit 9c645b5

Browse files
author
maria-farooq
authored
Merge pull request #2759 from RestComm/issue-2758
Fixes #2758
2 parents f19ff77 + 23cabcf commit 9c645b5

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/ua/UserAgentManager.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import static javax.servlet.sip.SipServletResponse.SC_OK;
2525
import static javax.servlet.sip.SipServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED;
2626
import static javax.servlet.sip.SipServletResponse.SC_UNAUTHORIZED;
27+
import static javax.servlet.sip.SipServletResponse.SC_BUSY_EVERYWHERE;
28+
import static javax.servlet.sip.SipServletResponse.SC_BUSY_HERE;
2729
import static org.restcomm.connect.commons.util.HexadecimalUtils.toHex;
2830

2931
import java.io.IOException;
@@ -311,7 +313,11 @@ public void onReceive(final Object message) throws Exception {
311313
}
312314
} else if (message instanceof SipServletResponse) {
313315
SipServletResponse response = (SipServletResponse) message;
314-
if (response.getStatus()>400 && response.getMethod().equalsIgnoreCase("OPTIONS")) {
316+
int responseStatusCode = response.getStatus();
317+
if (responseStatusCode > 400
318+
// https://telestax.atlassian.net/browse/RESTCOMM-1582: Fix for User Agent that reply with BUSY when they are in a call
319+
&& (responseStatusCode != SC_BUSY_HERE && responseStatusCode != SC_BUSY_EVERYWHERE)
320+
&& response.getMethod().equalsIgnoreCase("OPTIONS")) {
315321
removeRegistration(response);
316322
} else if (actAsImsUa && response.getMethod().equalsIgnoreCase(REGISTER)) {
317323
proxyResponseFromIms(message, response);

restcomm/restcomm.testsuite/src/test/java/org/restcomm/connect/testsuite/telephony/ua/UserAgentManagerTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,38 @@ public void registerUserAgentWith408ErrorResponse() throws ParseException, Inter
508508
assertTrue(MonitoringServiceTool.getInstance().getRegisteredUsers(deploymentUrl.toString(),adminAccountSid, adminAuthToken)==0);
509509
}
510510

511+
@Test
512+
public void registerUserAgentWith486BusyErrorResponse() throws ParseException, InterruptedException, InvalidArgumentException {
513+
// deployer.deploy("UserAgentTest");
514+
// Register the phone so we can get OPTIONS pings from RestComm.
515+
SipURI uri = sipStack2.getAddressFactory().createSipURI(null, restcommContact);
516+
Credential c = new Credential("127.0.0.1","bob", "1234");
517+
phone2.addUpdateCredential(c);
518+
assertTrue(phone2.register(uri, "bob", "1234", bobContact, 3600, 3600));
519+
Thread.sleep(2000);
520+
assertTrue(MonitoringServiceTool.getInstance().getRegisteredUsers(deploymentUrl.toString(),adminAccountSid, adminAuthToken)==1);
521+
522+
phone2.listenRequestMessage();
523+
RequestEvent request = phone2.waitRequest(10000);
524+
assertEquals(request.getRequest().getMethod(), SipRequest.OPTIONS);
525+
526+
ArrayList<Header> additionalHeader = new ArrayList<Header>();
527+
Header reason = sipStack2.getHeaderFactory().createReasonHeader("udp", 486, "Busy Here");
528+
additionalHeader.add(reason);
529+
530+
phone2.sendReply(request, 486, "Busy Here", null, null, 3600);
531+
Thread.sleep(1000);
532+
assertTrue(MonitoringServiceTool.getInstance().getRegisteredUsers(deploymentUrl.toString(),adminAccountSid, adminAuthToken)==1);
533+
//Dispose phone. Restcomm will fail to send the OPTIONS message and should remove the registration
534+
sipStack2.dispose();
535+
phone2 = null;
536+
sipStack2 = null;
537+
// need a higher timeout to cope with SIP OPTIONS transaction timeout
538+
Thread.sleep(65000);
539+
assertTrue(MonitoringServiceTool.getInstance().getRegisteredUsers(deploymentUrl.toString(),adminAccountSid, adminAuthToken)==0);
540+
}
541+
542+
511543
/**
512544
* registerUserAgentWithAtTheRateSignInLogin
513545
* we should be able to register and remove registration on non-response to options

0 commit comments

Comments
 (0)