parse-by-call.pl
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #! /usr/bin/perl
  2. # ====================================================================
  3. # The Vovida Software License, Version 1.0 
  4. # Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in
  12. #    the documentation and/or other materials provided with the
  13. #    distribution.
  14. # 3. The names "VOCAL", "Vovida Open Communication Application Library",
  15. #    and "Vovida Open Communication Application Library (VOCAL)" must
  16. #    not be used to endorse or promote products derived from this
  17. #    software without prior written permission. For written
  18. #    permission, please contact vocal@vovida.org.
  19. # 4. Products derived from this software may not be called "VOCAL", nor
  20. #    may "VOCAL" appear in their name, without prior written
  21. #    permission of Vovida Networks, Inc.
  22. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  23. # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  24. # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  25. # NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  26. # NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  27. # IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  28. # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  30. # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  31. # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  32. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  33. # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  34. # DAMAGE.
  35. # ====================================================================
  36. # This software consists of voluntary contributions made by Vovida
  37. # Networks, Inc. and many individuals on behalf of Vovida Networks,
  38. # Inc.  For more information on Vovida Networks, Inc., please see
  39. # <http://www.vovida.org/>.
  40. # $Id: parse-by-call.pl,v 1.4 2000/08/12 01:25:12 bogawa Exp $
  41. # code to parse an ipgrab log by call
  42. require "getopts.pl";
  43. &Getopts("lb:h");
  44. if($opt_h) {
  45.     &usage();
  46. }
  47. foreach(@ARGV) {
  48.     $start_seen = 0;
  49.     open(FILE, $_) || die "can't open $_: $!";
  50.     if($opt_b) {
  51. if($opt_b < 0) {
  52.     seek(FILE, $opt_b, 2);
  53. } elsif ($opt_b > 0) {
  54.     seek(FILE, $opt_b, 1);
  55. }
  56.     }
  57.     while(<FILE>) {
  58. if(/^sip-req:/ || /^sip-res:/) {
  59.     if($start_seen) {
  60. if(!defined($call{$call_id})) {
  61.     $call{$call_id} = [];
  62. }
  63. push(@{$call{$call_id}}, @msg);
  64.     } else {
  65. $start_seen = 1;
  66.     }
  67.        undef(@msg);
  68.     push(@msg, $_);
  69.     # start of a new one
  70.     $call_id = "";
  71. } elsif($start_seen && /^Header:/) {
  72.     # continues
  73.     push(@msg, $_);
  74.     if(/Call-ID: (.+)$/) {
  75. $call_id = $1;
  76. #     print "got $call_idn";
  77.     }
  78. } else {
  79.     # all else is ignored
  80. }
  81.     }
  82.     if(!defined($call{$call_id})) {
  83. $call{$call_id} = [];
  84.     }
  85.     push(@{$call{$call_id}}, @msg);
  86.     
  87.     undef(@msg);
  88.     push(@msg, $_);
  89.     # start of a new one
  90.     $call_id = "";
  91.     close(FILE);
  92. }
  93. foreach(sort keys %call) {
  94.     print "Call-ID: $_n";
  95.     if($opt_l) {
  96. foreach(@{$call{$_}}) {
  97.     print;
  98. }
  99.     } else {
  100. print grep(/^sip-r/, @{$call{$_}});
  101.     }
  102. }
  103. sub usage {
  104.     print <<EOF
  105. Usage: $0 [-b byte-offset] [-l] IPGRAB-FILE...
  106. Analyze IPGRAB-FILE(s) by sorting the SIP messages according to
  107. Call-ID.  Output is of the form:
  108.   Call-ID: <call-id>
  109.   sip-req:    INVITE ...
  110.   sip-res:    SIP/2.0 100 Trying ...
  111.     <rest of SIP messages with matching Call-ID>
  112.   Call-ID: <call-id>
  113.     ...
  114. Options:
  115.     -b byte-offset          if byte-offset is positive, seek byte-offset bytes
  116.                             forward in each IPGRAB-FILE before starting to 
  117.     parse.
  118.                             if byte-offset is negative, seek byte-offset bytes
  119.                             backward from the end of each IPGRAB-FILE before
  120.     starting to parse.
  121.     -l                      Print the entire SIP message instead of just the
  122.                             sip-req / sip-res line.
  123. BUGS
  124.     ipgrab must be modified to put the timestamp in more places
  125.     (e.g. in the SIP header line).  Then $0 can be modified to look at
  126.     the timestamps in multiple files and reorder them correctly.
  127. EOF
  128.   ;
  129.     exit -1;
  130. }