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

📄 limpc.cxx

📁 这是国外的resip协议栈
💻 CXX
📖 第 1 页 / 共 2 页
字号:
#if defined(HAVE_CONFIG_HXX)#include "resip/stack/config.hxx"#endif#include <cstring>#include <cassert>#include <stdio.h>#include <signal.h>//#define USE_CURSES#ifdef USE_CURSES#include <ncurses.h>#else#include <iostream>#include <cstdio>#ifdef WIN32#include <io.h>#else#include <unistd.h>#endiftypedef void WINDOW;// !ah! Really ought to check for ncurses and be a bit better behaved than this.#if !defined(TRUE)#define TRUE true#endif#if !defined(FALSE)#define FALSE false#endifchar ACS_HLINE=1;char ACS_VLINE=2;WINDOW* stdscr=0;WINDOW* newwin(...) { return NULL; };void waddstr(WINDOW*, const char* text) { std::clog << text; };char getch(){   char buf[1];   int r = read(fileno(stdin),&buf,1);   if ( r ==1 )   {      return buf[0];   }   return 0;};void werase(WINDOW*) {};void wrefresh(...) {};void mvhline(...) {};void refresh(...) {};void getmaxyx(...) {};void clearok(...) {};void waddch(...) {};void initscr(...) {};void cbreak(...) {};void noecho(...) {};void nonl(...) {};void intrflush(...) {};void keypad(...) {};void scrollok(...) {};void wmove(...) {};void mvvline(...) {};#endif#ifndef WIN32#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#endif#include "rutil/Socket.hxx"#include "rutil/Logger.hxx"#include "resip/stack/SipStack.hxx"#include "resip/stack/Uri.hxx"#include "resip/stack/TuIM.hxx"#include "resip/stack/Security.hxx"static int myMain(int argc, char* argv[]);using namespace resip;using namespace std;#define RESIPROCATE_SUBSYSTEM Subsystem::SIPstatic WINDOW* commandWin=0;static WINDOW* textWin=0;static WINDOW* statusWin=0;static TuIM* tuIM;static Uri   dest;void displayPres(){   werase(statusWin);   for( int i=0; i<tuIM->getNumBuddies();i++)   {      Uri uri = tuIM->getBuddyUri(i);      Data status;      bool online = tuIM->getBuddyStatus(i,&status);      const char* stat = (online)?"online":"offline";               waddstr(statusWin,uri.getAor().c_str());      waddstr(statusWin," ");      waddstr(statusWin,stat);      waddstr(statusWin," ");      waddstr(statusWin,status.c_str());      waddstr(statusWin,"\n");   }   wrefresh(statusWin);  }class TestCallback: public TuIM::Callback{   public:      virtual void presenceUpdate(const Uri& dest, bool open, const Data& status );      virtual void receivedPage( const Data& msg, const Uri& from ,                                 const Data& signedBy,  SignatureStatus sigStatus,                                 bool wasEncryped  );      virtual void sendPageFailed( const Uri& dest,int respNumber );      virtual void registrationFailed(const resip::Uri&, int respNumber);       virtual void registrationWorked(const Uri& dest );      virtual void receivePageFailed(const Uri& sender);};  void TestCallback::presenceUpdate(const Uri& from, bool open, const Data& status ){   const char* stat = (open)?"online":"offline";   //cout << from << " set presence to " << stat << " " << status.c_str() << endl;   waddstr(textWin,"Status: ");   waddstr(textWin, from.getAor().c_str());   waddstr(textWin," is ");   waddstr(textWin,stat);   waddstr(textWin," ");   waddstr(textWin,status.c_str());   waddstr(textWin,"\n");   wrefresh(textWin);   displayPres();}void TestCallback::receivedPage( const Data& msg, const Uri& from,                            const Data& signedBy,  SignatureStatus sigStatus,                            bool wasEncryped  ){     //DebugLog(<< "In TestPageCallback");   if ( dest != from )   {      dest = from;      //cerr << "Set destination to <" << *mDest << ">" << endl;      waddstr(textWin,"Set destination to ");      waddstr(textWin, Data::from(dest).c_str());      waddstr(textWin,"\n");   }      //cout << from;     waddstr(textWin,"From: ");   waddstr(textWin,from.getAor().c_str());   if ( !wasEncryped )   {      //cout << " -NOT SECURE- ";      waddstr(textWin," -NOT SECURE-");   }   else   {      waddstr(textWin," -secure-");   }   switch ( sigStatus )   {      case  SignatureSelfSigned:         //cout << " -self signed signature (bad)- ";         waddstr(textWin,"bad signature");	 break;      case  SignatureIsBad:         //cout << " -bad signature- ";         waddstr(textWin,"bad signature");	 break;      case  SignatureNone:         //cout << " -no signature- ";         waddstr(textWin,"no signature");         break;      case  SignatureTrusted:         //cout << " <signed  " << signedBy << " > ";         waddstr(textWin,"signed ");         waddstr(textWin,signedBy.c_str());         break;      case  SignatureCATrusted:         //cout << " <ca signed  " << signedBy << " > ";         waddstr(textWin,"ca signed " );         waddstr(textWin,signedBy.c_str());         break;      case  SignatureNotTrusted:         //cout << " <signed  " << signedBy << " NOT TRUSTED > ";         waddstr(textWin,"untrusted signature ");         waddstr(textWin,signedBy.c_str());         break;   }      //cout << " says:" << endl;   //cout << msg.escaped() << endl;     waddstr(textWin, " says: ");   waddstr(textWin, msg.escaped().c_str() );   waddstr(textWin, "\n");      wrefresh(textWin);}void TestCallback::sendPageFailed( const Uri& target, int respNum ){   //InfoLog(<< "In TestErrCallback");     // cerr << "Message to " << dest << " failed" << endl;     Data num(respNum);      waddstr(textWin,"Message to ");   waddstr(textWin, Data::from(target).c_str());   waddstr(textWin," failed (");   waddstr(textWin,num.c_str());   waddstr(textWin," response)\n");   wrefresh(textWin);}void TestCallback::receivePageFailed( const Uri& target ){   //InfoLog(<< "In TestErrCallback");     // cerr << "Message to " << dest << " failed" << endl;     waddstr(textWin,"Can not understand messager from ");   waddstr(textWin, Data::from(target).c_str());   waddstr(textWin,"\n");   wrefresh(textWin);}void TestCallback::registrationFailed(const resip::Uri& target, int respNum ){   Data num(respNum);      waddstr(textWin,"Registration to ");   waddstr(textWin, Data::from(target).c_str());   waddstr(textWin," failed (");   waddstr(textWin,num.c_str());   waddstr(textWin," response)\n");   wrefresh(textWin);}                                void TestCallback::registrationWorked(const resip::Uri& target){   waddstr(textWin,"Registration to ");   waddstr(textWin, Data::from(target).c_str());   waddstr(textWin," worked");   wrefresh(textWin);}                                boolprocessStdin( Uri* dest, bool sign, bool encryp ){   static unsigned int num=0;   static char buf[1024];   char c = getch();	         if ( c == 0 )   {      return true;   }      if ( c == '\f' )   {      clearok(textWin,TRUE);      clearok(statusWin,TRUE);      clearok(commandWin,TRUE);      assert( num < sizeof(buf) );      buf[num] = 0;      werase(commandWin);      waddstr(commandWin,buf);      wrefresh(textWin);      wrefresh(statusWin);      wrefresh(commandWin);      return true;   }#if 0   char junk[6];   junk[0]=' ';   junk[1]='0'+(c/100);   junk[2]='0'+((c/10)%10);   junk[3]='0'+(c%10);   junk[4]=' ';   junk[5]=0;   waddstr(commandWin,junk);#endif   if (  (c == '\a') || (c == '\b') || (c == 4 ) || (c == 0x7F) )   {      if ( num > 0 )      {         num--;      }      buf[num]=0;      werase(commandWin);      waddstr(commandWin,buf);      wrefresh(commandWin);            return true;   }          if ( (c == '\r') || (c == '\n') || (num+2>=sizeof(buf)) )   {      buf[num] =0;      if ( (num>3) && (!strncmp("to:",buf,3)) )      {         buf[num] = 0;         *dest = Uri(Data(buf+3));                //cerr << "Set destination to <" << *dest << ">";         waddstr(textWin,"Set destination to ");         waddstr(textWin, Data::from(*dest).c_str());         waddstr(textWin,"\n");         wrefresh(textWin);      }      else if ( (num>4) && (!strncmp("add:",buf,4)) )      {         buf[num] = 0;         Uri uri(Data(buf+4));         //cerr << "Subscribing to buddy <" << uri << ">";         waddstr(textWin, "Subscribing to ");         waddstr(textWin, Data::from(uri).c_str());         waddstr(textWin, "\n");         wrefresh(textWin);                  tuIM->addBuddy( uri, Data::Empty );         displayPres();      }      else if ( (num>=7) && (!strncmp("status:",buf,7)) )      {         buf[num] = 0;         Data stat(buf+7);         //cerr << "setting presence status to  <" << stat << ">";         waddstr(textWin,"Set presece status to <");         waddstr(textWin,stat.c_str());         waddstr(textWin,">\n");         wrefresh(textWin);         tuIM->setMyPresence( !stat.empty(), stat );      }      else if ( (num==1) && (!strncmp(".",buf,1)) )      {         //DebugLog( << "Got a period - end program" );         return false;      }      else      {          if ( num >= 1 )         {            assert( num < sizeof(buf) );            buf[num] = 0;            Data text(buf);                        Data destValue  = dest->getAor();                        DebugLog( << "Destination is " << destValue );            Data encFor = Data::Empty;            if (encryp)            {                encFor = dest->getAorNoPort();            }            DebugLog( << "Destination encrypt for is " << encFor );            if ( tuIM->haveCerts(sign,encFor) )            {               waddstr(textWin,"To: ");               waddstr(textWin,destValue.c_str());               waddstr(textWin," ");               waddstr(textWin,text.c_str());               waddstr(textWin,"\n");               wrefresh(textWin);                              tuIM->sendPage( text , *dest, sign , encFor );            }            else            {               waddstr(textWin,"Don't have aproperate certificates to sign and encrypt a message to ");               waddstr(textWin,destValue.c_str());               waddstr(textWin,"\n");               wrefresh(textWin);            }         }      }      num = 0;        werase(commandWin);      wrefresh(commandWin);   }   else   {      buf[num++] = c;      assert( num < sizeof(buf) );            waddch(commandWin,c);      wrefresh(commandWin);   }   return true;}intmain(int argc, char* argv[]){#ifndef _WIN32   if ( signal( SIGPIPE, SIG_IGN) == SIG_ERR)   {      cerr << "Couldn't install signal handler for SIGPIPE" << endl;      exit(-1);   }#endif   int r;      try   {      r = myMain( argc, argv );   }   catch( ... )   {      ErrLog( << "Got a exception passed all the way to the top of limp" );      exit(-1);   }      return r;}static intmyMain(int argc, char* argv[]){     Log::initialize(Log::Cerr, Log::Err, argv[0]);   Log::setLevel(Log::Warning);   InfoLog(<<"Test Driver for IM Starting");       int port = 5060;   int tlsPort = 0;   int dtlsPort = 0;   Uri aor;   bool haveAor=false;   dest = Uri("sip:nobody@example.com");   Data aorPassword;   Uri contact("sip:user@");   bool haveContact=false;   Uri outbound;   bool noRegister = false;   Data tlsDomain = Data::Empty;   Data sendMsg = Data::Empty;      int numAdd=0;   Data addList[100];   int numPub=0;   Data pubList[100];   bool encryp=false;   bool sign=false;   Data key("password");   bool useTls = true;   bool noTls = false;   bool noTcp = false;   bool prefUdp = false;   bool prefTls = false;   bool prefDtls = false;   bool prefTcp = false;   bool noUdp = false;   bool noV6 = false;   bool noV4 = false;   bool genUserCert = false;      for ( int i=1; i<argc; i++)   {      if (!strcmp(argv[i],"-vv"))      {         Log::setLevel(Log::Stack);      }      else if (!strcmp(argv[i],"-v"))      {         Log::setLevel(Log::Info);      }      else if (!strcmp(argv[i],"-encrypt"))      {         encryp = true;      }      else if (!strcmp(argv[i],"-genUserCert"))      {         genUserCert = true;      }      else if (!strcmp(argv[i],"-noRegister"))      {         noRegister = true;      }      else if (!strcmp(argv[i],"-sign"))      {         sign = true;      }      else if (!strcmp(argv[i],"-tlsDomain"))      {         i++;         assert( i<argc );         tlsDomain = Data(argv[i]);      }      else if (!strcmp(argv[i],"-ssl"))      {         useTls = false;      }      else if (!strcmp(argv[i],"-noTcp"))      {         noTcp = true;      }      else if (!strcmp(argv[i],"-noTls"))      {         noTls = true;      }      else if (!strcmp(argv[i],"-noUdp"))      {         noUdp = true;      }      else if (!strcmp(argv[i],"-prefTcp"))      {         prefTcp = true;      }

⌨️ 快捷键说明

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