diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2012-07-31 07:49:52 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2012-07-31 07:49:52 +0200 |
| commit | dec68e4aaf86f4db07d0a313516319a6d37d88fe (patch) | |
| tree | a29cc26e8ddf8b7ae967a6593ce2e528203cd072 /src/callnotifier/CallMonitor.php | |
| parent | 822f3d0bb9ca915fd853fa2fa737bffdc8e58b40 (diff) | |
| download | auerswald-callnotifier-dec68e4aaf86f4db07d0a313516319a6d37d88fe.tar.gz auerswald-callnotifier-dec68e4aaf86f4db07d0a313516319a6d37d88fe.zip | |
call echo logger
Diffstat (limited to 'src/callnotifier/CallMonitor.php')
| -rw-r--r-- | src/callnotifier/CallMonitor.php | 56 |
1 files changed, 56 insertions, 0 deletions
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; + } + } } ?> |
