F. Tarek Rogers wrote:
> Hi,  
>
> I have a need to modify SIPp to support multiple remote destinations in UAC 
> mode.  The idea being to supply additional hosts to SIPp, which are stored in 
> an array of remote_hosts[], and then each successive call does a round robin 
> to the next host in the array.  A new variable in the call class stores the 
> index to the socket array that is used by that call's destination.  The goal 
> is to test a N-wide server setup, where launching N instances of SIPp becomes 
> unwieldy for the operator.
>   
Hi Tarek, Interesting!
> I've done some of this work, but have a few areas of code in sipp.c that I'm 
> not familiar with, and I'm hoping someone can shed some light:
>
> Issue #1:  recv_message in sipp.c makes a call to send_message, which 
> supplies a socket.  The send is in a conditional block like thus:
>   if((pollfiles[(*poll_idx)].revents & POLLOUT) != 0 ) {
>     ...
>     if (pending_msg[(*poll_idx)] != NULL)
>       {
>         char * VP_tmp = strdup(pending_msg[(*poll_idx)]);
>         free(pending_msg[(*poll_idx)]);
>         pending_msg[(*poll_idx)] = NULL;
>         send_message(pollfiles[(*poll_idx)].fd, NULL, VP_tmp, 0);
>         free(VP_tmp);
>       }
>
> Can someone enlighten me on what pollfiles is?  This looks like a way to send 
> messages that have already been queued up by the call somewhere.  If using a 
> call based socket - how would I go about identifying the call instance 
> involved in the pending message?
>   
pollfiles is a table of file descriptor for all the sockets (useful in 
multi-socket mode for example). pending_msg is there in case of TCP 
transport where only part of the message was sent previously (in 
send_message). In this case, the rest of the message needs to be send in 
the next loop. The index is *poll_idx.
>
> Issue #2:  This code accepts an incoming TCP connection request.  
>         if(s == main_socket) {
>           /* New incoming connection */
>           sipp_socklen_t len = SOCK_ADDR_SIZE(&remote_sockaddr);
>           int new_sock = accept(s,(sockaddr *)(void *)&remote_sockaddr,&len);
>
> My assumption is that this will only be executed during UAS mode, since UAC 
> mode initiates all his socket connections?
>   
That is correct.
>
> Issue #3: decompress_if_needed which is called by recv_message uses a sock.  
> At this point in recv_message, I've no idea what's being done.  Can someone 
> speak intelligently about what the code surrounding decompress_if_needed does?
>   
decompress_if_needed is used for a private compression algorithm, loaded 
at run time (shared library) that is not released along with SIPp. This 
method decompress the message if compression is used (not your case 
obviously).

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sipp-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sipp-users

Reply via email to