2017-06-19 65 views
0

這是正常的淨SIP庫 它通過UDP協議 但我 我想在TCP協議 工作是什麼 請幫助 網::問題:: Simple Sipperl的淨SIP簡單TCP寄存器

#!/usr/bin/perl 

use IO::Socket::INET; 
use Net::SIP::Leg; 
use Net::SIP::Simple; 

my $ip = "my ip "; 
my $Proto_1 = 'tcp'; 
my $PeerPort_1 =5060; 
my $user= "my user"; 
my $pass = "my password "; 

$legsocket = IO::Socket::INET->new(
    Proto => $Proto_1, 
    PeerAddr => $ip, 
    PeerPort => $PeerPort_1, 
) || die "bad Socket \n"; 

# print "good socket\n"; 

my $legsocket = Net::SIP::Leg->new(sock => $legsocket) 
    || die "bad Leg\n"; 

my $ua = Net::SIP::Simple->new(
    outgoing_proxy => $ip, 
    registrar  => $ip, 
    domain   => $ip, 
    from   => $user, 
    leg   => $legsocket, 
    auth   => [ $user,$pass ] 
); 

$ua->register(expires => 1800) ; # <- Valeur mini chez free 
print $ua->error."\n"; 
if ($ua->register(expires => 1800)) { 
    print "good register"; 
} 

my $err = $ua->error; 
my ($w1,$w2,$w3,$code) = split(" ", $err); 
print "$ip:$PeerPort_1 $code\n"; 
+0

你嘗試過什麼?什麼不起作用? – Cristina

+1

我已經修復了您的代碼的格式,使其更易於遵循。不客氣,但請花時間在將來自己做。如果你要求大量的陌生人閱讀和理解你的代碼,那麼確保它儘可能地容易閱讀是有道理的。 –

+0

沒有人想爲你調試你的程序。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

回答

0

有很多問題。

  1. 您使用$ legsocket沒有在線路13
  2. 定義它,然後在第21行,你定義$ legsocket
  3. 您重新分配$ legsocket到不同的對象類型(爲什麼?)。這不是一個錯誤,而是一個不好的做法。
  4. 同樣,你做$ ua->註冊兩次。

這裏是一個很好的工作例如,

#!/usr/bin/perl 
use strict; 
use warnings; 

use IO::Socket::INET; 
use Net::SIP::Leg; 
use Net::SIP::Simple; 

my $domain = "my-sip-domain.de"; 
my $proxy = "127.0.0.1"; 
my $user = "1001"; 
my $pass = "1234"; 
my $app  = "SIP Test Client v1.0"; 

my $proxy_ip = '127.0.0.1'; 
my $proxy_port = 5080; 
my $proxy_proto = 'tcp'; 

my $sock = IO::Socket::INET->new(
    Proto => $proxy_proto, 
    PeerAddr => $proxy_ip, 
    PeerPort => $proxy_port, 
) || die "Unable to open socket connection to SIP Proxy $proxy_proto:$proxy_ip:$proxy_port \n"; 

my $leg = Net::SIP::Leg->new(sock => $sock) 
    || die "Bad or invalid connection to SIP Proxy $proxy_proto:$proxy_ip:$proxy_port \n"; 

# create new agent 
my $ua = Net::SIP::Simple->new(
    outgoing_proxy => $proxy, 
    registrar => $domain, 
    domain => $domain, 
    from => $user, 
    auth => [$user, $pass], 
    leg => $leg, 
); 

# register it 
if(!$ua->register(expires=>300, 'user-agent'=>$app)) { 
    if ($ua->error()) { 
     print "Registration for '$user': ".$ua->error()."\n"; 
     exit; 
    } else { 
     print "Registration for '$user' succeeded.\n"; 
    }; 
}; 

$ua->loop(2); 

# unregister it 
if(!$ua->register(expires=>0, 'user-agent'=>$app)) { 
    if ($ua->error()) { 
     print "De-Registration for '$user': ".$ua->error()."\n"; 
     exit; 
    } else { 
     print "De-Registration for '$user' succeeded.\n"; 
    }; 
};