From: Boulkroune, O. (Non-HP:A. Origin) <oli...@hp...> - 2007-08-24 07:45:54
|
Hello Peter, =20 Could you submit a new patch following this link = http://sourceforge.net/tracker/?group_id=3D104305&atid=3D637566 ? This = helps us tracking contributions. Sipp is currently at a turning point, a huge number of changes and = improvements has been brought recently to the tool. We currently focus = on correcting some pending bugs and running non-regression tests. The = aim is to deliver a new stable sipp version as soon as we can. So, as a = consequence, the addition of user enhancements is currently frozen until = the next stable version is delivered (of course, bug fixes are welcome = :) ). We'll review your patch then. By the way, use rather the sipp-devel mailing-list for discussions about = sipp source code. The sipp-users mailing list is dedicated to help and = debug for users. Thanks a lot for your contribution and best regards, Olivier Boulkroune =20 -----Message d'origine----- De=A0: sip...@li... = [mailto:sip...@li...] De la part de Peter = Vicman UM FERI Envoy=E9=A0: lundi 20 ao=FBt 2007 16:51 =C0=A0: sip...@li... Objet=A0: [Sipp-users] Two little improvements Hi all, I made two little improvements to the sipp: 1.) small delay in RTP echo function - first receive some RTP packets (e.g. 30) and only when all are = received then send it back 2.) play_pcap_audio action - add one semaphore to temporary disable RTP echo function when = play_pcap_audio action is used to play pre-recorded RTP stream - with this improvement both the RTP echo function and play_pcap_audio = action can be used on same script without mixing both audio streams = (without this audio is distorted). If anyone is interested to test it I made a patch against snapshots = sipp.2007-08-08.tar.gz (two files send_packets.c and=20 sipp.cpp). Tested only on Linux. Regards, Peter diff -urp sipp.2007-08-08/send_packets.c = sipp.2007-08-08_patch/send_packets.c --- sipp.2007-08-08/send_packets.c 2007-04-12 15:57:47.000000000 +0200 +++ sipp.2007-08-08_patch/send_packets.c 2007-08-17 16:00:56.000000000 = +0200 @@ -55,10 +55,14 @@ #include <string.h> #include <fcntl.h> =20 +#include <semaphore.h> + #include "send_packets.h" #include "prepare_pcap.h" #include "screen.hpp" =20 +extern sem_t rtp_echo_sem; + extern volatile unsigned long rtp_pckts_pcap; extern volatile unsigned long rtp_bytes_pcap; extern int media_ip_is_ipv6; @@ -135,6 +139,8 @@ send_packets (play_args_t * play_args) int fd_flags; #endif =20 + sem_wait(&rtp_echo_sem); + if (media_ip_is_ipv6) { sock =3D socket(PF_INET6, SOCK_RAW, IPPROTO_UDP); if (sock < 0) { @@ -217,6 +223,7 @@ send_packets (play_args_t * play_args) } #endif if (ret < 0) { + sem_post(&rtp_echo_sem); close(sock); WARNING_P1("send_packets.c: sendto failed with error: %s", = strerror(errno)); return( -1); @@ -228,6 +235,7 @@ send_packets (play_args_t * play_args) pkt_index++; } =20 + sem_post(&rtp_echo_sem); close(sock); return 0; } Only in sipp.2007-08-08_patch/: send_packets.o Only in sipp.2007-08-08_patch/: send_packets_orig.c Only in sipp.2007-08-08_patch/: sipp diff -urp sipp.2007-08-08/sipp.cpp sipp.2007-08-08_patch/sipp.cpp --- sipp.2007-08-08/sipp.cpp 2007-08-01 16:01:37.000000000 +0200 +++ sipp.2007-08-08_patch/sipp.cpp 2007-08-17 16:08:38.000000000 +0200 @@ -33,9 +33,19 @@ =20 #define GLOBALS_FULL_DEFINITION =20 +#include <semaphore.h> #include "sipp.hpp" #include "assert.h" =20 +#define MAX_DELAY_BUF 30 /* 30 RTP packets delay */ + +sem_t rtp_echo_sem; + +struct rtp_delay_buf { + char *msg; + size_t nr; +}; + #ifdef _USE_OPENSSL SSL_CTX *sip_trp_ssl_ctx =3D NULL; /* For SSL cserver context */ SSL_CTX *sip_trp_ssl_ctx_client =3D NULL; /* For SSL cserver context = */ @@ -2976,42 +2986,74 @@ void traffic_thread() =20 void rtp_echo_thread (void * param) { - char *msg =3D (char*)alloca(media_bufsize); - size_t nr, ns; + size_t ns; sipp_socklen_t len; struct sockaddr_storage remote_rtp_addr; - + rtp_delay_buf rtp_delay[MAX_DELAY_BUF];=20 + int rtp_index_r =3D 0; + int rtp_index_s =3D 0; + bool delay_done =3D false; =20 int rc; sigset_t mask; sigfillset(&mask); /* Mask all allowed signals */ rc =3D pthread_sigmask(SIG_BLOCK, &mask, NULL); =20 + for (rtp_index_r =3D 0; rtp_index_r < MAX_DELAY_BUF; rtp_index_r++) = { + rtp_delay[rtp_index_r].msg =3D (char *) malloc(media_bufsize);=20 + } +=09 + rtp_index_r =3D 0; for (;;) { + // wait for semafor and just unlock it + // if rtp play thread is running wait here and + // don't send rtp echo + sem_wait(&rtp_echo_sem); + sem_post(&rtp_echo_sem); + =09 len =3D sizeof(remote_rtp_addr); - nr =3D recvfrom(*(int *)param,=20 - msg,=20 + rtp_delay[rtp_index_r].nr =3D recvfrom(*(int *)param,=20 + rtp_delay[rtp_index_r].msg,=20 media_bufsize, 0,=20 (sockaddr *)(void *) &remote_rtp_addr,=20 &len); =20 - if (((long)nr) < 0) { + if (((long)rtp_delay[rtp_index_r].nr) < 0) { WARNING_P2("%s %i",=20 "Error on RTP echo reception - stopping echo - = errno=3D",=20 errno); + for (rtp_index_r =3D 0; rtp_index_r < MAX_DELAY_BUF; = rtp_index_r++) { + free(rtp_delay[rtp_index_r].msg);=20 + } + =20 return; } - ns =3D sendto(*(int *)param, msg, nr,=20 + + if (++rtp_index_r >=3D MAX_DELAY_BUF-1) { + rtp_index_r =3D 0; + rtp_index_s =3D 0; + delay_done =3D true; + } + =09 + if (delay_done =3D=3D true) { + ns =3D sendto(*(int *)param, rtp_delay[rtp_index_s].msg, = rtp_delay[rtp_index_s].nr,=20 0, (sockaddr *)(void *) &remote_rtp_addr,=20 len); =20 - if (ns !=3D nr) { + if (ns !=3D rtp_delay[rtp_index_s].nr) { WARNING_P2("%s %i",=20 "Error on RTP echo transmission - stopping echo - = errno=3D",=20 errno); + for (rtp_index_r =3D 0; rtp_index_r < MAX_DELAY_BUF; = rtp_index_r++) { + free(rtp_delay[rtp_index_r].msg);=20 + } return; } =20 + if (++rtp_index_s >=3D MAX_DELAY_BUF-1) { + rtp_index_s =3D 0; + } + =09 if (*(int *)param=3D=3Dmedia_socket) { =20 rtp_pckts++; rtp_bytes +=3D ns; @@ -3021,6 +3063,11 @@ void rtp_echo_thread (void * param) rtp2_pckts++; rtp2_bytes +=3D ns; } + } /* delay_done =3D=3D true */ + } + + for (rtp_index_r =3D 0; rtp_index_r < MAX_DELAY_BUF; rtp_index_r++) { + free(rtp_delay[rtp_index_r].msg);=20 } } =20 @@ -3550,6 +3597,8 @@ int main(int argc, char *argv[]) =20 generic[0] =3D NULL; =20 + sem_init(&rtp_echo_sem, 0, 1); + /* At least one argument is needed */ if(argc < 2) { help();=20 =20 -------------------------------------------------------------------------= This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Sipp-users mailing list Sip...@li... https://lists.sourceforge.net/lists/listinfo/sipp-users |