⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cxx

📁 mgcp协议源代码。支持多种编码:g711
💻 CXX
📖 第 1 页 / 共 2 页
字号:
  // Start the listener thread for incoming calls.  H323ListenerTCP * listener;  if (args.GetOptionString('i').IsEmpty())    listener  = new H323ListenerTCP(*this);  else {    PIPSocket::Address interfaceAddress(args.GetOptionString('i'));    listener  = new H323ListenerTCP(*this, interfaceAddress);  }  if (!StartListener(listener)) {    cerr <<  "Could not open H.323 listener port on "         << listener->GetListenerPort() << endl;    return FALSE;  }  // Establish link with gatekeeper if required.  if (args.HasOption('g')) {    PString gkName = args.GetOptionString('g');    H323TransportUDP * rasChannel;    if (args.GetOptionString('i').IsEmpty())      rasChannel  = new H323TransportUDP(*this);    else {      PIPSocket::Address interfaceAddress(args.GetOptionString('i'));      rasChannel  = new H323TransportUDP(*this, interfaceAddress);    }    if (SetGatekeeper(gkName, rasChannel))      cout << "Gatekeeper set: " << *gatekeeper << endl;    else {      cerr << "Error registering with gatekeeper at \"" << gkName << '"' << endl;      return FALSE;    }  }  else if (!args.HasOption('n') || args.HasOption('r')) {    cout << "Searching for gatekeeper..." << flush;    if (DiscoverGatekeeper(new H323TransportUDP(*this)))      cout << "\nGatekeeper found: " << *gatekeeper << endl;    else {      cerr << "\nNo gatekeeper found." << endl;      if (args.HasOption("require-gatekeeper"))         return FALSE;    }  }  return TRUE;}BOOL SimpleH323EndPoint::SetSoundDevice(PArgList & args,                                        const char * optionName,                                        PSoundChannel::Directions dir){  if (!args.HasOption(optionName))    return TRUE;  PString dev = args.GetOptionString(optionName);  if (dir == PSoundChannel::Player) {    if (SetSoundChannelPlayDevice(dev))      return TRUE;  }  else {    if (SetSoundChannelRecordDevice(dev))      return TRUE;  }  cerr << "Device for " << optionName << " (\"" << dev << "\") must be one of:\n";  PStringArray names = PSoundChannel::GetDeviceNames(dir);  for (PINDEX i = 0; i < names.GetSize(); i++)    cerr << "  \"" << names[i] << "\"\n";  return FALSE;}H323Connection * SimpleH323EndPoint::CreateConnection(unsigned callReference){  return new SimpleH323Connection(*this, callReference, noFastStart, doH245Tunnelling);}BOOL SimpleH323EndPoint::OnIncomingCall(H323Connection & connection,                                        const H323SignalPDU &,                                        H323SignalPDU &){  if (currentCallToken.IsEmpty())    return TRUE;  if (busyForwardParty.IsEmpty()) {    cout << "Incoming call from \"" << connection.GetRemotePartyName() << "\" rejected, line busy!" << endl;    return FALSE;  }  cout << "Forwarding call to \"" << busyForwardParty << "\"." << endl;  return !connection.ForwardCall(busyForwardParty);}H323Connection::AnswerCallResponse                   SimpleH323EndPoint::OnAnswerCall(H323Connection & connection,                                                    const PString & caller,                                                    const H323SignalPDU &,                                                    H323SignalPDU &){  currentCallToken = connection.GetCallToken();  if (autoAnswer) {    cout << "Automatically accepting call." << endl;    return H323Connection::AnswerCallNow;  }  cout << "Incoming call from \""       << caller       << "\", answer call (Y/n)? "       << flush;  return H323Connection::AnswerCallPending;}BOOL SimpleH323EndPoint::OnConnectionForwarded(H323Connection & /*connection*/,                                               const PString & forwardParty,                                               const H323SignalPDU & /*pdu*/){  if (MakeCall(forwardParty, currentCallToken)) {    cout << "Call is being forwarded to host " << forwardParty << endl;    return TRUE;  }  cout << "Error forwarding call to \"" << forwardParty << '"' << endl;  return FALSE;}void SimpleH323EndPoint::OnConnectionEstablished(H323Connection & connection,                                                 const PString & token){  currentCallToken = token;  cout << "In call with " << connection.GetRemotePartyName() << endl;}void SimpleH323EndPoint::OnConnectionCleared(H323Connection & connection,                                             const PString & clearedCallToken){  if (currentCallToken == clearedCallToken)    currentCallToken = PString();  PString remoteName = '"' + connection.GetRemotePartyName() + '"';  switch (connection.GetCallEndReason()) {    case H323Connection::EndedByRemoteUser :      cout << remoteName << " has cleared the call";      break;    case H323Connection::EndedByCallerAbort :      cout << remoteName << " has stopped calling";      break;    case H323Connection::EndedByRefusal :      cout << remoteName << " did not accept your call";      break;    case H323Connection::EndedByNoAnswer :      cout << remoteName << " did not answer your call";      break;    case H323Connection::EndedByTransportFail :      cout << "Call with " << remoteName << " ended abnormally";      break;    case H323Connection::EndedByCapabilityExchange :      cout << "Could not find common codec with " << remoteName;      break;    case H323Connection::EndedByNoAccept :      cout << "Did not accept incoming call from " << remoteName;      break;    case H323Connection::EndedByAnswerDenied :      cout << "Refused incoming call from " << remoteName;      break;    case H323Connection::EndedByNoUser :      cout << "Gatekeeper could find user " << remoteName;      break;    case H323Connection::EndedByNoBandwidth :      cout << "Call to " << remoteName << " aborted, insufficient bandwidth.";      break;    case H323Connection::EndedByConnectFail :      switch (connection.GetSignallingChannel()->GetErrorNumber()) {        case ENETUNREACH :          cout << remoteName << " could not be reached.";          break;        case ETIMEDOUT :          cout << remoteName << " is not online.";          break;        case ECONNREFUSED :          cout << "No phone running for " << remoteName;          break;        default :          cout << "Transport error calling " << remoteName;      }      break;    default :      cout << "Call with " << remoteName << " completed";  }  cout << ", duration "       << setprecision(0) << setw(5)       << (PTime() - connection.GetConnectionStartTime())       << endl;}BOOL SimpleH323EndPoint::OpenAudioChannel(H323Connection & connection,                                          BOOL isEncoding,                                          unsigned bufferSize,                                          H323AudioCodec & codec){  codec.SetSilenceDetectionMode(silenceOn ? H323AudioCodec::AdaptiveSilenceDetection                                          : H323AudioCodec::NoSilenceDetection);  if (H323EndPoint::OpenAudioChannel(connection, isEncoding, bufferSize, codec))    return TRUE;  cerr << "Could not open sound device ";  if (isEncoding)    cerr << GetSoundChannelRecordDevice();  else    cerr << GetSoundChannelPlayDevice();  cerr << " - Check permissions or full duplex capability." << endl;  return FALSE;}///////////////////////////////////////////////////////////////SimpleH323Connection::SimpleH323Connection(SimpleH323EndPoint & ep,                                           unsigned callReference,                                           BOOL dontFastStart,                                           BOOL doH245Tunnelling)  : H323Connection(ep, callReference){  noFastStart = dontFastStart;  h245Tunneling = doH245Tunnelling;}void SimpleH323Connection::SelectFastStartChannels(unsigned sessionID){  if (noFastStart)    return;  H323Connection::SelectFastStartChannels(sessionID);}BOOL SimpleH323Connection::OnStartLogicalChannel(H323Channel & channel){  if (!H323Connection::OnStartLogicalChannel(channel))    return FALSE;  cout << "Started logical channel: ";  switch (channel.GetDirection()) {    case H323Channel::IsTransmitter :      cout << "sending ";      break;    case H323Channel::IsReceiver :      cout << "receiving ";      break;    default :      break;  }  cout << channel.GetCapability() << endl;    return TRUE;}void SimpleH323Connection::OnUserInputString(const PString & value){  cout << "User input received: \"" << value << '"' << endl;}// End of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -