An dieser Stelle möchte ich einen Blick auf die SIP Kommunikation in einem Anruf halten Szenario werfen. Die Informationen aus der SIP Kommunikation die ich im folgenden zeige sind auf das absolute Minimum beschränkt, ein wirkliches SIP Paket enthält viel mehr Informationen.

Im folgenden Beispiel ruft Teilnehmer A (+49151xxxxxxxx) Teilnehmer B (+39047xxxxx) an, Teilnehmer B nimmt das Gespräch an. Anschließend hält Teilnehmer B das Gespräch. Die Frage die sich stellt ist natürlich wie signalisiert ein Teilnehmer (B) dem anderen (A) dass er das Gespräch halten möchte?

INVITE / OK

Bevor ein Gespräch gehalten werden kann, muss dieses aufgebaut werden. Dazu sendet Teilnehmer A eine INVITE Anfrage an Teilnehmer B. Der Header beschreibt die SIP Sitzung, im Body wird mit SDP die Medien Sitzung beschrieben. Die interessanten Felder fasse ich hier zusammen:

Invite Header:
From: <sip:[email protected];user=phone>;epid=5075F8584B;tag=1559ef9c1
To: <sip:[email protected];user=phone>;epid=ea6d933f37
CSeq: 24467 INVITE
Call-ID: c73279cc-a979-40b4-bb7b-6e261ab0ddc4

Invite Body:
c=IN IP4 192.168.1.100
m=audio 54720 RTP/AVP 0 8 115 13 118 97 101

Der Lync Client des angerufenen Teilnehmers (B) muss die empfangene Anfrage beantworten und macht dies mit einem 200 OK. In diesem schickt er SDP Informationen mit, welche die RTP Sitzung aus seiner Sicht beschreiben:

Ok Header:
From: <sip:[email protected];;user=phone>;epid=5075F8584B;tag=1559ef9c1
To: <sip:[email protected];user=phone>;epid=ea6d933f37;tag=4f75d0c634
Call-ID: c73279cc-a979-40b4-bb7b-6e261ab0ddc4
CSeq: 24467 INVITE

Ok Body:
c=IN IP4 192.168.1.6
m=audio 8746 RTP/AVP 8 0 13 101

re-INVITE / OK

Um eine existierende SIP Sitzung (Dialog) zu ändern, schickt Teilnehmer B ein INVITE bei dem die Werte für Call-ID sowie From und To Tag identisch mit denen aus der bestehenden Sitzung sind. Man spricht in diesem Fall von einem re-Invite. Das Ziel dieses erneuten Invites ist es die RTP Sitzung zu ändern, also schickt der User Agent des Teilnehmer B neue SDP Informationen an Teilnehmer A, diese enthalten die Beschreibung der RTP Sitzung aus sicht von Teilnhemer B.

re-Invite Header:
From: "" <sip:[email protected];user=phone>;epid=ea6d933f37;tag=4f75d0c634
To: <sip:[email protected];;user=phone>;epid=5075F8584B;tag=1559ef9c1
Call-ID: c73279cc-a979-40b4-bb7b-6e261ab0ddc4
CSeq: 1 INVITE

re-Invite Body:
c=IN IP4 192.168.1.6
m=audio 8746 RTP/AVP 8 0 13 101
a=sendonly

Auch diese Anfrage muss der Lync Client beantworten, in diesem Fall erhält Teilnehmer A die Invite Nachricht, Teilnehmer B möchte das Gespräch halten.

Ok Header:
From: ""<sip:[email protected];user=phone>;tag=4f75d0c634;epid=ea6d933f37
To: <sip:[email protected];user=phone>;epid=5075F8584B;tag=1559ef9c1
CSeq: 1 INVITE
Call-ID: c73279cc-a979-40b4-bb7b-6e261ab0ddc4

Ok Body:
c=IN IP4 192.168.1.100
m=audio 6190 RTP/AVP 8 13 101
a=recvonly

This post has been migrated from our earlier blog based on BlogEngine.NET.