Browse Source

- added ROUND4 for *cloner2 (tm)

Andrei Pelinescu-Onciul 24 years ago
parent
commit
67573dae87
3 changed files with 24 additions and 20 deletions
  1. 1 1
      Makefile.defs
  2. 21 17
      modules/tm/sip_msg.c
  3. 2 2
      modules/tm/test/kill_sem.sh

+ 1 - 1
Makefile.defs

@@ -53,7 +53,7 @@ ARCH = $(shell uname -s)
 
 DEFS+= -DNAME='"$(NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
 	 -DDNS_IP_HACK  -DPKG_MALLOC -DSHM_MEM  -DSHM_MMAP \
-	-DBRUT_HACK #-DVQ_MALLOC 
+	-DBRUT_HACK -DVQ_MALLOC 
 	#-DEXTRA_DEBUG -DBRUT_HACK \
 	#-DVQ_MALLOC  -DDBG_LOCK  #-DSTATS
 	  #-DDBG_QM_MALLOC #-DVQ_MALLOC #-DNO_DEBUG

+ 21 - 17
modules/tm/sip_msg.c

@@ -7,6 +7,8 @@
 #include "../../dprint.h"
 #include "../../mem/mem.h"
 
+#define ROUND4(s) ((s)%4)?((s)+4)/4*4:(s)
+
 char*   translate_pointer( char* new_buf , char *org_buf , char* p);
 struct via_body* via_body_cloner( char* new_buf , char *org_buf , struct via_body *org_via);
 struct hdr_field* header_cloner( struct sip_msg *new_msg , struct sip_msg *org_msg, struct hdr_field *hdr);
@@ -484,29 +486,29 @@ struct sip_msg*  sip_msg_cloner_2( struct sip_msg *org_msg )
 
 
    /*computing the length of entire sip_msg structure*/
-   len = sizeof( struct sip_msg );
+   len = ROUND4(sizeof( struct sip_msg ));
    /*we will keep only the original msg*/
-   len += org_msg->len;
+   len += ROUND4(org_msg->len);
    /*the new uri (if any)*/
    if (org_msg->new_uri.s && org_msg->new_uri.len)
-      len+= org_msg->new_uri.len;
+      len+= ROUND4(org_msg->new_uri.len);
    /*all the headers*/
    for( hdr=org_msg->headers ; hdr ; hdr=hdr->next )
    {
-      /*sze of header struct*/
-      len += sizeof( struct hdr_field);
+      /*size of header struct*/
+      len += ROUND4(sizeof( struct hdr_field));
       switch (hdr->type)
       {
          case HDR_CSEQ:
-                   len+=sizeof(struct cseq_body);
+                   len+=ROUND4(sizeof(struct cseq_body));
                    break;
          case HDR_VIA:
                    for (via=(struct via_body*)hdr->parsed;via;via=via->next)
                    {
-                      len+=sizeof(struct via_body);
+                      len+=ROUND4(sizeof(struct via_body));
                       /*via param*/
                       for(prm=via->param_lst;prm;prm=prm->next)
-                         len+=sizeof(struct via_param );
+                         len+=ROUND4(sizeof(struct via_param ));
                    }
                    break;
       }
@@ -524,22 +526,24 @@ struct sip_msg*  sip_msg_cloner_2( struct sip_msg *org_msg )
    new_msg = (struct sip_msg*)p;
    /*sip msg structure*/
    memcpy( new_msg , org_msg , sizeof(struct sip_msg) );
-   p += sizeof(struct sip_msg);
+   p += ROUND4(sizeof(struct sip_msg));
    new_msg->add_rm = new_msg->repl_add_rm = 0;
    /*new_uri*/
    if (org_msg->new_uri.s && org_msg->new_uri.len)
    {
       new_msg->new_uri.s = p;
       memcpy( p , org_msg->new_uri.s , org_msg->new_uri.len);
-      p += org_msg->new_uri.len;
+      p += ROUND4(org_msg->new_uri.len);
    }
    /*message buffers(org and scratch pad)*/
    memcpy( p , org_msg->orig , org_msg->len);
    new_msg->orig = new_msg->buf = p;
-   p += new_msg->len;
+   p += ROUND4(new_msg->len);
    /*unparsed and eoh pointer*/
-   new_msg->unparsed = translate_pointer( new_msg->buf , org_msg->buf , org_msg->unparsed );
-   new_msg->eoh = translate_pointer( new_msg->buf , org_msg->buf , org_msg->eoh );
+   new_msg->unparsed = translate_pointer( new_msg->buf , 
+							org_msg->buf , org_msg->unparsed );
+   new_msg->eoh = translate_pointer( new_msg->buf ,
+							org_msg->buf , org_msg->eoh );
    /* first line, updating the pointers*/
    if ( org_msg->first_line.type==SIP_REQUEST )
    {
@@ -561,7 +565,7 @@ struct sip_msg*  sip_msg_cloner_2( struct sip_msg *org_msg )
    {
       new_hdr = (struct hdr_field*)p;
       memcpy(new_hdr, hdr, sizeof(struct hdr_field) );
-      p += sizeof( struct hdr_field);
+      p += ROUND4(sizeof( struct hdr_field));
       new_hdr->name.s =  translate_pointer( new_msg->buf , org_msg->buf , hdr->name.s );
       new_hdr->body.s =  translate_pointer( new_msg->buf , org_msg->buf , hdr->body.s );
 
@@ -593,7 +597,7 @@ struct sip_msg*  sip_msg_cloner_2( struct sip_msg *org_msg )
                    break;
          case HDR_CSEQ:
                    new_hdr->parsed = p;
-                   p +=sizeof(struct cseq_body);
+                   p +=ROUND4(sizeof(struct cseq_body));
                    memcpy( new_hdr->parsed , hdr->parsed , sizeof(struct cseq_body) );
                    ((struct cseq_body*)new_hdr->parsed)->number.s =  translate_pointer( new_msg->buf , org_msg->buf , ((struct cseq_body*)hdr->parsed)->number.s );
                    ((struct cseq_body*)new_hdr->parsed)->method.s =  translate_pointer( new_msg->buf , org_msg->buf , ((struct cseq_body*)hdr->parsed)->method.s );
@@ -641,7 +645,7 @@ struct via_body* via_body_cloner_2( char* new_buf , char *org_buf , struct via_b
     /* clones the via_body structure */
     new_via = (struct via_body*)(*p);
     memcpy( new_via , org_via , sizeof( struct via_body) );
-    (*p) += sizeof( struct via_body );
+    (*p) += ROUND4(sizeof( struct via_body ));
 
     /* hdr (str type) */
     new_via->hdr.s = translate_pointer( new_buf , org_buf , org_via->hdr.s );
@@ -668,7 +672,7 @@ struct via_body* via_body_cloner_2( char* new_buf , char *org_buf , struct via_b
        {
            new_vp = (struct via_param*)(*p);
            memcpy( new_vp , vp , sizeof(struct via_param));
-           (*p) += sizeof(struct via_param);
+           (*p) += ROUND4(sizeof(struct via_param));
            new_vp->name.s = translate_pointer( new_buf , org_buf , vp->name.s );
            new_vp->value.s = translate_pointer( new_buf , org_buf , vp->value.s );
 

+ 2 - 2
modules/tm/test/kill_sem.sh

@@ -1,4 +1,4 @@
 #!/bin/sh
 
-ipcrm -s `ipcs -s |grep $(whoami) | awk '{ print $2; }'`
-ipcrm -m `ipcs -m | grep $(whoami) |awk '{ print $2; }'` 
+ipcrm sem `ipcs -s |grep $(whoami) | awk '{ print $2; }'`
+ipcrm shm `ipcs -m | grep $(whoami) |awk '{ print $2; }'`