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.setDuration(0); cdr = cdr.setRingDuration((int) ((DateTime.now().getMillis() - cdr.getStartTime().getMillis()) / 1000)); break; case COMPLETED: cdr = cdr.setEndTime(DateTime.now()); cdr = cdr.setDuration((int) ((DateTime.now().getMillis() - cdr.getStartTime().getMillis()) / 1000)); break;
seconds = 0; callRecord = callRecord.setDuration(seconds); records.updateCallDetailRecord(callRecord); callRecord = callRecord.setEndTime(now); final int seconds = (int) ((DateTime.now().getMillis() - callRecord.getStartTime().getMillis()) / 1000); callRecord = callRecord.setDuration(seconds);
cdr = message.getOnHold() == null ? cdr : cdr.setOnHold(message.getOnHold()); cdr = message.getMsId() == null ? cdr : cdr.setMsId(message.getMsId()); cdr = message.upateDuration() ? cdr : cdr.setDuration((int) ((DateTime.now().getMillis() - cdr.getStartTime().getMillis()) / 1000)); cdr = message.updateRingDuration() ? cdr : cdr.setRingDuration((int) ((DateTime.now().getMillis() - cdr.getStartTime().getMillis()) / 1000));