Skip to content

Commit

Permalink
Fixes for Sip Refer support
Browse files Browse the repository at this point in the history
This refer to #1602
  • Loading branch information
gvagenas committed Jan 30, 2017
1 parent a28aa91 commit d89890e
Show file tree
Hide file tree
Showing 3 changed files with 268 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1405,7 +1405,7 @@ List<NameValuePair> parameters() {
parameters.add(new BasicNameValuePair("ForwardedFrom", forwardedFrom));
parameters.add(new BasicNameValuePair("CallTimestamp", callInfo.dateCreated().toString()));
if (referTarget != null) {
parameters.add(new BasicNameValuePair("referTarget", referTarget));
parameters.add(new BasicNameValuePair("ReferTarget", referTarget));
}
// logger.info("Type " + callInfo.type());
SipServletResponse lastResponse = callInfo.lastResponse();
Expand Down Expand Up @@ -2195,7 +2195,7 @@ private void executeDialAction(final Object message, final ActorRef outboundCall
}
}

if (outboundCall != null) {
if (outboundCall != null && !outboundCall.isTerminated()) {
try {
if(logger.isInfoEnabled()) {
logger.info("Trying to get outboundCall Info");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -673,20 +673,13 @@ private void transfer(SipServletRequest request) throws Exception {
CallDetailRecordsDao dao = storage.getCallDetailRecordsDao();
SipServletResponse servletResponse = null;

if (callInfo != null) {
//Call must be in-progress to accept Sip Refer
if (callInfo != null && callInfo.state().equals(CallStateChanged.State.IN_PROGRESS)) {
try {
String user = ((SipURI)request.getFrom().getURI()).getUser();
if (storage.getClientsDao().getClient(user) != null) {
if (callInfo.direction().equalsIgnoreCase("inbound")) {
cdr = dao.getCallDetailRecord(callInfo.sid());
} else {
cdr = dao.getCallDetailRecord(dao.getCallDetailRecord(callInfo.sid()).getParentCallSid());
}
if (callInfo.direction().equalsIgnoreCase("inbound")) {
cdr = dao.getCallDetailRecord(callInfo.sid());
} else {
servletResponse = request.createResponse(SC_METHOD_NOT_ALLOWED, "Set either incoming phone number Refer URL or Refer application");
servletResponse.setHeader("Event", "refer");
servletResponse.send();
return;
cdr = dao.getCallDetailRecord(dao.getCallDetailRecord(callInfo.sid()).getParentCallSid());
}
} catch (Exception e) {
if (logger.isInfoEnabled()) {
Expand Down Expand Up @@ -737,22 +730,14 @@ private void transfer(SipServletRequest request) throws Exception {

//Transferee will be transfered to the transfer target
ActorRef transferee = null;
List<ActorRef> listOfTransfereeCalls = null;
if (answer instanceof ActorRef) {
transferee = (ActorRef) answer;
} else if (answer instanceof List) {
listOfTransfereeCalls = (List<ActorRef>) answer;
}
transferee = (ActorRef) answer;

if(logger.isInfoEnabled()) {
logger.info("About to start Call Transfer");
logger.info("Transferor Call path: " + transferor.path());
if (transferee != null) {
logger.info("Transferee Call path: " + transferee.path());
}
if (listOfTransfereeCalls != null) {
logger.info("List of related calls received, size of the list: "+listOfTransfereeCalls.size());
}
// Cleanup all observers from both transferor legs
logger.info("Will tell Call actors to stop observing existing Interpreters");
}
Expand All @@ -763,11 +748,6 @@ private void transfer(SipServletRequest request) throws Exception {
if (transferee != null) {
transferee.tell(new StopObserving(), self());
}
if (listOfTransfereeCalls != null) {
for(ActorRef branch: listOfTransfereeCalls) {
branch.tell(new StopObserving(), self());
}
}
if(logger.isInfoEnabled()) {
logger.info("Existing observers removed from Calls actors");

Expand Down Expand Up @@ -808,28 +788,13 @@ private void transfer(SipServletRequest request) throws Exception {
system.scheduler().scheduleOnce(Duration.create(500, TimeUnit.MILLISECONDS), interpreter,
new StartInterpreter(transferee), system.dispatcher());
if(logger.isInfoEnabled()) {
logger.info("New Intepreter for first transferor leg: " + interpreter.path() + " started");
logger.info("New Intepreter for transferee call leg: " + interpreter.path() + " started");
}

if(logger.isInfoEnabled()) {
logger.info("will hangup transferor: "+transferor.path());
}
transferor.tell(new Hangup(), null);
//
// // Check what to do with the second/outbound transferor leg of the transferor
// if (transferor != null && listOfTransfereeCalls == null) {
// if(logger.isInfoEnabled()) {
// logger.info("will hangup transferee: "+transferee.path());
// }
//
//
// }
// if (listOfTransfereeCalls != null) {
// for (ActorRef branch: listOfTransfereeCalls) {
// branch.tell(new Hangup(), null);
// }
// if (logger.isInfoEnabled()) {
// String msg = String.format("Call Transfer while dial forking, terminated %d calls", listOfTransfereeCalls.size());
// logger.info(msg);
// }
// }
}

/**
Expand Down
Loading

0 comments on commit d89890e

Please sign in to comment.