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

📄 scenario.cpp

📁 sipbomber - tool for testing SIP-protocol implementation (RFC3261). Current version can check only
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            } else { // end "assign_to"              ERROR("'ereg' action without 'assign_to' "                    "argument (mandatory)");            }            if(currentRegExp != NULL) {              delete[] currentRegExp;            }            currentRegExp = NULL;          } else { // end if regexp            ERROR("'ereg' action without 'regexp' argument (mandatory)");          }                  } /* end !strcmp(actionElem, "ereg") */ else if(!strcmp(actionElem, "log")) {          if(ptr = xp_get_value((char *)"message")) {            tmpAction.setActionType(CAction::E_AT_LOG_TO_FILE);            tmpAction.setMessage(ptr);            /* the action is well formed, adding it in the */            /* tmpActionTable */            tmpActions.setAction(tmpAction);            tmpActionNumber++;          }        } /* end !strcmp(actionElem, "log")  */ else if(!strcmp(actionElem, "exec")) {          if(ptr = xp_get_value((char *)"command")) {            tmpAction.setActionType(CAction::E_AT_EXECUTE_CMD);            tmpAction.setCmdLine(ptr);            /* the action is well formed, adding it in the */            /* tmpActionTable */            tmpActions.setAction(tmpAction);            tmpActionNumber++;          } /* end (ptr = xp_get_value("command")  */ else if(ptr = xp_get_value((char *)"int_cmd")) {            CAction::T_IntCmdType type(CAction::E_INTCMD_STOPCALL); /* assume the default */            if (!strcmp(ptr, "stop_now")) {                type = CAction::E_INTCMD_STOP_NOW;            } else if (!strcmp(ptr, "stop_gracefully")) {                type = CAction::E_INTCMD_STOP_ALL;            } else if (!strcmp(ptr, "stop_call")) {                type = CAction::E_INTCMD_STOPCALL;            }            /* the action is well formed, adding it in the */            /* tmpActionTable */            tmpAction.setActionType(CAction::E_AT_EXEC_INTCMD);            tmpAction.setIntCmd(type);            tmpActions.setAction(tmpAction);            tmpActionNumber++;#ifdef PCAPPLAY          } else if (ptr = xp_get_value((char *) "play_pcap_audio")) {            tmpAction.setPcapArgs(ptr);            tmpAction.setActionType(CAction::E_AT_PLAY_PCAP_AUDIO);            tmpActions.setAction(tmpAction);            tmpActionNumber++;            hasMedia = 1;          } else if (ptr = xp_get_value((char *) "play_pcap_video")) {            tmpAction.setPcapArgs(ptr);            tmpAction.setActionType(CAction::E_AT_PLAY_PCAP_VIDEO);            tmpActions.setAction(tmpAction);            tmpActionNumber++;            hasMedia = 1;#endif          } else {              ERROR("illegal <exec> in the scenario\n");          }        }        xp_close_element();        recvScenarioLen++;      } // end while            // creation the action list for this message            if(tmpActionNumber != 0) {        if(scenario[scenario_len] != NULL) {          if(scenario[scenario_len]->M_actions != NULL)            delete(scenario[scenario_len]->M_actions);          scenario[scenario_len]->M_actions             = new CActions(tmpActions);        }      }       } // end if "action"      xp_close_element();  }// end open element}// char* manipulation : create a int[] from a char*// test first is the char* is formed by int separeted by coma// and then create the tableint isWellFormed(char * P_listeStr, int * nombre){  char * ptr = P_listeStr;  int sizeOf;  bool isANumber;  (*nombre) = 0;   sizeOf = strlen(P_listeStr);  // getting the number   if(sizeOf > 0)    {      // is the string well formed ? [0-9] [,]      isANumber = false;      for(int i=0; i<=sizeOf; i++)        {          switch(ptr[i])            {            case ',':              if(isANumber == false)                {                     return(0);                }              else                {                  (*nombre)++;                             }               isANumber = false;              break;            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':              isANumber = true;              break;            case '\t':            case ' ' :              break;            case '\0':              if(isANumber == false)                {                     return(0);                }              else                {                  (*nombre)++;                }               break;            default:              return(0);            }        } // end for    }  return(1);}int createIntegerTable(char * P_listeStr,                        unsigned int ** listeInteger,                        int * sizeOfList){  int nb=0;  char * ptr = P_listeStr;  char * ptr_prev = P_listeStr;  unsigned int current_int;   if(isWellFormed(P_listeStr, sizeOfList) == 1)    {      (*listeInteger) = new unsigned int[(*sizeOfList)];      while((*ptr) != ('\0'))        {          if((*ptr) == ',')            {              sscanf(ptr_prev, "%u", &current_int);              if (nb<(*sizeOfList))                (*listeInteger)[nb] = current_int;              nb++;              ptr_prev = ptr+1;            }          ptr++;        }      // Read the last      sscanf(ptr_prev, "%u", &current_int);       if (nb<(*sizeOfList))        (*listeInteger)[nb] = current_int;      nb++;      return(1);    }  return(0);}// TIP: to integrate an existing XML scenario, use the following sed line:// cat ../3pcc-controller-B.xml | sed -e 's/\"/\\\"/g' -e 's/\(.*\)/\"\1\\n\"/'char * default_scenario [] = {  /************* Default_scenario[0] ***************/(char *)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n""<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n""\n""<!-- This program is free software; you can redistribute it and/or      -->\n""<!-- modify it under the terms of the GNU General Public License as     -->\n""<!-- published by the Free Software Foundation; either version 2 of the -->\n""<!-- License, or (at your option) any later version.                    -->\n""<!--                                                                    -->\n""<!-- This program is distributed in the hope that it will be useful,    -->\n""<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->\n""<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      -->\n""<!-- GNU General Public License for more details.                       -->\n""<!--                                                                    -->\n""<!-- You should have received a copy of the GNU General Public License  -->\n""<!-- along with this program; if not, write to the                      -->\n""<!-- Free Software Foundation, Inc.,                                    -->\n""<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->\n""<!--                                                                    -->\n""<!--                 Sipp default 'uac' scenario.                       -->\n""<!--                                                                    -->\n""\n""<scenario name=\"Basic Sipstone UAC\">\n""  <!-- In client mode (sipp placing calls), the Call-ID MUST be         -->\n""  <!-- generated by sipp. To do so, use [call_id] keyword.                -->\n""  <send retrans=\"500\">\n""    <![CDATA[\n""\n""      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0\n""      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]\n""      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]\n""      To: sut <sip:[service]@[remote_ip]:[remote_port]>\n""      Call-ID: [call_id]\n""      CSeq: 1 INVITE\n""      Contact: sip:sipp@[local_ip]:[local_port]\n""      Max-Forwards: 70\n""      Subject: Performance Test\n""      Content-Type: application/sdp\n""      Content-Length: [len]\n""\n""      v=0\n""      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]\n""      s=-\n""      c=IN IP[media_ip_type] [media_ip]\n""      t=0 0\n""      m=audio [media_port] RTP/AVP 0\n""      a=rtpmap:0 PCMU/8000\n""\n""    ]]>\n""  </send>\n""\n""  <recv response=\"100\"\n""        optional=\"true\">\n""  </recv>\n""\n""  <recv response=\"180\" optional=\"true\">\n""  </recv>\n""\n""  <recv response=\"183\" optional=\"true\">\n""  </recv>\n""\n""  <!-- By adding rrs=\"true\" (Record Route Sets), the route sets         -->\n""  <!-- are saved and used for following messages sent. Useful to test   -->\n""  <!-- against stateful SIP proxies/B2BUAs.                             -->\n""  <recv response=\"200\" rtd=\"true\">\n""  </recv>\n""\n""  <!-- Packet lost can be simulated in any send/recv message by         -->\n""  <!-- by adding the 'lost = \"10\"'. Value can be [1-100] percent.       -->\n""  <send>\n""    <![CDATA[\n""\n""      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0\n""      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]\n""      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]\n""      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]\n""      Call-ID: [call_id]\n""      CSeq: 1 ACK\n""      Contact: sip:sipp@[local_ip]:[local_port]\n""      Max-Forwards: 70\n""      Subject: Performance Test\n""      Content-Length: 0\n""\n""    ]]>\n""  </send>\n""\n""  <!-- This delay can be customized by the -d command-line option       -->\n""  <!-- or by adding a 'milliseconds = \"value\"' option here.             -->\n""  <pause/>\n""\n""  <!-- The 'crlf' option inserts a blank line in the statistics report. -->\n""  <send retrans=\"500\">\n""    <![CDATA[\n""\n""      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0\n""      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]\n""      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]\n""      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]\n""      Call-ID: [call_id]\n""      CSeq: 2 BYE\n""      Contact: sip:sipp@[local_ip]:[local_port]\n""      Max-Forwards: 70\n""      Subject: Performance Test\n""      Content-Length: 0\n""\n""    ]]>\n""  </send>\n""\n""  <recv response=\"200\" crlf=\"true\">\n""  </recv>\n""\n""  <!-- definition of the response time repartition table (unit is ms)   -->\n""  <ResponseTimeRepartition value=\"10, 20, 30, 40, 50, 100, 150, 200\"/>\n""\n""  <!-- definition of the call length repartition table (unit is ms)     -->\n""  <CallLengthRepartition value=\"10, 50, 100, 500, 1000, 5000, 10000\"/>\n""\n""</scenario>\n""\n", /************* Default_scenario[1] ***************/(char *)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n""<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n""\n""<!-- This program is free software; you can redistribute it and/or      -->\n""<!-- modify it under the terms of the GNU General Public License as     -->\n""<!-- published by the Free Software Foundation; either version 2 of the -->\n""<!-- License, or (at your option) any later version.                    -->\n""<!--                                                                    -->\n""<!-- This program is distributed in the hope that it will be useful,    -->\n""<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->\n""<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      -->\n""<!-- GNU General Public License for more details.                       -->\n""<!--                                                                    -->\n""<!-- You should have received a copy of the GNU General Public License  -->\n""<!-- along with this program; if not, write to the                      -->\n""<!-- Free Software Foundation, Inc.,                                    -->\n""<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->\n""<!--                                                                    -->\n""<!--                 Sipp default 'uas' scenario.                       -->\n""<!--                                                                    -->\n""\n""<scenario name=\"Basic UAS responder\">\n""  <!-- By adding rrs=\"true\" (Record Route Sets), the route sets         -->\n""  <!-- are saved and used for following messages sent. Useful to test   -->\n""  <!-- against stateful SIP proxies/B2BUAs.                             -->\n""  <recv request=\"INVITE\" crlf=\"true\">\n""  </recv>\n""\n""  <!-- The '[last_*]' keyword is replaced automatically by the          -->\n""  <!-- specified header if it was present in the last message received  -->\n""  <!-- (except if it was a retransmission). If the header was not       -->\n""  <!-- present or if no message has been received, the '[last_*]'       -->\n""  <!-- keyword is discarded, and all bytes until the end of the line    -->\n""  <!-- are also discarded.                                              -->\n""  <!--                                                                  -->\n""  <!-- If the specified header was present several times in the         -->\n""  <!-- message, all occurences are concatenated (CRLF seperated)        -->\n""  <!-- to be used in place of the '[last_*]' keyword.                   -->\n"

⌨️ 快捷键说明

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