示例#1
0
int dump_route_test(char *hdr,int hdrlen,unsigned char* payload,int paylen,FILE* fd,char segregationLevel,char *prefix)
{
   int i=2;/* flags + urilength */
   unsigned char flags=0;

   if(!(segregationLevel & (ONLY_URIS|JUNIT))){
      return dump_standard_hdr_test(hdr,hdrlen,(unsigned char*)payload,paylen,fd);
   }
   flags=payload[0];
   i=2;
   if(flags & HAS_NAME_F){
      i+=2;
   }
   if((!(segregationLevel & JUNIT)) && (segregationLevel & ONLY_URIS)){
      return dump_standard_hdr_test(hdr,hdrlen,(unsigned char*)(payload+i),payload[1],fd);
   }
   if((segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS)){
      return print_uri_junit_tests(hdr,hdrlen,&payload[i],payload[1],fd,1,"");
   }
   if(segregationLevel & JUNIT){
      i=2;
      fprintf(fd,"%sgetAddress.getDisplayName=(S)",prefix);
      if(flags & HAS_NAME_F){
	 fprintf(fd,"%.*s\n",payload[i+1],&hdr[payload[i]]);
	 i+=2;
      }else
	 fprintf(fd,"(null)\n");
      return print_uri_junit_tests(hdr,hdrlen,&payload[i],payload[1],fd,0,"getAddress.getURI.");
   }
   return 0;
}
示例#2
0
int dump_contact_body_test(char *hdr,int hdrlen,unsigned char *payload,int paylen,int fd,char segregationLevel,char *prefix)
{
   unsigned char flags, numcontacts;
   int i,offset;

   flags=payload[0];

   if(!segregationLevel){
      return dump_standard_hdr_test(hdr,hdrlen,payload,paylen,fd);
   }
   if(flags & STAR_F){
      return 1;
   }
   numcontacts=payload[1];
   if(numcontacts==0){
      LM_ERR("no contacts present?\n");
      return -1;
   }
   if(segregationLevel & (JUNIT|SEGREGATE|ONLY_URIS)){
      for(i=0,offset=2+numcontacts;i<numcontacts;i++){
	 dump_contact_test(hdr,hdrlen,&payload[offset],payload[2+i],fd,segregationLevel,prefix);
	 offset+=payload[2+i];
      }
   }
   return 1;
}
示例#3
0
int dump_via_body_test(char *hdr,int hdrlen,unsigned char *payload,int paylen,int fd,char segregationLevel)
{
   unsigned char numvias;
   int i,offset;

   if(!segregationLevel){
      return dump_standard_hdr_test(hdr,hdrlen,payload,paylen,fd);
   }

   numvias=payload[1];
   if(numvias==0){
      LM_ERR("no vias present?\n");
      return -1;
   }
   if(segregationLevel & SEGREGATE)
      for(i=0,offset=2+numvias;i<numvias;i++){
	 dump_standard_hdr_test(hdr,hdrlen,&payload[offset],payload[2+i],fd);
	 offset+=payload[2+i];
      }
   return 1;
}
示例#4
0
int dump_digest_test(char *hdr,int hdrlen,unsigned char* payload,int paylen,FILE* fd,char segregationLevel)
{
   int i=2;/* 2*flags */
   unsigned char flags1=0;

   flags1=payload[0];
   if(!(segregationLevel & ONLY_URIS))
      return dump_standard_hdr_test(hdr,hdrlen,payload,paylen,fd);
   i=2;
   if(flags1 & HAS_NAME_F)
      i+=2;
   if(flags1 & HAS_REALM_F)
      i+=2;
   if(flags1 & HAS_NONCE_F)
      i+=2;
   if(flags1 & HAS_URI_F){
      if(!(segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS))
	 return dump_standard_hdr_test(hdr,hdrlen,&payload[i+1],payload[i],fd);
      if((segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS))
	 return print_uri_junit_tests(hdr,hdrlen,&payload[i+1],payload[i],fd,1,"");
   }
   return 0;
}
示例#5
0
/**
 * dumps to FD a NBO int which is the header length, the header,
 * an NBO int which is the payload length, and the payload.
 *
 * hdr is the header,
 * hdrlen is the header length,
 * payload is the payload,
 * paylen is the payload length,
 * fd is the file descriptor to which to dump,
 * segregationLevel is wether only URIS must be dumped or all the header code.
 *
 * return 0 on success, <0 on error
 */
int dump_to_body_test(char *hdr,int hdrlen,unsigned char* payload,int paylen,int fd,char segregationLevel)
{
   int i=2;/* flags + urilength */
   unsigned char flags=0;

   flags=payload[0];
   if(!segregationLevel){
      return dump_standard_hdr_test(hdr,hdrlen,payload,paylen,fd);
   }
   i=2;
   if(flags & HAS_DISPLAY_F){
      i+=2;
   }
   if(flags & HAS_TAG_F){
      i+=2;
   }
   if(!(segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS)){
     return dump_standard_hdr_test(hdr,hdrlen,&payload[i],payload[1],fd);
   }
   if((segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS)){
     return print_uri_junit_tests(hdr,hdrlen,&payload[i],payload[1],fd,1,"");
   }
   return 0;
}
示例#6
0
int dump_route_body_test(char *hdr,int hdrlen,unsigned char *payload,int paylen,int fd,char segregationLevel,char *prefix)
{
   unsigned char numroutes;
   int i,offset;

   if(!segregationLevel){
      return dump_standard_hdr_test(hdr,hdrlen,(unsigned char*)payload,paylen,fd);
   }

   numroutes=payload[1];
   if(numroutes==0){
      LM_ERR("no routes present?\n");
      return -1;
   }
   if(segregationLevel & (JUNIT|SEGREGATE|ONLY_URIS)){
      for(i=0,offset=2+numroutes;i<numroutes;i++){
	 dump_route_test(hdr,hdrlen,&payload[offset],payload[2+i],fd,segregationLevel,prefix);
	 offset+=payload[2+i];
      }
   }
   return 1;
}
示例#7
0
int dump_contact_test(char *hdr,int hdrlen,unsigned char* payload,int paylen,int fd,char segregationLevel,char *prefix)
{
   int i=2;/* flags + urilength */
   unsigned char flags=0;
   int n;

   flags=payload[0];
   if((segregationLevel & SEGREGATE)&& !(segregationLevel & ONLY_URIS))
      return dump_standard_hdr_test(hdr,hdrlen,payload,paylen,fd);
   i=2;
   if(flags & HAS_NAME_F)
      i+=2;
   if(flags & HAS_Q_F)
      i+=2;
   if(flags & HAS_EXPIRES_F)
      i+=2;
   if(flags & HAS_RECEIVED_F)
      i+=2;
   if(flags & HAS_METHOD_F)
      i+=2;
   if(!(segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS))
      return dump_standard_hdr_test(hdr,hdrlen,(&payload[i]),(int)payload[1],fd);
   if((segregationLevel & JUNIT) && (segregationLevel & ONLY_URIS))
      return print_uri_junit_tests(hdr,hdrlen,&payload[i],payload[1],fd,1,"");
   if((segregationLevel & JUNIT) && !(segregationLevel & ONLY_URIS)){
      i=2;
      n=write(fd,prefix,strlen(prefix));
      n=write(fd,"getAddress.getDisplayName=(S)",29);
      if(flags & HAS_NAME_F){
         n=write(fd,&hdr[payload[i]],payload[i+1]);
         n=write(fd,"\n",1);
         i+=2;
      }else
         n=write(fd,"(null)\n",7);
         n=write(fd,prefix,strlen(prefix));
         n=write(fd,"getQValue=(F)",13);
      if(flags & HAS_Q_F){
         n=write(fd,&hdr[payload[i]],payload[i+1]);
         n=write(fd,"\n",1);
         i+=2;
      }else
         n=write(fd,"(null)\n",7);
         n=write(fd,prefix,strlen(prefix));
         n=write(fd,"getExpires=(I)",14);
      if(flags & HAS_EXPIRES_F){
         n=write(fd,&hdr[payload[i]],payload[i+1]);
         n=write(fd,"\n",1);
         i+=2;
      }else
         n=write(fd,"(null)\n",7);
      if(flags & HAS_RECEIVED_F){
         i+=2;
      }
      if(flags & HAS_METHOD_F){
         i+=2;
      }
      n=write(fd,prefix,strlen(prefix));
      n=write(fd,"getParameter=(SAVP)",19);
      for(i+=payload[1];i<paylen-1;i+=2){
	 printf("%.*s=",payload[i+1]-payload[i]-1,&hdr[payload[i]]);
	 printf("%.*s;",(payload[i+2]-payload[i+1])==0?0:(payload[i+2]-payload[i+1]-1),&hdr[payload[i+1]]);
      }
      n=write(fd,"\n",1);
	  if (n < 0)
		  LM_ERR("error while writing the final eol\n");
   }
   return 0;
}
示例#8
0
int print_uri_junit_tests(char *hdrstart,int hdrlen,unsigned char *payload,int paylen,FILE *fd,char also_hdr,char *prefix)
{
   int i=4,k=0,m=0;/*1*pointer+1*len+2*flags*/
   unsigned char uriidx=0,flags1=0,flags2=0,urilen;
   char *ch_uriptr,*aux,*aux2,*aux3,*uritype=NULL,*secure=NULL;

   uriidx=payload[0];
   if(uriidx>hdrlen){
      fprintf(fd,"bad index for start of uri: hdrlen=%d uri_index=%d\n",hdrlen,uriidx);
      return -1;
   }

   if(also_hdr)
      dump_standard_hdr_test(hdrstart,hdrlen,payload,paylen,fd);
   ch_uriptr = hdrstart+uriidx;
   urilen=payload[1];
   flags1=payload[2];
   flags2=payload[3];
   fprintf(fd,"%stoString=(S)%.*s\n",prefix,urilen,ch_uriptr);
   uritype=flags1&SIP_OR_TEL_F?"sip":"tel";
   secure=flags1&SECURE_F?"s":"";
   fprintf(fd,"%sgetScheme=(S)%s%s\n",prefix,uritype,secure);
   fprintf(fd,"%sisSecure=(B)%s\n",prefix,flags1&SECURE_F?"true":"false");
   fprintf(fd,"%sisSipURI=(B)%s\n",prefix,"true");
   fprintf(fd,"%sgetUser=(S)",prefix);
   if(flags1 & USER_F){
      fprintf(fd,"%.*s\n",(payload[i+1]-1)-payload[i],&ch_uriptr[payload[i]]);
      ++i;
   }else 
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetUserPassword=(S)",prefix);
   if(flags1 & PASSWORD_F){
      fprintf(fd,"%.*s\n",(payload[i+1]-1)-payload[i],&ch_uriptr[payload[i]]);
      ++i;
   }else
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetHost=(S)",prefix);
   if(flags1 & HOST_F){
      fprintf(fd,"%.*s\n",(payload[i+1]-1)-payload[i],&ch_uriptr[payload[i]]);
      ++i;
   }else
      fprintf(fd,"(null)\n");/*can't happen*/
   fprintf(fd,"%sgetPort=(I)",prefix);
   if(flags1 & PORT_F){
      fprintf(fd,"%.*s\n",(payload[i+1]-1)-payload[i],&ch_uriptr[payload[i]]);
      ++i;
   }else
      fprintf(fd,"(null)\n");
   /*user=phone;transport=udp*/
   if(flags1 & PARAMETERS_F){
      aux=&ch_uriptr[payload[i]];
      aux2=NULL;
      aux3=aux;
      m=(payload[i+1]-1-payload[i]);
      fprintf(fd,"%sgetParameter=(SAVP)",prefix);/*SVP = Attribute Value Pair*/
      for(k=0;k<=m;k++){
	 if((aux3[k]==';'||(k==m)) && aux2==NULL){/*no parameterValue was found*/
	    fprintf(fd,"%.*s=;",(int)(aux3-aux+k),aux);
	    aux2=NULL;/*resets the parameterValue-start pointer*/
	    aux=aux3+1+k;/*points to the next parameter*/
	 }else 
	    if((aux3[k]==';'||(k==m)) && aux2!=NULL){
	       fprintf(fd,"%.*s=%.*s;",(int)(aux2-aux),aux,(int)(aux3-aux2-1+k),aux2+1);
	       aux2=NULL;
	       aux=aux3+1+k;
	    } else 
	       if(aux3[k]=='='){
		  aux2=aux3+k;
	       }
      }
      fprintf(fd,"\n");
      ++i;
   }
   if(flags1 & HEADERS_F){
      aux=&ch_uriptr[payload[i]];
      aux2=NULL;
      aux3=aux;
      m=(payload[i+1]-1-payload[i]);
      fprintf(fd,"%sgetHeader=(SAVP)",prefix);
      for(k=0;k<=m;k++){
	 if((aux3[k]==';'||(k==m)) && aux2==NULL){/*no parameterValue was found*/
	    fprintf(fd,"%.*s=;",(int)(aux3-aux+k),aux);
	    aux2=NULL;/*resets the parameterValue-start pointer*/
	    aux=aux3+1+k;/*points to the next parameter*/
	 }else 
	    if((aux3[k]==';'||(k==m)) && aux2!=NULL){
	       fprintf(fd,"%.*s=%.*s;",(int)(aux2-aux),aux,(int)(aux3-aux2-1+k),aux2+1);
	       aux2=NULL;
	       aux=aux3+1+k;
	    } else 
	       if(aux3[k]=='='){
		  aux2=aux3+k;
	       }
      }
      fprintf(fd,"\n");
      ++i;
   }
   ++i;
   fprintf(fd,"%sgetTransportParam=(S)",prefix);
   if(flags2 & TRANSPORT_F){
      fprintf(fd,"%.*s\n",payload[i+1],&ch_uriptr[payload[i]]);
      i+=2;
   }else
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetTTLparam=(I)",prefix);
   if(flags2 & TTL_F){
      fprintf(fd,"%.*s\n",payload[i+1],&ch_uriptr[payload[i]]);
      i+=2;
   }else
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetUserParam=(S)",prefix);
   if(flags2 & USER_F){
      fprintf(fd,"%.*s\n",payload[i+1],&ch_uriptr[payload[i]]);
      i+=2;
   }else
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetMethodParam=(S)",prefix);
   if(flags2 & METHOD_F){
      fprintf(fd,"%.*s\n",payload[i+1],&ch_uriptr[payload[i]]);
      i+=2;
   }else
      fprintf(fd,"(null)\n");
   fprintf(fd,"%sgetMAddrParam=(S)",prefix);
   if(flags2 & MADDR_F){
      fprintf(fd,"%.*s\n",payload[i+1],&ch_uriptr[payload[i]]);
      i+=2;
   }else
      fprintf(fd,"(null)\n");
   if(flags2 & LR_F){
      i+=2;
   }
   fprintf(fd,"\n");
   return 0;
}
示例#9
0
int dump_headers_test(char *msg,int msglen,unsigned char *payload,int len,char type,int fd,char segregationLevel)
{
   char *hdr_start_ptr;
   short int start_idx;

   memcpy(&start_idx,payload,2);
   start_idx=ntohs(start_idx);

   hdr_start_ptr = &msg[start_idx];

   switch(type){
      case 'f':/*from*/
      case 't':/*to*/
      case 'o':/*refer-to*/
      case 'p':/*rpid= remote parte id*/
	 dump_to_body_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd,segregationLevel);
	 break;
      case 'm':/*contact*/
	 dump_contact_body_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd,segregationLevel,"");
	 break;
      case 'r':/*route*/
      case 'R':/*record-route*/
	 dump_route_body_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd,segregationLevel,"");
	 break;
      case 'l':/*contentlength*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'v':/*via*/
	 dump_via_body_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd,segregationLevel);
	 break;
      case 'A':/*Accept*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'c':/*content-type*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'S':/*CSeq*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'P':/*expires*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'a':/*allow*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      case 'h':/*proxy-authenticate*/
      case 'H':/*authorization*/
      case 'z':/*proxy-authorization*/
	 dump_standard_hdr_test(hdr_start_ptr,payload[HEADER_LEN_IDX],&payload[HEADER_PAYLOAD_IDX],
	       len-HEADER_PAYLOAD_IDX,fd);
	 break;
      default:
	 return 1;
   }
   return 1;
}