proxy-2600
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:8k
源码类别:

流媒体/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. use Socket;
  41. require "getopts.pl";
  42. &Getopts("n:");
  43. $number = $opt_n;
  44. if($#ARGV < 1) {
  45. #  print "Usage:n";
  46. #  print "$0 a:b:c d:e:f gn";
  47. #  print "where,n";
  48. #  print "a = agent host e.g. 192.168.5.1n";
  49. #  print "b = gateway sends to this port e.g. 2427n";
  50. #  print "c = agent listens to this port e.g. 5010n";
  51. #  print "d = gateway host e.g. 192.168.5.171n";
  52. #  print "e = agent sends to this port e.g. 5050n";
  53. #  print "f = gateway listens to this port e.g. 2427n";
  54. #  print "g = filter filen";
  55. #  print "e.g.n$0 192.168.22.17:2427:5011 192.168.5.146:5051:2427n";
  56. #  exit(-1);
  57.   $ARGV[0] = "172.19.175.195:2427:5011";
  58.   $ARGV[1] = "172.19.175.222:5051:2427";
  59. }
  60. open(F, $ARGV[0]);
  61. while(<F>) {
  62.   chomp;
  63.   if(/^listener/) {
  64.     #listener  name        port     filter            default-sender
  65.     ($file, $in_name, $in_port, $in_filter_name, $in_default_sender) = split(/s+/);
  66.     &mksocket($in_port, "IN_$in_name");
  67.     $in_port{$in_name} = $in_port;
  68.     $in_filter{$in_name} = $in_filter_name;
  69.     $in_sender{$in_name} = $in_default_sender;
  70.     
  71.   } elsif(/^sender/) {
  72.     #sender   sender-name   destination-ip   destination-port   listener-name
  73.     ($file, $in_name, $in_port, $in_filter_name, $in_default_sender) = split(/s+/);
  74.   }
  75. }
  76. close(F);
  77. ($host1, $local_port1, $remote_port1) = split(/:/, $ARGV[0]);
  78. ($host2, $local_port2, $remote_port2) = split(/:/, $ARGV[1]);
  79. &mksocket($local_port1, S1);
  80. &mksocket($local_port2, S2);
  81. ($name,$aliases,$type,$len,$host1_addr) = gethostbyname($host1);
  82. ($name,$aliases,$type,$len,$host2_addr) = gethostbyname($host2);
  83. $them_S1 = pack($sockaddr,PF_INET, $remote_port1, $host1_addr);
  84. $them_S2 = pack($sockaddr,PF_INET, $remote_port2, $host2_addr);
  85. # ($name,$aliases,$type,$len,$host3_addr) = gethostbyname("192.168.5.1");
  86. # $them_agent1 = pack($sockaddr,PF_INET, "5012", $host3_addr);
  87. # $them_agent2= pack($sockaddr,PF_INET, "5011", $host3_addr);
  88. sub mksocket {
  89.   local($port, $socket) = @_;
  90.   
  91.   $sockaddr = "S n a4 x8";($name,$aliases,$proto) = getprotobyname('udp');
  92.   chomp($hostname  = `hostname`);
  93.   #$hostname  = "192.168.10.12";
  94.   
  95.   ($name,$aliases,$type,$len,$myaddr) = gethostbyname($hostname);
  96.   
  97.   $me   = pack($sockaddr,PF_INET, $port, $myaddr);
  98.   
  99.   print "myaddr: $myaddrn";
  100.   print "port: $portn";
  101.   
  102.   socket($socket, PF_INET, SOCK_DGRAM, $proto) || die $!;
  103.   bind($socket , $me) || die "died with port $port $!";
  104.   
  105. }
  106. while(1) {
  107.   $rin = '';
  108.   vec($rin, fileno(S1), 1) = 1;
  109.   vec($rin, fileno(S2), 1) = 1;
  110.   #        @bits = split(//, unpack("b*", $rin));
  111.   # if($bits[fileno(S)]) {
  112.   # print "got Sn";
  113.   # }
  114.   if(select($rin, undef, undef, undef)) {
  115.     @bits = split(//, unpack("b*", $rin));
  116.     undef($data);
  117.     undef($new_data);
  118.     if($bits[fileno(S1)]) {
  119.       print "got S1n";
  120.       $data = "";
  121.       $his_address = recv(S1, $data, 60000, 0);
  122.       if($data) {
  123. print "-----------------------------n";
  124. print "$data";
  125. print "-----------------------------n";
  126.         $new_data = &rewrite_S1($data);
  127.         if($new_data) {
  128.   print "$new_data";
  129.   print "-----------------------------n";
  130.   defined(send(S2,$new_data,0,$them_S1)) || die $!;
  131.         }
  132.       }
  133.     } elsif($bits[fileno(S2)]) {
  134.       print "got S2n";
  135.       $data = "";
  136.       $his_address = recv(S2, $data, 60000, 0);
  137.       if($data) {
  138. print "-----------------------------n";
  139. print "$data";
  140. print "-----------------------------n";
  141.         $new_data = &rewrite_S2($data);
  142.         if($new_data) {
  143.   print "$new_data";
  144.   print "-----------------------------n";
  145.   defined(send(S1,$new_data,0,$them_S2)) || die $!;
  146.         }
  147.       }
  148.     }
  149.   }
  150. }
  151. #$them = pack($sockaddr,PF_INET, $port, $myaddr);
  152. #send(S,$msg,0,$them) || die $!;
  153. sub renumber_S2 {
  154.   local($_) = $_[0];
  155.   
  156.   s/^([0-9]*)s([0-9]*)s/$1 $map{$2} /;
  157.   $map{$number} = $2;
  158.   
  159.   return $_;
  160. }
  161. sub renumber_S1 {
  162.   local($_) = $_[0];
  163.   if(s/^([a-zA-Z]*)s([0-9]*)s/$1 $number /) {
  164.     $map{$number} = $2;
  165.     $number++;
  166.   }
  167.   return $_;
  168. }
  169. # incoming messages to the call agent
  170. sub rewrite_S1
  171. {
  172.   local($_) = $_[0];
  173. #  if(y///d) {
  174. #    print "killed \0!n";
  175. #  }
  176.   # pretend a wild card is actually for the first endpoint
  177. #  s/*@ubr/aaln/0@ubr/;
  178.   # Use _ instead of / due to parsing problems (also change ubr924 to galileo)
  179.   # split up dialed digits
  180. #  s/O: D/9/o: d/5,d/0,d/0,d//;
  181. #  s/O: D/9([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])/o: d/9,d/1,d/2,d/3,d/4,d/5,d/6,d/7/;
  182. #  s/O: D/([0-9])([0-9])([0-9])([0-9])/o: d/1,d/2,d/3,d/4/;
  183. #  s/*@MGCP-2600.private.vovida.com/6243@192.168.22.17/g;
  184. #  s/*@MGCP-2600.private.vovida.com/aaln/S1/SU0/0@MGCP-2600.private.vovida.com/g;
  185. #  s/aaln/S1/SU0/0@MGCP-2600.private.vovida.com/6243@192.168.22.17/g;  
  186. #  s/aaln/S1/SU0/1@MGCP-2600.private.vovida.com/5501@192.168.22.17/g;
  187.    
  188.    return $_;
  189. }
  190. # outgoing messages to the MGCP gateways
  191. sub rewrite_S2 
  192. {
  193.   local($_) = $_[0];
  194.  if(y///d)
  195.   {
  196.     print "killed \0!n";
  197.   }
  198.   # Change _ back to /   (also change galileo back to ubr924)
  199.   # change the use of wildcard x to explicit [0-9#*T], but it T needed here?
  200.   s/d/x(d)/d/[0-9#*T](D)/;
  201. #  s/d/x(n)/d/[0-9#*](n)/; 
  202. #  if (/crcx/)
  203. #  {
  204. #      if (!/v=0/)
  205. #      {
  206. #          s/M: sendrecv/M: recvonly/;
  207. #      }
  208. #  }
  209. #  s/rnrn/rn/g;
  210. #
  211. #  if (/mdcx/)
  212. #  {
  213. #      s/v=0/rnv=0/;
  214. #  }
  215. #  if(/RQNT/)
  216. #  {
  217. #    s/S: l/dl/S: l/wt/g;
  218. #   }
  219. #
  220. #s/o=- 0 0 IN IP4 192.168.22.17rns=Vovida Gatewayrn//;
  221. #s/o=CiscoSystemsSIP-GW-UserAgent [0-9]+ [0-9]+ IN IP4 192.168.6.210rns=SIP Callrn//;
  222. #s/o=[^rn]*r?n[^rn]*r?n//g;
  223. #s/s=[^rn]*r?n//g;
  224.  #changes here 
  225. #  s/IN IP4 hera.private.vovida.com/IN IP4 192.168.22.17/g;
  226. #  s/2600@192.168.5.146/*@MGCP-2600.private.vovida.com/g;
  227. # s/6243@192.168.22.17/aaln/S1/SU0/0@MGCP-2600.private.vovida.com/g;
  228. #  s/5501@192.168.22.17/aaln/S1/SU0/1@MGCP-2600.private.vovida.com/g;
  229.    
  230.    s/a=fmtp*r?n[^rn]*r?n//g;
  231.    s/a=fmtp:101 0-11//g;
  232.    s/a=fmtp:100 0-11//g;
  233.   return $_;
  234. }