aboutsummaryrefslogtreecommitdiff
path: root/src/callnotifier/CallMonitor.php
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-07-31 07:49:52 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-07-31 07:49:52 +0200
commitdec68e4aaf86f4db07d0a313516319a6d37d88fe (patch)
treea29cc26e8ddf8b7ae967a6593ce2e528203cd072 /src/callnotifier/CallMonitor.php
parent822f3d0bb9ca915fd853fa2fa737bffdc8e58b40 (diff)
downloadauerswald-callnotifier-dec68e4aaf86f4db07d0a313516319a6d37d88fe.tar.gz
auerswald-callnotifier-dec68e4aaf86f4db07d0a313516319a6d37d88fe.zip
call echo logger
Diffstat (limited to 'src/callnotifier/CallMonitor.php')
-rw-r--r--src/callnotifier/CallMonitor.php56
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;
+ }
+ }
}
?>