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

📄 sipbst_reg_cseq.cpp

📁 sip torture test tools
💻 CPP
字号:
//sipbst_reg_cseq.cpp//Copyright (C) 2003 Metalink LTD//Author: Rodionov Sergey (seger@metalinkltd.com)//This program is distributed under terms of GPL (see LICENSE)#include "sipbst.h"#include "bnf_parser.h"#include "sipb_bnftools.h"#include "sipb_bnfrules_forcreate.h"#include "sipb_bnfrules_forparse.h"#include "sipb_md5.h"#include "sipb_addfun.h"//                                                                            void sipbst_reg_cseq::_work(){   int port1 = 10000 + random() % 10000;   int port2 = 30000 + random() % 10000;   bool is_cseq_up= !(random() % 4);   //1/4  --> update CSeq   int cseq1 = 5 + random()%1000000;   int cseq2;   if (is_cseq_up)     cseq2 = cseq1+1+random() % 5;   else     cseq2 = cseq1 - random() % 5;   bool is_cid_change= !(random() % 4);  //1/4 --> change Call-ID   string cid1=sipb_bnftools::nalpha(10);   string cid2;   if (is_cid_change)     cid2=sipb_bnftools::nalpha(12);   else     cid2=cid1;   //FIRST REQUEST   sipb_bnftools::set_rulebydef(pcr);   sipb_bnftools::set_reqline(pcr,"REGISTER",servhost_name,"",get_servport());   sipb_bnftools::set_maxfor(pcr , random()%70 + 1);   sipb_bnftools::set_to_nottag(pcr, servhost_name, username,1024 + random()%30000);   sipb_bnftools::set_cseq(pcr,"REGISTER",cseq1);   sipb_bnftools::set_callid(pcr , cid1);   sipb_bnftools::set_from(pcr,servhost_name,username,1024 +random()%30000 );   sipb_bnftools::set_contact(pcr, userhost_name, username,			      port1,false,"Contact");    sipb_bnftools::set_expires(pcr,60);   string uri=string("sip:")+username+"@"+servhost_name;      if (!av_csrprr_auth("REGISTER",uri,username,password,max_contlen,		       "Contact","Expires"))     return;   if (!check_2xx_status())     return;   sipb_errwarn ew;   sipb_bnftools::check_regcontact(&pv_recv,&pv_send,ew);   add_last_errwarn(ew);   if (pv_recv.get_quan("Date")!=1)     add_last_warning("The REGISTER-responce SHOULD include a Date header field (rfc3261 10.3 page 66)");   //Change update request (new port)   //may be change callid and may be + or - Cseq   sipb_bnftools::set_contact(pcr, userhost_name, username,			      port2,false,"Contact");   sipb_bnftools::set_cseq(pcr,"REGISTER",cseq2);   sipb_bnftools::set_callid(pcr , cid2);      if (!av_csrprr_auth("REGISTER",uri,username,password,max_contlen,		       "Contact","Expires"))     return;   if (!check_2xx_status())     return;   if (pv_recv.get_quan("Date")!=1)     add_last_warning("The REGISTER-responce SHOULD include a Date header field (rfc3261 10.3 page 66)");      if ( (!is_cid_change) && (!is_cseq_up) )  //must not change      //we not change Call-ID and not update CSeq     {	if (!sipb_bnftools::find_contact_port(&pv_recv,port1) ||	     sipb_bnftools::find_contact_port(&pv_recv,port2))	  {	     add_last_error("We find in responce second-contact port="+			    int_to_str(port2)+			    " or not find first-contact port="+			    int_to_str(port1) + " (server update Contact). "			    "But we send second REGISTER with CSeq-value "			    "less or equal CSeq-value in first REGISTER "			    "and we not change Call-ID "			    "(rfc3261 10.3 for detail)");	  }     }   else      {	if (!sipb_bnftools::find_contact_port(&pv_recv,port2))	  {	     add_last_error("We not find in responce second-contact port=" + 			    int_to_str(port2)+". But Server must be Update "			    "Contact (we update Cseq or change Call-ID)");	     if (!sipb_bnftools::find_contact_port(&pv_recv,port1))	       add_last_warning("Can't find contact from first packet port="+				int_to_str(port1));	  }     }}

⌨️ 快捷键说明

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