2 namespace callnotifier;
5 * Watches EDSS1 messages for calls. Keeps an internal call state
6 * and notifies loggers of incoming and finished calls.
14 protected $currentCalls = array();
16 public function __construct($config, $log)
18 $this->config = $config;
22 public function handle(EDSS1_Message $msg)
24 $callId = $msg->callRef;
25 if (!array_key_exists($callId, $this->currentCalls)) {
26 $this->handleNew($callId, $msg);
28 $this->handleExisting($callId, $msg);
32 protected function handleNew($callId, EDSS1_Message $msg)
34 if ($msg->type != EDSS1_Message::SETUP) {
37 $this->currentCalls[$callId] = new CallMonitor_Call();
38 $this->handleSetup($callId, $msg);
42 protected function handleSetup($callId, EDSS1_Message $msg)
44 $call = $this->currentCalls[$callId];
45 $call->start = time();
46 foreach ($msg->parameters as $param) {
47 switch ($param->type) {
48 case EDSS1_Parameter::CALLING_PARTY_NUMBER:
49 $call->from = $param->number;
51 case EDSS1_Parameter::CALLED_PARTY_NUMBER:
52 $call->to = $param->number;
59 protected function handleExisting($callId, EDSS1_Message $msg)
61 $call = $this->currentCalls[$callId];
64 case EDSS1_Message::CALL_PROCEEDING:
65 $this->log->log('incomingCall', array('call' => $call));
68 case EDSS1_Message::RELEASE:
69 case EDSS1_Message::RELEASE_COMPLETE:
71 $this->log->log('finishedCall', array('call' => $call));
72 unset($this->currentCalls[$callId]);