コード例 #1
0
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;
}
コード例 #2
0
ファイル: opal-call-manager.cpp プロジェクト: NpNike/ekiga
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;
}
コード例 #3
0
ファイル: main.cpp プロジェクト: edholland/sipcmd
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);
}
コード例 #4
0
ファイル: main.cpp プロジェクト: edholland/sipcmd
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);
}
コード例 #5
0
ファイル: main.cpp プロジェクト: edholland/sipcmd
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;
}
コード例 #6
0
ファイル: sip-endpoint.cpp プロジェクト: Klom/ekiga
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;
}
コード例 #7
0
ファイル: opal-call-manager.cpp プロジェクト: NpNike/ekiga
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;
}
コード例 #8
0
ファイル: sip-endpoint.cpp プロジェクト: GNOME/ekiga
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;
}
コード例 #9
0
ファイル: main.cpp プロジェクト: edholland/sipcmd
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;
}