From 2edb268c6df15c20c64182a3fa7f0a728db386b0 Mon Sep 17 00:00:00 2001 From: JuankGarcia Date: Tue, 10 Apr 2018 13:01:50 -0600 Subject: [PATCH 1/2] SIP REFER method is now working with organizations, the SipURI is taken from Refer-To header. The searchOrganizationBySIPRequest method is used by SIP methods: INVITE and REFER. --- .../interpreter/SIPOrganizationUtil.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java b/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java index 52cee924ce..9423bc71ff 100644 --- a/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java +++ b/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java @@ -42,13 +42,33 @@ public static Sid getOrganizationSidBySipURIHost(OrganizationsDao orgDao, final return organization == null ? null : organization.getSid(); } - public static Sid searchOrganizationBySIPRequest(OrganizationsDao orgDao, SipServletRequest request) { - //first try with requetURI - Sid destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, - (SipURI) request.getRequestURI()); - if (destinationOrganizationSid == null) { + public static Sid searchOrganizationBySIPRequest(OrganizationsDao orgDao, SipServletRequest request) + { + Sid destinationOrganizationSid = null; + SipURI sipURI = null; + if (!request.getMethod().equals("REFER")) { + //first try with requetURI + destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI)request.getRequestURI()); // try to get destinationOrganizationSid from toUri - destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI) request.getTo().getURI()); + if (destinationOrganizationSid == null) { + destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI)request.getTo().getURI()); + } + }else{ + // The Request URI from SIP REFER method is going with the IP Address instead of the domain name + // try to get destinationOrganizationSid from Refer-To + try{ + sipURI = (SipURI)request.getAddressHeader("Refer-To").getURI(); + } catch (ServletParseException e){ + logger.error("sipURI is NULL"); + } + if (sipURI != null){ + destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, sipURI); + if(destinationOrganizationSid == null){ + logger.error("destinationOrganizationSid is NULL: Refer-To Uri is: "+ sipURI); + }else{ + logger.debug("searchOrganizationBySIPRequest: destinationOrganizationSid: "+destinationOrganizationSid +" Refer-To Uri is: "+sipURI); + } + } } return destinationOrganizationSid; } From e75d2544b966c14c7cc596bd02501afc6426c7b9 Mon Sep 17 00:00:00 2001 From: JuankGarcia Date: Wed, 11 Apr 2018 07:55:37 -0600 Subject: [PATCH 2/2] SIP REFER method is now working with organizations, the SipURI is taken from Refer-To header. The searchOrganizationBySIPRequest method is used by SIP methods: INVITE and REFER in CallManager class, so I validate into the method if the request is REFER. --- .../interpreter/SIPOrganizationUtil.java | 32 ++++--------------- .../connect/telephony/CallManager.java | 4 ++- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java b/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java index 9423bc71ff..52cee924ce 100644 --- a/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java +++ b/restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/SIPOrganizationUtil.java @@ -42,33 +42,13 @@ public static Sid getOrganizationSidBySipURIHost(OrganizationsDao orgDao, final return organization == null ? null : organization.getSid(); } - public static Sid searchOrganizationBySIPRequest(OrganizationsDao orgDao, SipServletRequest request) - { - Sid destinationOrganizationSid = null; - SipURI sipURI = null; - if (!request.getMethod().equals("REFER")) { - //first try with requetURI - destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI)request.getRequestURI()); + public static Sid searchOrganizationBySIPRequest(OrganizationsDao orgDao, SipServletRequest request) { + //first try with requetURI + Sid destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, + (SipURI) request.getRequestURI()); + if (destinationOrganizationSid == null) { // try to get destinationOrganizationSid from toUri - if (destinationOrganizationSid == null) { - destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI)request.getTo().getURI()); - } - }else{ - // The Request URI from SIP REFER method is going with the IP Address instead of the domain name - // try to get destinationOrganizationSid from Refer-To - try{ - sipURI = (SipURI)request.getAddressHeader("Refer-To").getURI(); - } catch (ServletParseException e){ - logger.error("sipURI is NULL"); - } - if (sipURI != null){ - destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, sipURI); - if(destinationOrganizationSid == null){ - logger.error("destinationOrganizationSid is NULL: Refer-To Uri is: "+ sipURI); - }else{ - logger.debug("searchOrganizationBySIPRequest: destinationOrganizationSid: "+destinationOrganizationSid +" Refer-To Uri is: "+sipURI); - } - } + destinationOrganizationSid = getOrganizationSidBySipURIHost(orgDao, (SipURI) request.getTo().getURI()); } return destinationOrganizationSid; } diff --git a/restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/CallManager.java b/restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/CallManager.java index 1309db1251..14d7b86b5d 100644 --- a/restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/CallManager.java +++ b/restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/CallManager.java @@ -83,6 +83,7 @@ import org.restcomm.connect.dao.ClientsDao; import org.restcomm.connect.dao.DaoManager; import org.restcomm.connect.dao.NotificationsDao; +import org.restcomm.connect.dao.OrganizationsDao; import org.restcomm.connect.dao.RegistrationsDao; import org.restcomm.connect.dao.common.OrganizationUtil; import org.restcomm.connect.dao.entities.Account; @@ -1108,6 +1109,7 @@ private void transfer(SipServletRequest request) throws Exception { CallDetailRecord cdr = null; CallDetailRecordsDao dao = storage.getCallDetailRecordsDao(); + OrganizationsDao orgDao = storage.getOrganizationsDao(); SipServletResponse servletResponse = null; @@ -1165,7 +1167,7 @@ private void transfer(SipServletRequest request) throws Exception { String phone = cdr.getTo(); Sid sourceOrganizationSid = storage.getAccountsDao().getAccount(cdr.getAccountSid()).getOrganizationSid(); - Sid destOrg = SIPOrganizationUtil.searchOrganizationBySIPRequest(storage.getOrganizationsDao(), request); + Sid destOrg = orgDao.getOrganizationByDomainName(((SipURI) request.getAddressHeader("Refer-To").getURI()).getHost()).getSid(); IncomingPhoneNumber number = numberSelector.searchNumber(phone, sourceOrganizationSid, destOrg); if (number == null || (number.getReferUrl() == null && number.getReferApplicationSid() == null)) {