Browse Source

- changed malloc status to LOG(L_INFO)
- fixed a malloc(0) in tm/sip_msg.c/*cloner (new_uri)

Andrei Pelinescu-Onciul 24 years ago
parent
commit
9dfa5dc402
8 changed files with 142 additions and 14 deletions
  1. 1 1
      Makefile
  2. 6 1
      main.c
  3. 6 3
      modules/tm/sip_msg.c
  4. 9 8
      q_malloc.c
  5. 9 0
      test/req-tm1.sip
  6. 58 0
      test/t_debug2.cfg
  7. 50 0
      test/t_debug3.cfg
  8. 3 1
      udp_server.c

+ 1 - 1
Makefile

@@ -35,7 +35,7 @@ NAME=ser
 #                  twice, trying to free a pointer alloc'ed with a different
 #                  malloc etc.)
 DEFS=-DNOCR -DMACROEATER -DDNS_IP_HACK  -DSHM_MEM \
-	 -DPKG_MALLOC -DDBG_QM_MALLOC 
+	 -DPKG_MALLOC -DNO_DEBUG -DDBG_QM_MALLOC 
 #-DEXTRA_DEBUG
 # -DUSE_SHM_MEM
 #-DNO_DEBUG 

+ 6 - 1
main.c

@@ -330,11 +330,14 @@ static void sig_usr(int signo)
 		if (is_main)
 			destroy_modules();
 #ifdef PKG_MALLOC
+		LOG(L_INFO, "Memory status (pkg):\n");
 		pkg_status();
 #endif
 #ifdef SHM_MEM
-		if (is_main)
+		if (is_main){
+			LOG(L_INFO, "Memory status (shm):\n");
 			shm_status();
+		}
 #endif
 #ifdef SHM_MEM
 		if (is_main)
@@ -346,9 +349,11 @@ static void sig_usr(int signo)
 		dump_all_statistic();
 #endif
 #ifdef PKG_MALLOC
+		LOG(L_INFO, "Memory status (pkg):\n");
 		pkg_status();
 #endif
 #ifdef SHM_MEM
+		LOG(L_INFO, "Memory status (shm):\n");
 		shm_status();
 #endif
 	}

+ 6 - 3
modules/tm/sip_msg.c

@@ -62,9 +62,12 @@ struct sip_msg* sip_msg_cloner( struct sip_msg *org_msg )
     }
 
     /* new_uri  ( str type )*/
-    if (!(new_msg->new_uri.s = (char*)sh_malloc( org_msg->new_uri.len )))
-	goto error;
-    memcpy( new_msg->new_uri.s , org_msg->new_uri.s , org_msg->new_uri.len );
+	if (org_msg->new_uri.s){ 
+		if (!(new_msg->new_uri.s = (char*)sh_malloc( org_msg->new_uri.len )))
+			goto error;
+		memcpy( new_msg->new_uri.s , org_msg->new_uri.s ,
+				org_msg->new_uri.len );
+	}
 
     /* add_rm ( struct lump* )  -> have to be changed!!!!!!! */
     new_msg->add_rm  = 0;

+ 9 - 8
q_malloc.c

@@ -258,19 +258,20 @@ void qm_status(struct qm_block* qm)
 	struct qm_frag* f;
 	int i;
 
-	DBG("qm_status (%x):\n", qm);
-	DBG(" heap size= %d\n", qm->size);
-	DBG(" used= %d, used+overhead=%d, free=%d\n",
+	LOG(L_INFO, "qm_status (%x):\n", qm);
+	LOG(L_INFO, " heap size= %d\n", qm->size);
+	LOG(L_INFO, " used= %d, used+overhead=%d, free=%d\n",
 			qm->used, qm->real_used, qm->size-qm->real_used);
-	DBG(" max used (+overhead)= %d\n", qm->max_real_used);
+	LOG(L_INFO, " max used (+overhead)= %d\n", qm->max_real_used);
 	
-	DBG("dumping all fragments:\n");
+	LOG(L_INFO, "dumping all fragments:\n");
 	for (f=qm->first_frag, i=0;(char*)f<(char*)qm->last_frag_end;f=FRAG_NEXT(f)
 			,i++){
-		DBG("    %3d. %c  address=%x  size=%d\n", i, (f->u.is_free)?'a':'N',
+		LOG(L_INFO, "    %3d. %c  address=%x  size=%d\n", i, 
+				(f->u.is_free)?'a':'N',
 				(char*)f+sizeof(struct qm_frag), f->size);
 #ifdef DBG_QM_MALLOC
-		DBG("            %s from %s: %s(%d)\n",
+		LOG(L_INFO, "            %s from %s: %s(%d)\n",
 				(f->u.is_free)?"freed":"alloc'd", f->file, f->func, f->line);
 #endif
 	}
@@ -284,7 +285,7 @@ void qm_status(struct qm_block* qm)
 				(f->u.is_free)?"freed":"alloc'd", f->file, f->func, f->line);
 #endif
 	}
-	DBG("-----------------------------\n");
+	LOG(L_INFO, "-----------------------------\n");
 }
 
 

+ 9 - 0
test/req-tm1.sip

@@ -0,0 +1,9 @@
+INVITE sip:[email protected]:5061  SIP/2.0
+Via: SIP/2.0/UDP 127.0.0.1:5062
+From:  <sip:[email protected]>
+To: <sip:[email protected]>
+Call-ID: [email protected]
+CSeq: 143 INVITE
+Contact:<sip:[email protected]>
+
+

+ 58 - 0
test/t_debug2.cfg

@@ -0,0 +1,58 @@
+debug=9          # debug level (cmd line: -dddddddddd)
+check_via=yes     # (cmd. line: -v)
+dns=on           # (cmd. line: -r)
+rev_dns=yes      # (cmd. line: -R)
+fork=no          # (cmd. line: -D)
+#children=5
+log_stderror=yes # (cmd line: -E)
+#port=5080
+#listen=192.168.99.100
+loop_checks=1
+# for more info: sip_router -h
+
+#modules
+loadmodule "modules/print/print.so"
+loadmodule "modules/tm/tm.so"
+
+route{
+	#rewritehost("iptel.org");
+	log("trying forward to uri");
+#	forward(uri:host,uri:port);
+#	forward(127.0.0.1, 5090);
+	log("after forward");
+
+	if ( t_lookup_request()) {
+		print("\nFOUND REQUEST\n");
+		if ( method=="ACK" )	{
+			log("SER: ACK received -> t_release\n");
+			t_release();
+		} else {
+			t_retransmit_reply();
+			log("SER: yet another annoying retranmission\n");
+		};
+	} else {
+		print("\nbefore add transaction\n");
+		t_add_transaction();
+		print("\nafter add transaction\n");
+		if (method=="CANCEL") {
+			log("SER: new CANCEL\n");
+			# XXX ... it wants me to put status code in ""
+			t_send_reply( "200", "glad to cancel");
+		} else {
+		print("\nELSE if method\n");
+			log("SER: new transaction\n");
+			t_send_reply("100", "trying -- your call is important to us");
+		};
+		print("\nbefore rewrite host\n");
+		rewritehost("iptel.org");
+		# XXX ... it wants me to put port nr in ""
+		#t_forward("benetnash.fokus.gmd.de", "5080" );
+		#t_forward("iptel.org", "5060" );
+		print("\nbefore forward uri\n");
+		t_forward_uri();
+		# XXX ... it doesn't like default port numbers
+		# t_forward("fox.iptel.org" );
+		# XXX t_forward_uri ... not done yet
+	};
+		
+}

+ 50 - 0
test/t_debug3.cfg

@@ -0,0 +1,50 @@
+debug=9          # debug level (cmd line: -dddddddddd)
+check_via=yes     # (cmd. line: -v)
+dns=on           # (cmd. line: -r)
+rev_dns=yes      # (cmd. line: -R)
+fork=no          # (cmd. line: -D)
+#children=5
+log_stderror=yes # (cmd line: -E)
+#port=5080
+#listen=192.168.99.100
+loop_checks=1
+# for more info: sip_router -h
+
+#modules
+loadmodule "modules/print/print.so"
+loadmodule "modules/tm/tm.so"
+
+route{
+	#rewritehost("iptel.org");
+#	forward(uri:host,uri:port);
+#	forward(127.0.0.1, 5090);
+
+	if ( t_lookup_request()) {
+		if ( method=="ACK" )	{
+			log("SER: ACK received -> t_release\n");
+			t_release();
+		} else {
+			t_retransmit_reply();
+#			log("SER: yet another annoying retranmission\n");
+		};
+	} else {
+		t_add_transaction();
+		if (method=="CANCEL") {
+			log("SER: new CANCEL\n");
+			# XXX ... it wants me to put status code in ""
+			t_send_reply( "200", "glad to cancel");
+		} else {
+			log("SER: new transaction\n");
+			t_send_reply("100", "trying -- your call is important to us");
+		};
+#		rewritehost("iptel.org");
+		# XXX ... it wants me to put port nr in ""
+		#t_forward("benetnash.fokus.gmd.de", "5080" );
+		#t_forward("iptel.org", "5060" );
+		t_forward_uri();
+		# XXX ... it doesn't like default port numbers
+		# t_forward("fox.iptel.org" );
+		# XXX t_forward_uri ... not done yet
+	};
+		
+}

+ 3 - 1
udp_server.c

@@ -240,7 +240,9 @@ again:
 	n=sendto(udp_sock, buf, len, 0, to, tolen);
 /*	n=sendto(udp_sock, buf, len, 0, &a2, sizeof(struct sockaddr_in) );*/
 	if (n==-1){
-		LOG(L_ERR, "ERROR: udp_send: sendto: %s\n", strerror(errno));
+		LOG(L_ERR, "ERROR: udp_send: sendto(sock,%x,%d,0,%x,%d): %s(%d)\n",
+				buf,len,to,tolen,
+				strerror(errno),errno);
 		if (errno==EINTR) goto again;
 		if (errno==EINVAL) LOG(L_CRIT,"CRITICAL: invalid sendtoparameters\n"
 			"one possible reason is the server is bound to localhost and\n"