Hallo liebe SIP-Spezialisten,
ich versuche SIP zum Laufen zu bekommen. Leider gelingt es mir nicht so richtig.
Das Problem besteht darin, dass ausgehende Telefonate zwar aufgebaut werden, 5 Minuten lang funktionieren, doch dann abgebrochen werden.
Ich konnte auch die Fehlerursache lokalisieren. Ich vermute, dass es an einem fehlerhaften Verhalten des O2 SIP-Servers liegt: der O2-Server schickt nicht das vereinbarte re-INVITE / UPDATE. Die Frage ist, wie kann man das beheben (außer dem üblichen "Kauf dir eine Fritzbox")?
Hier mal die mMn wesentliche SIP-Kommunikation zwischen dem Router und O2 für einen ausgehenden Anruf. Ich habe stark gekürzt um das hier halbwegs lesbar zu machen. Das Wesentliche - nämlich die Verhandlung über Expire - sollte aber deutlich werden.
1. Schritt: (Source: meine IP, Destination: O2 IP) Der Router meldet beim O2 Server, dass er ein Gespräch führen möchte. Der Router schlägt erst einmal eine Gesprächszeit von 5 Minuten vor. Dieser Wert ist fix im Router und lässt sich nicht einstellen. Der O2 Server müsste das nicht übernehmen - er darf den Vorschlag ändern, insbesondere auch verlängern. Wirklich verpflichtend ist nur die Angabe, dass der Router mindestens eine zugesicherte Gesprächslänge von 90 Sekunden möchte, weniger akzeptiert er nicht. Das ist aber auch gleichzeitig das in RFC 4028 vorgegebene Minimum, weniger als 90 Sekunden dürfte man ohnehin nicht vereinbaren.
INVITE sip:[meine Telefonnummer]@sip.alice-voip.de SIP/2.0
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,INFO,REFER,NOTIFY,UPDATE
Content-Type: application/sdp
CSeq: 27 INVITE
Expires: 180
Min-SE: 90
Session-Expires: 300
Supported: replaces,timer
2. Schritt: (Source: O2 IP, Destination: meine IP) Der O2 Server nimmt das zur Kenntnis und "sagt", dass er mal versucht den Anruf herzustellen ...
SIP/2.0 100 Trying
CSeq: 27 INVITE
Content-Length: 0
3. Schritt: (Source: O2 IP, Destination: meine IP) Der O2 Server meldet, dass es beim Empfänger klingelt. Die Übertragung der Freizeichentöne beginnt.
SIP/2.0 180 Ringing
CSeq: 27 INVITE
Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,PRACK,REFER,NOTIFY,SUBSCRIBE,UPDATE
Content-Type: application/sdp
4. Schritt: (Source: O2 IP, Destination: meine IP) Das eigentliche Gespräch beginnt. Der O2 Server meldet (Zeile Session-Expire), dass das Gespräch zunächst für 5 Minuten stattfinden soll und dass er ("uas") ggf. eine Verlängerung des Gesprächs signalisieren wird.
SIP/2.0 200 OK
CSeq: 27 INVITE
Require: timer
Session-Expires: 300;refresher=uas
Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,PRACK,REFER,NOTIFY,SUBSCRIBE,UPDATE
Supported: from-change,replaces,histinfo,100rel
Allow-Events: refer
Content-Type: application/sdp
5. Schritt: (Source: meine IP, Destination: O2 IP) Der Router nimmt das zur Kenntnis: "Okay, also erst einmal 5 Minuten. O2, du meldest dich!".
ACK sip:[...]@[O2 IP]:5060 SIP/2.0
Content-Length: 0
CSeq: 27 ACK
6. Schritt: (Source: meine IP, Destination: O2 IP) Es sind inzwischen 5 Minuten und ein paar Sekunden vergangen. Der O2 Server hat keine Verlängerung der ursprünglich vereinbarten 5 Minuten gemeldet, also muss der Router das Gespräch beenden. Der Router verabschiedet sich vereinbarungsgemäß vom O2 Server. Das Telefonat reißt ab.
BYE sip:[...]@[O2 IP]:5060 SIP/2.0
Content-Length: 0
CSeq: 28 BYE
7. Schritt: (Source: O2 IP, Destination: meine IP) Der O2 Server bestätigt das Ende des Telefonats. Und wo war die Verlängerung!?
SIP/2.0 200 OK
CSeq: 28 BYE
Content-Length: 0
Ich habe mir die technische Beschreibung der SIP-Netzschnittstelle (SIP-Interfaces.pdf), die Telefonica zur Verfügung stellt, durchgelesen und auch das PDF Digital-Broadband-Access-Interfaces.pdf, auf das ja im ersten Dokument Bezug genommen wird.
Entsprechend habe ich u.a. die zwei DSCP für SIP, DTMF, DNS SRV und Fetch binding auf die entsprechenden Werte gesetzt.
Hat vielleicht jemand eine Idee, wie man es doch noch zum Laufen bekommt?
Die beste Antwort, die ich gefunden habe, ist diese. Aber wie oben geschrieben, die 300 Sekunden im INVITE (1. Schritt) sind fix, was laut Spezifikation ja eigentlich kein Problem wäre.
Lösung von Eminea
Zur Antwort springen