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

📄 sipb_bnftools.cpp

📁 sip torture test tools
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				   int to_port){   //create new rules   p.add_rule("display-name-To"," 1*(token LWS) / quoted-string ");   set_sip_pr(p, "To", host, username, to_port);   p.add_rule("addr-spec-To","SIP-URI-To");   p.add_rule("name-addr-To","[ display-name-To ] LAQUOT addr-spec-To RAQUOT");      //create general rule   p.reset_rule("To", "( \"To\" / \"t\" )  HCOLON "		"( name-addr-To/ addr-spec-To ) SEMI \"tag\" EQUAL token");}//                                                                           void sipb_bnftools::set_from(bnf_parser&p, string host,string username,			     int to_port){   //create new rules   p.add_rule("display-name-From","1*(token LWS)/ quoted-string");   set_sip_pr(p,"From",host,username,to_port);   p.add_rule("addr-spec-From","SIP-URI-From");   p.add_rule("name-addr-From",string("[ display-name-From ]")+ 	      " LAQUOT addr-spec-From RAQUOT ");   p.add_rule("from-param-tag"," \"tag\" EQUAL token ");      p.reset_rule("From","( \"From\" / \"f\" ) HCOLON from-spec");   p.reset_rule("from-spec",		"( name-addr-From / addr-spec-From ) [ SEMI from-param-tag ]");}//                                                                           void sipb_bnftools::set_contact(bnf_parser& p,string host,string username,				int cont_port,bool rand_setport,				string rule_name,int expir,				bool rand_setexpir){   string display_name="display-name-"+rule_name;   string addr_spec="addr-spec-"+rule_name;   string name_addr="name-addr-"+rule_name;   string param_q="param-q-"+rule_name;   string param_exp="param-expires-"+rule_name;   string sip_uri="SIP-URI-"+rule_name; //  created by set_sip_pr      p.add_rule(display_name,"1*(token LWS)/ quoted-string");   set_sip_pr(p,rule_name,host,username,cont_port,rand_setport);   p.add_rule(addr_spec,sip_uri);   p.add_rule(name_addr,"[ "+display_name+" ]"+ 	      " LAQUOT "+addr_spec+" RAQUOT ");   p.add_rule(param_q,"\"q\" EQUAL qvalue");       p.add_rule(param_exp,"\"expires\" EQUAL "+str(expir));   if (expir<0)  //not send expires     {	p.add_rule(rule_name,string("(\"Contact\" / \"m\" ) HCOLON ")+		   "( " + name_addr + " /  " + addr_spec + " ) "+		   "[SEMI "+ param_q + " ] ");	return;     }   if (rand_setexpir)     p.add_rule(rule_name,string("(\"Contact\" / \"m\" ) HCOLON ")+		"( " + name_addr + " /  " + addr_spec + " ) "+		"[SEMI "+ param_q + " ] [SEMI "+param_exp +" ]");      else     p.add_rule(rule_name,string("(\"Contact\" / \"m\" ) HCOLON ")+		"( " + name_addr + " /  " + addr_spec + " ) "+		"[SEMI "+ param_q + " ] SEMI "+param_exp);}//                                                                           void sipb_bnftools::set_maxfor(bnf_parser&p,int mf){   p.reset_rule("Max-Forwards",str("Max-Forwards") + "HCOLON" + str(mf));}//                                                                           void sipb_bnftools::set_cseq(bnf_parser&p,string name,int val){   p.add_rule("Method-CSeq",hstr(name));   if (val<0)     p.reset_rule("CSeq","\"CSeq\" HCOLON 1*9DIGIT LWS Method-CSeq");   else     p.reset_rule("CSeq","\"CSeq\" HCOLON "+str(val)+" LWS Method-CSeq");}//                                                                           void sipb_bnftools::set_require(bnf_parser&p,string req){   p.reset_rule("Require","\"Require\" HCOLON " + hstr(req));}//                                                                           void sipb_bnftools::set_accept(bnf_parser&p,string req){   p.reset_rule("Accept","\"Accept\" HCOLON " + hstr(req));}//                                                                           void sipb_bnftools::set_subject(bnf_parser&p,string s){   p.reset_rule("Subject","(\"Subject\" / \"s\" ) HCOLON " + hstr(s));}//                                                                           void sipb_bnftools::set_conttype(bnf_parser& p, string s){   p.reset_rule("Content-Type","( \"Content-Type\" / \"c\" ) HCOLON "+hstr(s));}//                                                                           void sipb_bnftools::set_callid(bnf_parser&p,string val){   if (val.size()>0)     p.reset_rule("Call-ID","( \"Call-ID\" / \"i\" ) HCOLON "+hstr(val));   else  //reset by default     p.reset_rule("Call-ID","( \"Call-ID\" / \"i\" ) HCOLON callid");}//                                                                           void sipb_bnftools::set_expires(bnf_parser&p,int expir){   p.reset_rule("Expires","\"Expires\" HCOLON " + str(expir));}//                                                                           void sipb_bnftools::set_contact_star(bnf_parser& p,string rule_name){   p.add_rule(rule_name,"(\"Contact\" / \"m\" ) HCOLON STAR");}//                                                                           void sipb_bnftools::set_sip_pr(bnf_parser&p,string prefix, string host,			       string user_name,int port,bool rand_setport){   //create rulle hostport-prefix      if (port>0)     {	if (rand_setport)	  p.add_rule("hostport-"+prefix , hstr(host)+" [ \":\" " +		     str(port) + " ] ");	else	  p.add_rule("hostport-"+prefix , hstr(host)+"  \":\" " +		     str(port) + "  ");	       }   else     p.add_rule("hostport-"+prefix, hstr(host));   //create rule SIP-UTI-prefix   if (user_name!="")     p.add_rule("SIP-URI-"+prefix, str("sip:") +" " + hstr(user_name) + " "+		hstr("@")+" hostport-"+prefix);   else     p.add_rule("SIP-URI-"+prefix,str("sip:") +		" hostport-"+prefix);}//                                                                            bool sipb_bnftools::set_auth(bnf_parser&pcr,bnf_parsval* challenge,			     string uri,string username,string password,			     string method,sipb_errwarn& ew){   bnf_parsval* w,*ch;   if (!challenge->get_one("WWW-Authenticate",w))     {		ew.add_error("Cant find WWW-Authenticate in 401-responce");	return false;     }   if (!w->get_one("challenge",ch))     {	ew.add_error("Cant find challenge in WWW-Authenticate, or multi challenge");	return false;     }   string realm,nonce;   bnf_parsval* tmp;   if (!ch->get_one("realm",tmp))     {	ew.add_error("Cant find real in WWW-Authenticate");	return false;     }   realm=read_qstr(tmp);   if (!ch->get_one("nonce",tmp))     {	ew.add_error("Cant find nonce in WWW-Authenticate");	return false;     }   nonce=read_qstr(tmp);   if (!ch->is_present("md5-str"))     {	ew.add_warning("Cant find MD5 - string in WWW-Authenticate, we work only with MD5");	return false;     }   //TODO: change from hstr   pcr.reset_rule("credentials",str("Digest")+" LWS digest-response ");   pcr.add_rule("username-dr",str("username")+" EQUAL LDQUOT "+		hstr(username)+" RDQUOT");   pcr.add_rule("realm-dr",str("realm")+" EQUAL LDQUOT "+hstr(realm)+		" RDQUOT");   pcr.add_rule("nonce-dr",str("nonce")+" EQUAL LDQUOT "+hstr(nonce)+		" RDQUOT");   pcr.add_rule("digest-uri-dr",str("uri")+" EQUAL LDQUOT "+hstr(uri)+		" RDQUOT");   string resp;   resp=sipb_md5::create_dresp(username,realm,password,method,uri,nonce);   pcr.add_rule("dresponce-dr",str("response")+" EQUAL LDQUOT "+ hstr(resp)+		" RDQUOT");   pcr.reset_rule("digest-response",string("username-dr COMMA realm-dr ")+		  "COMMA nonce-dr COMMA digest-uri-dr COMMA dresponce-dr");      return true;}//                                                                            bool sipb_bnftools::set_resp_fromreq(bnf_parser&p,bnf_parsval* request,				     int status_code,string status_str,				     int c_len,bool rand_cont,				     sipb_errwarn&ew){   //set from   bnf_parsval* pv;   if (!request->get_one("From",pv))     {	ew.add_error("Can't find From field (or multi From)");	return false;     }   p.add_rule("From",hstr(pv->get_data()));   //set To (and add to-tag)   if (!request->get_one("To",pv))     {	ew.add_error("Can't find To field (or multi To)");	return false;     }   if (!pv->is_present("tag-param"))  //we MUST add to-tag     p.add_rule("To",hstr(pv->get_data())+" SEMI \"tag\" EQUAL token");   else      p.add_rule("To",hstr(pv->get_data()));   //set Call-ID   if (!request->get_one("Call-ID",pv))     {	ew.add_error("Can't find Call-ID (or multi Call-ID)");	return false;     }   p.add_rule("Call-ID",hstr(pv->get_data()));   //set CSeq   if (!request->get_one("CSeq",pv))     {	ew.add_error("Can't find CSeq (or multi CSeq)");	return false;     }   p.add_rule("CSeq",hstr(pv->get_data()));   //set Via (may be multi)   vector<bnf_parsval*> pvs;   request->get("Via",pvs);   string string_via;   for (unsigned int i=0;i<pvs.size();i++)     {	string_via+=hstr(pvs[i]->get_data())+" ";	if (i != pvs.size() - 1)	  string_via+="CRLF  ";     }   p.add_rule("Via",string_via);      p.add_rule("Status-Line","\"SIP/2.0\" SP "+	      hstr(int_to_str(status_code))+" SP "+	      hstr(status_str)+" CRLF");   //now we set Response rule   set_message(p,"Response","Status-Line",c_len,"","",rand_cont);   return true;}//                                                                            //---------CHECK PART------------//                                                                            bool sipb_bnftools::cmp_uri(bnf_parsval* v1,bnf_parsval * v2){   //TODO: make remove escaped!   //TODO: SIPS-URI   //TODO: header can swap   if ( ( v1->name() != "SIP-URI" ) || ( v2->name() != "SIP-URI" ))     throw logic_error("Error in sipb_bnftools::cmp_uri unsupported uri sheme");      //1. compare userinfo (case sensetivity)   string s1,s2;   if (v1->get_one("userinfo",s1)) //if userinfo is present     {	if (!v2->get_one("userinfo",s2)  || (s1 != s2) )	  return false;     }   else      if (v2->get_one("userinfo",s2))       return false;      //2. compare hostport (case-insensitivity)   if (!v1->get_one("hostport",s1) || !v2->get_one("hostport",s2))     throw logic_error("in sipb_bnftools::cmp_uri not found hostport");   if (! casecmp( s1, s2 ))     return false;      //3. compare uri parameters   bnf_parsval* p1,*p2;   if (!v1->get_one("uri-parameters",p1) || !v2->get_one("uri-parameters",p2))     throw logic_error("in sipb_bnftools::cmp_uri not found uri-parameters");      if (!casecmp_values(p1,p2,"transport-param-trans")||        !casecmp_values(p1,p2,"user-param-param") ||       !cmp_values(p1,p2,"Method") ||       !casecmp_values(p1,p2,"lr-param") ||       !casecmp_values(p1,p2,"maddr-param-host")||       !casecmp_values(p1,p2,"ttl"))     return false;   //4. compare headers   if (!casecmp_values(v1,v2,"headers"))     return false;   return true;}//                                                                            bool sipb_bnftools::cmp_viaparm_notrecived(bnf_parsval *v1,bnf_parsval*v2){   if (v1->name()!="via-parm" || v2->name()!="via-parm")     throw logic_error("Error in sipb_bnftools::cmp_via_notrecived not via-parm");   //1. cmp sent-protocol   bnf_parsval*p1,*p2;   if (!v1->get_one("sent-protocol",p1) || !v2->get_one("sent-protocol",p2))     throw logic_error("Error in cmp_viaparm_notrecived not found sent-protocol value");   if (!casecmp_values(p1,p2,"protocol-name")  ||       !casecmp_values(p1,p2,"protocol-version") ||       !casecmp_values(p1,p2,"transport"))     return false;   //2. cmp sent_by    string s1,s2;   if (!v1->get_one("sent-by",p1) || !v2->get_one("sent-by",p2))     throw logic_error("Error in cmp_via_notrecived not find sent-by in via-parm");   //2.1 cmp host in sent-by   if (!p1->get_one("host",s1) || !p2->get_one("host",s2))     throw logic_error("Error in cmp_via_notrecived not find host in sent-by");   if ( !casecmp( s1 , s2 ) )     return false;   //2.2 cmp port in sent-by   if (p1->get_one("port",s1))     {	if ( !p2->get_one("port",s2) || s1 != s2)	  return false;     }   else     if (p2->get_one("port",s2))       return false;   //3. via-params (without recived)   if (!cmp_values(v1,v2,"ttl") ||       !casecmp_values(v1,v2,"via-maddr-param") ||       !cmp_values(v1,v2,"via-branch-param") ||       !casecmp_values(v1,v2,"via-extension"))     return false;   return true;}//                                                                            bool sipb_bnftools::cmp_from(bnf_parsval*v1,bnf_parsval*v2){   if (v1->name()!="From" || v2->name()!="From")     throw logic_error("Error in sipb_bnftools::cmp_from not From values");      if ( !cmp_addrspec(v1,v2) || 	!cmp_values(v1,v2,"tag-param-param") ||	!cmp_values(v1,v2,"generic-param"))      return false;   return true;}//                                                                            bool sipb_bnftools::cmp_to_nottag(bnf_parsval*v1,bnf_parsval*v2){   if (v1->name()!="To" || v2->name()!="To")     throw logic_error("Error in sipb_bnftools::cmp_to_notag not To values");     if (!cmp_addrspec(v1,v2) ||        !cmp_values(v1,v2,"generic-param"))     return false;   return true;}//                                                                            bool sipb_bnftools::cmp_cseq(bnf_parsval* v1,bnf_parsval*v2){   if (v1->name()!="CSeq" || v2->name()!="CSeq")     throw logic_error("Error in sipb_bnftools::cmp_cseq no CSeq values");   string s1,s2;   if (!v1->get_one("CSeq-value",s1) || !v2->get_one("CSeq-value",s2))     throw logic_error("Error in sipb_bnftools::cmp_cseq no CSeq-value values");   if (atoi(s1.c_str()) != atoi(s2.c_str()))     return false;   if (!cmp_values(v1,v2,"CSeq-Method"))     return false;   return true;

⌨️ 快捷键说明

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