Ejemplo n.º 1
0
 /**
  * To put a call leg on hold we start by sending a MOVED. If the call leg answers with OKMOVED
  * we deal with it in this method
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $params = $signal->getParams();
     $this->_callLeg->setParams($params);
     return $this->dispatchEvent(new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::CALL_LEG_ON_HOLD));
 }
Ejemplo n.º 2
0
 /**
  * Handle the OK signal
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_unsubscribeFromEngineEvents();
     $this->_rightCallLeg->setAlive();
     $this->_rightCallLeg->okSent();
     $this->_rightCallLeg->setParams($signal->getParams());
     if (false === $signal->relay($this->_leftCallLeg->getName())) {
         return $this->dispatchErrorEvent(self::OK_SIGNAL_RELAY_ERR_CODE);
     }
     $this->_leftCallLeg->okReceived();
     $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::CONNECTED);
     $event->setParam('signal', $signal);
     return $this->dispatchEvent($event);
 }
Ejemplo n.º 3
0
 /**
  * If we received OKMOVED from the right SIP call leg, we need to send an OKSDP to
  * the left SIP call leg. If we received OKMOVED from left SIP call leg reconnect
  * was successfull and we need to dispatch the CONNECTED event
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $params = $signal->getParams();
     $remoteName = $signal->getRemote();
     if ($remoteName === $this->_rightCallLeg->getName()) {
         $this->_rightOkMovedReceived = true;
         $this->_rightCallLeg->setParams($params);
         $okSdpSignal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::OKSDP, $this->_leftCallLeg->getName(), array('sdp' => $params['sdp']));
         if (false === $okSdpSignal->send()) {
             $this->_unsubscribeFromEngineEvents();
             return $this->dispatchErrorEvent(self::OKSDP_SIGNAL_SEND_ERR_CODE);
         }
         return null;
     }
     if ($remoteName === $this->_leftCallLeg->getName()) {
         $this->_unsubscribeFromEngineEvents();
         $this->_leftCallLeg->setParams($params);
         $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::CONNECTED);
         $event->setParam('signal', $signal);
         if (null !== $this->_movedSignal) {
             $event->setParam('moved', $this->_movedSignal);
         }
         return $this->dispatchEvent($event);
     }
 }
Ejemplo n.º 4
0
 /**
  * We have received the FAILSDP signal from the SIP call leg we need to
  * relay it to the MS call leg and dispatch an error event
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleFailSdpSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_unsubscribeFromEngineEvents();
     if (false === $signal->relay($this->_rightCallLeg->getName())) {
         return $this->dispatchErrorEvent(self::FAILSDP_SIGNAL_RELAY_ERR_CODE);
     }
     $params = $signal->getParams();
     $failureCode = isset($params['code']) ? $params['code'] : null;
     return $this->dispatchErrorEvent(self::MS_NOT_CREATED_ERR_CODE, array('failureCode' => $failureCode, 'signal' => $signal));
 }
Ejemplo n.º 5
0
 /**
  * We have received OK from the MS call leg. We can consider the reinivite was successfull,
  * so we dispatch the CONNECTED event.
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_unsubscribeFromEngineEvents();
     $params = $signal->getParams();
     $this->_rightCallLeg->setAlive();
     $this->_rightCallLeg->okSent();
     $this->_rightCallLeg->setParams($params);
     $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::CONNECTED);
     $event->setParam('signal', $signal);
     if (null !== $this->_movedSignal) {
         $event->setParam('moved', $this->_movedSignal);
     }
     return $this->dispatchEvent($event);
 }
Ejemplo n.º 6
0
 /**
  * We have received FAILMOVED. If it came from SIP call leg we need to send a
  * FAILSDP to the MS call leg and dispatch an error event. If it came from MS call
  * leg the fax environment could not be created
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleFailMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_unsubscribeFromEngineEvents();
     $remote = $signal->getRemote();
     if ($remote === $this->_leftCallLeg->getName()) {
         $failSdpSignal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::FAILSDP, $this->_rightCallLeg->getName(), $signal->getParams());
         if (false === $failSdpSignal->send()) {
             $this->dispatchErrorEvent(self::FAILSDP_SIGNAL_SEND_ERR_CODE);
         }
         return null;
     }
     if ($remote === $this->_rightCallLeg->getName()) {
         return $this->dispatchErrorEvent(self::FAX_ENV_NOT_CREATED_ERR_CODE);
     }
 }
Ejemplo n.º 7
0
 protected function _handleFailMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_unsubscribeFromEngineEvents();
     if ($this->_sipCallLegCreationFailed) {
         if (!$this->_triggerErrorEventOnRemoteSipFailure) {
             return;
         }
         $errorCode = self::SIP_NOT_CREATED_ERR_CODE;
         $failureCode = $this->_sipCallLegCreationFailureCode;
     } else {
         $errorCode = self::MS_NOT_UPDATED_ERR_CODE;
         $params = $signal->getParams();
         $failureCode = isset($params['code']) ? $params['code'] : null;
         $killSignal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::KILL, $this->_leftCallLeg->getName());
         $killSignal->send();
     }
     $this->dispatchErrorEvent($errorCode, array('failureCode' => $failureCode, 'signal' => $signal));
 }
Ejemplo n.º 8
0
 protected function _handleFailMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $remote = $signal->getRemote();
     $params = $signal->getParams();
     $failureCode = isset($params['code']) ? $params['code'] : null;
     if ($remote === $this->_leftCallLeg->getName()) {
         $this->_sipCallLegUpdateFailed = true;
         $signal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::FAILSDP, $this->_rightCallLeg->getName(), null !== $failureCode ? array('code' => $failureCode) : $failureCode);
         if (false === $signal->send()) {
             $this->_unsubscribeFromEngineEvents();
             $this->dispatchErrorEvent(self::FAILSDP_SIGNAL_SEND_ERR_CODE);
         }
         return;
     }
     if ($remote === $this->_rightCallLeg->getName()) {
         $this->_unsubscribeFromEngineEvents();
         $errorCode = self::MS_NOT_UPDATED_ERR_CODE;
         if ($this->_sipCallLegUpdateFailed) {
             $errorCode = self::SIP_NOT_UPDATED_ERR_CODE;
         }
         return $this->dispatchErrorEvent($errorCode, array('failureCode' => $failureCode, 'signal' => $signal));
     }
 }
Ejemplo n.º 9
0
 /**
  * We have received OKMOVED from the callee SIP call leg. We need to send
  * OKSDP to caller SIP call leg.
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkMovedSignal(Streamwide_Engine_Signal $signal)
 {
     $this->_okMovedReceived = true;
     $params = $signal->getParams();
     $okSdpSignal = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::OKSDP, $this->_rightCallLeg->getName(), array('sdp' => $params['sdp']));
     if (false === $okSdpSignal->send()) {
         $this->_unsubscribeFromEngineEvents();
         return $this->dispatchErrorEvent(self::OKSDP_SIGNAL_SEND_ERR_CODE);
     }
 }
Ejemplo n.º 10
0
 /**
  * We have received the FAIL signal from the SW Engine, we need to unsubscribe
  * from the other signals, relay the FAIL signal to the SIP call leg and dispatch
  * an error event signaling that the MS call leg has not been created
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleFailSignal(Streamwide_Engine_Signal $signal)
 {
     // unsubscribe from OK, FAIL and CHILD signals
     $this->_unsubscribeFromEngineEvents();
     // relay the FAIL signal to the SIP call leg
     if (false === $signal->relay($this->_leftCallLeg->getName())) {
         return $this->dispatchErrorEvent(self::FAIL_SIGNAL_RELAY_ERR_CODE);
     }
     // dispatch an error event signaling that the MS call leg
     // could not be created
     $params = $signal->getParams();
     $failureCode = isset($params['code']) ? $params['code'] : null;
     return $this->dispatchErrorEvent(self::MS_NOT_CREATED_ERR_CODE, array('failureCode' => $failureCode, 'signal' => $signal));
 }
Ejemplo n.º 11
0
Archivo: Creator.php Proyecto: cwcw/cms
 /**
  * Handle FAIL signal. The call leg was not created. We need to dispatch an error
  * event.
  *
  * @param Streamwide_Engine_Signal $signal
  * @param string $errorCode
  * @return void
  */
 protected function _handleFailSignal(Streamwide_Engine_Signal $signal, $errorCode)
 {
     $this->_unsubscribeFromEngineEvents();
     $this->_callLeg->setDead();
     $params = $signal->getParams();
     $failureCode = isset($params['code']) ? $params['code'] : null;
     $this->dispatchErrorEvent($errorCode, array('failureCode' => $failureCode, 'signal' => $signal));
 }
Ejemplo n.º 12
0
 /**
  * Because we are sending 2 CREATE signals, we can receive two OK signals as response (if
  * everything is well). On OK received from the SIP call leg we send an OKSDP signal
  * to the MS call leg. On OK received from the MS call leg we dispatch the CONNECTED event
  *
  * @param Streamwide_Engine_Signal $signal
  * @return void
  */
 protected function _handleOkSignal(Streamwide_Engine_Signal $signal)
 {
     $remoteName = $signal->getRemote();
     $params = $signal->getParams();
     if ($remoteName === $this->_rightCallLeg->getName()) {
         // The OK came from the media server call leg
         $this->_rightCallLeg->setAlive();
         $this->_rightCallLeg->okSent();
         $this->_rightCallLeg->setParams($params);
         if ($this->_msNegotiationActive) {
             if ($this->_leftCallLeg->hasSentOrReceivedOk()) {
                 $params = $this->_leftCallLeg->getParams();
                 $moved = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::MOVED, $this->_rightCallLeg->getName(), array('sdp' => $params['sdp']));
                 if (false === $moved->send()) {
                     $this->_unsubscribeFromEngineEvents();
                     return $this->dispatchErrorEvent(self::MOVED_SIGNAL_SEND_ERR_CODE);
                 }
             }
             $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::EARLY_MEDIA_NEGOTIATED);
             return $this->dispatchEvent($event);
         } else {
             $this->_unsubscribeFromEngineEvents();
             $event = new Streamwide_Engine_Events_Event(Streamwide_Engine_Events_Event::CONNECTED);
             $event->setParam('signal', $signal);
             if (null !== $this->_movedSignal) {
                 $event->setParam('moved', $this->_movedSignal);
             }
             return $this->dispatchEvent($event);
         }
     }
     if ($remoteName === $this->_leftCallLeg->getName()) {
         // The OK came from the sip call leg
         $this->_leftCallLeg->setAlive();
         $this->_leftCallLeg->okSent();
         $this->_leftCallLeg->setParams($params);
         if ($this->_msNegotiationActive) {
             if ($this->_rightCallLeg->hasSentOrReceivedOk()) {
                 $moved = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::MOVED, $this->_rightCallLeg->getName(), array('sdp' => $params['sdp']));
                 if (false === $moved->send()) {
                     $this->_unsubscribeFromEngineEvents();
                     return $this->dispatchErrorEvent(self::MOVED_SIGNAL_SEND_ERR_CODE);
                 }
             }
             return;
         } else {
             $okSdp = Streamwide_Engine_Signal::factory(Streamwide_Engine_Signal::OKSDP, $this->_rightCallLeg->getName(), array('sdp' => $params['sdp']));
             if (false === $okSdp->send()) {
                 $this->_unsubscribeFromEngineEvents();
                 return $this->dispatchErrorEvent(self::OKSDP_SIGNAL_SEND_ERR_CODE);
             }
         }
     }
 }