public static SipServletResponse getLinkedResponse(SipServletMessage message) { SipSession linkedB2BUASession = getLinkedSession(message); // if this is an ACK that belongs to a B2BUA session, then we proxy it to the other client if (linkedB2BUASession != null) { SipServletResponse response = (SipServletResponse) linkedB2BUASession.getAttribute(B2BUA_LAST_RESPONSE); return response; } return null; }
public static SipServletRequest getLinkedRequest(SipServletMessage message) { SipSession linkedB2BUASession = getLinkedSession(message); if (linkedB2BUASession != null) { SipServletRequest linkedRequest = (SipServletRequest) linkedB2BUASession.getAttribute(B2BUA_LAST_REQUEST); return linkedRequest; } return null; }
public void onEvent(SdpPortManagerEvent arg0) { if((Boolean.TRUE).equals(inviteRequest.getSession().getAttribute("playAnnouncement"))) { NetworkConnection connection = (NetworkConnection) inviteRequest.getSession().getAttribute("connection"); MediaGroup mg =(MediaGroup)inviteRequest.getSession().getAttribute("mediaGroup"); try { playAnnouncement(mg, inviteRequest.getSession(), (String)inviteRequest.getSession().getAttribute("audioFilePath")); }catch (Exception e) { logger.error(e); } } } }
public static SipSession getLinkedSession(SipServletMessage message) { SipSession sipSession = null; if (message.getSession().isValid()) { sipSession = (SipSession) message.getSession().getAttribute(B2BUA_LINKED_SESSION); } if (sipSession == null) { if(logger.isInfoEnabled()) { logger.info("SIP SESSION is NULL"); } } return sipSession; }
private static void sendCallInfoStreamEvent(ActorSystem system, SipServletMessage message, CallStateChanged.State state) { SipSession session = message.getSession(); Object sid = session.getAttribute(CDR_SID); if (sid != null) { CallInfo callInfo = new CallInfo( (Sid) sid, (Sid) session.getAttribute(CDR_ACCOUNT_SID), state, null, (String) session.getAttribute(CDR_DIRECTION), null, null, null, (String) session.getAttribute(CDR_FROM), (String) session.getAttribute(CDR_TO), null, null, false, false, false, null, null ); system.eventStream().publish(new CallInfoStreamEvent(callInfo)); } } }
public static void playFileInResponseToDTMFInfo(SipSession session, String audioFile) { logger.info("playing " + audioFile + " in response to DTMF"); MediaGroup mg = (MediaGroup) session.getAttribute("mediaGroup"); // Let us request for Announcement Complete event or Failure // in case if it happens try { mg.getPlayer().play(URI.create(audioFile), null, null); } catch (MsControlException e) { // TODO Auto-generated catch block e.printStackTrace(); } session.setAttribute("DTMFSession", DTMFListener.DTMF_SESSION_STOPPED); logger.info("played " + audioFile + " in response to DTMF"); } }
public void onEvent(SignalDetectorEvent arg0) { String signal = arg0.getSignalString(); if(session.getAttribute("orderApproval") != null) { if(session.getAttribute("adminApproval") != null) { logger.info("admin approval in progress."); DTMFUtils.adminApproval(session, signal, pathToAudioDirectory); } else { logger.info("customer approval in progress."); DTMFUtils.orderApproval(session, signal, pathToAudioDirectory); } } else if(session.getAttribute("deliveryDate") != null) { logger.info("delivery date update in progress."); if(!DTMFUtils.updateDeliveryDate(session, signal)) { try { mg.getSignalDetector().receiveSignals(1, null, null, null); } catch (MsControlException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
public static void adminApproval(SipSession session, String signal, String pathToAudioDirectory) { if("1".equalsIgnoreCase(signal)) { // Order Approved logger.info("Order approved !"); String audioFile = pathToAudioDirectory + "OrderApproved.wav"; playFileInResponseToDTMFInfo(session, audioFile); } else if("2".equalsIgnoreCase(signal)) { // Order Rejected logger.info("Order rejected !"); String audioFile = pathToAudioDirectory + "OrderCancelled.wav"; playFileInResponseToDTMFInfo(session, audioFile); } MediaGroup mg = (MediaGroup)session.getAttribute("mediaGroup"); try { mg.getPlayer().addListener(new EndCallWhenPlaybackCompletedListener(session)); } catch (MsControlException e) { logger.error("Error", e); } }
public static void orderApproval(SipSession session, String signal, String pathToAudioDirectory) { long orderId = (Long) session.getAttribute("orderId"); MediaGroup mg = (MediaGroup)session.getAttribute("mediaGroup"); try { mg.getPlayer().addListener(new EndCallWhenPlaybackCompletedListener(session));
String dateAndTime = (String) session.getAttribute("dateAndTime"); if(dateAndTime == null) { dateAndTime = ""; InitialContext ctx = new InitialContext(); OrderManager orderManager = (OrderManager) ctx.lookup("shopping-demo/OrderManagerBean/remote"); orderManager.setDeliveryDate(session.getAttribute("orderId"), timeStamp); } catch (NamingException e) { logger.error("An exception occured while retrieving the EJB OrderManager",e); logger.info("Playing delivery date summary : " + "TTS:" + stringBuffer); MediaGroup mg = (MediaGroup) session.getAttribute("mediaGroup"); mg.getPlayer().play(delieryDateSummary, null, null); mg.getPlayer().addListener(new EndCallWhenPlaybackCompletedListener(session));
public static void playAnnouncement(MediaGroup mg, SipSession sipSession, String pathToAudioDirectory) { try { java.net.URI uri = (java.net.URI) sipSession.getAttribute("speechUri"); if(sipSession.getAttribute("orderApproval") != null) { logger.info("Playing confirmation announcement : " + uri); mg.getPlayer().play(uri, null, null); mg.getSignalDetector().receiveSignals(1, null, null, null); sipSession.setAttribute("DTMFSession", DTMFListener.DTMF_SESSION_STARTED); logger.info("Waiting for DTMF at the same time.."); } else if (sipSession.getAttribute("deliveryDate") != null) { logger.info("Playing Delivery Date Announcement : " + uri); mg.getPlayer().play(uri, null, null); mg.getSignalDetector().receiveSignals(1, null, null, null); sipSession.setAttribute("DTMFSession", DTMFListener.DTMF_SESSION_STARTED); logger.info("Waiting for DTMF at the same time.."); } else if (sipSession.getAttribute("shipping") != null) { logger.info("Playing shipping announcement : " + uri); mg.getPlayer().play(uri, null, null); mg.getPlayer().addListener(new EndCallWhenPlaybackCompletedListener(sipSession)); logger.info("shipping announcement played. tearing down the call"); } } catch (Exception e) { logger.error(e); } }
public void onEvent(PlayerEvent event) { try { logger.info("ENDING CALL "); Player player = event.getSource(); MediaGroup mg = player.getContainer(); if (event.isSuccessful() && (PlayerEvent.PLAY_COMPLETED == event.getEventType())) { MediaSession session =(MediaSession)sipSession.getAttribute("mediaSession"); session.release(); Thread.sleep(1500); SipServletRequest byeRequest = sipSession.createRequest("BYE"); byeRequest.send(); } } catch (Exception e) { logger.error("Error", e); } }
public static void updateCDR(ActorSystem system, SipServletMessage message, CallStateChanged.State state) { CallDetailRecordsDao records = daoManager.getCallDetailRecordsDao(); SipServletRequest request = null; // Update CallDetailRecord if (message instanceof SipServletResponse) { request = (SipServletRequest) getLinkedSession(message).getAttribute(B2BUA_LAST_REQUEST); } else if (message instanceof SipServletRequest) { request = (SipServletRequest) message; } CallDetailRecord callRecord = records.getCallDetailRecord((Sid) request.getSession().getAttribute(CDR_SID)); if (callRecord != null) { if(logger.isInfoEnabled()) { logger.info("CDR found! Updating"); } callRecord = callRecord.setStatus(state.name()); final DateTime now = DateTime.now(); callRecord = callRecord.setEndTime(now); int seconds; if (callRecord.getStartTime() != null) { seconds = (int) (DateTime.now().getMillis() - callRecord.getStartTime().getMillis()) / 1000; } else { seconds = 0; } callRecord = callRecord.setDuration(seconds); records.updateCallDetailRecord(callRecord); sendCallInfoStreamEvent(system, message, state); } }
SipServletRequest request = (SipServletRequest) getLinkedSession(response).getAttribute(B2BUA_LAST_REQUEST); CallDetailRecord callRecord = records.getCallDetailRecord((Sid) request.getSession().getAttribute(CDR_SID)); response.getSession().setAttribute(B2BUA_LAST_RESPONSE, response); SipServletRequest linkedRequest = (SipServletRequest) getLinkedSession(response).getAttribute(B2BUA_LAST_REQUEST); SipServletResponse clonedResponse = linkedRequest.createResponse(response.getStatus()); SipURI originalURI = null; CallDetailRecord callRecord = records.getCallDetailRecord((Sid) linkedRequest.getSession().getAttribute(CDR_SID)); Sid organizationSid = daoManager.getAccountsDao().getAccount(callRecord.getAccountSid()).getOrganizationSid();
Map<String,ArrayList<String>> extensionHeaders = (Map<String,ArrayList<String>>)incomingSession.getAttribute(EXTENSION_HEADERS); addHeadersToMessage(outRequest, extensionHeaders, sipFactory); outRequest.send();