2017-06-04 8 views
0

Ich Asterisk auf einem Server einrichten. Ich habe den Grund „Hallo Welt“ -Beispiel (direkt von den docs here), die als extensions.conf Datei meiner bringt zu müssen:Wie ändert man das Hello World Asterisk-Beispiel, um TCP anstelle von UDP zu verwenden?

[from-internal] 
exten = 100,1,Answer() 
same = n,Wait(1) 
same = n,Playback(hello-world) 
same = n,Hangup() 

und meine pjsip.conf Datei als:

[transport-udp] 
type=transport 
protocol=udp 
bind=0.0.0.0 

[6001] 
type=endpoint 
context=from-internal 
disallow=all 
allow=ulaw 
auth=6001 
aors=6001 

[6001] 
type=auth 
auth_type=userpass 
password=unsecurepassword 
username=6001 

[6001] 
type=aor 
max_contacts=1 

ich habe einfaches Python-Skript, um einen Anruf an die Erweiterung 100 zu tätigen. Dies ist direkt aus der Dokumentation , wo ich dieses Skript über die SIP-Adresse sip:[email protected]<my-sip-server-ip>:

import sys 
import pjsua as pj 

# Logging callback 
def log_cb(level, str, len): 
    print str, 

# Callback to receive events from Call 
class MyCallCallback(pj.CallCallback): 
    def __init__(self, call=None): 
     pj.CallCallback.__init__(self, call) 

    # Notification when call state has changed 
    def on_state(self): 
     print "Call is ", self.call.info().state_text, 
     print "last code =", self.call.info().last_code, 
     print "(" + self.call.info().last_reason + ")" 

    # Notification when call's media state has changed. 
    def on_media_state(self): 
     global lib 
     if self.call.info().media_state == pj.MediaState.ACTIVE: 
      # Connect the call to sound device 
      call_slot = self.call.info().conf_slot 
      lib.conf_connect(call_slot, 0) 
      lib.conf_connect(0, call_slot) 
      print "Hello world, I can talk!" 


# Check command line argument 
if len(sys.argv) != 2: 
    print "Usage: simplecall.py <dst-URI>" 
    sys.exit(1) 

try: 
    # Create library instance 
    lib = pj.Lib() 

    # Init library with default config 
    lib.init(log_cfg = pj.LogConfig(level=3, callback=log_cb)) 

    # Create UDP transport which listens to any available port 
    transport = lib.create_transport(pj.TransportType.UDP) 

    # Start the library 
    lib.start() 

    # Create local/user-less account 
    acc = lib.create_account_for_transport(transport) 

    # Make call 
    call = acc.make_call(sys.argv[1], MyCallCallback()) 

    # Wait for ENTER before quitting 
    print "Press <ENTER> to quit" 
    input = sys.stdin.readline().rstrip("\r\n") 

    # We're done, shutdown the library 
    lib.destroy() 
    lib = None 

except pj.Error, e: 
    print "Exception: " + str(e) 
    lib.destroy() 
    lib = None 
    sys.exit(1) 
aufrufen

Das klappt alles gut, ich rufe den SIP-Server an und höre die "Hello, World" -Aufnahme.

Was muss ich ändern, damit ich diese Kommunikation über TCP durchführen kann? Bisher habe ich versucht, durch meine pjsip.conf Datei zu ändern, das Protokoll zu ändern im folgenden Teil tcp:

[transport-udp] 
type=transport 
protocol=udp 
bind=0.0.0.0 

, das Hinzufügen ;transport=tcp an den URI von meinem Server, die ich in das Python-Skript übergeben, und auch zu ändern die Linie in der Python-Skript, das einen Transport zu

# Create UDP transport which listens to any available port 
transport = lib.create_transport(pj.TransportType.UDP) 

schafft geschieht Was in der Python-Skript, das ich bekommen

pjsua_acc.c !...SIP registration failed, status=408 (Request Timeout) 

Und auf dem Server sehe ich die Anfrage überhaupt nicht.

+0

prüfen diese Link: https://www.linuxsysadmintutorials.com/using-sip-over-tcp-with-asterisk -> vielleicht nützlich – Moerwald

+0

Dies ist grundlegende Netzwerk-Fehlerbehebung. Erstens, Paketverfolgung auf Ihrem Client, um sicherzustellen, dass es sogar kommuniziert. Überprüfen Sie dann die Firewalls auf der Serverseite. – miken32

+0

Auch dies ist wahrscheinlich nur ein Tippfehler in Ihrer Frage, aber Sie sagen, dass Sie den Transport zu UDP ändern, aber dann die gleichen Zeilen erneut auflisten: # Erstellen UDP-Transport, der auf alle verfügbaren Port hört transport = lib.create_transport (p.TransportType.UDP) – snowcloned

Antwort

0

Sind Sie sicher, dass Ihr Asterisk pjsip verwendet? Alte Versionen (unter v.11) verwenden sip.conf und nicht pjsip.conf.

Sie müssen tcp global in sip.conf aktivieren:

[general] 
tcpenable=yes 
tcpbindaddr=0.0.0.0 

Wenn Sie auf einem neuen Asterisk sind, dann fügen Sie diese pjsip.conf:

[transport-tcp] 
type=transport 
protocol=tcp 
bind=0.0.0.0:5060 

[transport-tcp-out] 
type=transport 
protocol=tcp 
bind=0.0.0.0:5060 
#local_net=192.168.X.X/XX //you might also set this 
Verwandte Themen