You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(2) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(12) |
Feb
(9) |
Mar
(8) |
Apr
(5) |
May
(10) |
Jun
(13) |
Jul
(7) |
Aug
(15) |
Sep
(17) |
Oct
(23) |
Nov
(51) |
Dec
(9) |
2007 |
Jan
(27) |
Feb
(11) |
Mar
(14) |
Apr
(21) |
May
(55) |
Jun
(15) |
Jul
(16) |
Aug
(8) |
Sep
(15) |
Oct
(24) |
Nov
(19) |
Dec
(47) |
2008 |
Jan
(33) |
Feb
(1) |
Mar
(14) |
Apr
(10) |
May
(8) |
Jun
(33) |
Jul
(33) |
Aug
(10) |
Sep
(13) |
Oct
(10) |
Nov
(1) |
Dec
(11) |
2009 |
Jan
(3) |
Feb
|
Mar
(8) |
Apr
(5) |
May
(1) |
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(20) |
2013 |
Jan
(3) |
Feb
(20) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jonatan J. K. S. <jon...@c3...> - 2019-07-16 18:06:13
|
Hi Everyone. I write you cause I´d like to kown what kind of hardware is need it to install sipp and send around 2000 concurrents call with RTP and 200 CPS aproximatly- Someone could help me with this doubt?? Regards, -- Jonatan Kuiman *Voice Operations* Tel. + 52 (55) 5147 8040 ext 1372 Movil +52 (55) 5584003133 e-mail jon...@c3... <lui...@c3...> Paseo de las Palmas # 340 - PH Col. Lomas de Chapultepec México, D.F. 11000 <http://www.c3ntro.com/> |
From: <arc...@us...> - 2013-02-15 00:45:51
|
Revision: 645 http://sourceforge.net/p/sipp/code/645 Author: arcady-91 Date: 2013-02-15 00:45:48 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Some enhancements to autotools Signed-off-by: Peter Lemenkov <lem...@gm...> Modified Paths: -------------- sipp/trunk/Makefile.am Modified: sipp/trunk/Makefile.am =================================================================== --- sipp/trunk/Makefile.am 2013-02-15 00:45:39 UTC (rev 644) +++ sipp/trunk/Makefile.am 2013-02-15 00:45:48 UTC (rev 645) @@ -1,15 +1,20 @@ bin_PROGRAMS = sipp +EXTRA_DIST = fortune.cpp pcap tools LICENSE.txt MEDIA.txt README.txt THANKS sipp.dtd + if HAVE_OPENSSL DEFS += -D_USE_OPENSSL -ssl_SOURCES = sslinit.c \ +ssl_SOURCES = sslcommon.h \ + sslinit.c \ sslthreadsafe.c endif if HAVE_PCAP DEFS += -DPCAPPLAY pcap_SOURCES = prepare_pcap.c \ - send_packets.c + prepare_pcap.h \ + send_packets.c \ + send_packets.h endif if HAVE_UNITTEST @@ -20,31 +25,48 @@ DEFS += -DUSE_SCTP endif -sipp_SOURCES = comp.c \ - xp_parser.c \ - actions.cpp \ +sipp_SOURCES = actions.cpp \ + auth.c \ + comp.c \ + comp.h \ call.cpp \ deadcall.cpp \ infile.cpp \ + infile.hpp \ listener.cpp \ + listener.hpp \ + md5.c \ + md5.h \ message.cpp \ + message.hpp \ + milenage.c \ + milenage.h \ opentask.cpp \ + opentask.hpp \ reporttask.cpp \ + reporttask.hpp \ + rijndael.c \ + rijndael.h \ scenario.cpp \ + scenario.hpp \ screen.cpp \ + screen.hpp \ sipp.cpp \ + sipp.hpp \ socketowner.cpp \ + socketowner.hpp \ stat.cpp \ + stat.hpp \ task.cpp \ + task.hpp \ variables.cpp \ + variables.hpp \ watchdog.cpp \ - md5.c \ - auth.c \ - milenage.c \ - rijndael.c \ + watchdog.hpp \ + xp_parser.c \ + xp_parser.h \ $(ssl_SOURCES) \ $(pcap_SOURCES) sipp_LDADD = @LIBOBJS@ -# fortune.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:45:43
|
Revision: 644 http://sourceforge.net/p/sipp/code/644 Author: arcady-91 Date: 2013-02-15 00:45:39 +0000 (Fri, 15 Feb 2013) Log Message: ----------- A better fix for compilation with -D_FORTIFY_SOURCE=2 gcc parameter See rhbz #559620 for details: https://bugzilla.redhat.com/559620 Signed-off-by: Peter Lemenkov <lem...@gm...> Modified Paths: -------------- sipp/trunk/auth.c Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:45:28 UTC (rev 643) +++ sipp/trunk/auth.c 2013-02-15 00:45:39 UTC (rev 644) @@ -226,11 +226,10 @@ md5_byte_t resp[MD5_HASH_SIZE], body[MD5_HASH_SIZE]; unsigned char ha1_hex[HASH_HEX_SIZE+1], ha2_hex[HASH_HEX_SIZE+1]; unsigned char resp_hex[HASH_HEX_SIZE+1], body_hex[HASH_HEX_SIZE+1]; - char tmp[MAX_HEADER_LEN], authtype[16], cnonce[32], nc[32], opaque[64]; + char tmp[MAX_HEADER_LEN], tmp2[MAX_HEADER_LEN], authtype[16], cnonce[32], nc[32], opaque[64]; static unsigned int mync = 1; int has_opaque = 0; md5_state_t Md5Ctx; - char tmpbuf[2048]; // Extract the Auth Type - If not present, using 'none' cnonce[0] = '\0'; @@ -291,11 +290,11 @@ hashToHex(&ha2[0], &ha2_hex[0]); if (cnonce[0] != '\0') { - snprintf(tmpbuf, 2048, ",cnonce=\"%s\",nc=%s,qop=%s",cnonce,nc,authtype); - strcat(result,tmpbuf); + snprintf(tmp2, sizeof(tmp2), ",cnonce=\"%s\",nc=%s,qop=%s",cnonce,nc,authtype); + strcat(result,tmp2); } - snprintf(tmpbuf, 2048, ",uri=\"%s\"",tmp); - strcat(result,tmpbuf); + snprintf(tmp2, sizeof(tmp2), ",uri=\"%s\"",tmp); + strcat(result,tmp2); // Extract the Nonce if (!getAuthParameter("nonce", auth, tmp, sizeof(tmp))) { @@ -320,12 +319,12 @@ md5_finish(&Md5Ctx, resp); hashToHex(&resp[0], &resp_hex[0]); - snprintf(tmpbuf, 2048, ",nonce=\"%s\",response=\"%s\",algorithm=%s",tmp,resp_hex,algo); - strcat(result,tmpbuf); + snprintf(tmp2, sizeof(tmp2), ",nonce=\"%s\",response=\"%s\",algorithm=%s",tmp,resp_hex,algo); + strcat(result,tmp2); if (has_opaque) { - snprintf(tmpbuf, 2048, ",opaque=\"%s\"",opaque); - strcat(result,tmpbuf); + snprintf(tmp2, sizeof(tmp2), ",opaque=\"%s\"",opaque); + strcat(result,tmp2); } return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:45:11
|
Revision: 642 http://sourceforge.net/p/sipp/code/642 Author: arcady-91 Date: 2013-02-15 00:45:08 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fix bug where SIPp uses 100% CPU when hitting call limit Modified Paths: -------------- sipp/trunk/opentask.cpp Modified: sipp/trunk/opentask.cpp =================================================================== --- sipp/trunk/opentask.cpp 2013-02-15 00:44:58 UTC (rev 641) +++ sipp/trunk/opentask.cpp 2013-02-15 00:45:08 UTC (rev 642) @@ -54,16 +54,24 @@ } unsigned int opentask::wake() { + float ms_per_call; if (paused) { return 0; } else if (users >= 0) { /* We need to wait until another call is terminated. */ return 0; } else { - /* We need to compute when the next call is going to be opened. */ - return (unsigned long) - MAX(last_rate_change_time + (calls_since_last_rate_change / - MAX(rate/MAX(rate_period_ms, 1), 1)), 1); + ms_per_call = rate_period_ms/MAX(rate, 1); + /* We need to compute when the next call is going to be opened. + * The current time is the time when the rate last changed, plus + * the number of calls since then multiplied by the number of milliseconds + * between each call. + * + * We then add the number of milliseconds between each call to that + * figure.*/ + + return (unsigned long) last_rate_change_time + + (calls_since_last_rate_change * ms_per_call) + ms_per_call; } } @@ -96,11 +104,20 @@ calls_to_open = stop_after - total_calls; } + /* We base our scheduling on the number of calls made since the last rate + * change, but if we reduce the number of calls we open in order to keep + * within the limit, that throws this calculation off and brings CPU% up to + * 100%. To avoid this, we increment calls_since_last_rate_change here. */ + + calls_since_last_rate_change += calls_to_open; + if (open_calls_allowed && (current_calls + calls_to_open > open_calls_allowed)) { + calls_to_open = open_calls_allowed - current_calls; + } - if (calls_to_open < 0) { + if (calls_to_open <= 0) { calls_to_open = 0; } @@ -123,8 +140,6 @@ ERROR("Out of memory allocating call!"); } - calls_since_last_rate_change++; - outbound_congestion = false; if (!multisocket) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:45:01
|
Revision: 641 http://sourceforge.net/p/sipp/code/641 Author: arcady-91 Date: 2013-02-15 00:44:58 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Small fixes (various) Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/sipp.cpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:53 UTC (rev 640) +++ sipp/trunk/call.cpp 2013-02-15 00:44:58 UTC (rev 641) @@ -44,13 +44,13 @@ #include <iostream> #include <sys/types.h> #include <sys/wait.h> +#include <assert.h> #ifdef PCAPPLAY #include "send_packets.h" #endif #include "sipp.hpp" #include "deadcall.hpp" -#include "assert.h" #define callDebug(args...) do { if (useCallDebugf) { _callDebug( args ); } } while (0) @@ -476,11 +476,7 @@ putUserVars = true; } if (call_scenario->allocVars->size > 0) { - if (userVars) { M_callVariableTable = new VariableTable(userVars, call_scenario->allocVars->size); - } else { - M_callVariableTable = new VariableTable(userVars, call_scenario->allocVars->size); - } } else if (userVars->size > 0) { M_callVariableTable = userVars->getTable(); } else if (globalVariables->size > 0) { @@ -1207,7 +1203,7 @@ } if(!(last_request_uri = (char *) malloc(tmp_len+1))) ERROR("Cannot allocate !\n"); - memset(last_request_uri, 0, sizeof(last_request_uri)); + memset(last_request_uri, 0, sizeof(*last_request_uri)); if(tmp && (tmp_len > 0)){ strncpy(last_request_uri, tmp, tmp_len); } Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-15 00:44:53 UTC (rev 640) +++ sipp/trunk/sipp.cpp 2013-02-15 00:44:58 UTC (rev 641) @@ -911,7 +911,7 @@ if( creationMode == MODE_SERVER) { sprintf(temp_str, "%llu calls", display_scenario->stats->GetStat(CStat::CPT_C_CurrentCall)); } else { - sprintf(temp_str, "%llu calls (limit %d)", display_scenario->stats->GetStat(CStat::CPT_C_CurrentCall), open_calls_allowed); + sprintf(temp_str, "%llu calls (limit %u)", display_scenario->stats->GetStat(CStat::CPT_C_CurrentCall), open_calls_allowed); } fprintf(f," %-38s Peak was %llu calls, after %llu s" SIPP_ENDL, temp_str, @@ -1066,19 +1066,11 @@ fprintf(f, " "); } - if(curmsg->retrans_delay) { fprintf(f,"%-9ld %-9ld %-9ld %-9ld" , curmsg->nb_recv, curmsg->nb_recv_retrans, curmsg->nb_timeout, curmsg->nb_unexp); - } else { - fprintf(f,"%-9ld %-9ld %-9ld %-9ld" , - curmsg -> nb_recv, - curmsg -> nb_recv_retrans, - curmsg -> nb_timeout, - curmsg -> nb_unexp); - } } else if (curmsg -> pause_distribution || (curmsg -> pause_variable != -1)) { char *desc = curmsg->pause_desc; @@ -1196,9 +1188,9 @@ if(SendingMessage *src = curmsg -> send_scheme) { if(header) { if (src->isResponse()) { - sprintf(temp_str, "%d_%d_", index, src->getCode()); + sprintf(temp_str, "%u_%d_", index, src->getCode()); } else { - sprintf(temp_str, "%d_%s_", index, src->getMethod()); + sprintf(temp_str, "%u_%s_", index, src->getMethod()); } fprintf(f, "%sSent%s", temp_str, stat_delimiter); @@ -1263,7 +1255,7 @@ curmsg -> pause_variable) { if(header) { - sprintf(temp_str, "%d_Pause_", index); + sprintf(temp_str, "%u_Pause_", index); fprintf(f, "%sSessions%s", temp_str, stat_delimiter); fprintf(f, "%sUnexp%s", temp_str, stat_delimiter); } else { @@ -1274,7 +1266,7 @@ /* No output. */ } else if(curmsg -> M_type == MSG_TYPE_RECVCMD) { if(header) { - sprintf(temp_str, "%d_RecvCmd", index); + sprintf(temp_str, "%u_RecvCmd", index); fprintf(f, "%s%s", temp_str, stat_delimiter); fprintf(f, "%s_Timeout%s", temp_str, stat_delimiter); } else { @@ -1283,7 +1275,7 @@ } } else if(curmsg -> M_type == MSG_TYPE_SENDCMD) { if(header) { - sprintf(temp_str, "%d_SendCmd", index); + sprintf(temp_str, "%u_SendCmd", index); fprintf(f, "%s%s", temp_str, stat_delimiter); } else { fprintf(f, "%lu%s", curmsg->M_nbCmdSent, stat_delimiter); @@ -1378,10 +1370,9 @@ void print_tdm_map() { - int interval = 0; int i = 0; int in_use = 0; - interval = (tdm_map_a+1) * (tdm_map_b+1) * (tdm_map_c+1); + int interval = (tdm_map_a+1) * (tdm_map_b+1) * (tdm_map_c+1); printf("TDM Circuits in use:" SIPP_ENDL); while (i<interval) { @@ -1421,21 +1412,21 @@ switch(curmsg->M_type) { case MSG_TYPE_RECV: - printf("=> Message[%d] (Receive Message) - " + printf("=> Message[%u] (Receive Message) - " "[%d] action(s) defined :" SIPP_ENDL, i, actions->getActionSize()); printed++; break; case MSG_TYPE_RECVCMD: - printf("=> Message[%d] (Receive Command Message) - " + printf("=> Message[%u] (Receive Command Message) - " "[%d] action(s) defined :" SIPP_ENDL, i, actions->getActionSize()); printed++; break; default: - printf("=> Message[%d] - [%d] action(s) defined :" SIPP_ENDL, + printf("=> Message[%u] - [%d] action(s) defined :" SIPP_ENDL, i, actions->getActionSize()); printed++; @@ -2042,7 +2033,14 @@ } } else { int command_len = strlen(command_buffer); - command_buffer = (char *)realloc(command_buffer, command_len + 2); + char *realloc_ptr = (char *)realloc(command_buffer, command_len + 2); + if (realloc_ptr) { + command_buffer = realloc_ptr; + } else { + free(command_buffer); + ERROR("Out of memory"); + return; + } command_buffer[command_len++] = c; command_buffer[command_len] = '\0'; putchar(c); @@ -2050,7 +2048,14 @@ } } else if (c == 'c') { command_mode = 1; - command_buffer = (char *)realloc(command_buffer, 1); + char *realloc_ptr = (char *)realloc(command_buffer, 1); + if (realloc_ptr) { + command_buffer = realloc_ptr; + } else { + free(command_buffer); + ERROR("Out of memory"); + return; + } command_buffer[0] = '\0'; printf("Command: "); fflush(stdout); @@ -2121,11 +2126,9 @@ ptr ++; - while((*ptr) && - (*ptr != ' ') && + while((*ptr != ' ') && (*ptr != ';') && (*ptr != '\t') && - (*ptr != '\t') && (*ptr != '\r') && (*ptr != '\n') && (*ptr)) { @@ -3772,7 +3775,7 @@ /* Update the clock. */ getmilliseconds(); /* Receive incoming messages */ - pollset_process(running_tasks->size() == 0); + pollset_process(running_tasks->empty()); } } @@ -4151,9 +4154,7 @@ } static struct sipp_socket *sipp_allocate_socket(bool use_ipv6, int transport, int fd, int accepting) { - struct sipp_socket *ret = NULL; - - ret = (struct sipp_socket *)malloc(sizeof(struct sipp_socket)); + struct sipp_socket *ret = (struct sipp_socket *)malloc(sizeof(struct sipp_socket)); if (!ret) { ERROR("Could not allocate a sipp_socket structure."); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:57
|
Revision: 640 http://sourceforge.net/p/sipp/code/640 Author: arcady-91 Date: 2013-02-15 00:44:53 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Changing alloca to variable-length array Modified Paths: -------------- sipp/trunk/sipp.cpp Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-15 00:44:47 UTC (rev 639) +++ sipp/trunk/sipp.cpp 2013-02-15 00:44:53 UTC (rev 640) @@ -3781,7 +3781,7 @@ void rtp_echo_thread (void * param) { - char *msg = (char*)alloca(media_bufsize); + char msg[media_bufsize]; size_t nr, ns; sipp_socklen_t len; struct sockaddr_storage remote_rtp_addr; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:50
|
Revision: 639 http://sourceforge.net/p/sipp/code/639 Author: arcady-91 Date: 2013-02-15 00:44:47 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Making auth_body const to remove warning Modified Paths: -------------- sipp/trunk/auth.c sipp/trunk/call.cpp sipp/trunk/call.hpp Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:44:40 UTC (rev 638) +++ sipp/trunk/auth.c 2013-02-15 00:44:47 UTC (rev 639) @@ -78,13 +78,13 @@ int createAuthHeaderMD5(char * user, char * password, int password_len, char * method, - char * uri, char * msgbody, char * auth, + char * uri, const char * msgbody, char * auth, char * algo, char * result); int createAuthHeaderAKAv1MD5(char * user, char * OP, char * AMF, char * K, char * method, - char * uri, char * msgbody, char * auth, char *algo, + char * uri, const char * msgbody, char * auth, char *algo, char * result); @@ -140,7 +140,7 @@ } int createAuthHeader(char * user, char * password, char * method, - char * uri, char * msgbody, char * auth, + char * uri, const char * msgbody, char * auth, char * aka_OP, char * aka_AMF, char * aka_K, @@ -213,7 +213,7 @@ } int createAuthHeaderMD5(char * user, char * password, int password_len, char * method, - char * uri, char * msgbody, char * auth, + char * uri, const char * msgbody, char * auth, char * algo, char * result) { md5_byte_t ha1[MD5_HASH_SIZE], ha2[MD5_HASH_SIZE]; @@ -528,7 +528,7 @@ char * aka_AMF, char * aka_K, char * method, - char * uri, char * msgbody, char * auth, char *algo, + char * uri, const char * msgbody, char * auth, char *algo, char * result) { char tmp[MAX_HEADER_LEN]; Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:40 UTC (rev 638) +++ sipp/trunk/call.cpp 2013-02-15 00:44:47 UTC (rev 639) @@ -2439,7 +2439,7 @@ } /* Need the body for length and auth-int calculation */ char *body; - char *auth_body = NULL; + const char *auth_body = NULL; if (length_marker || auth_marker) { body = strstr(msg_buffer, "\r\n\r\n"); if (body) { Modified: sipp/trunk/call.hpp =================================================================== --- sipp/trunk/call.hpp 2013-02-15 00:44:40 UTC (rev 638) +++ sipp/trunk/call.hpp 2013-02-15 00:44:47 UTC (rev 639) @@ -52,9 +52,9 @@ #define RTCHECK_LOOSE 2 #ifdef __HPUX - extern int createAuthHeader(char * user, char * password, char * method, char * uri, char * msgbody, char * auth, char * aka_OP, char * aka_AMF, char * aka_K, char * result); + extern int createAuthHeader(char * user, char * password, char * method, char * uri, const char * msgbody, char * auth, char * aka_OP, char * aka_AMF, char * aka_K, char * result); #else - extern "C" { extern int createAuthHeader(char * user, char * password, char * method, char * uri, char * msgbody, char * auth, char * aka_OP, char * aka_AMF, char * aka_K, char * result); } + extern "C" { extern int createAuthHeader(char * user, char * password, char * method, char * uri, const char * msgbody, char * auth, char * aka_OP, char * aka_AMF, char * aka_K, char * result); } extern "C" { int verifyAuthHeader(char * user, char * password, char * method, char * auth); } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:43
|
Revision: 638 http://sourceforge.net/p/sipp/code/638 Author: arcady-91 Date: 2013-02-15 00:44:40 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Adding checks after realloc Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/call.hpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:31 UTC (rev 637) +++ sipp/trunk/call.cpp 2013-02-15 00:44:40 UTC (rev 638) @@ -1531,7 +1531,14 @@ last_send_index = curmsg->index; last_send_len = msgLen; - last_send_msg = (char *) realloc(last_send_msg, msgLen+1); + realloc_ptr = (char *) realloc(last_send_msg, msgLen+1); + if (realloc_ptr) { + last_send_msg = realloc_ptr; + } else { + free(last_send_msg); + ERROR("Out of memory!"); + return false; + } memcpy(last_send_msg, msg_snd, msgLen); last_send_msg[msgLen] = '\0'; @@ -1920,7 +1927,15 @@ } // usage of last_ keywords => for call aborting - last_recv_msg = (char *) realloc(last_recv_msg, strlen(msg) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(msg) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + strcpy(last_recv_msg, msg); computeStat(CStat::E_CALL_FAILED); @@ -3272,8 +3287,16 @@ if (call_scenario->messages[search_index] -> bShouldRecordRoutes && NULL == dialog_route_set ) { - next_req_url = (char*) realloc(next_req_url, MAX_HEADER_LEN); + realloc_ptr = (char*) realloc(next_req_url, MAX_HEADER_LEN); + if (realloc_ptr) { + next_req_url = realloc_ptr; + } else { + free(next_req_url); + ERROR("Out of memory!"); + return false; + } + char rr[MAX_HEADER_LEN]; memset(rr, 0, sizeof(rr)); strcpy(rr, get_header_content(msg, (char*)"Record-Route:")); @@ -3316,7 +3339,16 @@ ERROR("Couldn't find 'Proxy-Authenticate' or 'WWW-Authenticate' in 401 or 407!"); } - dialog_authentication = (char *) realloc(dialog_authentication, strlen(auth) + 2); + realloc_ptr = (char *) realloc(dialog_authentication, strlen(auth) + 2); + if (realloc_ptr) { + dialog_authentication = realloc_ptr; + } else { + free(dialog_authentication); + ERROR("Out of memory!"); + return false; + } + + sprintf(dialog_authentication, "%s", auth); /* Store the code of the challenge for building the proper header */ @@ -3334,7 +3366,16 @@ last_recv_index = search_index; last_recv_hash = cookie; callDebug("Set Last Recv Hash: %u (recv index %d)\n", last_recv_hash, last_recv_index); - last_recv_msg = (char *) realloc(last_recv_msg, strlen(msg) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(msg) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, msg); /* If this was a mandatory message, or if there is an explicit next label set @@ -3955,7 +3996,15 @@ } void call::setLastMsg(const char *msg) { - last_recv_msg = (char *) realloc(last_recv_msg, strlen(msg) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(msg) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return; + } + strcpy(last_recv_msg, msg); } @@ -3969,7 +4018,16 @@ switch (P_case) { case E_AM_UNEXP_BYE: // response for an unexpected BYE // usage of last_ keywords - last_recv_msg = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, P_recv); // The BYE is unexpected, count it @@ -3997,7 +4055,16 @@ case E_AM_UNEXP_CANCEL: // response for an unexpected cancel // usage of last_ keywords - last_recv_msg = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, P_recv); // The CANCEL is unexpected, count it @@ -4026,7 +4093,16 @@ case E_AM_PING: // response for a random ping // usage of last_ keywords - last_recv_msg = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, P_recv); if (default_behaviors & DEFAULT_BEHAVIOR_PINGREPLY) { @@ -4060,7 +4136,17 @@ strcpy(old_last_recv_msg,last_recv_msg); } // usage of last_ keywords - last_recv_msg = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(P_recv) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + free(old_last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, P_recv); WARNING("Automatic response mode for an unexpected INFO, UPDATE or NOTIFY for call: %s", (id==NULL)?"none":id); @@ -4068,7 +4154,16 @@ // restore previous last msg if (last_recv_msg_saved == true) { - last_recv_msg = (char *) realloc(last_recv_msg, strlen(old_last_recv_msg) + 1); + realloc_ptr = (char *) realloc(last_recv_msg, strlen(old_last_recv_msg) + 1); + if (realloc_ptr) { + last_recv_msg = realloc_ptr; + } else { + free(last_recv_msg); + ERROR("Out of memory!"); + return false; + } + + strcpy(last_recv_msg, old_last_recv_msg); if (old_last_recv_msg != NULL) { free(old_last_recv_msg); Modified: sipp/trunk/call.hpp =================================================================== --- sipp/trunk/call.hpp 2013-02-15 00:44:31 UTC (rev 637) +++ sipp/trunk/call.hpp 2013-02-15 00:44:40 UTC (rev 638) @@ -129,6 +129,7 @@ int msg_index; int zombie; + char * realloc_ptr; /* Last message sent from scenario step (retransmitions do not * change this index. Only message sent from the scenario This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:34
|
Revision: 637 http://sourceforge.net/p/sipp/code/637 Author: arcady-91 Date: 2013-02-15 00:44:31 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixing overlapping values in sprintf Modified Paths: -------------- sipp/trunk/auth.c sipp/trunk/call.cpp Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:44:25 UTC (rev 636) +++ sipp/trunk/auth.c 2013-02-15 00:44:31 UTC (rev 637) @@ -631,7 +631,8 @@ } auts_hex[AUTS64LEN-1]=0; - sprintf(result, "%s,auts=\"%s\"",result,auts_hex); + sprintf(tmp, "%s,auts=\"%s\"",result,auts_hex); + strcat(result,tmp); } free(nonce); return 1; Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:25 UTC (rev 636) +++ sipp/trunk/call.cpp 2013-02-15 00:44:31 UTC (rev 637) @@ -691,18 +691,23 @@ /* Dump call info to error log. */ void call::dump() { char s[MAX_HEADER_LEN]; + char tmpbuf[MAX_HEADER_LEN]; sprintf(s, "%s: State %d", id, msg_index); if (next_retrans) { - sprintf(s, "%s (next retrans %u)", s, next_retrans); + snprintf(tmpbuf, 64, "%s (next retrans %u)", s, next_retrans); + strcat(s, tmpbuf); } if (paused_until) { - sprintf(s, "%s (paused until %u)", s, paused_until); + snprintf(tmpbuf, 64, "%s (paused until %u)", s, paused_until); + strcat(s, tmpbuf); } if (recv_timeout) { - sprintf(s, "%s (recv timeout %u)", s, recv_timeout); + snprintf(tmpbuf, 64, "%s (recv timeout %u)", s, recv_timeout); + strcat(s, tmpbuf); } if (send_timeout) { - sprintf(s, "%s (send timeout %u)", s, send_timeout); + snprintf(tmpbuf, 64, "%s (send timeout %u)", s, send_timeout); + strcat(s, tmpbuf); } WARNING("%s", s); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:27
|
Revision: 636 http://sourceforge.net/p/sipp/code/636 Author: arcady-91 Date: 2013-02-15 00:44:25 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixed memory leak Modified Paths: -------------- sipp/trunk/auth.c Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:44:19 UTC (rev 635) +++ sipp/trunk/auth.c 2013-02-15 00:44:25 UTC (rev 636) @@ -588,6 +588,7 @@ /* compute XMAC */ f1(k,rnd,sqn,(unsigned char *) aka_AMF,xmac,op); if (memcmp(mac,xmac,MACLEN)!=0) { + free(nonce); sprintf(result,"createAuthHeaderAKAv1MD5 : MAC != eXpectedMAC -> Server might not know the secret (man-in-the-middle attack?) \n"); return 0; } @@ -603,6 +604,7 @@ resuf = createAuthHeaderMD5(user, (char *) res, RESLEN, method, uri, msgbody, auth, algo, result); if (resuf == 0) { sprintf(result,"createAuthHeaderAKAv1MD5 : Unexpected return value from createAuthHeaderMD5\n"); + free(nonce); return 0; } } else { @@ -617,6 +619,7 @@ resuf = createAuthHeaderMD5(user,"",0,method,uri,msgbody,auth,algo,result); if (resuf == 0) { sprintf(result,"createAuthHeaderAKAv1MD5 : Unexpected return value from createAuthHeaderMD5\n"); + free(nonce); return 0; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:22
|
Revision: 635 http://sourceforge.net/p/sipp/code/635 Author: arcady-91 Date: 2013-02-15 00:44:19 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixed warning when returning in call.cpp Modified Paths: -------------- sipp/trunk/call.cpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:13 UTC (rev 634) +++ sipp/trunk/call.cpp 2013-02-15 00:44:19 UTC (rev 635) @@ -232,7 +232,7 @@ if (!end) { free(my_msg); ERROR("get_remote_port_media: no CRLF found"); - return; + return 0; } *end = '\0'; memset(number, 0, sizeof(number)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:16
|
Revision: 634 http://sourceforge.net/p/sipp/code/634 Author: arcady-91 Date: 2013-02-15 00:44:13 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixed syntax error in xp_parser.c Modified Paths: -------------- sipp/trunk/xp_parser.c Modified: sipp/trunk/xp_parser.c =================================================================== --- sipp/trunk/xp_parser.c 2013-02-15 00:44:07 UTC (rev 633) +++ sipp/trunk/xp_parser.c 2013-02-15 00:44:13 UTC (rev 634) @@ -189,7 +189,7 @@ xp_file[index++] = 0; xp_stack = 0; xp_position[xp_stack] = xp_file; - fclose(f) + fclose(f); return 0; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:09
|
Revision: 633 http://sourceforge.net/p/sipp/code/633 Author: arcady-91 Date: 2013-02-15 00:44:07 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Adding return to make it clear to cppcheck that my_msg is not being freed twice Modified Paths: -------------- sipp/trunk/call.cpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:44:00 UTC (rev 632) +++ sipp/trunk/call.cpp 2013-02-15 00:44:07 UTC (rev 633) @@ -232,6 +232,7 @@ if (!end) { free(my_msg); ERROR("get_remote_port_media: no CRLF found"); + return; } *end = '\0'; memset(number, 0, sizeof(number)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:44:05
|
Revision: 632 http://sourceforge.net/p/sipp/code/632 Author: arcady-91 Date: 2013-02-15 00:44:00 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixing resource leak identified by cppcheck Modified Paths: -------------- sipp/trunk/scenario.cpp sipp/trunk/xp_parser.c Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2013-02-15 00:43:54 UTC (rev 631) +++ sipp/trunk/scenario.cpp 2013-02-15 00:44:00 UTC (rev 632) @@ -1183,13 +1183,16 @@ peer_addrs[std::string(temp_peer)] = peer_host; } }else { + fclose(f); ERROR("Cannot allocate memory!\n"); + return; } } } }else{ ERROR("Can not open slave_cfg file %s\n", slave_cfg_file); } + fclose(f); } Modified: sipp/trunk/xp_parser.c =================================================================== --- sipp/trunk/xp_parser.c 2013-02-15 00:43:54 UTC (rev 631) +++ sipp/trunk/xp_parser.c 2013-02-15 00:44:00 UTC (rev 632) @@ -189,6 +189,7 @@ xp_file[index++] = 0; xp_stack = 0; xp_position[xp_stack] = xp_file; + fclose(f) return 0; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:56
|
Revision: 631 http://sourceforge.net/p/sipp/code/631 Author: arcady-91 Date: 2013-02-15 00:43:54 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Removing unused functions and fixing possible null pointer dereference Modified Paths: -------------- sipp/trunk/auth.c sipp/trunk/call.cpp sipp/trunk/prepare_pcap.c sipp/trunk/prepare_pcap.h Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:43:48 UTC (rev 630) +++ sipp/trunk/auth.c 2013-02-15 00:43:54 UTC (rev 631) @@ -522,69 +522,7 @@ } char base64[64]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -char * base64_encode_string( const char *buf, unsigned int len, int *newlen ) -{ - int i,k; - int triplets,rest; - char *out,*ptr; - triplets = len/3; - rest = len%3; - out = (char *)malloc( ( triplets * 4 ) + 8 ); - - ptr = out; - for(i=0;i<triplets*3;i+=3){ - k = (((unsigned char) buf[i])&0xFC)>>2; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i])&0x03)<<4; - k |=(((unsigned char) buf[i+1])&0xF0)>>4; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i+1])&0x0F)<<2; - k |=(((unsigned char) buf[i+2])&0xC0)>>6; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i+2])&0x3F); - *ptr=base64[k];ptr++; - } - i=triplets*3; - switch(rest){ - case 0: - break; - case 1: - k = (((unsigned char) buf[i])&0xFC)>>2; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i])&0x03)<<4; - *ptr=base64[k];ptr++; - - *ptr='=';ptr++; - - *ptr='=';ptr++; - break; - case 2: - k = (((unsigned char) buf[i])&0xFC)>>2; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i])&0x03)<<4; - k |=(((unsigned char) buf[i+1])&0xF0)>>4; - *ptr=base64[k];ptr++; - - k = (((unsigned char) buf[i+1])&0x0F)<<2; - *ptr=base64[k];ptr++; - - *ptr='=';ptr++; - break; - } - // fprintf(stderr,"base64=%.*s >> %d\n",ptr-out,out,ptr-out); - *newlen = ptr-out; - return out; -} - - - - char hexa[16]="0123456789abcdef"; int createAuthHeaderAKAv1MD5(char * user, char * aka_OP, char * aka_AMF, Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:43:48 UTC (rev 630) +++ sipp/trunk/call.cpp 2013-02-15 00:43:54 UTC (rev 631) @@ -2474,7 +2474,7 @@ sscanf(tmp,"%s", method); if (!auth_body) { - strcpy(auth_body, ""); + auth_body = ""; } /* Determine the type of credentials. */ Modified: sipp/trunk/prepare_pcap.c =================================================================== --- sipp/trunk/prepare_pcap.c 2013-02-15 00:43:48 UTC (rev 630) +++ sipp/trunk/prepare_pcap.c 2013-02-15 00:43:54 UTC (rev 631) @@ -196,10 +196,3 @@ return 0; } -void free_pkts(pcap_pkts *pkts) { - pcap_pkt *pkt_index = 0; - while (pkt_index < pkts->max) { - free(pkt_index->data); - } - free(pkts->pkts); -} Modified: sipp/trunk/prepare_pcap.h =================================================================== --- sipp/trunk/prepare_pcap.h 2013-02-15 00:43:48 UTC (rev 630) +++ sipp/trunk/prepare_pcap.h 2013-02-15 00:43:54 UTC (rev 631) @@ -74,7 +74,6 @@ int check(u_int16_t *, int); u_int16_t checksum_carry(int); int prepare_pkts(char *, pcap_pkts *); -void free_pkts(pcap_pkts *); #ifdef __cplusplus } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:51
|
Revision: 630 http://sourceforge.net/p/sipp/code/630 Author: arcady-91 Date: 2013-02-15 00:43:48 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Suppressing warnings about unused variables where appropriate Modified Paths: -------------- sipp/trunk/deadcall.cpp sipp/trunk/sipp.cpp sipp/trunk/sslthreadsafe.c sipp/trunk/stat.cpp Modified: sipp/trunk/deadcall.cpp =================================================================== --- sipp/trunk/deadcall.cpp 2013-02-15 00:43:41 UTC (rev 629) +++ sipp/trunk/deadcall.cpp 2013-02-15 00:43:48 UTC (rev 630) @@ -65,6 +65,11 @@ bool deadcall::process_incoming(char * msg, struct sockaddr_storage *src) { char buffer[MAX_HEADER_LEN]; + // We want the src parameter, as it means we have a consistent + // interface - cast it to void to suppress warnings. + + (void)src; + CStat::globalStat(CStat::E_DEAD_CALL_MSGS); setRunning(); Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-15 00:43:41 UTC (rev 629) +++ sipp/trunk/sipp.cpp 2013-02-15 00:43:48 UTC (rev 630) @@ -63,6 +63,11 @@ int passwd_call_back_routine(char *buf , int size , int flag, void *passwd) { + +/* We need the flag parameter as this is a callback with defined arguments, but + * we don't use it. Cast to void to avoid warnings. */ + (void)flag; + strncpy(buf, (char *)(passwd), size); buf[size - 1] = '\0'; return(strlen(buf)); @@ -574,6 +579,11 @@ int send_nowait_tls(SSL *ssl, const void *msg, int len, int flags) { + + /* We need the flags parameter as this is a callback with defined arguments, + * but we don't use it. Cast to void to avoid warnings. */ + (void)flags; + int initial_fd_flags; int rc; int fd; @@ -3615,6 +3625,10 @@ } void timeout_alarm(int param){ + /* We need the param parameter as this is a callback with defined arguments, + * but we don't use it. Cast to void to avoid warnings. */ + (void)param; + if (timeout_error) { ERROR("%s timed out after '%.3lf' seconds", scenario_file, ((double)clock_tick / 1000LL)); } Modified: sipp/trunk/sslthreadsafe.c =================================================================== --- sipp/trunk/sslthreadsafe.c 2013-02-15 00:43:41 UTC (rev 629) +++ sipp/trunk/sslthreadsafe.c 2013-02-15 00:43:48 UTC (rev 630) @@ -29,6 +29,14 @@ void locking_function ( int mode, int n, const char *file, int line) { + + /* file and line are needed because this is a callback with a defined + * interface, but we don't need them - cast them to void to suppress the + * warnings */ + + (void)file; + (void)line; + if (mode & CRYPTO_LOCK) MUTEX_LOCK(mutex_buf[n]); else Modified: sipp/trunk/stat.cpp =================================================================== --- sipp/trunk/stat.cpp 2013-02-15 00:43:41 UTC (rev 629) +++ sipp/trunk/stat.cpp 2013-02-15 00:43:48 UTC (rev 630) @@ -1816,6 +1816,11 @@ return time_string(value, s, len); } double CFixed::cdfInv(double percentile) { + + // We want the percentile parameter, as it means we have a consistent + // interface - cast it to void to suppress warnings. + (void)percentile; + return value; } @@ -1832,6 +1837,11 @@ return time_string(duration, s, len); } double CDefaultPause::cdfInv(double percentile) { + + // We want the percentile parameter, as it means we have a consistent + // interface - cast it to void to suppress warnings. + (void)percentile; + return duration; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:44
|
Revision: 629 http://sourceforge.net/p/sipp/code/629 Author: arcady-91 Date: 2013-02-15 00:43:41 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixing errors when compiling with -Wall -Wextra Modified Paths: -------------- sipp/trunk/auth.c sipp/trunk/call.cpp sipp/trunk/call.hpp sipp/trunk/message.cpp sipp/trunk/prepare_pcap.c sipp/trunk/scenario.cpp sipp/trunk/scenario.hpp sipp/trunk/send_packets.c sipp/trunk/sipp.cpp Modified: sipp/trunk/auth.c =================================================================== --- sipp/trunk/auth.c 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/auth.c 2013-02-15 00:43:41 UTC (rev 629) @@ -246,11 +246,11 @@ // Load in A1 md5_init(&Md5Ctx); - md5_append(&Md5Ctx, user, strlen(user)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, tmp, strlen(tmp)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, password, password_len); + md5_append(&Md5Ctx, (md5_byte_t *) user, strlen(user)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) tmp, strlen(tmp)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) password, password_len); md5_finish(&Md5Ctx, ha1); hashToHex(&ha1[0], &ha1_hex[0]); @@ -266,7 +266,7 @@ // If using Auth-Int make a hash of the body - which is NULL for REG if (stristr(authtype, "auth-int") != NULL) { md5_init(&Md5Ctx); - md5_append(&Md5Ctx, msgbody, strlen(msgbody)); + md5_append(&Md5Ctx, (md5_byte_t *) msgbody, strlen(msgbody)); md5_finish(&Md5Ctx, body); hashToHex(&body[0], &body_hex[0]); sprintf(authtype, "auth-int"); @@ -274,11 +274,11 @@ // Load in A2 md5_init(&Md5Ctx); - md5_append(&Md5Ctx, method, strlen(method)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, tmp, strlen(tmp)); + md5_append(&Md5Ctx, (md5_byte_t *) method, strlen(method)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) tmp, strlen(tmp)); if (stristr(authtype, "auth-int") != NULL) { - md5_append(&Md5Ctx, ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); md5_append(&Md5Ctx, (md5_byte_t *) &body_hex, HASH_HEX_SIZE); } md5_finish(&Md5Ctx, ha2); @@ -299,17 +299,17 @@ md5_init(&Md5Ctx); md5_append(&Md5Ctx, (md5_byte_t *) &ha1_hex, HASH_HEX_SIZE); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, tmp, strlen(tmp)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) tmp, strlen(tmp)); if (cnonce[0] != '\0') { - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, nc, strlen(nc)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, cnonce, strlen(cnonce)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, authtype, strlen(authtype)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) nc, strlen(nc)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) cnonce, strlen(cnonce)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) authtype, strlen(authtype)); } - md5_append(&Md5Ctx, ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); md5_append(&Md5Ctx, (md5_byte_t *) &ha2_hex, HASH_HEX_SIZE); md5_finish(&Md5Ctx, resp); hashToHex(&resp[0], &resp_hex[0]); @@ -335,11 +335,11 @@ // Load in A1 md5_init(&Md5Ctx); - md5_append(&Md5Ctx, user, strlen(user)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, realm, strlen(realm)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, password, password_len); + md5_append(&Md5Ctx, (md5_byte_t *) user, strlen(user)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) realm, strlen(realm)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) password, password_len); md5_finish(&Md5Ctx, ha1); hashToHex(&ha1[0], &ha1_hex[0]); @@ -351,17 +351,17 @@ // Load in A2 md5_init(&Md5Ctx); - md5_append(&Md5Ctx, method, strlen(method)); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, tmp, strlen(tmp)); + md5_append(&Md5Ctx, (md5_byte_t *) method, strlen(method)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) tmp, strlen(tmp)); md5_finish(&Md5Ctx, ha2); hashToHex(&ha2[0], &ha2_hex[0]); md5_init(&Md5Ctx); md5_append(&Md5Ctx, (md5_byte_t *) &ha1_hex, HASH_HEX_SIZE); - md5_append(&Md5Ctx, ":", 1); - md5_append(&Md5Ctx, nonce, strlen(nonce)); - md5_append(&Md5Ctx, ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); + md5_append(&Md5Ctx, (md5_byte_t *) nonce, strlen(nonce)); + md5_append(&Md5Ctx, (md5_byte_t *) ":", 1); md5_append(&Md5Ctx, (md5_byte_t *) &ha2_hex, HASH_HEX_SIZE); md5_finish(&Md5Ctx, resp); hashToHex(&resp[0], result); @@ -377,14 +377,13 @@ char nonce[MAX_HEADER_LEN]; char uri[MAX_HEADER_LEN]; char *start; - int len; if ((start = stristr(auth, "Digest")) == NULL) { WARNING("verifyAuthHeader: authentication must be digest is %s", auth); return 0; } - len = getAuthParameter("algorithm", auth, algo, sizeof(algo)); + getAuthParameter("algorithm", auth, algo, sizeof(algo)); if (algo[0] == '\0') { strcpy(algo, "MD5"); } @@ -479,7 +478,8 @@ char * base64_decode_string( const char *buf, unsigned int len, int *newlen ) { - int i,j,x1,x2,x3,x4; + unsigned long i; + int j,x1,x2,x3,x4; char *out; out = (char *)malloc( ( len * 3/4 ) + 8 ); for(i=0,j=0;i+3<len;i+=4){ @@ -598,7 +598,6 @@ int has_auts = 0, resuf = 1; char *nonce64, *nonce; int noncelen; - RESHEX resp_hex; AMF amf; OP op; RAND rnd; @@ -625,7 +624,6 @@ tmp[end - start] ='\0'; /* Compute the AKA RES */ - resp_hex[0]=0; nonce64 = tmp; nonce = base64_decode_string(nonce64,end-start,&noncelen); if (noncelen<RANDLEN+AUTNLEN) { @@ -653,7 +651,7 @@ f1(k,rnd,sqn,(unsigned char *) aka_AMF,xmac,op); if (memcmp(mac,xmac,MACLEN)!=0) { sprintf(result,"createAuthHeaderAKAv1MD5 : MAC != eXpectedMAC -> Server might not know the secret (man-in-the-middle attack?) \n"); - //return 0; + return 0; } /* Check SQN, compute AUTS if needed and authorization parameter */ @@ -665,6 +663,10 @@ has_auts = 0; /* RES has to be used as password to compute response */ resuf = createAuthHeaderMD5(user, (char *) res, RESLEN, method, uri, msgbody, auth, algo, result); + if (resuf == 0) { + sprintf(result,"createAuthHeaderAKAv1MD5 : Unexpected return value from createAuthHeaderMD5\n"); + return 0; + } } else { sqn_ms[5] = sqn_he[5] + 1; f5star(k, rnd, ak, op); @@ -674,7 +676,11 @@ has_auts = 1; /* When re-synchronisation occurs an empty password has to be used */ /* to compute MD5 response (Cf. rfc 3310 section 3.2) */ - resuf=createAuthHeaderMD5(user,"",0,method,uri,msgbody,auth,algo,result); + resuf = createAuthHeaderMD5(user,"",0,method,uri,msgbody,auth,algo,result); + if (resuf == 0) { + sprintf(result,"createAuthHeaderAKAv1MD5 : Unexpected return value from createAuthHeaderMD5\n"); + return 0; + } } if (has_auts) { /* Format data for output in the SIP message */ Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/call.cpp 2013-02-15 00:43:41 UTC (rev 629) @@ -206,7 +206,7 @@ uint16_t get_remote_port_media(const char *msg, int pattype) { const char *pattern; - const char *begin, *end; + char *begin, *end; char number[7]; if (pattype == PAT_AUDIO) { @@ -956,28 +956,6 @@ } } - -char * call::compute_cseq(char * src) -{ - static char cseq[MAX_HEADER_LEN]; - - /* If we find a CSeq in incoming msg */ - char * last_header = get_last_header("CSeq:"); - if(last_header) { - int i; - /* Extract the integer value of the last CSeq */ - last_header = strstr(last_header, ":"); - last_header++; - while(isspace(*last_header)) last_header++; - sscanf(last_header,"%d", &i); - /* Add 1 to the last CSeq value */ - sprintf(cseq, "%s%d", "CSeq: ", (i+1)); - } else { - sprintf(cseq, "%s", "CSeq: 2"); - } - return cseq; -} - char * call::get_header_field_code(const char *msg, const char * name) { static char code[MAX_HEADER_LEN]; @@ -1054,7 +1032,7 @@ do { snprintf(src_tmp, MAX_HEADER_LEN, "\n%s", name); - src = const_cast<char*>(message); /* BUG.. but won't fix right now */ + src = strdup(message); dest = last_header; while((src = strcasestr2(src, src_tmp))) { @@ -1097,6 +1075,7 @@ } /* We didn't find the header, even in its short form. */ if (short_form) { + free(src); return last_header; } @@ -1120,6 +1099,7 @@ name = "v:"; } else { /* There is no short form to try. */ + free(src); return last_header; } } @@ -1155,6 +1135,7 @@ memmove(ptr, ptr+1, strlen(ptr)); } + free(src); return start; } @@ -1434,9 +1415,6 @@ int varId = curmsg->pause_variable; pause = (int) M_callVariableTable->getVar(varId)->getDouble(); } - if (pause < 0) { - pause = 0; - } if (pause > INT_MAX) { pause = INT_MAX; } @@ -1884,6 +1862,7 @@ { char buffer[MAX_HEADER_LEN]; char *desc = buffer; + int res = 0; message *curmsg = call_scenario->messages[msg_index]; @@ -1928,7 +1907,10 @@ if (default_behaviors & DEFAULT_BEHAVIOR_ABORTUNEXP) { // if twin socket call => reset the other part here if (twinSippSocket && (msg_index > 0)) { - sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + res = sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + if (res) { + WARNING("sendCmdBuffer returned %d", res); + } } // usage of last_ keywords => for call aborting @@ -1970,8 +1952,6 @@ if ((creationMode != MODE_SERVER) && (msg_index > 0)) { if ((call_established == false) && (is_inv)) { src_recv = last_recv_msg ; - char L_msg_buffer[SIPP_MAX_MSG_SIZE]; - L_msg_buffer[0] = '\0'; // Answer unexpected errors (4XX, 5XX and beyond) with an ACK // Contributed by F. Tarek Rogers @@ -2005,8 +1985,6 @@ * because the earlier check depends on the first message being an INVITE * (although it could be something like a message message, therefore we * check that we received a message. */ - char L_msg_buffer[SIPP_MAX_MSG_SIZE]; - L_msg_buffer[0] = '\0'; sendBuffer(createSendingMessage(get_default_message("bye"), -1)); } } @@ -2018,11 +1996,10 @@ } stopListening(); - deadcall *deadcall_ptr = NULL; if (deadcall_wait && !initCall) { char reason[100]; sprintf(reason, "aborted at index %d", msg_index); - deadcall_ptr = new deadcall(id, reason); + new deadcall(id, reason); } delete this; @@ -2497,7 +2474,7 @@ sscanf(tmp,"%s", method); if (!auth_body) { - auth_body = ""; + strcpy(auth_body, ""); } /* Determine the type of credentials. */ @@ -2928,7 +2905,7 @@ static char request[65]; char responsecseqmethod[65]; char txn[MAX_HEADER_LEN]; - unsigned long cookie; + unsigned long cookie = 0; char * ptr; int search_index; bool found = false; @@ -3055,9 +3032,9 @@ /* In case of INVITE or re-INVITE, ACK or PRACK get the media info if needed (= we got a pcap play action) */ - if ((strncmp(request, "INVITE", 6) == 0) + if (((strncmp(request, "INVITE", 6) == 0) || (strncmp(request, "ACK", 3) == 0) - || (strncmp(request, "PRACK", 5) == 0) + || (strncmp(request, "PRACK", 5) == 0)) && (hasMedia == 1)) get_remote_media_addr(msg); #endif @@ -3243,7 +3220,7 @@ } } - if (request) { // update [cseq] with received CSeq + if (*request) { // update [cseq] with received CSeq unsigned long int rcseq = get_cseq_value(msg); if (rcseq > cseq) cseq = rcseq; } @@ -3356,9 +3333,9 @@ /* If this was a mandatory message, or if there is an explicit next label set * we must update our state machine. */ - if (!(call_scenario->messages[search_index] -> optional) || - call_scenario->messages[search_index]->next && - ((test == -1) || (M_callVariableTable->getVar(test)->isSet())) + if ((!(call_scenario->messages[search_index] -> optional) + || call_scenario->messages[search_index]->next) + && (((test == -1) || (M_callVariableTable->getVar(test)->isSet()))) ) { /* If we are paused, then we need to wake up so that we properly go through the state machine. */ paused_until = 0; @@ -3434,7 +3411,7 @@ currentAction->getCaseIndep(), currentAction->getOccurence(), currentAction->getHeadersOnly()); - if(currentAction->getCheckIt() == true && (strlen(msgPart) < 0)) { + if(currentAction->getCheckIt() == true && (strlen(msgPart) == 0)) { // the sub message is not found and the checking action say it // MUST match --> Call will be marked as failed but will go on WARNING("Failed regexp match: header %s not found in message %s\n", currentAction->getLookingChar(), msg); @@ -3744,7 +3721,7 @@ char *q = strdup(p); var->setString(q); int l = strlen(q); - for (int i = l - 1; i >= 0 & isspace(q[i]); i--) { + for (int i = l - 1; (i >= 0) && isspace(q[i]); i--) { q[i] = '\0'; } } else if (currentAction->getActionType() == CAction::E_AT_VAR_TO_DOUBLE) { @@ -3828,7 +3805,7 @@ #ifdef PCAPPLAY } else if ((currentAction->getActionType() == CAction::E_AT_PLAY_PCAP_AUDIO) || (currentAction->getActionType() == CAction::E_AT_PLAY_PCAP_VIDEO)) { - play_args_t *play_args; + play_args_t *play_args = 0; if (currentAction->getActionType() == CAction::E_AT_PLAY_PCAP_AUDIO) { play_args = &(this->play_args_a); } else if (currentAction->getActionType() == CAction::E_AT_PLAY_PCAP_VIDEO) { @@ -3999,7 +3976,10 @@ // if twin socket call => reset the other part here if (twinSippSocket && (msg_index > 0)) { - res = sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + res = sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + if (res) { + WARNING("sendCmdBuffer returned %d", res); + } } computeStat(CStat::E_CALL_FAILED); computeStat(CStat::E_FAILED_UNEXPECTED_MSG); @@ -4024,8 +4004,10 @@ // if twin socket call => reset the other part here if (twinSippSocket && (msg_index > 0)) { - res = sendCmdBuffer - (createSendingMessage(get_default_message("3pcc_abort"), -1)); + res = sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + if (res) { + WARNING("sendCmdBuffer returned %d", res); + } } computeStat(CStat::E_CALL_FAILED); @@ -4049,6 +4031,9 @@ // if twin socket call => reset the other part here if (twinSippSocket && (msg_index > 0)) { res = sendCmdBuffer(createSendingMessage(get_default_message("3pcc_abort"), -1)); + if (res) { + WARNING("sendCmdBuffer returned %d", res); + } } CStat::globalStat(CStat::E_AUTO_ANSWERED); Modified: sipp/trunk/call.hpp =================================================================== --- sipp/trunk/call.hpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/call.hpp 2013-02-15 00:43:41 UTC (rev 629) @@ -285,7 +285,6 @@ char * send_scene(int index, int *send_status, int *msgLen); bool connect_socket_if_needed(); - char * compute_cseq(char * src); char * get_header_field_code(const char * msg, const char * code); char * get_last_header(const char * name); char * get_header_content(const char * message, const char * name); Modified: sipp/trunk/message.cpp =================================================================== --- sipp/trunk/message.cpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/message.cpp 2013-02-15 00:43:41 UTC (rev 629) @@ -375,6 +375,7 @@ if (skip_sanity) { cancel = response = ack = false; method = NULL; + free(osrc); return; } @@ -418,7 +419,8 @@ ack = (!strcmp(method, "ACK")); cancel = (!strcmp(method, "CANCEL")); response = false; - } + }; + free(osrc); } SendingMessage::~SendingMessage() { @@ -426,7 +428,6 @@ freeMessageComponent(messageComponents[i]); } free(method); - free(src); } bool SendingMessage::isAck() { return ack; } @@ -442,12 +443,12 @@ while (char c = *src++) { switch(c) { case '"': - *len++; + (*len)++; *dest = '\0'; return; case '\\': c = *src++; - *len++; + (*len)++; if (c == 0) { *dest = '\0'; return; @@ -455,7 +456,7 @@ /* Fall-Through. */ default: *dest++ = c; - *len++; + (*len)++; } } *dest = '\0'; Modified: sipp/trunk/prepare_pcap.c =================================================================== --- sipp/trunk/prepare_pcap.c 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/prepare_pcap.c 2013-02-15 00:43:41 UTC (rev 629) @@ -197,7 +197,7 @@ } void free_pkts(pcap_pkts *pkts) { - pcap_pkt *pkt_index; + pcap_pkt *pkt_index = 0; while (pkt_index < pkts->max) { free(pkt_index->data); } Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/scenario.cpp 2013-02-15 00:43:41 UTC (rev 629) @@ -368,7 +368,7 @@ return txnNum; } -int scenario::find_var(const char *varName, const char *what) { +int scenario::find_var(const char *varName) { return allocVars->find(varName, false); } @@ -577,10 +577,9 @@ int get_cr_number(const char *src) { int res=0; - const char *ptr = src; - while(*ptr) { - if(*ptr == '\n') res++; - *ptr++; + while(*src) { + if(*src == '\n') res++; + src++; } return res; } @@ -999,8 +998,8 @@ } else { unexpected_jump = -1; } - retaddr = find_var("_unexp.retaddr", "unexpected return address"); - pausedaddr = find_var("_unexp.pausedaddr", "unexpected paused until"); + retaddr = find_var("_unexp.retaddr"); + pausedaddr = find_var("_unexp.pausedaddr"); /* Patch up the labels. */ apply_labels(messages, labelMap); @@ -1071,7 +1070,7 @@ CSample *parse_distribution(bool oldstyle = false) { CSample *distribution; const char *distname; - char *ptr; + char *ptr = 0; if(!(distname = xp_get_value("distribution"))) { if (!oldstyle) { Modified: sipp/trunk/scenario.hpp =================================================================== --- sipp/trunk/scenario.hpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/scenario.hpp 2013-02-15 00:43:41 UTC (rev 629) @@ -184,7 +184,7 @@ int get_var(const char *varName, const char *what); int get_counter(const char *varName, const char *what); int get_rtd(const char *ptr, bool start); - int find_var(const char *varName, const char *what); + int find_var(const char *varName); CStat *stats; AllocVariableTable *allocVars; Modified: sipp/trunk/send_packets.c =================================================================== --- sipp/trunk/send_packets.c 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/send_packets.c 2013-02-15 00:43:41 UTC (rev 629) @@ -115,10 +115,10 @@ struct timeval *, struct timeval *); void send_packets_cleanup(void *arg) { - int sock = (int) arg; + int * sock = (int *) arg; // Close send socket - close(sock); + close(*sock); } @@ -184,7 +184,7 @@ /* Ensure the sender socket is closed when the thread exits - this * allows the thread to be cancelled cleanly. */ - pthread_cleanup_push(send_packets_cleanup, ((void *) sock)); + pthread_cleanup_push(send_packets_cleanup, ((void *) &sock)); while (pkt_index < pkt_max) { Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-15 00:43:32 UTC (rev 628) +++ sipp/trunk/sipp.cpp 2013-02-15 00:43:41 UTC (rev 629) @@ -36,6 +36,7 @@ */ #define GLOBALS_FULL_DEFINITION +#define NOTLAST 0 #include <dlfcn.h> #include "sipp.hpp" @@ -806,7 +807,7 @@ /***************** Check of the message received ***************/ -bool sipMsgCheck (const char *P_msg, int P_msgSize, struct sipp_socket *socket) { +bool sipMsgCheck (const char *P_msg, struct sipp_socket *socket) { const char C_sipHeader[] = "SIP/2.0" ; if (socket == twinSippSocket || socket == localTwinSippSocket || @@ -822,7 +823,7 @@ /************** Statistics display & User control *************/ -void print_stats_in_file(FILE * f, int last) +void print_stats_in_file(FILE * f) { static char temp_str[256]; int divisor; @@ -1285,7 +1286,7 @@ fflush(f); } -void print_header_line(FILE *f, int last) +void print_header_line(FILE *f) { switch(currentScreenToDisplay) { @@ -1463,25 +1464,25 @@ int oldRepartition = currentRepartitionToDisplay; currentScreenToDisplay = DISPLAY_SCENARIO_SCREEN; - print_header_line( screenf, 0); - print_stats_in_file( screenf, 0); - print_bottom_line( screenf, 0); + print_header_line( screenf); + print_stats_in_file( screenf); + print_bottom_line( screenf, NOTLAST); currentScreenToDisplay = DISPLAY_STAT_SCREEN; - print_header_line( screenf, 0); + print_header_line( screenf); display_scenario->stats->displayStat(screenf); - print_bottom_line( screenf, 0); + print_bottom_line( screenf, NOTLAST); currentScreenToDisplay = DISPLAY_REPARTITION_SCREEN; - print_header_line( screenf, 0); + print_header_line( screenf); display_scenario->stats->displayRepartition(screenf); - print_bottom_line( screenf, 0); + print_bottom_line( screenf, NOTLAST); currentScreenToDisplay = DISPLAY_SECONDARY_REPARTITION_SCREEN; for (currentRepartitionToDisplay = 2; currentRepartitionToDisplay <= display_scenario->stats->nRtds(); currentRepartitionToDisplay++) { - print_header_line( screenf, 0); + print_header_line( screenf); display_scenario->stats->displayRtdRepartition(screenf, currentRepartitionToDisplay); - print_bottom_line( screenf, 0); + print_bottom_line( screenf, NOTLAST); } currentScreenToDisplay = oldScreen; @@ -1505,7 +1506,7 @@ if (command_mode) { printf(SIPP_ENDL); } - print_header_line(stdout,last); + print_header_line(stdout); switch(currentScreenToDisplay) { case DISPLAY_STAT_SCREEN : display_scenario->stats->displayStat(stdout); @@ -1524,7 +1525,7 @@ break; case DISPLAY_SCENARIO_SCREEN : default: - print_stats_in_file(stdout, last); + print_stats_in_file(stdout); break; } print_bottom_line(stdout,last); @@ -2197,7 +2198,7 @@ { /* non reentrant. consider accepting char buffer as param */ static char last_header[MAX_HEADER_LEN * 10]; - char * src, *dest; + char * src; /* returns empty string in case of error */ memset(last_header, 0, sizeof(last_header)); @@ -2207,7 +2208,6 @@ } src = message; - dest = last_header; int i=0; while (*src){ @@ -3115,7 +3115,7 @@ struct socketbuf *socketbuf; char *buffer; - int ret; + int ret = -1; /* Where should we start sending packets to, ideally we should begin to parse * the Via, Contact, and Route headers. But for now SIPp always sends to the * host specified on the command line; or for UAS mode to the address that @@ -3308,7 +3308,7 @@ if(msg_size <= 0) { return; } - if (sipMsgCheck(msg, msg_size, socket) == false) { + if (sipMsgCheck(msg, socket) == false) { WARNING("non SIP message discarded"); return; } @@ -3777,6 +3777,10 @@ sigset_t mask; sigfillset(&mask); /* Mask all allowed signals */ rc = pthread_sigmask(SIG_BLOCK, &mask, NULL); + if (rc) { + WARNING("pthread_sigmask returned %d", rc); + return; + } for (;;) { len = sizeof(remote_rtp_addr); @@ -4190,7 +4194,7 @@ } int socket_fd(bool use_ipv6, int transport) { - int socket_type; + int socket_type = -1; int protocol=0; int fd; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:35
|
Revision: 628 http://sourceforge.net/p/sipp/code/628 Author: arcady-91 Date: 2013-02-15 00:43:32 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Fixed one bug arising from sipp.osso.nl changes Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/message.cpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:43:24 UTC (rev 627) +++ sipp/trunk/call.cpp 2013-02-15 00:43:32 UTC (rev 628) @@ -1844,7 +1844,7 @@ int messages = sizeof(default_message_strings)/sizeof(default_message_strings[0]); default_messages = new SendingMessage* [messages]; for (int i = 0; i < messages; i++) { - default_messages[i] = new SendingMessage(main_scenario, const_cast<char*>(default_message_strings[i])); /* BUG */ + default_messages[i] = new SendingMessage(main_scenario, const_cast<char*>(default_message_strings[i])); } } Modified: sipp/trunk/message.cpp =================================================================== --- sipp/trunk/message.cpp 2013-02-15 00:43:24 UTC (rev 627) +++ sipp/trunk/message.cpp 2013-02-15 00:43:32 UTC (rev 628) @@ -88,8 +88,9 @@ #define KEYWORD_SIZE 256 -SendingMessage::SendingMessage(scenario *msg_scenario, char *src, bool skip_sanity) { - char *osrc = src; +SendingMessage::SendingMessage(scenario *msg_scenario, char *const_src, bool skip_sanity) { + char * src = strdup(const_src); + char * osrc = src; char * literal; int literalLen; char * dest; @@ -425,6 +426,7 @@ freeMessageComponent(messageComponents[i]); } free(method); + free(src); } bool SendingMessage::isAck() { return ack; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:27
|
Revision: 627 http://sourceforge.net/p/sipp/code/627 Author: arcady-91 Date: 2013-02-15 00:43:24 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Applying sipp.osso.nl patches to fix const char warnings Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/call.hpp sipp/trunk/deadcall.cpp sipp/trunk/deadcall.hpp sipp/trunk/listener.cpp sipp/trunk/listener.hpp sipp/trunk/message.cpp sipp/trunk/message.hpp sipp/trunk/scenario.cpp sipp/trunk/scenario.hpp sipp/trunk/sipp.cpp sipp/trunk/sipp.hpp sipp/trunk/variables.cpp sipp/trunk/xp_parser.c sipp/trunk/xp_parser.h Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/call.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -203,10 +203,10 @@ */ #define PAT_AUDIO 1 #define PAT_VIDEO 2 -uint16_t get_remote_port_media(char *msg, int pattype) +uint16_t get_remote_port_media(const char *msg, int pattype) { - char *pattern; - char *begin, *end; + const char *pattern; + const char *begin, *end; char number[7]; if (pattype == PAT_AUDIO) { @@ -297,7 +297,7 @@ /******* Very simple hash for retransmission detection *******/ -unsigned long call::hash(char * msg) { +unsigned long call::hash(const char * msg) { unsigned long hash = 0; int c; @@ -307,7 +307,7 @@ } else if (rtcheck == RTCHECK_LOOSE) { /* Based on section 11.5 (bullet 2) of RFC2543 we only take into account * the To, From, Call-ID, and CSeq values. */ - char *hdr = get_header_content(msg,"To:"); + const char *hdr = get_header_content(msg,"To:"); while ((c = *hdr++)) hash = c + (hash << 6) + (hash << 16) - hash; hdr = get_header_content(msg,"From:"); @@ -342,15 +342,15 @@ } /******************* Call class implementation ****************/ -call::call(char *p_id, bool use_ipv6, int userId, struct sockaddr_storage *dest) : listener(p_id, true) { +call::call(const char *p_id, bool use_ipv6, int userId, struct sockaddr_storage *dest) : listener(p_id, true) { init(main_scenario, NULL, dest, p_id, userId, use_ipv6, false, false); } -call::call(char *p_id, struct sipp_socket *socket, struct sockaddr_storage *dest) : listener(p_id, true) { +call::call(const char *p_id, struct sipp_socket *socket, struct sockaddr_storage *dest) : listener(p_id, true) { init(main_scenario, socket, dest, p_id, 0 /* No User. */, socket->ss_ipv6, false /* Not Auto. */, false); } -call::call(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitialization) : listener(p_id, true) { +call::call(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, const char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitialization) : listener(p_id, true) { init(call_scenario, socket, dest, p_id, userId, ipv6, isAutomatic, isInitialization); } @@ -358,7 +358,7 @@ { static char call_id[MAX_HEADER_LEN]; - char * src = call_id_string; + const char * src = call_id_string; int count = 0; if(!next_number) { next_number ++; } @@ -390,7 +390,7 @@ } -void call::init(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall) +void call::init(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, const char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall) { this->call_scenario = call_scenario; zombie = false; @@ -576,7 +576,7 @@ setRunning(); } -int call::_callDebug(char *fmt, ...) { +int call::_callDebug(const char *fmt, ...) { va_list ap; if (!useCallDebugf) { @@ -861,7 +861,7 @@ return (((double)rand() / (double)RAND_MAX) < (percent / 100.0)); } -int call::send_raw(char * msg, int index, int len) +int call::send_raw(const char * msg, int index, int len) { struct sipp_socket *sock; int rc; @@ -871,7 +871,7 @@ if (useShortMessagef == 1) { struct timeval currentTime; GET_TIME (¤tTime); - char* cs=get_header_content(msg,"CSeq:"); + const char * cs=get_header_content(msg,"CSeq:"); TRACE_SHORTMSG("%s\tS\t%s\tCSeq:%s\t%s\n", CStat::formatTime(¤tTime),id, cs, get_first_line(msg)); } @@ -978,10 +978,10 @@ return cseq; } -char * call::get_header_field_code(char *msg, char * name) +char * call::get_header_field_code(const char *msg, const char * name) { static char code[MAX_HEADER_LEN]; - char * last_header; + const char * last_header; int i; last_header = NULL; @@ -997,7 +997,7 @@ return code; } -char * call::get_last_header(char * name) +char * call::get_last_header(const char * name) { int len; @@ -1022,17 +1022,17 @@ } } -char * call::get_header_content(char* message, char * name) +char * call::get_header_content(const char* message, const char * name) { return get_header(message, name, true); } /* If content is true, we only return the header's contents. */ -char * call::get_header(char* message, char * name, bool content) +char * call::get_header(const char* message, const char * name, bool content) { /* non reentrant. consider accepting char buffer as param */ static char last_header[MAX_HEADER_LEN * 10]; - char * src, *dest, *start, *ptr; + char *src, *dest, *start, *ptr; /* Are we searching for a short form header? */ bool short_form = false; bool first_time = true; @@ -1054,7 +1054,7 @@ do { snprintf(src_tmp, MAX_HEADER_LEN, "\n%s", name); - src = message; + src = const_cast<char*>(message); /* BUG.. but won't fix right now */ dest = last_header; while((src = strcasestr2(src, src_tmp))) { @@ -1158,11 +1158,11 @@ return start; } -char * call::get_first_line(char * message) +char * call::get_first_line(const char * message) { /* non reentrant. consider accepting char buffer as param */ static char last_header[MAX_HEADER_LEN * 10]; - char * src, *dest; + const char * src; /* returns empty string in case of error */ memset(last_header, 0, sizeof(last_header)); @@ -1172,7 +1172,6 @@ } src = message; - dest = last_header; int i=0; while (*src){ @@ -1775,7 +1774,7 @@ return executeMessage(curmsg); } -char *default_message_names[] = { +const char *default_message_names[] = { "3pcc_abort", "ack", "ack2", @@ -1783,7 +1782,7 @@ "cancel", "200", }; -char *default_message_strings[] = { +const char *default_message_strings[] = { /* 3pcc_abort */ "call-id: [call_id]\ninternal-cmd: abort_call\n\n", /* ack */ @@ -1845,7 +1844,7 @@ int messages = sizeof(default_message_strings)/sizeof(default_message_strings[0]); default_messages = new SendingMessage* [messages]; for (int i = 0; i < messages; i++) { - default_messages[i] = new SendingMessage(main_scenario, default_message_strings[i]); + default_messages[i] = new SendingMessage(main_scenario, const_cast<char*>(default_message_strings[i])); /* BUG */ } } Modified: sipp/trunk/call.hpp =================================================================== --- sipp/trunk/call.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/call.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -68,10 +68,10 @@ public: /* These are wrappers for various circumstances, (private) init does the real work. */ //call(char * p_id, int userId, bool ipv6, bool isAutomatic); - call(char *p_id, bool use_ipv6, int userId, struct sockaddr_storage *dest); - call(char *p_id, struct sipp_socket *socket, struct sockaddr_storage *dest); + call(const char *p_id, bool use_ipv6, int userId, struct sockaddr_storage *dest); + call(const char *p_id, struct sipp_socket *socket, struct sockaddr_storage *dest); static call *add_call(int userId, bool ipv6, struct sockaddr_storage *dest); - call(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall); + call(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, const char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall); virtual ~call(); @@ -108,7 +108,7 @@ private: /* This is the core constructor function. */ - void init(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall); + void init(scenario * call_scenario, struct sipp_socket *socket, struct sockaddr_storage *dest, const char * p_id, int userId, bool ipv6, bool isAutomatic, bool isInitCall); /* This this call for initialization? */ bool initCall; @@ -281,18 +281,18 @@ void extract_cseq_method (char* responseCseq, char* msg); void extract_transaction (char* txn, char* msg); - int send_raw(char * msg, int index, int len); + int send_raw(const char * msg, int index, int len); char * send_scene(int index, int *send_status, int *msgLen); bool connect_socket_if_needed(); char * compute_cseq(char * src); - char * get_header_field_code(char * msg, char * code); - char * get_last_header(char * name); - char * get_header_content(char* message, char * name); - char * get_header(char* message, char * name, bool content); - char * get_first_line(char* message); + char * get_header_field_code(const char * msg, const char * code); + char * get_last_header(const char * name); + char * get_header_content(const char * message, const char * name); + char * get_header(const char * message, const char * name, bool content); + char * get_first_line(const char * message); char * get_last_request_uri(); - unsigned long hash(char * msg); + unsigned long hash(const char * msg); typedef std::map <std::string, int> file_line_map; file_line_map *m_lineNumber; @@ -318,7 +318,7 @@ BIO *m_bio ; #endif - int _callDebug(char *fmt, ...); + int _callDebug(const char *fmt, ...); char *debugBuffer; int debugLength; }; Modified: sipp/trunk/deadcall.cpp =================================================================== --- sipp/trunk/deadcall.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/deadcall.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -52,7 +52,7 @@ /* Defined in call.cpp. */ extern timewheel paused_calls; -deadcall::deadcall(char *id, char *reason) : listener(id, true) { +deadcall::deadcall(const char *id, const char *reason) : listener(id, true) { this->expiration = clock_tick + deadcall_wait; this->reason = strdup(reason); setPaused(); Modified: sipp/trunk/deadcall.hpp =================================================================== --- sipp/trunk/deadcall.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/deadcall.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -2,7 +2,7 @@ class deadcall : public virtual task, public virtual listener { public: - deadcall(char *id, char * reason); + deadcall(const char *id, const char * reason); ~deadcall(); virtual bool process_incoming(char * msg, struct sockaddr_storage *); Modified: sipp/trunk/listener.cpp =================================================================== --- sipp/trunk/listener.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/listener.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -28,7 +28,7 @@ listener_map listeners; -listener::listener(char *id, bool listening) { +listener::listener(const char *id, bool listening) { this->id = strdup(id); this->listening = false; if (listening) { @@ -65,7 +65,7 @@ } -listener *get_listener(char *id) { +listener *get_listener(const char *id) { listener_map::iterator listener_it = listeners.find(listener_map::key_type(id)); if (listener_it == listeners.end()) { return NULL; Modified: sipp/trunk/listener.hpp =================================================================== --- sipp/trunk/listener.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/listener.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -31,7 +31,7 @@ class listener { public: - listener(char *id, bool listening); + listener(const char *id, bool listening); virtual ~listener(); char *getId(); virtual bool process_incoming(char * msg, struct sockaddr_storage *src) = 0; @@ -46,6 +46,6 @@ }; typedef std::map<std::string, listener *> listener_map; -listener * get_listener(char *); +listener * get_listener(const char *); #endif Modified: sipp/trunk/message.cpp =================================================================== --- sipp/trunk/message.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/message.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -40,7 +40,7 @@ #include "message.hpp" struct KeywordMap { - char *keyword; + const char *keyword; MessageCompType type; }; @@ -475,7 +475,7 @@ } } -void SendingMessage::getKeywordParam(char * src, char * param, char * output) +void SendingMessage::getKeywordParam(char * src, const char * param, char * output) { char *key, *tmp; int len; Modified: sipp/trunk/message.hpp =================================================================== --- sipp/trunk/message.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/message.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -120,7 +120,7 @@ // Get parameters from a [keyword] static void getQuotedParam(char * dest, char * src, int * len); static void getHexStringParam(char * dest, char * src, int * len); - static void getKeywordParam(char * src, char * param, char * output); + static void getKeywordParam(char * src, const char * param, char * output); }; /* Custom Keyword Function Type. */ Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/scenario.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -574,10 +574,10 @@ } } -int get_cr_number(char *src) +int get_cr_number(const char *src) { int res=0; - char *ptr = src; + const char *ptr = src; while(*ptr) { if(*ptr == '\n') res++; *ptr++; @@ -1070,7 +1070,7 @@ CSample *parse_distribution(bool oldstyle = false) { CSample *distribution; - char *distname; + const char *distname; char *ptr; if(!(distname = xp_get_value("distribution"))) { @@ -1297,7 +1297,7 @@ ERROR("Unable to determine send mode of the tool (server, client)\n"); } -void scenario::handle_rhs(CAction *tmpAction, char *what) { +void scenario::handle_rhs(CAction *tmpAction, const char *what) { if (xp_get_value("value")) { tmpAction->setDoubleValue(xp_get_double("value", what)); if (xp_get_value("variable")) { @@ -1313,7 +1313,7 @@ } } -void scenario::handle_arithmetic(CAction *tmpAction, char *what) { +void scenario::handle_arithmetic(CAction *tmpAction, const char *what) { tmpAction->setVarId(xp_get_var("assign_to", what)); handle_rhs(tmpAction, what); } @@ -1843,7 +1843,7 @@ } /* These are the names of the scenarios, they must match the default_scenario table. */ -char *scenario_table[] = { +const char *scenario_table[] = { "uac", "uas", "regexp", @@ -1874,9 +1874,8 @@ // TIP: to integrate an existing XML scenario, use the following sed line: // cat ../3pcc-controller-B.xml | sed -e 's/\"/\\\"/g' -e 's/\(.*\)/\"\1\\n\"/' -char * default_scenario [] = { +const char * default_scenario [] = { /************* Default_scenario[0] ***************/ -(char *) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -1998,7 +1997,6 @@ , /************* Default_scenario[1] ***************/ -(char *) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2116,7 +2114,6 @@ "\n", /************* Default_scenario[2] ***************/ -(char *) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2273,7 +2270,6 @@ "\n", /************* Default_scenario[3] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2400,7 +2396,6 @@ "\n", /************* Default_scenario[4] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2532,7 +2527,6 @@ "\n", /************* Default_scenario[5] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2628,7 +2622,6 @@ "\n", /************* Default_scenario[6] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2723,7 +2716,6 @@ "</scenario>\n", /************* Default_scenario[7] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -2873,7 +2865,6 @@ "\n", /************* Default_scenario[8] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" @@ -3042,7 +3033,6 @@ * dumped it and passed it with -sf. */ /************* Default_scenario[9] ***************/ -(char*) "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" "<!DOCTYPE scenario SYSTEM \"sipp.dtd\">\n" "\n" Modified: sipp/trunk/scenario.hpp =================================================================== --- sipp/trunk/scenario.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/scenario.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -203,8 +203,8 @@ void getCommonAttributes(message *message); void getActionForThisMessage(message *message); void parseAction(CActions *actions); - void handle_arithmetic(CAction *tmpAction, char *what); - void handle_rhs(CAction *tmpAction, char *what); + void handle_arithmetic(CAction *tmpAction, const char *what); + void handle_rhs(CAction *tmpAction, const char *what); void checkOptionalRecv(char *elem, unsigned int scenario_file_cursor); void apply_labels(msgvec v, str_int_map labels); @@ -252,7 +252,7 @@ int find_scenario(const char *scenario); -extern char * default_scenario[12]; +extern const char * default_scenario[12]; /* Useful utility functions for parsing integers, etc. */ long get_long(const char *ptr, const char *what); @@ -263,6 +263,6 @@ int time_string(double ms, char *res, int reslen); int get_var(const char *varName, const char *what); -extern int get_cr_number(char *msg); +extern int get_cr_number(const char *msg); #endif Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/sipp.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -746,7 +746,7 @@ return tolower_table[c]; } -char * strcasestr2(char *s, char *find) { +char * strcasestr2(char *s, const char *find) { char c, sc; size_t len; @@ -764,7 +764,7 @@ return ((char *)s); } -char * strncasestr(char *s, char *find, size_t n) { +char * strncasestr(char *s, const char *find, size_t n) { char *end = s + n; char c, sc; size_t len; @@ -2125,7 +2125,7 @@ return tag; } -char * get_incoming_header_content(char* message, char * name) +char * get_incoming_header_content(char* message, const char * name) { /* non reentrant. consider accepting char buffer as param */ static char last_header[MAX_HEADER_LEN * 10]; @@ -2532,7 +2532,7 @@ } } -static ssize_t socket_write_primitive(struct sipp_socket *socket, char *buffer, size_t len, struct sockaddr_storage *dest) { +static ssize_t socket_write_primitive(struct sipp_socket *socket, const char *buffer, size_t len, struct sockaddr_storage *dest) { ssize_t rc; /* Refuse to write to invalid sockets. */ @@ -2769,11 +2769,11 @@ return 0; } -void buffer_write(struct sipp_socket *socket, char *buffer, size_t len, struct sockaddr_storage *dest) { +void buffer_write(struct sipp_socket *socket, const char *buffer, size_t len, struct sockaddr_storage *dest) { struct socketbuf *buf = socket->ss_out; if (!buf) { - socket->ss_out = alloc_socketbuf(buffer, len, DO_COPY, dest); + socket->ss_out = alloc_socketbuf(const_cast<char*>(buffer), len, DO_COPY, dest); /* NO BUG BECAUSE OF DO_COPY */ TRACE_MSG("Added first buffered message to socket %d\n", socket->ss_fd); return; } @@ -2782,7 +2782,7 @@ buf = buf->next; } - buf->next = alloc_socketbuf(buffer, len, DO_COPY, dest); + buf->next = alloc_socketbuf(const_cast<char*>(buffer), len, DO_COPY, dest); /* NO BUG BECAUSE OF DO_COPY */ TRACE_MSG("Appended buffered message to socket %d\n", socket->ss_fd); } @@ -2804,7 +2804,7 @@ } /* Write data to a socket. */ -int write_socket(struct sipp_socket *socket, char *buffer, ssize_t len, int flags, struct sockaddr_storage *dest) { +int write_socket(struct sipp_socket *socket, const char *buffer, ssize_t len, int flags, struct sockaddr_storage *dest) { int rc; if ( socket == NULL ) { //FIX coredump when trying to send data but no master yet ... ( for example after unexpected mesdsage) @@ -6209,7 +6209,7 @@ #ifdef __cplusplus extern "C" { #endif -int _trace (struct logfile_info *lfi, char *fmt, va_list ap) { +int _trace (struct logfile_info *lfi, const char *fmt, va_list ap) { int ret = 0; if(lfi->fptr) { ret = vfprintf(lfi->fptr, fmt, ap); @@ -6231,7 +6231,7 @@ } -int TRACE_MSG(char *fmt, ...) { +int TRACE_MSG(const char *fmt, ...) { int ret; va_list ap; @@ -6242,7 +6242,7 @@ return ret; } -int TRACE_SHORTMSG(char *fmt, ...) { +int TRACE_SHORTMSG(const char *fmt, ...) { int ret; va_list ap; @@ -6253,7 +6253,7 @@ return ret; } -int LOG_MSG(char *fmt, ...) { +int LOG_MSG(const char *fmt, ...) { int ret; va_list ap; @@ -6264,7 +6264,7 @@ return ret; } -int TRACE_CALLDEBUG(char *fmt, ...) { +int TRACE_CALLDEBUG(const char *fmt, ...) { int ret; va_list ap; Modified: sipp/trunk/sipp.hpp =================================================================== --- sipp/trunk/sipp.hpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/sipp.hpp 2013-02-15 00:43:24 UTC (rev 627) @@ -214,14 +214,14 @@ extern int peripfield _DEFVAL(0); extern bool bind_local _DEFVAL(false); extern void * monosocket_comp_state _DEFVAL(0); -extern char * service _DEFVAL(DEFAULT_SERVICE); -extern char * auth_password _DEFVAL(DEFAULT_AUTH_PASSWORD); -extern char * auth_username _DEFVAL(0); +extern const char * service _DEFVAL(DEFAULT_SERVICE); +extern const char * auth_password _DEFVAL(DEFAULT_AUTH_PASSWORD); +extern const char * auth_username _DEFVAL(0); extern unsigned long report_freq _DEFVAL(DEFAULT_REPORT_FREQ); extern unsigned long report_freq_dumpLog _DEFVAL (DEFAULT_REPORT_FREQ_DUMP_LOG); -extern bool periodic_rtd _DEFVAL(false); -extern char * stat_delimiter _DEFVAL(";"); +extern bool periodic_rtd _DEFVAL(false); +extern const char * stat_delimiter _DEFVAL(";"); extern bool timeout_exit _DEFVAL(false); extern bool timeout_error _DEFVAL(false); @@ -294,7 +294,7 @@ extern int currentRepartitionToDisplay _DEFVAL(1); extern unsigned int base_cseq _DEFVAL(0); extern char * auth_uri _DEFVAL(0); -extern char * call_id_string _DEFVAL("%u-%p@%s"); +extern const char * call_id_string _DEFVAL("%u-%p@%s"); extern char **generic[100]; /* TDM map */ @@ -493,7 +493,7 @@ }; struct logfile_info { - char *name; + const char *name; bool check; FILE *fptr; int nfiles; @@ -595,7 +595,7 @@ }; /* Write data to a socket. */ -int write_socket(struct sipp_socket *socket, char *buffer, ssize_t len, int flags, struct sockaddr_storage *dest); +int write_socket(struct sipp_socket *socket, const char *buffer, ssize_t len, int flags, struct sockaddr_storage *dest); /* Mark a socket as "bad". */ void sipp_socket_invalidate(struct sipp_socket *socket); /* Actually free the socket. */ @@ -623,7 +623,7 @@ /********************* Utilities functions *******************/ -char *strcasestr2 ( char *__haystack, char *__needle); +char *strcasestr2 ( char *__haystack, const char *__needle); char *get_peer_addr(char *); int get_decimal_from_hex(char hex); @@ -655,10 +655,10 @@ #ifdef __cplusplus extern "C" { #endif -int TRACE_MSG(char *fmt, ...); -int TRACE_CALLDEBUG(char *fmt, ...); -int TRACE_SHORTMSG(char *fmt, ...); -int LOG_MSG(char *fmt, ...); +int TRACE_MSG(const char *fmt, ...); +int TRACE_CALLDEBUG(const char *fmt, ...); +int TRACE_SHORTMSG(const char *fmt, ...); +int LOG_MSG(const char *fmt, ...); #ifdef __cplusplus } #endif Modified: sipp/trunk/variables.cpp =================================================================== --- sipp/trunk/variables.cpp 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/variables.cpp 2013-02-15 00:43:24 UTC (rev 627) @@ -113,7 +113,7 @@ } else if (M_type == E_VT_REGEXP && M_matchingValue) { return(M_matchingValue); } else { - return ""; + return const_cast<char*>(""); /* BUG BUT NOT SO SERIOUS */ } } Modified: sipp/trunk/xp_parser.c =================================================================== --- sipp/trunk/xp_parser.c 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/xp_parser.c 2013-02-15 00:43:24 UTC (rev 627) @@ -50,9 +50,9 @@ int xp_stack = 0; /****************** Internal routines ********************/ -int xp_replace(char *source, char *dest, char *search, char *replace) +int xp_replace(const char *source, char *dest, const char *search, const char *replace) { - char *position; + const char *position; char *occurances; int number = 0; @@ -155,7 +155,7 @@ /********************* Interface routines ********************/ -int xp_set_xml_buffer_from_string(char * str) +int xp_set_xml_buffer_from_string(const char * str) { size_t len = strlen(str); @@ -174,7 +174,7 @@ return 1; } -int xp_set_xml_buffer_from_file(char * filename) +int xp_set_xml_buffer_from_file(const char * filename) { FILE * f = fopen(filename, "rb"); int index = 0; @@ -371,8 +371,8 @@ char * xp_get_cdata() { static char buffer[XP_MAX_FILE_LEN + 1]; - char * end = xp_find_local_end(); - char * ptr; + const char *end = xp_find_local_end(); + const char *ptr; ptr = strstr(xp_position[xp_stack],"<![CDATA["); if(!ptr) { return NULL; } @@ -386,9 +386,9 @@ return buffer; } -int xp_get_content_length(char * P_buffer) +int xp_get_content_length(const char * P_buffer) { - char * L_ctl_hdr; + const char * L_ctl_hdr; int L_content_length = -1 ; unsigned char short_form; Modified: sipp/trunk/xp_parser.h =================================================================== --- sipp/trunk/xp_parser.h 2013-02-15 00:43:12 UTC (rev 626) +++ sipp/trunk/xp_parser.h 2013-02-15 00:43:24 UTC (rev 627) @@ -23,15 +23,15 @@ extern "C" { #endif -int xp_replace(char *source, char *dest, char *search, char *replace); -int xp_set_xml_buffer_from_string(char * str); -int xp_set_xml_buffer_from_file(char * filename); +int xp_replace(const char *source, char *dest, const char *search, const char *replace); +int xp_set_xml_buffer_from_string(const char * str); +int xp_set_xml_buffer_from_file(const char * filename); char * xp_open_element(int index); void xp_close_element(); -int xp_search_element_from_name(char * element, int occurence); +int xp_search_element_from_name(const char * element, int occurence); char * xp_get_value(const char * name); char * xp_get_cdata(); -int xp_get_content_length(char * P_buffer); +int xp_get_content_length(const char * P_buffer); #ifdef __cplusplus } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-15 00:43:15
|
Revision: 626 http://sourceforge.net/p/sipp/code/626 Author: arcady-91 Date: 2013-02-15 00:43:12 +0000 (Fri, 15 Feb 2013) Log Message: ----------- Mark start of early SIPp 3.4 development now that 3.3 has its own branch Modified Paths: -------------- sipp/trunk/sipp.cpp Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2013-02-06 23:11:47 UTC (rev 625) +++ sipp/trunk/sipp.cpp 2013-02-15 00:43:12 UTC (rev 626) @@ -4622,7 +4622,7 @@ } exit(EXIT_OTHER); case SIPP_OPTION_VERSION: - printf("\n SIPp v3.3-beta1" + printf("\n SIPp v3.4-early" #ifdef _USE_OPENSSL "-TLS" #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-02-06 23:11:50
|
Revision: 625 http://sourceforge.net/p/sipp/code/625 Author: arcady-91 Date: 2013-02-06 23:11:47 +0000 (Wed, 06 Feb 2013) Log Message: ----------- Bumping version number to 3.3 (release) Modified Paths: -------------- sipp/branches/3.3/sipp.cpp Modified: sipp/branches/3.3/sipp.cpp =================================================================== --- sipp/branches/3.3/sipp.cpp 2013-01-13 23:45:32 UTC (rev 624) +++ sipp/branches/3.3/sipp.cpp 2013-02-06 23:11:47 UTC (rev 625) @@ -4622,7 +4622,7 @@ } exit(EXIT_OTHER); case SIPP_OPTION_VERSION: - printf("\n SIPp v3.3-beta2" + printf("\n SIPp v3.3" #ifdef _USE_OPENSSL "-TLS" #endif @@ -4632,8 +4632,8 @@ #ifdef PCAPPLAY "-PCAP" #endif - ", version %s, built %s, %s.\n\n", - SIPP_VERSION, __DATE__, __TIME__); + ", built %s, %s.\n\n", + __DATE__, __TIME__); printf (" This program is free software; you can redistribute it and/or\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-01-13 23:45:35
|
Revision: 624 http://sourceforge.net/p/sipp/code/624 Author: arcady-91 Date: 2013-01-13 23:45:32 +0000 (Sun, 13 Jan 2013) Log Message: ----------- Updating documentation and site for v3.3 Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/doc/license.xml doc/trunk/src/documentation/content/xdocs/doc/reference.xml doc/trunk/src/documentation/content/xdocs/index.xml doc/trunk/src/documentation/content/xdocs/site.xml doc/trunk/src/documentation/content/xdocs/tabs.xml doc/trunk/src/documentation/skinconf.xml Added Paths: ----------- doc/trunk/src/documentation/content/xdocs/doc3.2/ doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml Modified: doc/trunk/src/documentation/content/xdocs/doc/license.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc/license.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc/license.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -8,11 +8,62 @@ <body> <section> <title>License</title> - <p>SIPp is under <a href="#gpl">GNU General Public License</a>.</p> - <p>send_packets.c and send_packets.h share source from tcpreplay -tools by Aaron Turner -<a href="http://tcpreplay.sourceforge.net/">http://tcpreplay.sourceforge.net/</a> and are under <a href="#bsd">BSD license</a></p> - </section> + <p>SIPp as a whole is licensed under <a href="#gpl">the GNU General Public License</a>, version 2 or any later version (copy below).</p> + <p>send_packets.c, send_packets.h, md5.c and md5.h have separate copyright + licenses, which apply only to those files. </p> + <p>The following license applies to send_packets.c and send_packets.h only:</p> + <source> + * Copyright (c) 2001-2004 Aaron Turner. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the names of the copyright owners nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + </source> + <p>The following license applies to md5.c and md5.h only:</p> + <source> + /* + Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + L. Peter Deutsch + gh...@al... + */ + </source> + <p>All other parts of SIPp are under the following license (or, at your option, any later version of the GNU GPL):</p> + </section> <anchor id="gpl" /><section> <title>GNU GENERAL PUBLIC LICENSE</title> <source> @@ -297,38 +348,6 @@ END OF TERMS AND CONDITIONS </source> </section> - <anchor id="bsd" /><section> - <title>Copyright notice for send_packets.c and send_packets.h</title> - <source> - Copyright (c) 2001-2004 Aaron Turner. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the names of the copyright owners nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -</source> - </section> </body> </document> Modified: doc/trunk/src/documentation/content/xdocs/doc/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -7,6 +7,7 @@ <authors> <person name="Richard GAYRAUD [initial code]" email="ric...@us..."/> <person name="Olivier JACQUES [code/documentation]" email="oja...@us..."/> + <person name="Robert Day [code/documentation]" email="rk...@rk..."/> <person name="Charles P. Wright [code]" email="cha...@us..."/> <person name="Many contributors [code]" email="no...@em..."/> </authors> @@ -14,6 +15,7 @@ <body> <section> <title>Foreword</title> + <warning>This version of the documentation is for SIPp 3.3 branch and describes some features not present in earlier versions. See the sidebar to access documentation for previous versions.</warning> <p>SIPp is a performance testing tool for the SIP protocol. It includes a few basic SipStone user agent scenarios (UAC and UAS) and establishes and releases multiple calls with the INVITE and BYE methods. It can also reads @@ -38,10 +40,9 @@ <title>Getting SIPp</title> <p>SIPp is released under the <a href="http://www.gnu.org/copyleft/gpl.html">GNU GPL license</a>. - All the terms of the license apply. It is provided to the SIP + All the terms of the license apply. It was originally created and provided to the SIP community by <a href="http://www.hp.com">Hewlett-Packard</a> - engineers in hope it can be useful.</p> <p>We receive some support - from our company to work on this tool freely, but <strong>HP does not + engineers in hope it can be useful, but <strong>HP does not provide any support nor warranty concerning SIPp.</strong></p> </section> <section><title>Stable release</title> @@ -58,85 +59,87 @@ <section><title>Unstable release</title> <p>Unstable release: all new features and bug fixes are checked in <a href="http://sipp.svn.sourceforge.net/viewvc/sipp/sipp/trunk/">SIPp's - SVN</a> repository as soon as they are available. Every night, an - automatic extraction is done and the source code of this release is - made available. </p> + SVN</a> repository as soon as they are available.</p> <note> Use the unstable release if you absolutely need a bug fix or a feature that is not in the stable release. </note> - <p><a href="http://sipp.sourceforge.net/snapshots/">SIPp "unstable" download page</a></p> </section> <section><title>Available platforms</title> <p>SIPp is available on almost all UNIX platforms: HPUX, Tru64, Linux (RedHat, Debian, FreeBSD), Solaris/SunOS.</p> <p>A Windows port has been contributed. You can now compile SIPp under - Cygwin. A binary package with a Windows installer is also available. - Check <a href="http://sourceforge.net/project/showfiles.php?group_id=104305">the - download page</a> to download it and run SIPp under Windows.</p> - <note>SIPp works only over Windows XP and will not - work on Win2000. This is because of IPv6 support. The Windows installer - should prevent someone to install SIPp on Win2000.</note> + Cygwin.</p> + <note>SIPp works only on Windows XP and later versions and will not + work on Win2000. This is because of IPv6 support.</note> </section> <anchor id="installing" /><section><title>Installing SIPp</title> <ul> <li>On Linux, SIPp is provided in the form of source code. You will need to compile SIPp to actually use it.</li> - <li>Pre-requisites to compile SIPp are (see <a href="http://sipp.sourceforge.net/wiki/index.php/Compilation" >Compilation tips</a>): + <li>Pre-requisites to compile SIPp are <!--(see <a href="http://sipp.sourceforge.net/wiki/index.php/Compilation" >Compilation tips</a>)-->: <ul> <li>C++ Compiler</li> <li>curses or ncurses library</li> - <li>For authentication and TLS support: OpenSSL >= 0.9.8</li> + <li>For TLS support: OpenSSL >= 0.9.8</li> <li>For pcap play support: libpcap and libnet</li> + <li>For SCTP support: lksctp-tools</li> <li>For distributed pauses: <a href="http://www.gnu.org/software/gsl/">Gnu Scientific Libraries</a></li> </ul> </li> <li>You have four options to compile SIPp: <ul> - <li><strong>Without TLS (Transport Layer Security) and authentication support</strong>: - This is the recommended setup if you don't need to handle SIP authentication - and/or TLS. In this case, there are <strong>no depencies to install</strong> before - building SIPp. It is straight forward: -<source># gunzip sipp-xxx.tar.gz -# tar -xvf sipp-xxx.tar + <li><strong>Without TLS (Transport Layer Security), SCTP or PCAP support</strong>: + This is the recommended setup if you don't need to handle SCTP, TLS or PCAP. In this case, there are <strong>no dependencies to install</strong> before building SIPp. It is straightforward: +<source># tar -xvzf sipp-xxx.tar # cd sipp +# autoreconf -ivf +# ./configure # make </source></li> - <li><strong>With TLS and <a href="#authentication">authentication</a> support</strong>, you must have + <li><strong>With TLS support</strong>, you must have installed <a href="http://www.openssl.org/">OpenSSL library</a> (>=0.9.8) - (which may come with your system). Building SIPp consist only in adding - the "ossl" option to the make command: -<source># gunzip sipp-xxx.tar.gz -# tar -xvf sipp-xxx.tar + (which may come with your system). Building SIPp consists only in adding + the "--with-openssl" option to the configure command: +<source># tar -xvzf sipp-xxx.tar.gz # cd sipp -# make ossl +# autoreconf -ivf +# ./configure --with-openssl +# make </source></li> - <li><strong>With <a href="#pcapplay">PCAP play</a> and without <a href="#authentication">authentication</a> support</strong>: -<source># gunzip sipp-xxx.tar.gz -# tar -xvf sipp-xxx.tar + <li><strong>With <a href="#pcapplay">PCAP play</a> support</strong>: + <source># tar -xvzf sipp-xxx.tar.gz # cd sipp -# make pcapplay +# autoreconf -ivf +# ./configure --with-pcap +# make </source></li> - <li><strong>With <a href="#pcapplay">PCAP play</a> and <a href="#authentication">authentication</a> support</strong>: -<source># gunzip sipp-xxx.tar.gz -# tar -xvf sipp-xxx.tar + <li><strong>With <a href="#sctp">SCTP</a> support</strong>: + <source># tar -xvzf sipp-xxx.tar.gz # cd sipp -# make pcapplay_ossl -</source></li> - +# autoreconf -ivf +# ./configure --with-sctp +# make +</source></li> + <li><strong>You can also combine these various options, e.g.:</strong>: + <source># tar -xvzf sipp-xxx.tar.gz +# cd sipp +# autoreconf -ivf +# ./configure --with-sctp --with-pcap --with-openssl +# make +</source></li> </ul> <anchor id="gsl"/><note>To enable <a href="http://www.gnu.org/software/gsl/">GSL</a> at compile time, you must install GSL and its include files, as well as un-comment the lines in the local.mk file of SIPp distribution. Then, re-compile SIPp.</note> </li> - <li>On Windows, SIPp is provided both with the source and the pre-compiled - executable. Just execute the installer to have SIPp installed. - <warning>SIPp compiles under CYGWIN, provided that you installed IPv6 + <li> + <warning>SIPp compiles under CYGWIN on Windows, provided that you installed IPv6 extension for CYGWIN (<a href="http://win6.jp/Cygwin/">http://win6.jp/Cygwin/</a>), - as well as OpenSSL and libncurses.</warning></li> + as well as libncurses and (optionally OpenSSL and WinPcap). SCTP is not currently supported.</warning></li> <li>To compile SIPp on Windows with pcap (media support), you must: <ul> <li>Copy the <a href="http://www.winpcap.org/devel.htm">WinPcap developer package</a> to "C:\cygwin\lib\WpdPack"</li> <li>Remove or rename "pthread.h" in "C:\cygwin\lib\WpdPack\Include", as it interfers with pthread.h from cygwin</li> - <li>Compile using either "make pcapplay_cygwin" or "pcapplay_ossl_cygwin"</li> + <li>Compile according to the instructions above.</li> </ul> </li> </ul> @@ -511,7 +514,7 @@ <tr><td>3</td><td>Display the repartition screen</td></tr> <tr><td>4</td><td>Display the variable screen</td></tr> <tr><td>5</td><td>Display the TDM screen</td></tr> - <tr><td>6-9</td><td>Display the second tdrough fifth repartition screen.</td></tr> + <tr><td>6-9</td><td>Display the second through fifth repartition screen.</td></tr> </table> <p>In command mode, you can type a single line command that instructs @@ -1215,7 +1218,7 @@ <td>-</td> <td>Used to put the authentication header. This field can have parameters, in the following form: [authentication username=myusername password=mypassword]. If no username is provided, - the value from -s command line parameter (service) is used. If no password is provided, the value + the value from the -au (authentication username) or -s (service) command line parameter is used. If no password is provided, the value from -ap command line parameter is used. See "<a href="#authentication">Authentication</a>" section</td> </tr> <tr> @@ -1564,7 +1567,8 @@ </ul> <note>The action is non-blocking. SIPp will start a light-weight thread to play the file and the scenario with continue immediately. If needed, you will need to add a pause - to wait for the end of the pcap play.</note></p> + to wait for the end of the pcap play.</note> + <warning>A known bug means that starting a pcap_play_audio command will end any pcap_play_video command, and vice versa; you cannot play both audio and video streams at once.</warning></p> <p>Example that plays a pre-recorded RTP stream:</p> <source><![CDATA[<nop> <action> @@ -1765,7 +1769,10 @@ <setdest host="[$host]" port="[$port]" protocol="[$transport]" /> </action> </nop> -]]></source></section> + ]]></source> + <warning>If you are using setdest with IPv6, you must not use square brackets around the address. These have a special meaning to SIPp, and it will try to interpret your IPv6 address as a variable.<br/> + Since the port is specified separately, square brackets are never necessary.</warning> + </section> <anchor id="action_verifyauth" /><section><title>verifyauth</title> @@ -2056,9 +2063,6 @@ <anchor id="authentication"/><section><title>SIP authentication</title> <p>SIPp supports SIP authentication. Two authentication algorithm are supported: Digest/MD5 ("algorithm="MD5"") and Digest/AKA ("algorithm="AKAv1-MD5"", as specified by 3GPP for IMS).</p> - <warning>To enable authentication support, SIPp must be compiled in a - special way. See <a href="#installing">SIPp installation</a> - for details</warning> <p>Enabling authentication is simple. When receiving a 401 (Unauthorized) or a 407 (Proxy Authentication Required), you must add auth="true" in the <![CDATA[<recv>]]> command to take the challenge into account. @@ -2072,7 +2076,7 @@ <ul> <li>Digest/MD5 (example: [authentication username=joe password=schmo]) <ul> - <li><strong>username</strong>: username: if no username is specified, the username is taken from the '-s' (service) command + <li><strong>username</strong>: username: if no username is specified, the username is taken from the '-au' (authentication username) or '-s' (service) command line parameter</li> <li><strong>password</strong>: password: if no password is specified, the password is taken from the '-ap' (authentication password) command line parameter</li> @@ -2080,7 +2084,7 @@ </li> <li>Digest/AKA: (example: [authentication username=HappyFeet aka_OP=0xCDC202D5123E20F62B6D676AC72CB318 aka_K=0x465B5CE8B199B49FAA5F0A2EE238A6BC aka_AMF=0xB9B9]) <ul> - <li><strong>username</strong>: username: if no username is specified, the username is taken from the '-s' (service) command + <li><strong>username</strong>: username: if no username is specified, the username is taken from the '-au' (authentication username) or '-s' (service) command line parameter</li> <li><strong>aka_K</strong>: Permanent secret key. If no aka_K is provided, the "password" attributed is used as aka_K.</li> <li><strong>aka_OP</strong>: OPerator variant key</li> @@ -2296,6 +2300,18 @@ one secured TLS (Transport Layer Security) socket is opened for each new call between SIPp and the remote.</p> <p>This mode is generally used for emulating user agents calling a SIP server.</p> </section> + <anchor id="sctp" /><section><title>SCTP mono socket</title> + <p>In SCTP mono socket mode (<code>-t s1</code> command line parameter), + one SCTP (Stream Transmission Control Protocol) socket is opened between SIPp and the remote. All calls + are placed using this socket.</p> + <p>This mode is generally used for emulating a relation between 2 SIP servers.</p> + <p>The <code>-multihome, -heartbeat, -assocmaxret, -pathmaxret, -pmtu </code> and <code>-gracefulclose</code> command-line arguments allow control over specific features of the SCTP protocol, but are usually not necessary.</p> + </section> + <section><title>SCTP multi socket</title> + <p>In SCTP multi socket mode (<code>-t sn</code> command line parameter), + one SCTP socket is opened for each new call between SIPp and the remote.</p> + <p>This mode is generally used for emulating user agents calling a SIP server.</p> + </section> <anchor id="ipv6" /><section><title>IPv6 support</title> <p>SIPp includes IPv6 support. To use IPv6, just specify the local IP address (-i command line parameter) to be an IPv6 IP address.</p> @@ -2348,7 +2364,7 @@ Depending on the system settings, you might need to be root to allow this. Please check "man 3 pthread_setschedparam" man page for details</warning> <p>More details on the possible PCAP play actions can be found in the <a href="#action_exec">action reference section</a>.</p> - <p>The latest info on this feature, tips and tricks can be found on <a href="http://sipp.sourceforge.net/wiki/index.php/Pcapplay" >SIPp wiki</a>.</p> + <!--<p>The latest info on this feature, tips and tricks can be found on <a href="http://sipp.sourceforge.net/wiki/index.php/Pcapplay" >SIPp wiki</a>.</p>--> </section> </section> <section><title>Exit codes</title> @@ -2570,7 +2586,8 @@ <section><title>Online help (-h)</title> <p>The online help, available through the -h option is duplicated here for your convenience</p> - <source><![CDATA[Usage: + <source><![CDATA[ + Usage: sipp remote_host[:remote_port] [options] @@ -2585,6 +2602,12 @@ By default, the URI is composed of remote_ip:remote_port. + -au : Set authorization username for authentication challenges. + Default is taken from -s argument + + -ap : Set the password for authentication challenges. Default + is 'password' + -base_cseq : Start value of [cseq] for each call. -bg : Launch SIPp in background mode. @@ -2618,11 +2641,11 @@ -default_behaviors: Set the default behaviors that SIPp will use. Possbile values are: - - all Use all default behaviors - - none Use no default behaviors - - bye Send byes for aborted calls - - abortunexp Abort calls on unexpected messages - - pingreply Reply to ping requests + - all Use all default behaviors + - none Use no default behaviors + - bye Send byes for aborted calls + - abortunexp Abort calls on unexpected messages + - pingreply Reply to ping requests If a behavior is prefaced with a -, then it is turned off. Example: all,-bye @@ -2747,6 +2770,8 @@ -periodic_rtd : Reset response time partition counters each logging interval. + -plugin : Load a plugin. + -r : Set the call rate (in calls per seconds). This value can bechanged during test by pressing '+','_','*' or '/'. Default is 10. @@ -2879,6 +2904,8 @@ - tn: TCP with one socket per call, - l1: TLS with one socket, - ln: TLS with one socket per call, + - s1: SCTP with one socket (default), + - sn: SCTP with one socket per call, - c1: u1 + compression (only if compression plugin loaded), - cn: un + compression (only if compression plugin @@ -2898,6 +2925,8 @@ usage.If the compression is on, the value is set to 50ms. The default value is 10ms. + -T2 : Global T2-timer in milli seconds + -sendbuffer_warn : Produce warnings instead of errors on SendBuffer failures. @@ -2908,9 +2937,9 @@ <scenario file name>_<pid>_shortmessages.log -trace_screen : Dump statistic screens in the - <scenario_name>_<pid>_cenaris.log file when quitting - SIPp. Useful to get a final status report in background - mode (-bg option). + <scenario_name>_<pid>_screens.log file when + quitting SIPp. Useful to get a final status report in + background mode (-bg option). -trace_err : Trace all unexpected messages in <scenario file name>_<pid>_errors.log. @@ -2951,9 +2980,6 @@ -watchdog_minor_maxtriggers: How many times the minor watchdog timer can be tripped before the test is terminated. Default is 120. - -ap : Set the password for authentication challenges. Default - is 'password - -tls_cert : Set the name for TLS Certificate file. Default is 'cacert.pem @@ -2988,6 +3014,30 @@ Set the global variable parameter named "variable" to "value". + -multihome : Set multihome address for SCTP + + -heartbeat : Set heartbeat interval in ms for SCTP + + -assocmaxret : Set association max retransmit counter for SCTP + + -pathmaxret : Set path max retransmit counter for SCTP + + -pmtu : Set path MTU for SCTP + + -gracefulclose : If true, SCTP association will be closed with SHUTDOWN + (default). + If false, SCTP association will be closed by ABORT. + + + -dynamicStart : variable value + Set the start offset of dynamic_id varaiable + + -dynamicMax : variable value + Set the maximum of dynamic_id variable + + -dynamicStep : variable value + Set the increment of dynamic_id variable + Signal handling: SIPp can be controlled using posix signals. The following signals @@ -3011,6 +3061,7 @@ 97: exit on internal command. Calls may have been processed 99: Normal exit without calls processed -1: Fatal error + -2: Fatal error binding a socket Example: @@ -3022,7 +3073,7 @@ ]]> </source> - </section> + </section> </section> <anchor id="perf" /><section><title>Performance testing with SIPp</title> <section><title>Advices to run performance tests with SIPp</title> Added: doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml =================================================================== (Binary files differ) Index: doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml 2013-01-13 23:45:32 UTC (rev 624) Property changes on: doc/trunk/src/documentation/content/xdocs/doc3.2/faq.xml ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/xml \ No newline at end of property Added: doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml =================================================================== (Binary files differ) Index: doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml 2013-01-13 23:45:32 UTC (rev 624) Property changes on: doc/trunk/src/documentation/content/xdocs/doc3.2/index.xml ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/xml \ No newline at end of property Added: doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml =================================================================== (Binary files differ) Index: doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml 2013-01-13 23:45:32 UTC (rev 624) Property changes on: doc/trunk/src/documentation/content/xdocs/doc3.2/license.xml ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/xml \ No newline at end of property Added: doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml =================================================================== (Binary files differ) Index: doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml 2013-01-13 23:45:32 UTC (rev 624) Property changes on: doc/trunk/src/documentation/content/xdocs/doc3.2/reference.xml ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/xml \ No newline at end of property Modified: doc/trunk/src/documentation/content/xdocs/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/index.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/index.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -13,7 +13,7 @@ <p>SIPp is a free Open Source test tool / traffic generator for the SIP protocol. It includes a few basic <a href="http://www.sipstone.org">SipStone</a> user agent scenarios (UAC and UAS) and establishes and releases multiple calls with - the INVITE and BYE methods. It can also reads + the INVITE and BYE methods. It can also reads <a href="doc/uac.xml.html">custom XML</a> scenario files describing from very simple to <a href="doc/reference.html#3PCC">complex</a> call flows. It features the <a href="doc/reference.html#stat_screen">dynamic display</a> of @@ -23,7 +23,7 @@ retransmission management and <a href="doc/reference.html#traffic_control">dynamically adjustable</a> call rates.</p> <p>Other advanced features include support of <a href="doc/reference.html#ipv6">IPv6</a>, - <a href="doc/reference.html#tls">TLS</a>, SIP <a href="doc/reference.html#authentication">authentication</a>, + <a href="doc/reference.html#tls">TLS</a>, SCTP, SIP <a href="doc/reference.html#authentication">authentication</a>, <a href="doc/reference.html#branching">conditional scenarios</a>, UDP retransmissions, <a href="doc/reference.html#Error+handling">error robustness</a> (call timeout, protocol defense), call specific variable, Posix <a href="doc/reference.html#action_regexp">regular expression</a> @@ -31,12 +31,12 @@ (log, system command exec, call stop) on message receive, field injection from <a href="doc/reference.html#inffile">external CSV</a> file to emulate live users.</p> <p>SIPp can also send media (RTP) traffic through <a href="doc/reference.html#RTP+echo">RTP echo</a> and - <a href="doc/reference.html#PCAP+Play">RTP / pcap</a> replay. Media can be audio or audio+video.</p> + <a href="doc/reference.html#PCAP+Play">RTP / pcap</a> replay. Media can be audio or video.</p> <p>While optimized for traffic, stress and performance testing, SIPp can be used to run one single call and exit, providing a <a href="doc/reference.html#Exit+codes">passed/failed</a> verdict.</p> <p>Last, but not least, SIPp has a <a href="doc/reference.html" >comprehensive documentation</a> available both in HTML and PDF format.</p> - <p>SIPp can be used to test many real SIP equipements like SIP proxies, + <p>SIPp can be used to test various real SIP equipment like SIP proxies, B2BUAs, SIP media servers, SIP/x gateways, SIP PBX, ... It is also very useful to emulate thousands of user agents calling your SIP system.</p> <p>Here is a screenshot:</p> Modified: doc/trunk/src/documentation/content/xdocs/site.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/site.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/site.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -31,10 +31,15 @@ <license label='License' href='license.html' /> </doc> - <doc2 label="Doc (3.0)" href="doc3.0/" tab="doc3.0"> + <doc2 label="Doc (3.2)" href="doc3.2/" tab="doc3.2"> + <refdoc label='Ref doc 3.2 [html]' href='reference.html' /> + <refdoc_PDF label="Ref doc 3.2 [pdf]" href="reference.pdf"/> + </doc2> + + <doc3 label="Doc (3.0)" href="doc3.0/" tab="doc3.0"> <refdoc label='Ref doc 3.0 [html]' href='reference.html' /> <refdoc_PDF label="Ref doc 3.0 [pdf]" href="reference.pdf"/> - </doc2> + </doc3> <ims_bench label="IMS Bench" href="ims_bench/" tab="ims_bench"> <refdoc label='Ref doc [html]' href='reference.html' /> Modified: doc/trunk/src/documentation/content/xdocs/tabs.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/tabs.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/content/xdocs/tabs.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -15,8 +15,9 @@ --> <tab id="home" label="Home" dir="" indexfile="index.html"/> + <tab id="doc" label="Documentation (current)" dir="doc" indexfile="reference.html"/> + <tab id="doc3.2" label="Documentation (3.2)" dir="doc3.2" indexfile="reference.html"/> <tab id="doc3.0" label="Documentation (3.0)" dir="doc3.0" indexfile="reference.html"/> - <tab id="doc" label="Documentation (current)" dir="doc" indexfile="reference.html"/> <tab id="ims_bench" label="IMS Bench SIPp" dir="ims_bench" indexfile="index.html"/> <tab id="web_frontend" label="Web frontend" dir="web_frontend" indexfile="index.html"/> <!-- Add new tabs here, eg: Modified: doc/trunk/src/documentation/skinconf.xml =================================================================== --- doc/trunk/src/documentation/skinconf.xml 2013-01-13 22:30:13 UTC (rev 623) +++ doc/trunk/src/documentation/skinconf.xml 2013-01-13 23:45:32 UTC (rev 624) @@ -57,12 +57,12 @@ <project-logo>images/project-logo.gif</project-logo> --> <!-- optional group logo - skin: forrest-site renders it at the top-left corner --> + skin: forrest-site renders it at the top-left corner <group-name>hp invent</group-name> <group-description>Hewlett-Packard</group-description> <group-url>http://www.hp.com</group-url> <group-logo>images/hplogo.png</group-logo> - + --> <!-- optional host logo (e.g. sourceforge logo) default skin: renders it at the bottom-left corner --> @@ -113,8 +113,8 @@ feedback link in the footer with the page pathname appended: <a href="@href">{@to}</a> --> - <feedback to="Olivier" - href="mailto:oli...@hp...?subject=SIPp Feedback " > + <feedback to="Rob Day" + href="mailto:rk...@rk...?subject=SIPp Feedback " > Send feedback about the website to: </feedback> <!-- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-01-13 22:30:15
|
Revision: 623 http://sourceforge.net/p/sipp/code/623 Author: arcady-91 Date: 2013-01-13 22:30:13 +0000 (Sun, 13 Jan 2013) Log Message: ----------- Fixed XML errors which prevented reference.pdf from building Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/doc/reference.xml doc/trunk/src/documentation/skinconf.xml Modified: doc/trunk/src/documentation/content/xdocs/doc/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2013-01-10 23:02:21 UTC (rev 622) +++ doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2013-01-13 22:30:13 UTC (rev 623) @@ -893,9 +893,8 @@ <td><code><pause variable="1" /></code> pauses for the number of milliseconds specified by call variable 1.</td> </tr> <tr> - <anchor id="pause_distributions" /> <td></td> - <td>distribution</td> + <td><anchor id="pause_distributions" />distribution</td> <td>Indicates which statistical distribution to use to determine the length of the pause. Without GSL, you may use <code>uniform</code> or <code>fixed</code>. With GSL, normal, exponential, gamma, lambda, lognormal, negbin, (negative binomial), pareto, and weibull are available. Depending on the distribution you select, you must also supply distribution specific parameters.</td> <td> The following examples show the various types of distributed pauses: @@ -2548,26 +2547,22 @@ the command line parameter <code>-trace_err</code>.</li> <li>You can trace the counts from the main scenario screen in <name_of_the_scenario>_<pid>_counts.csv by using the command line parameter <code>-trace_counts</code>.</li> - <li>You can trace the messages and state transitions of - failed calls in <name_of_the_scenario>_<pid>_calldebug.log using - the <code>-trace_calldebug</code> command line parameter. This is useful, - because it has less overhead than <code>-trace_msg</code> yet allows you to - debug call flows that were not completed successfully.</li>. + <li>You can trace the messages and state transitions of + failed calls in <name_of_the_scenario>_<pid>_calldebug.log using + the <code>-trace_calldebug</code> command line parameter. This is useful, + because it has less overhead than <code>-trace_msg</code> yet allows you to + debug call flows that were not completed successfully.</li> <li>You can save in a file the statistics screens, as displayed in the interface. This is especially useful when running SIPp in background - mode.<br/> + mode. <br/> This can be done in different ways: - <ul> - <li>When SIPp exits to get a final status report (-trace_screen option)</li> - <li>On demand by using USR2 signal (example: <code>kill -SIGUSR2 738</code>)</li> - <li>By pressing 's' key (if -trace_screen option is set)</li> - <li>If the -trace_logs option is set, you can use the <code><log></code> action to print some scenario traces in the <![CDATA[<scenario file name>_<pid>_logs.log]]> file. See the <a href="#action_log">Log action section </a></li> - </ul> - </li> - - <!-- <li>You can log all call ids for calls that timeout (the maximum - number of retransmissions for UDP transport is reached) - by using the command line parameter <code>-trace_timeout</code></li> --> + <ul> + <li>When SIPp exits to get a final status report (-trace_screen option)</li> + <li>On demand by using USR2 signal (example: <code>kill -SIGUSR2 738</code>)</li> + <li>By pressing 's' key (if -trace_screen option is set)</li> + <li>If the -trace_logs option is set, you can use the <code><log></code> action to print some scenario traces in the <scenario file name>_<pid>_logs.log file. See the <a href="#action_log">Log action section </a></li> + </ul> + </li> </ul> <p>SIPp can treat the messages, short messages, logs, and error logs as ring buffers. This allows you to limit the total amount of space used by these log files and keep only the most recent messages. To set the maximum file size use the <code>-ringbuffer_size</code> option. Once the file exceeds this size (the file size can be exceeded up to the size of a single log message), it is rotated. SIPp can keep several of the most recent files, to specify the number of files to keep use the <code>-ringbuffer_files</code> option. The rotated files have a name of the form <name_of_the_scenario>_<pid>_<logname>_<date>.log, where <date> is the number of seconds since the epoch. If more than one log file is rotated during a one second period, then the date is expressed as <seconds.serial>, where serial is an increasing integer identifier.</p> </section> Modified: doc/trunk/src/documentation/skinconf.xml =================================================================== --- doc/trunk/src/documentation/skinconf.xml 2013-01-10 23:02:21 UTC (rev 622) +++ doc/trunk/src/documentation/skinconf.xml 2013-01-13 22:30:13 UTC (rev 623) @@ -73,7 +73,7 @@ <favicon-url></favicon-url> <!-- The following are used to construct a copyright statement --> - <year>2004,2005,2006,2007</year> + <year>2004-2013</year> <vendor>The authors</vendor> <!-- The optional copyright-link URL will be used as a link in the copyright statement This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2013-01-10 23:02:24
|
Revision: 622 http://sourceforge.net/p/sipp/code/622 Author: arcady-91 Date: 2013-01-10 23:02:21 +0000 (Thu, 10 Jan 2013) Log Message: ----------- Bumping version number to 3.3-beta2 Modified Paths: -------------- sipp/branches/3.3/sipp.cpp Modified: sipp/branches/3.3/sipp.cpp =================================================================== --- sipp/branches/3.3/sipp.cpp 2012-12-31 20:22:59 UTC (rev 621) +++ sipp/branches/3.3/sipp.cpp 2013-01-10 23:02:21 UTC (rev 622) @@ -4622,7 +4622,7 @@ } exit(EXIT_OTHER); case SIPP_OPTION_VERSION: - printf("\n SIPp v3.3-beta1" + printf("\n SIPp v3.3-beta2" #ifdef _USE_OPENSSL "-TLS" #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arc...@us...> - 2012-12-31 20:23:01
|
Revision: 621 http://sourceforge.net/p/sipp/code/621 Author: arcady-91 Date: 2012-12-31 20:22:59 +0000 (Mon, 31 Dec 2012) Log Message: ----------- Creating 3.3 release branch Added Paths: ----------- sipp/branches/3.3/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |