Juan Antonio Alvarez wrote:
On 12/6/06, Olivier Jacques <[EMAIL PROTECTED]> wrote:
Hi Juan,
this looks very nice!
Thanks!
Could you document that in the wiki
(http://sipp.sourceforge.net/wiki/)?
Done!
http://sipp.sourceforge.net/wiki/index.php/Getting_feedback_from_the_server
If you would like to put this code under GPL, I could add it in a
contrib
directory under SIPp's SVN.
It's GPL, just forgot to put it clear in the README.
Just let me know...
Olivier.
Please people, give it a try if you can, and let me know how it went.
Thanks,
Juan
Juan,
I just checked that in. This is now available with SIPp source code in
tools/monitor/ subdirectory.
This is in SVN 149 or 2006-01-18 release.
Thanks so much, and sorry for the delay. If the scripts have evolved,
don't hesitate to send me a diff.
Olivier.
--
Olivier
HP OpenCall Software
http://www.hp.com/go/opencall/
--- Begin Message ---
Revision: 149
http://svn.sourceforge.net/sipp/?rev=149&view=rev
Author: ojacques
Date: 2007-01-18 09:41:28 -0800 (Thu, 18 Jan 2007)
Log Message:
-----------
tool: monitor remote SIP servers through SNMP - contributed by Juan Antonio
Alvarez
Added Paths:
-----------
sipp/trunk/tools/
sipp/trunk/tools/monitor/
sipp/trunk/tools/monitor/README.txt
sipp/trunk/tools/monitor/auto_script
sipp/trunk/tools/monitor/fullcsv
sipp/trunk/tools/monitor/snmparser
Added: sipp/trunk/tools/monitor/README.txt
===================================================================
--- sipp/trunk/tools/monitor/README.txt (rev 0)
+++ sipp/trunk/tools/monitor/README.txt 2007-01-18 17:41:28 UTC (rev 149)
@@ -0,0 +1,78 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ *
+ * Author : Juan Antonio Alvarez <[EMAIL PROTECTED]>
+ */
+README
+
+These scripts are intended to gather information from a SIP server under test.
+An entry in SIPp wiki is available for more details:
+http://sipp.sourceforge.net/wiki/index.php/Getting_feedback_from_the_server
+
+
+The script auto_test runs sipp with a series of parameters configured as BASH
+variables. snmparser goes trough the files generated by snmp runs and builds a
+comma separated values file with the relevant information (i.e. those fields
+that changed over the different runs). fullcsv runs snmparser for all the snmp*
+files in the directory and pastes them together with sipp stats output.
+
+REQUIREMENTS
+
+First of all, your SIP server must be running some snmp server.
+
+auto_script needs
+- bash
+- awk
+- netcat
+- net-snmp
+
+snmparser is a php script, so it needs php-cli (chmod +x if you want to use it
+with fullcsv).
+
+fullcsv is a simple bash script, it uses sed and paste, but that should be
+available in most linux boxes.
+
+HOW TO RUN THEM
+
+Make sure your system meets the requirements. Edit auto_script. Modify all the
+variables so that they fit your taste, everything is commented so it shouldn't
+be a problem. The variable test_name is some custom name for this particular
+run. A directory will be created with that name and every stats will be dumped
+there.
+
+To start the test, simply run bash auto_script. Note that the script only takes
+care of the UAC part. If you intend sipp to run the UAS part as well, you
should
+run it for yourself. Something like
+sipp -sn uas -p <sip_listen_port> -mp <media_port>
+should be enough.
+
+If you wish to convert what you've got into something easier to analyze, cd to
+test_name directory, and run
+
+bash ../fullcsv
+
+A file named full.csv will be created. It should be really easy to import that
+file in any spreadsheet, and even SPSS or R for further analysis.
+
+PLEASE NOTE
+
+All three scripts should be in the same directory. Be sure to edit the path to
+sipp in auto_script.
+
+When running fullcsv, take into account that it expects the files from only one
+run to reside in the directory. You can know they are all from the same run,
+because they have the same ending, that is the unix timestamp of the time the
+test was launched.
+
Added: sipp/trunk/tools/monitor/auto_script
===================================================================
--- sipp/trunk/tools/monitor/auto_script (rev 0)
+++ sipp/trunk/tools/monitor/auto_script 2007-01-18 17:41:28 UTC (rev
149)
@@ -0,0 +1,307 @@
+#!/bin/bash
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+#
+# Author : Juan Antonio Alvarez <[EMAIL PROTECTED]>
+# Ignacio Martin
+#
+
+# Requirements:
+# - bash
+# - awk
+# - netcat
+# - net-snmp
+
+#[general]
+test_name=asterisk_test7 # just for reference. A directory will be created
with this name to dump data
+sut=192.168.101.247 # Server Under Test
+sipp_path=/home/juan/src/sipp.2006-11-30
+sipp_executable=sipp
+test_duration=300 # Test duration in minutes.
+log_frequency=1 # Set the statistics dump log report frequency [mins]
+increase=10 # Increase n calls
+increase_every=6 # Increase calls every n mins.
+
+#[sipp_basic]
+service_name=s # Set the username part of the resquest URI.
+duration=default # Duration of the call
+call_rate=10 # Call rate
+rate_period=default # rate period for call rate
+max_sockets=default # Set the max number of sockets to open simultaneously.
+scenario_file=default # Loads an alternate xml scenario file.
+scenario_name=default # Use a default scenario.
+transport_mode=default # [u1|un|ui|t1|tn|l1|ln] : Set the transport mode
+rtp_echo=default # Enable RTP echo.
+media_port=default # Set the local RTP echo port number.
+inf=default # csv to inject values from
+calls_limit=default # Set the maximum number of simultaneous calls.
+max_calls=default # Stop the test and exit when 'calls' calls are processed.
+
+#[sipp_logs]
+trace_msg=default # Displays sent and received SIP messages in <scenario
file name>_<pid>_messages.log
+trace_screen=true # Dump statistic screens in the
<scenario_name>_<pid>_screens.log
+trace_timeout=default # Displays call ids for calls with timeouts in
<scenario file name>_<pid>_timeout.log
+# trace_stat=default # Dumps all statistics in <scenario_name>_<pid>.csv
!!!OBSOLETE ALLWAYS ON!!!
+stats_filename=sipp_stats # Set the file name to use to dump statistics
+trace_err=true # Trace all unexpected messages in <scenario file
name>_<pid>_errors.log
+trace_logs=default # Allow tracing of <log> actions in <scenario file
name>_<pid>_logs.log
+trace_rtt=default # Allow tracing of all response times in <scenario file
name>_<pid>_rtt.csv
+rtt_freq=default # Dump response times every freq calls in the log file
defined by -trace_rtt
+# stat_frequency=default # Set the statistics report frequency on screen
[secs] OBSOLETE
+
+#[sipp_advanced] !!!!! NOT IMPLEMENTED !!!!!
+
+local_port=default # set the local port number
+local_ip=default # local IP address for several headers
+bind_local=default # the local IP address is used as the source IP address.
+timer_resol=default # Set the timer resolution in milliseconds.
+max_recv_loops=default # maximum number of messages received read per cycle.
+up_nb=default # number of updates of the internal clock during the reading
of received messages.
+base_cseq=default # Start value of [cseq] for each call.
+auth_uri=default # Force the value of the URI for authentication.
+ip_field=default # Set which field from the injection file contains the IP
address.
+rtt_freq=default # Dump response times every freq calls in the log file
+auth_password=default # Set the password for authentication challenges.
+tls_cert=default # Set the name for TLS Certificate file.
+tls_key=default # Set the name for TLS Private Key file.
+tls_crl=defailt # Set the name for Certificate Revocation List file.
+local_rtp_ip=default # Set the local media IP address.
+rtp_buf_size=default # Set the RTP echo buffer size (default: 2048).
+third_pcc=default # ip:port. Launch the tool in 3pcc mode
+udp_retrans_off=default # Disable retransmission in UDP mode.
+max_udp_retrans=default # Maximum number of UDP retransmissions before call
ends on timeout.
+no_default=default # No Default. Disable all default behavior of SIPp
+rsa=default # Set the remote sending address to host:port.
+max_reconnect=default # Set the the maximum number of reconnection.
+aa=default # Enable the automatic answer for the INFO msgs.
+
+#[fixed]
+bg=1 # background mode
+
+#[snmp]
+version="2c"
+community="sipptest"
+sys_descr="SNMPv2-MIB::sysDescr.0"
+
+total_tables=0 # Number of tables retrieved
+
+total_walks=7
+walk[1]=".1.3.6.1.4.1.2021" # UC Davis MIB
+#walk[2]=".1.3.6.1.2.1.25.4.2" # process list
+#walk[3]=".1.3.6.1.2.1.25.5.1" # CPU and mem
+walk[2]=".1.3.6.1.2.1.25.2.3" # Storage
+walk[3]=".1.3.6.1.2.1.2.2" # Interfaces
+walk[4]=".1.3.6.1.2.1.1" # System
+walk[5]=".1.3.6.1.2.1.4" # ip
+walk[6]=".1.3.6.1.2.1.5" # icmp
+#walk[7]=".1.3.6.1.2.1.6" # tcp
+#walk[8]=".1.3.6.1.2.1.7" # udp
+#host
+walk[7]=".1.3.6.1.2.1.25.1" # hrSystem
+
+##### Test start time #####
+b_time=`date +%s`
+echo Starting the test on time: $b_time
+
+##### Get System info #####
+
+system=`snmpget -v $version -c $community $sut $sys_descr`
+
+if [ $? -ne 0 ]
+then
+ echo Error: Could not establish SNMP connection!
+ exit 33
+fi
+echo Testing: $system
+
+
+mkdir $test_name
+cd $test_name
+
+
+
+##### SIPP COMMAND PREP #####
+
+sipp_comm_line=$sipp_path/$sipp_executable
+
+## FIXED ##
+if [[ $bg == 1 ]]
+then
+ sipp_comm_line="${sipp_comm_line} -bg"
+fi
+
+## BASIC ##
+
+if [ $service_name != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -s ${service_name}"
+fi
+if [ $duration != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -d ${duration}"
+fi
+if [ $call_rate != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -r ${call_rate}"
+fi
+if [ $rate_period != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -rp ${rate_period}"
+fi
+if [ $max_sockets != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -max_sockets ${max_sockets}"
+fi
+if [ $scenario_file != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -sf ${scenario_file}"
+fi
+if [ $scenario_name != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -sn ${scenario_name}"
+fi
+if [ $transport_mode != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -t ${transport_mode}"
+fi
+if [ $rtp_echo != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -rtp_echo ${rtp_echo}"
+fi
+if [ $media_port != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -mp ${media_port}"
+fi
+if [ $inf != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -inf ${inf}"
+fi
+if [ $calls_limit != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -l ${calls_limit}"
+fi
+if [ $max_calls != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -m ${max_calls}"
+fi
+
+### STATS ###
+if [ $stats_filename != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -stf ${stats_filename}_${b_time}"
+fi
+if [ $trace_msg != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_msg"
+fi
+if [ $trace_screen != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_screen"
+fi
+if [ $trace_timeout != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_timeout"
+fi
+if [ $trace_err != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_err"
+fi
+if [ $trace_logs != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_logs"
+fi
+if [ $trace_rtt != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -trace_rtt"
+fi
+if [ $rtt_freq != default ]
+then
+ sipp_comm_line="${sipp_comm_line} -rtt_freq ${rtt_freq}"
+fi
+
+
+
+## GENERAL ##
+
+let "fd = $log_frequency * 60"
+sipp_comm_line="${sipp_comm_line} -trace_stat -fd ${fd}"
+sipp_comm_line="${sipp_comm_line} ${sut}"
+
+# Buscamos el puerto en que va a estar escuchando esta
+# instancia de sipp
+sipp_instances=`pidof sipp | awk '{print NF}'`
+let "sipp_port = 8888 + sipp_instances"
+$sipp_comm_line
+echo SIPp was run using: $sipp_comm_line
+
+# Ciclos de ejecución
+
+let "last_l_time = -1" # Para tomar datos en el momento 0
+let "elapsed = 0" #( $t_time - $b_time ) / 5"
+
+while (( elapsed <= test_duration ))
+do
+
+ # Verificar si hay que incrementar
+ if (( (elapsed != last_i_time) && ((elapsed % increase_every) == 0) ))
+ then
+ echo "=====> increasing calls... <====="
+ i=$increase
+
+ # SIPp no permite llevar el numero de llamadas a "n"
+ # entonces es necesario hacer lo siguiente para incrementar
+ # las llamadas
+ while (( (i % 10) != 0 ))
+ do
+ echo "+" | nc -u 127.0.0.1 $sipp_port -q 0
+ let "i = i - 1"
+ done
+ while (( i > 0 ))
+ do
+ echo "*" | nc -u 127.0.0.1 $sipp_port -q 0
+ let "i = i - 10"
+ done
+ last_i_time=$elapsed
+ fi
+
+ # Verificar si hay que loguear
+ if (( (elapsed != last_l_time) && ((elapsed % log_frequency) == 0) ))
+ then
+ echo "<<<<< taking data... >>>>>"
+ i=$total_tables
+ while (( $i > 0 ))
+ do
+ snmptable -v $version -c $community $sut ${table[$i]}
>> snmptable${table[$i]}_$b_time
+ let "i = i - 1"
+ done
+ i=$total_walks
+ while (( $i > 0 ))
+ do
+ snmpwalk -v $version -c $community $sut ${walk[$i]} >>
snmpwalk${walk[$i]}_$b_time
+ let "i = i - 1"
+ done
+ last_l_time=$elapsed
+ fi
+
+ sleep 1
+ t_time=`date +%s`
+ let "elapsed = ( $t_time - $b_time ) / 60"
+done
+
+echo "q" | nc -u 127.0.0.1 $sipp_port -q 0
+
+echo Test finalized on time: $t_time
+
+exit 0
+
Property changes on: sipp/trunk/tools/monitor/auto_script
___________________________________________________________________
Name: svn:executable
+ *
Added: sipp/trunk/tools/monitor/fullcsv
===================================================================
--- sipp/trunk/tools/monitor/fullcsv (rev 0)
+++ sipp/trunk/tools/monitor/fullcsv 2007-01-18 17:41:28 UTC (rev 149)
@@ -0,0 +1,43 @@
+#!/bin/bash
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+#
+# Author : Juan Antonio Alvarez <[EMAIL PROTECTED]>
+# Ignacio Martin
+#
+
+# Hacemos un solo archivo con todas las salidas
+
+# Procesamos la salida de sipp para que tenga \t
+
+for i in `ls sipp_stats*`
+do
+ sed s/\;$//g $i > $i.1.tmp
+ sed s/\;/\\t/g $i.1.tmp > $i.2.tmp
+ args=`echo "$args $i.2.tmp"`
+done
+
+# Procesamos la salida de snmpwalk para dejarla como csv
+
+for i in `ls snmp* | grep -v csv`
+do
+ ~/proyectos/tesis/auto_script/snmparser $i > $i.tmp
+ args=`echo "$args $i.tmp"`
+done
+
+# pasting alltogether!
+
+paste -d# $args | sed s/#/\\t/g > full.csv
+
+rm *.tmp
Property changes on: sipp/trunk/tools/monitor/fullcsv
___________________________________________________________________
Name: svn:executable
+ *
Added: sipp/trunk/tools/monitor/snmparser
===================================================================
--- sipp/trunk/tools/monitor/snmparser (rev 0)
+++ sipp/trunk/tools/monitor/snmparser 2007-01-18 17:41:28 UTC (rev 149)
@@ -0,0 +1,161 @@
+#!/usr/bin/php
+<?php
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+//
+// Author : Juan Antonio Alvarez <[EMAIL PROTECTED]>
+// Ignacio Martin
+//
+// Definitions
+
+$SEPARATOR = "\t";
+$EMPTY = "NA";
+
+// MAIN LOOP //
+foreach ($argv as $filenum => $file) {
+ if ($filenum != 0) {
+ $container[$filenum] = read_snmpwalk_dump_nodups($file);
+ }
+}
+if (is_array($container) && $container[1] != NULL)
+ print_csv ($container, $SEPARATOR);
+
+
+function read_snmpwalk_dump($file)
+{
+ $i = $j = 0;
+
+ if (!($lines = file ($file)))
+ echo "ERROR: No se pudo abrir el archivo\n";
+
+ foreach ($lines as $line) {
+ $pos = strpos($line, "::");
+ $root = substr($line, 0, $pos);
+ $tmp_str = substr($line, $pos+2);
+ $pos = strpos ($tmp_str, " = ");
+ $leaf = substr($tmp_str, 0, $pos);
+ $tmp_str = substr($tmp_str, $pos+3);
+ $pos = strpos ($tmp_str, ": ");
+ $type = substr ($tmp_str, 0, $pos);
+ $value = substr ($tmp_str, $pos+2);
+
+ //para que sea leible por SPSS
+ $leaf = str_replace(".","_",$leaf);
+ //Sacamos el \n del final
+ $value = substr ($value, 0, strpos($value, "\n"));
+
+ //Agregamos " cuando no están cerradas
+ $pos=strpos($value,"\"");
+ if($pos!==false){
+ if ($pos == 0)
+ if (!strpos(substr($value, 1),"\""))
+ $value =sprintf("%s\"",$value);
+ }
+ //echo "root: $root leaf: $leaf type: $type value: $value\n";
+
+
+ if($j == 0) {
+ $root1 = $root;
+ $leaf1 = $leaf;
+ }
+
+ /* Typecasting de valores
+ * no se si tiene sentido hacerlo...
+ switch ($type) {
+ case "INTEGER":
+ } */
+
+ if ($i==0)
+ $leaves[$j] = $leaf;
+
+ if ($j!=0 && $root == $root1 && $leaf == $leaf1)
+ $i++;
+
+ $container[$leaf][$i] = $value;
+ // Si es un counter, agregar también las diferencias.
+ if(strripos($type, "counter") !== false) {
+ // Tenemos un counter! empezar las diferencias si no es
el primer paso
+ // Rellenamos el primero con 0 para no tener quilombo
+ $dif_leaf = sprintf("difs_%s", $leaf);
+ if($i > 0)
+ $container[$dif_leaf][$i] =
$container[$leaf][$i] - $container[$leaf][$i-1];
+ elseif ($i == 0)
+ $container[$dif_leaf][$i] = $EMPTY;
+ }
+
+ $j++;
+
+ }
+
+ fprintf (STDERR,"Archivo: %s. Se procesaron %d registros, se
encontraron %d repeticiones.\n",$file,$j,$i+1);
+ return $container;
+}
+
+function read_snmpwalk_dump_nodups($file)
+{
+ $container = read_snmpwalk_dump($file);
+
+ foreach ($container as $leaf => $data) {
+ $is_first = true;
+ foreach ($data as $value) {
+ if($is_first)
+ $old_value = $value;
+ if($value != $old_value && $changes[$leaf] !== true) {
+ $changes[$leaf] = true;
+ $dif_container[$leaf] = $container[$leaf];
+ }
+ $old_value = $value;
+ $is_first = false;
+ }
+ }
+ return $dif_container;
+}
+
+function print_csv($container, $separator)
+{
+ foreach ($container as $data_array) {
+ $col = 0;
+ foreach ($data_array as $key => $table) {
+ $lineas[0][$col]=$key;
+ foreach ($table as $index => $value){
+ //echo "$key :: $index => $value\n";
+ $lineas[$index+1][$col] = $value;
+ }
+ $col++;
+ }
+ foreach ($lineas as $line_num => $linea) {
+ $last_col = 0;
+ if ($line_num != 0)
+ echo "\n";
+ foreach ($linea as $col_num => $col_data) {
+ if($col_num == 0)
+ echo "$col_data";
+ elseif ($col_num == $last_col + 1)
+ echo "$separator$col_data";
+ else {
+ for ($i = $last_col;$i<$col_num;$i++){
+ echo "$separator$EMPTY";
+ }
+ }
+ $last_col = $col_num;
+ }
+
+ //$csv_line = implode ($separator,$linea);
+ //echo "$csv_line\n";
+ }
+ }
+ //var_dump($lineas);
+}
+
+?>
Property changes on: sipp/trunk/tools/monitor/snmparser
___________________________________________________________________
Name: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sipp-commits mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/sipp-commits
--- End Message ---
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sipp-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sipp-users