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

📄 commandlineparser.cxx

📁 这是国外的resip协议栈
💻 CXX
字号:
#include <popt.h>#include "CommandLineParser.hxx"#include "rutil/Logger.hxx"#include "rutil/DnsUtil.hxx"#include "rutil/ParseException.hxx"using namespace resip;using namespace std;#define RESIPROCATE_SUBSYSTEM Subsystem::TESTCommandLineParser::CommandLineParser(int argc, char** argv){   char* logType = "cout";   char* logLevel = "INFO";   int encrypt=false;   int sign=false;   int genUserCert = false;   char* tlsDomain = 0;      int udpPort = 5160;   int tcpPort = 5160;   int tlsPort = 5161;   int dtlsPort = 5161;      mRegisterDuration = 3600;   int noV4 = false;   int noV6 = false;      char* inputAor = 0;   char* password = "";      char* inputOutboundProxy = 0;   char* inputContact = 0;   char* inputBuddies = 0;   char* inputTarget = 0;   char* passPhrase = 0;   char* certPath = 0;   Data basePath(getenv("HOME"));   struct poptOption table[] = {      {"log-type",     'l', POPT_ARG_STRING, &logType,   0, "where to send logging messages", "syslog|cerr|cout"},      {"log-level",    'v', POPT_ARG_STRING, &logLevel,  0, "specify the default log level", "DEBUG|INFO|WARNING|ALERT"},      {"encrypt",      'e', POPT_ARG_NONE, &encrypt, 0, "whether to encrypt or not", 0},      {"sign",         's', POPT_ARG_NONE, &sign, 0,   "signs messages you send", 0},      {"gen-user-cert",'u', POPT_ARG_NONE, &genUserCert, 0, "generate a new user certificate", 0},      {"tls-domain",   't', POPT_ARG_STRING, &tlsDomain,  0, "act as a TLS server for specified domain", "example.com"},            {"udp",          0,   POPT_ARG_INT, &udpPort, 0, "add UDP transport on specified port", "5060"},      {"tcp",          0,   POPT_ARG_INT, &tcpPort, 0, "add TCP transport on specified port", "5060"},      {"tls",          0,   POPT_ARG_INT, &tlsPort, 0, "add TLS transport on specified port", "5061"},      {"dtls",         0,   POPT_ARG_INT, &dtlsPort, 0, "add DTLS transport on specified port", "5061"},      {"register-duration",  0,   POPT_ARG_INT, &mRegisterDuration, 0, "expires for register (0 for no reg)", "3600"},      {"disable-v6",   0,   POPT_ARG_NONE, &noV6, 0, "disable IPV6", 0},      {"disable-v4",   0,   POPT_ARG_NONE, &noV4, 0, "disable IPV4", 0},      // may want to be able to specify that PUBLISH will occur      {"aor",         'a',  POPT_ARG_STRING, &inputAor,  0, "specify address of record", "sip:alice@example.com"},      {"password",    'p',  POPT_ARG_STRING, &password,  0, "specify password for address of record", "password"},      {"outbound-proxy",'o',  POPT_ARG_STRING, &inputOutboundProxy,  0, "specify uri for outbound proxy (if none present, don't use)", "sip:outbound.example.com"},      {"contact",       'c',  POPT_ARG_STRING, &inputContact,  0, "override default contact", "sip:alice@contact.example.com"},            {"to",            't',  POPT_ARG_STRING, &inputTarget,  0, "specify target aor", "sip:jane@example.com"},            {"buddies",       'b',  POPT_ARG_STRING, &inputBuddies,  0, "list of buddy aors", "sip:b1@example.com,sip:b2@example.com"},      {"pass-phrase",   'k',  POPT_ARG_STRING, &passPhrase,  0, "pass phrase for private key", 0},      {"cert-path",      0,   POPT_ARG_STRING, &certPath,  0, "path for certificates (default ~/.sipCerts)", 0},            POPT_AUTOHELP      { NULL, 0, 0, NULL, 0 }   };      poptContext context = poptGetContext(NULL, argc, const_cast<const char**>(argv), table, 0);   poptGetNextOpt(context);   mLogType = logType;   mLogLevel = logLevel;   mEncrypt = encrypt;   mSign = sign;   mGenUserCert = genUserCert;   if (tlsDomain) mTlsDomain = tlsDomain;   mUdpPort = udpPort;   mTcpPort = tcpPort;   mTlsPort = tlsPort;   mDtlsPort = dtlsPort;   mNoV4 = noV4;   mNoV6 = noV6;   if (inputAor)   {      mAor = toUri(inputAor, "aor");   }   else   {      mAor.user() = "test";      mAor.host() = DnsUtil::getLocalHostName();   }      mPassword = password;   mOutboundProxy = toUri(inputOutboundProxy, "outbound proxy");   mContact = toUri(inputContact, "contact");   mBuddies = toUriVector(inputBuddies, "buddies"); // was addList      mTarget = toUri(inputTarget, "target"); // was dest   if (passPhrase) mPassPhrase = passPhrase;   if (certPath) mCertPath = certPath;   else mCertPath = basePath + "/.sipCerts";      // pubList for publish targets   // Free the option parsing context.   poptFreeContext(context);}resip::Uri CommandLineParser::toUri(const char* input, const char* description){   resip::Uri uri;   try   {      if (input)      {         uri = Uri(input);      }      else      {         //WarningLog (<< "No " << description << " specified");      }   }    catch (ParseException& e)   {      InfoLog (<< "Caught: " << e);      WarningLog (<< "Can't parse " << description << " : " << input);      exit(-1);   }   return uri;}std::vector<resip::Uri> CommandLineParser::toUriVector(const char* input, const char* description){   std::vector<Uri> uris;    if (input)   {      char buffer[2048];      strcpy(buffer, input);      for (char* token = strtok(buffer, ","); token != 0; token = strtok(0, ","))      {         try         {            uris.push_back(Uri(token));         }          catch (ParseException& e)         {            InfoLog (<< "Caught: " << e);            WarningLog (<< "Can't parse " << description << " : " << token);            exit(-1);         }      }   }   return uris;}   /* ==================================================================== * The Vovida Software License, Version 1.0  *  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *  * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. *  * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. *  * 3. The names "VOCAL", "Vovida Open Communication Application Library", *    and "Vovida Open Communication Application Library (VOCAL)" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor *    may "VOCAL" appear in their name, without prior written *    permission of Vovida Networks, Inc. *  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. *  * ==================================================================== *  * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc.  For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */

⌨️ 快捷键说明

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