bool Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection, unsigned options, OpalConnection::StringOptions * stroptions) { PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection"); if (!forward_uri.empty () && manager.get_unconditional_forward ()) connection.ForwardCall (forward_uri); else if (manager.GetCallCount () > 1) { if (!forward_uri.empty () && manager.get_forward_on_busy ()) connection.ForwardCall (forward_uri); else { connection.ClearCall (OpalConnection::EndedByLocalBusy); } } else { Opal::Call *call = dynamic_cast<Opal::Call *> (&connection.GetCall ()); if (call) { if (!forward_uri.empty () && manager.get_forward_on_no_answer ()) call->set_no_answer_forward (manager.get_reject_delay (), forward_uri); else call->set_reject_delay (manager.get_reject_delay ()); } return SIPEndPoint::OnIncomingConnection (connection, options, stroptions); } return false; }
PBoolean CallManager::CreateVideoOutputDevice(const OpalConnection & connection, const OpalMediaFormat & media_fmt, PBoolean preview, PVideoOutputDevice * & device, PBoolean & auto_delete) { PVideoDevice::OpenArgs videoArgs; PString title; videoArgs = preview ? GetVideoPreviewDevice() : GetVideoOutputDevice(); if (!preview) { unsigned openChannelCount = 0; OpalMediaStreamPtr mediaStream; while ((mediaStream = connection.GetMediaStream(OpalMediaType::Video(), preview, mediaStream)) != NULL) ++openChannelCount; videoArgs.deviceName += psprintf(" ID=%u", openChannelCount); } media_fmt.AdjustVideoArgs(videoArgs); auto_delete = true; device = PVideoOutputDevice::CreateOpenedDevice(videoArgs, false); return device != NULL; }
void Manager::OnReleased(OpalConnection &connection) { OpalConnection::CallEndReason r = connection.GetCallEndReason(); std::cout << __func__ <<": reason: " << get_call_end_reason_string(r) << std::endl; TPState::Instance().SetState(TPState::CLOSED); OpalManager::OnReleased(connection); }
bool Manager::OnIncomingConnection(OpalConnection &connection, unsigned opts, OpalConnection::StringOptions *stropts) { std::cout << __func__ << ": token=" << connection.GetToken() << std::endl; TPState::Instance().SetState(TPState::ESTABLISHED); //localep->AcceptIncomingCall(connection.GetCall().GetToken()); return OpalManager::OnIncomingConnection(connection, opts, stropts); }
OpalConnection::AnswerCallResponse Manager::OnAnswerCall( OpalConnection &connection, const PString &caller) { std::cout << "Incoming call from " << caller << std::endl; std::string val = connection.GetCall().GetToken(); currentCallToken = val; return OpalConnection::AnswerCallNow; }
bool Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection, unsigned options, OpalConnection::StringOptions * stroptions) { bool busy = false; PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection"); if (!SIPEndPoint::OnIncomingConnection (connection, options, stroptions)) return false; for (PSafePtr<OpalConnection> conn(connectionsActive, PSafeReference); conn != NULL; ++conn) { if (conn->GetCall().GetToken() != connection.GetCall().GetToken() && !conn->IsReleased ()) busy = true; } if (!forward_uri.empty () && manager.get_unconditional_forward ()) connection.ForwardCall (forward_uri); else if (busy) { if (!forward_uri.empty () && manager.get_forward_on_busy ()) connection.ForwardCall (forward_uri); else { connection.ClearCall (OpalConnection::EndedByLocalBusy); } } else { Opal::Call *call = dynamic_cast<Opal::Call *> (&connection.GetCall ()); if (call) { if (!forward_uri.empty () && manager.get_forward_on_no_answer ()) call->set_no_answer_forward (manager.get_reject_delay (), forward_uri); else // Pending call->set_reject_delay (manager.get_reject_delay ()); } } return true; }
bool CallManager::OnOpenMediaStream (OpalConnection & connection, OpalMediaStream & stream) { OpalMediaFormatList list = pcssEP->GetMediaFormats (); if (!OpalManager::OnOpenMediaStream (connection, stream)) return FALSE; if (list.FindFormat(stream.GetMediaFormat()) == list.end ()) dynamic_cast <Opal::Call &> (connection.GetCall ()).OnOpenMediaStream (stream); return TRUE; }
bool Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection, unsigned options, OpalConnection::StringOptions *stroptions) { PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection"); if (!SIPEndPoint::OnIncomingConnection (connection, options, stroptions)) return false; /* Unconditional call forward? */ if (!unconditionalForwardParty.IsEmpty ()) { PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection forwarded to " << busyForwardParty << " (Unconditional)"); connection.ForwardCall (unconditionalForwardParty); return false; } /* Busy call forward? */ for (PSafePtr<OpalConnection> conn(connectionsActive, PSafeReference); conn != NULL; ++conn) { if (conn->GetCall().GetToken() != connection.GetCall().GetToken() && !conn->IsReleased ()) { if (!busyForwardParty.IsEmpty ()) { PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection forwarded to " << busyForwardParty << " (busy)"); connection.ForwardCall (busyForwardParty); } else { PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection rejected (busy)"); connection.ClearCall (OpalConnection::EndedByLocalBusy); } return false; } } /* No Answer Call Forward or Reject */ Opal::Call *call = dynamic_cast<Opal::Call *> (&connection.GetCall ()); if (call) call->set_forward_target (noAnswerForwardParty); return true; }
bool Manager::OnOpenMediaStream(OpalConnection &connection, OpalMediaStream &stream) { std::cout << __func__ << std::endl; if (!OpalManager::OnOpenMediaStream(connection, stream)) { std::cerr << "OnOpenMediaStream failed!" << std::endl; return false; } PCaselessString prefix = connection.GetEndPoint().GetPrefixName(); std::cout << (stream.IsSink() ? "streaming media to " : "recording media from ") << prefix << std::endl; return true; }