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); } }
cdr = cdr.setEndTime(DateTime.now()); cdr = cdr.setDuration((int) ((DateTime.now().getMillis() - cdr.getStartTime().getMillis()) / 1000)); break;
callRecord = callRecord.setEndTime(now); int seconds; if (callRecord.getStartTime() != null) { callRecord = callRecord.setStatus(CallStateChanged.State.COMPLETED.name()); final DateTime now = DateTime.now(); callRecord = callRecord.setEndTime(now); final int seconds = (int) ((DateTime.now().getMillis() - callRecord.getStartTime().getMillis()) / 1000); callRecord = callRecord.setDuration(seconds);
cdr = message.getEndTime() == null ? cdr : cdr.setEndTime(message.getEndTime()); cdr = message.getPrice() == null ? cdr : cdr.setPrice(message.getPrice()); cdr = message.getAnsweredBy() == null ? cdr : cdr.setAnsweredBy(message.getAnsweredBy());