di_log Readme
-------------
The di_log module provides a ring buffer logging facility 
which on request dumps the ring buffer contents either as 
result of the DI call or in a file on HD. dumping the ring 
buffer can be invoked via DI interface (for example remotely 
from the stats module).

ring buffer size and string length can be customized at compile 
time, see DILog.h

exported functions
------------------

  help : return help string

  dumplog : return contents of buffer 

  dumplogtodisk(string filename) : dump buffer contents into file

examples of invocation through query_stats
------------------------------------------

./query_stats -c "DI di_log help" 
./query_stats -c "DI di_log dumplog" 
  the dump will most probably be truncated due to string length 
  constraint

./query_stats -c "DI di_log dumplogtodisk log_file.log"


about performance
-----------------

snprintf'ing and vsnprintf'ing all debug messages does consume 
quite some CPU power, especially on call setup and tear down as 
there are a lot of debug messages print out. for high cps with G711,
this can hinder good performance. some numbers: 
 
for G711 announcement (from file) over loopback interface, the 
following was measured over 2000 calls using sipp and valgrind:
 call length        CPU consumed by logging (log_fac_print, incl) 
   5s                  34%
   1s                  58%

for GSM announcement cpu usage of encoding relativates the one of logging :
   5s                   9%
   1s                  14%

for iLBC announcement even more: 
   5s                   1%
   1s			4%


for participants conference, 30s/ call, logging 
used 
participants  codec                 logging CPU 
   50         G711                   16%
   10         GSM                     0.8%
    5         iLBC                    0.4%

valgrind command:
 valgrind --tool=callgrind --instr-atstart=no ./sems -f sems.conf -D 1 -E

sipp command: 
  conference: 
   sipp -sf sippuac.xml -i 127.0.0.1 \
     -rtp_echo -m 2000 -l 50 -d 30000 -s 8 127.0.0.1:5060
  announcement 1s:
   sipp -sf sippuac.xml -i 127.0.0.1 \
     -rtp_echo -m 2000 -l 50 -d 1000 -s 7 127.0.0.1:5060 
  announcement 5s:
   sipp -sf sippuac.xml -i 127.0.0.1 \
     -rtp_echo -m 2000 -l 50 -d 5000 -s 7 127.0.0.1:5060 


sippuac.xml is -sn uac scenario, with 5070 as contact 
(no target updating from contact implemented in sipp)

sippuac.xml:
---------------------------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">

<!-- 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             -->
<!--                                                                    -->
<!--                 Sipp default 'uac' scenario.                       -->
<!--                                                                    -->

<scenario name="Basic Sipstone UAC">
  <!-- In client mode (sipp placing calls), the Call-ID MUST be         -->
  <!-- generated by sipp. To do so, use [call_id] keyword.                -->
  <send retrans="500">
    <![CDATA[

      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: sut <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 1 INVITE
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Performance Test
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
      s=-
      c=IN IP[media_ip_type] [media_ip]
      t=0 0
      m=audio [media_port] RTP/AVP 0
      a=rtpmap:0 PCMU/8000

    ]]>
  </send>

  <recv response="100"
        optional="true">
  </recv>

  <recv response="180" optional="true">
  </recv>

  <recv response="183" optional="true">
  </recv>

  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
  <!-- are saved and used for following messages sent. Useful to test   -->
  <!-- against stateful SIP proxies/B2BUAs.                             -->
  <recv response="200" rtd="true">
  </recv>

  <!-- Packet lost can be simulated in any send/recv message by         -->
  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
  <send>
    <![CDATA[

      ACK sip:[service]@[remote_ip]:5070 SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 1 ACK
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Performance Test
      Content-Length: 0

    ]]>
  </send>

  <!-- This delay can be customized by the -d command-line option       -->
  <!-- or by adding a 'milliseconds = "value"' option here.             -->
  <pause/>

  <!-- The 'crlf' option inserts a blank line in the statistics report. -->
  <send retrans="500">
    <![CDATA[

      BYE sip:[service]@[remote_ip]:5070 SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 2 BYE
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Performance Test
      Content-Length: 0

    ]]>
  </send>

  <recv response="200" crlf="true">
  </recv>

  <!-- definition of the response time repartition table (unit is ms)   -->
  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

  <!-- definition of the call length repartition table (unit is ms)     -->
  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

</scenario>