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); } }
CallDetailRecordsDao dao = daoManager.getCallDetailRecordsDao(); cdr = dao.getCallDetailRecord(sid); cdr = cdr.setStatus(callState.toString());
logger.info("CDR found! Updating"); callRecord = callRecord.setStatus(CallStateChanged.State.CANCELED.name()); final DateTime now = DateTime.now(); callRecord = callRecord.setEndTime(now); callRecord = callRecord.setStatus(CallStateChanged.State.RINGING.name()); } else if (response.getStatus() == 200 || response.getStatus() == 202) { callRecord = callRecord.setStatus(CallStateChanged.State.IN_PROGRESS.name()); callRecord = callRecord.setAnsweredBy(((SipURI) response.getTo().getURI()).getUser()); final DateTime now = DateTime.now(); callRecord = callRecord.setStatus(CallStateChanged.State.BUSY.name()); } else if (response.getStatus() > 400) { callRecord = callRecord.setStatus(CallStateChanged.State.FAILED.name()); callRecord = callRecord.setStatus(CallStateChanged.State.COMPLETED.name()); final DateTime now = DateTime.now(); callRecord = callRecord.setEndTime(now);
logger.debug("CDR current values: "+cdr); cdr = message.getStatus() == null ? cdr : cdr.setStatus(message.getStatus().toString()); cdr = message.getStartTime() == null ? cdr : cdr.setStartTime(message.getStartTime()); cdr = message.getEndTime() == null ? cdr : cdr.setEndTime(message.getEndTime());