From dec68e4aaf86f4db07d0a313516319a6d37d88fe Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Tue, 31 Jul 2012 07:49:52 +0200 Subject: call echo logger --- src/callnotifier/CallMonitor.php | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'src/callnotifier/CallMonitor.php') diff --git a/src/callnotifier/CallMonitor.php b/src/callnotifier/CallMonitor.php index a910e9f..9abdba8 100644 --- a/src/callnotifier/CallMonitor.php +++ b/src/callnotifier/CallMonitor.php @@ -4,9 +4,15 @@ namespace callnotifier; /** * Watches EDSS1 messages for calls. Keeps an internal call state * and notifies loggers of incoming and finished calls. + * + * Notifications: + * - incomingCall + * - finishedCall */ class CallMonitor { + protected $currentCalls = array(); + public function __construct($config, $log) { $this->config = $config; @@ -15,8 +21,58 @@ class CallMonitor public function handle(EDSS1_Message $msg) { + $callId = $msg->callRef; + if (!array_key_exists($callId, $this->currentCalls)) { + $this->handleNew($callId, $msg); + } else { + $this->handleExisting($callId, $msg); + } + } + + protected function handleNew($callId, EDSS1_Message $msg) + { + if ($msg->type != EDSS1_Message::SETUP) { + return; + } + $this->currentCalls[$callId] = new CallMonitor_Call(); + $this->handleSetup($callId, $msg); } + + protected function handleSetup($callId, EDSS1_Message $msg) + { + $call = $this->currentCalls[$callId]; + $call->start = time(); + foreach ($msg->parameters as $param) { + switch ($param->type) { + case EDSS1_Parameter::CALLING_PARTY_NUMBER: + $call->from = $param->number; + break; + case EDSS1_Parameter::CALLED_PARTY_NUMBER: + $call->to = $param->number; + break; + } + } + } + + + protected function handleExisting($callId, EDSS1_Message $msg) + { + $call = $this->currentCalls[$callId]; + + switch ($msg->type) { + case EDSS1_Message::CALL_PROCEEDING: + $this->log->log('incomingCall', array('call' => $call)); + break; + + case EDSS1_Message::RELEASE: + case EDSS1_Message::RELEASE_COMPLETE: + $call->end = time(); + $this->log->log('finishedCall', array('call' => $call)); + unset($this->currentCalls[$callId]); + break; + } + } } ?> -- cgit v1.2.3