Logo faq-o-matic.net
Logo faq-o-matic.net

OCS R2 Outside Voice Control – Teil 2: Im Detail

von veröffentlicht am11. August 2009, 07:05 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Lync   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 19. August 2009

Wie im voran gegangenen Beitrag “OCS R2 Outside Voice Control – Teil 1: Einführung” angekündigt, beleuchte ich nun den technischen Background der neuen OCS R2 Funktion.

Anhand der Bilder aus Teil 1 lässt sich bereits erahnen, wie der Verbindungsaufbau, bei einem Anruf „über den Arbeitsplatz…“ zustande kommt. Welche Netzwerk-Komponenten und Server-Rollen involviert sind, habe ich in dieser Grafik skizziert:

clip_image002

Der Communicator Mobile R2 ist via Edge Server am Standard / Enterprise Edition Server registriert. Nach der Registrierung erhält er durch das sogenannte Inband-Provisioning alle für ihn relevanten Informationen (bspw. meine Kontaktliste). Dazu zählt u.a. das Location Profile. Damit kann auch der mobile Communicator alle gewählten Nummern in das E.164 Format umwandeln und sie damit korrekt an OCS übereichen.

„Kurz gefasst“ erfolgt der Rufaufbau bei „Über Arbeitsplatz anrufen…“ technisch wie folgt:

  1. In SIP übermittelt der Communicator Mobile seine Service-Anforderung via Edge Server an die Outside Voice Control Applikation. Diese ist auf dem OCS Standard bzw. Enterprise Frontend Server installiert, genauer ist sie als eine der On-Top Applikationen in der neuen Unified Communications Application Server Rolle (UCAS) verankert. Die Applikation ID lautet hier microsoft.rtc.applications.ccs wobei das ccs für die ursprüngliche Bezeichnung Call Control Server steht.
  2. Die Outside Voice Control Applikation findet in der SIP Anforderung die in Communicator Mobile hinterlegte Nummer und die Nummer des eigentlichen Ziels. Daraufhin fordert sie zunächst den OCS R2 Mediation Server auf einen Ruf über das Festnetz zur konfigurierten Nummer zu tätigen.
  3. Wird der Anruf des Mediation Servers am Handy durch den Communicator Mobile Nutzer angenommen, informiert er den Call Control Server (CCS) darüber. Erst dann übermittelt der CCS dem Mediation Server die Nummer des eigentlichen Ziels.
  4. Mediation Server führt nun den zweiten Ruf aus. Dabei übergibt er als Quell-Nummer die Festnetz-Arbeitsplatznummer an das VoIP-Gateway. Wird dieser Anruf angenommen, „legt“ der Mediation Server beide Leitungen zusammen. Statt jedoch eine Audio-Konferenz MCU (Multipoint Control Unit) zu nutzen, relayed er lediglich den AudioStream. Das spart Ressourcen und vermeidet Einbußen in der Sprachqualität.

Zwei Anmerkungen:

  • Hier wird auch eine Limitierung von Outside Voice Control deutlich: Jeder so getätigte Ruf der als Ziel eine externe Nummer hat, belegt zwei Leitungen auf dem ISDN Anschluss.
  • Zwischen Mediation Server und VoIP Gateway (3a.) wird im Normalfall die SIP Kommunikation ohne TLS Verschlüsselung erfolgen. Ebenso wird der Audiostream unverschlüsselt und per UDP übertragen. Daher sollte dieser Netzwerkabschnitt speziell vor Abhörmöglichkeiten geschützt werden. Einige Gateway-Hersteller unterstützen mittlerweile auch SIP/TLS zum Mediation Server. Vermutlich wird zukünftig auch eine SRTP Verschlüsselung des Audiostreams hinzu kommen.

Um das Zusammenspiel von Communicator Mobile R2 und den drei OCS-Rollen (Edge, CCS, Mediation) genauer zu untersuchen, lohnt sich ein Blick in die SIP-Protokoll-Logs an diesen Servern. Dazu ist das sogenannte Snooper Tool ein hervorragendes Analyse-Werkzeug. Snooper kann im Rahmen des OCS R2 Ressource Kits auf alle OCS R2 Rollen installiert werden. Etwas English-Kenntnisse vorausgesetzt lassen sich damit, die vom standardmäßig installierten OCS R2 Logging Tool erfassten SIP-Traces beinahe im „Klartext“ lesen. Dies gilt übrigens nicht für die Inhalte von Chats. Bei allen Instant Messaging SIP-Nachrichten wird der Message Body nicht erfasst. Einige Auszüge der Logs erläutere ich genauer:

Die Spurensuche beginnt im Snooper Tool am Edge Server. Hier findet man durch Filtern nach microsoft.rtc.applications.ccs den vom Communicator Mobile abgesetzten SIP-INVITE an den Call Control Server.

clip_image004

Nebenbei ist unter User-Agent die Version des Communicator Mobile zu finden und auf welchem Pocket-PC Modell dieser läuft.

Nach zwei Diagnostic Einträgen: „Routed a request using signed route headers“ und „The message has an internally supported domain“ übergibt der Edge Server den INVITE an den internen CCS. Durch ein ACK (acknowledge) bestätigt der CCS seine Bereitschaft. Dieses wird via Edge Server dem Communicator Mobile zugestellt. Erst jetzt sendet COMO das SIP-INFO Packet mit den gewünschten Nummern.


Message-Body: <?xml version=“1.0″?>

<requests xmlns=“http://schemas.microsoft.com/rtc/2008/12/tpcp“>

<request requestId=“2″ protocolVersion=“1″ from=“sip:jan.boguslawski@itacs.de“ to=“sip:jan.boguslawski@itacs.de“><startConversation><conversation-info xmlns=“http://schemas.microsoft.com/rtc/2008/12/conversationinfo“ entity=“{98A78AA7-50C9-941E-18A0-A8BCCD73584B}“><conversation-description><conversation-id>Acngj+vuByc+xRm4MAEiHgMGdTIMAg==</conversation-id><importance>normal</importance></conversation-description><user entity=“sip:jan.boguslawski@itacs.de“><associated-aors xmlns=“urn:ietf:params:xml:ns:conference-info“><entry><uri>tel:+493039978418</uri><purpose>preferred-identity</purpose></entry></associated-aors><endpoint xmlns=“urn:ietf:params:xml:ns:conference-info“ entity=“e11062224″ xmlns:msci=“http://schemas.microsoft.com/rtc/2005/08/confinfoextensions“ msci:endpoint-uri=„sip:+49179123456789@itacs.de;user=phone“><media id=“audio“><ci:type xmlns:ci=“urn:ietf:params:xml:ns:conference-info“>audio</ci:type><ci:status xmlns:ci=“urn:ietf:params:xml:ns:conference-info“>sendrecv</ci:status></media></endpoint></user><user entity=“sip: +4930987654321@itacs.de;user=phone“><endpoint xmlns=“urn:ietf:params:xml:ns:conference-info“ entity=“e10902496″ xmlns:msci=“http://schemas.microsoft.com/rtc/2005/08/confinfoextensions“ msci:endpoint-uri=„sip:+4930987654321@itacs.de;user=phone“><media id=“audio“><ci:type xmlns:ci=“urn:ietf:params:xml:ns:conference-info“>audio</ci:type><ci:status xmlns:ci=“urn:ietf:params:xml:ns:conference-info“>sendrecv</ci:status></media></endpoint></user></conversation-info></startConversation>

</request></requests>


Wie gut zu erkennen ist befinden sich diese Informationen allerdings nicht im SIP selbst, sondern im anhängenden Message-Body in einer XML-Formatierung. COMO und der OCS CCS chatten (<startConversation> ) quasi per XML über die zu erstellende conference. Durch die Preferred-Identity ist festgelegt welche Nummer (hier meine Office-Nummer) dem Angerufenen zu präsentieren ist. Die erste msci :endpoint-uri entspricht der für Outside Voice Control konfigurierten Nummer (hier mein Handy) und die zweite dem eigentlichen Ziel meines Anrufs. Nachdem sich COMO und CCS per „XML-Chat“ einig geworden sind, erfolgt eine beiderseits bestätigte Zusammenfassung:


Message-Body: <?xml version=“1.0″ encoding=“utf-16″?>

<responses xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xmlns:xsd=“http://www.w3.org/2001/XMLSchema“ xmlns=“http://schemas.microsoft.com/rtc/2008/12/tpcp“>

<response code=“pending“ requestId=“2″ from=“sip:jan.boguslawski@itacs.de“ to=“sip:jan.boguslawski@itacs.de“>

<startConversation>

<conversation-info entity=“{98A78AA7-50C9-941E-18A0-A8BCCD73584B}“ xmlns=“http://schemas.microsoft.com/rtc/2008/12/conversationinfo“>

<conversation-description>

<conversation-id>Acngj+vuByc+xRm4MAEiHgMGdTIMAg==</conversation-id>

<importance>normal</importance>

</conversation-description>

<user entity=“sip:jan.boguslawski@itacs.de“>

<associated-aors xmlns=“urn:ietf:params:xml:ns:conference-info“>

<entry>

<uri>tel:+493039978418</uri>

<purpose>preferred-identity</purpose>

</entry>

</associated-aors>

<endpoint d6p1:endpoint-uri=“sip:+49179123456789@itacs.de;user=phone“ entity=“e11062224″ xmlns:d6p1=“http://schemas.microsoft.com/rtc/2005/08/confinfoextensions“ xmlns=“urn:ietf:params:xml:ns:conference-info“>

<media id=“audio“>

<type>audio</type>

<status>sendrecv</status>

<d6p1:media-state>Pending</d6p1:media-state>

</media>

</endpoint>

</user>

<user entity=“sip:+4930987654321@itacs.de;user=phone“>

<endpoint d6p1:endpoint-uri=“sip:+4930987654321@itacs.de;user=phone“ entity=“e10902496″ xmlns:d6p1=“http://schemas.microsoft.com/rtc/2005/08/confinfoextensions“ xmlns=“urn:ietf:params:xml:ns:conference-info“>

<media id=“audio“>

<type>audio</type>

<status>sendrecv</status>

<d6p1:media-state>Pending</d6p1:media-state>

</media>

</endpoint>

</user>

</conversation-info>

</startConversation>

</response>

</responses>


Ab diesem Moment startet die „Action“ zwischen Call Control Server und Mediation Server. Wobei der Mediation Server den VoIP-Gateway als Bindeglied zum Fest- bzw. Handynetz (PSTN) nutzt. Daher sind die Logs am Mediation Server auf aufschlussreichsten. Er sitzt ja mittendrin. Der Call Control Server fordert via SIP-INVITE den ersten Anruf zu meinem Handy an:


TL_INFO(TF_PROTOCOL) [1]13A8.1214::05/29/2009-18:17:53.826.0006b92c (S4,SipMessage.DataLoggingHelper:sipmessage.cs(581))

<<<<<<<<<<<<Incoming SipMessage c=[<SipTlsConnection_2A07950>], MediationSRV-IP:5061<-OCS-SE-SRV-IP:51390

INVITE sip:+49179123456789@ocsmediationserverfqdn.itacs.de:5061;user=phone;maddr=ocsmediationserverfqdn.itacs.de SIP/2.0

FROM: „Jan Boguslawski“<sip:jan.boguslawski@itacs.de>;epid=444E1165FA;tag=a85b1ade

TO: <sip:+49179123456789;ms-skip-rnl@itacs.de;user=phone>

CSEQ: 10 INVITE

CALL-ID: e345ca8b-821a-4bdb-b03f-24e244e78482

MAX-FORWARDS: 69

VIA: SIP/2.0/TLS OCS-SE-SRV-IP:51390;branch=z9hG4bK87D89DB8.54257D78E12E3432;branched=FALSE

VIA: SIP/2.0/TLS OCS-SE-SRV-IP:51435;branch=z9hG4bK714f73f7;ms-received-port=51435;ms-received-cid=35700

RECORD-ROUTE: <sip:ocsseserverfqdn.itacs.de:5061;transport=tls;opaque=state:T;lr>;tag=5658CF40F3C38C46021D544A05FDFAAB

CONTACT: <sip:ocsseserverfqdn.itacs.de@itacs.de;gruu;opaque=srvr:Microsoft.Rtc.Applications.Ccs:BYNDyUfCWkGSjw2nRm1NEwAA>;automata;text;audio;video

CONTENT-LENGTH: 0

EXPIRES: 600

PRIORITY: Normal

SUPPORTED: Replaces

SUPPORTED: ms-dialog-route-set-update

SUPPORTED: gruu-10

SUPPORTED: timer

USER-AGENT: RTCC/3.5.0.0 Microsoft.Rtc.Applications.Ccs

ALLOW: UPDATE

ALLOW: Ack, Cancel, Bye,Invite,Message,Info,Service,Options,BeNotify

P-ASSERTED-IDENTITY: „Jan Boguslawski“<sip:jan.boguslawski@itacs.de>,<tel:+493039978418>

ms-user-data: ms-publiccloud=true;ms-federation=true

ms-application-via: backend_token;ms-server= ocsseserverfqdn.itacs.de;ms-pool=ocs04.extranet.itacs.de;ms-application=AB072FF0-C918-424c-AC12-7C100E91FE3E

Ms-Conversation-ID: 303122b457e64fcfa9d67dc920fe178f

Session-Expires: 1800

Min-SE: 90

————EndOfIncoming SipMessage


Unter P-ASSERTED-IDENTITY ist die dem Festnetz „vorzugebende“ Nummer, also meine Office-Nummer hinterlegt. Der Mediation Server berücksichtigt diese Information und maskiert damit die eigentlich Quellnummer. Schön zu sehen am From in dem recht einfachen INVITE, den er an den VoIP-Gateway sendet:


TL_INFO(TF_PROTOCOL) [1]13A8.0B5C::05/29/2009-18:17:54.107.0006ba2e (S4,SipMessage.DataLoggingHelper:sipmessage.cs(531))

>>>>>>>>>>>>Outgoing SipMessage c=[<SipTcpConnection_3897EC9>], 192.168.2.1:50658->192.168.2.2:5060

INVITE sip:+49179123456789@192.168.2.2;user=phone SIP/2.0

FROM: <sip:+493039978418@ocsmediationserverfqdn.itacs.de;user=phone>;epid=767BC92111;tag=6fee949a9

TO: <sip:+49179123456789@192.168.2.2;user=phone>

CSEQ: 56 INVITE

CALL-ID: 71bda7e7-6b16-4586-aa6e-14e5b2a071b3

MAX-FORWARDS: 70

VIA: SIP/2.0/TCP 192.168.2.1:50658;branch=z9hG4bK24978c6d

CONTACT: <sip:ocsmediationserverfqdn.itacs.de:5060;transport=Tcp;maddr=192.168.2.1;ms-opaque=df732c6244a000ee>

CONTENT-LENGTH: 325

SUPPORTED: 100rel

USER-AGENT: RTCC/3.5.0.0 MediationServer

CONTENT-TYPE: application/sdp; charset=utf-8

ALLOW: UPDATE

ALLOW: Ack, Cancel, Bye,Invite

v=0

o=- 115 1 IN IP4 192.168.2.1

s=session

c=IN IP4 192.168.2.1

b=CT:1000

t=0 0

m=audio 62806 RTP/AVP 97 101 13 0 8

c=IN IP4 192.168.2.1

a=rtcp:62807

a=label:Audio

a=rtpmap:97 RED/8000

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-16

a=rtpmap:13 CN/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=ptime:20

————EndOfOutgoing SipMessage


Das transport=Tcp statt TLS macht deutlich das SIP nun unverschlüsselt übertragen wird. Der SDP Anteil (Session Description Protocol) der Nachricht offenbart welche Audio-Codecs der Mediation Server für die Sprachübertragung unterstützt. Leider beschränkt sich der Support auf Schmalband (narrow-band) G.711 alaw und μ-law, obwohl moderne VoIP-Gateways ja bereits länger bessere Codecs, darunter auch Breitband unterstützen. Aber zum Glück wird ja OCS ständig verbessert, bzw. von Version zu Version modernisiert.
Ein abschließender Blick in die SIP-SERVICE Logs zeigt auf, dass die Audioströme beider Gesprächspartner lokal auf dem Mediationserver verknüpft werden. Dazu wird ICE (Interactive Connectivity Establishment) bzw. MS-ICE verwendet und der Mediation Server zu einem Vermittler. Die VQReportEvent (Voice Quality Report) Nachrichten dienen auch zur Auswertung im Quality of Experience Monitoring Server. Dabei wird die Sprachqualität genau für den beobachteten Abschnitt zwischen Mediationsserver und VoIP-Gateway betrachtet. Auch hier befindet sich die Botschaft im Anhang und im XML-Format.


CONTENT-TYPE: application/vq-rtcpxr+xml

Message-Body: <?xml version=“1.0″?>

<VQReportEvent xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xmlns:xsd=“http://www.w3.org/2001/XMLSchema“ Version=“1.1″ xmlns=“ms-rtcp-metrics“>

<VQSessionReport SessionId=“88b969ef-3154-4c71-9ecc-7d26e6ae6248;from-tag=6224438b37;to-tag=1c1346938343″>

<LocationProfile>locationprofilefqdn-of-itacs.de</LocationProfile>

<Endpoint Name=“mediationserverfqdn-of-itacs.de“ />

<DialogInfo CallId=“88b969ef-3154-4c71-9ecc-7d26e6ae6248″ FromTag=“6224438b37″ ToTag=“1c1346938343″ Start=“2009-06-02T11:09:38.1631105+02:00″ End=“2009-06-02T11:09:57.0691185+02:00″>

<DialogCategory>TRUNK</DialogCategory>

<CorrelationID>5e8ff9b0-af52-454e-b9c6-73a625178b56;from-tag=cc90e36b79;to-tag=b610ff6f44</CorrelationID>

<FromURI>sip:+493039978418@mediationserverfqdn-of-itacs.de;user=phone</FromURI>

<ToURI>sip:+4930987456321@audiocodesgateway-IP;user=phone</ToURI>

<Caller>true</Caller>

<LocalContactURI>sip:mediationserverfqdn-of-itacs.de:5060;transport=Tcp;maddr=mediationserver-external-ip;ms-opaque=df732c6244a000ee</LocalContactURI>

<RemoteContactURI>sip:1030@audiocodesgateway-IP;transport=tcp</RemoteContactURI>

<LocalUserAgent>RTCC/3.5.0.0 MediationServer/3.5.6907.23</LocalUserAgent>

<RemoteUserAgent>Audiocodes-Sip-Gateway-Mediant 1000/v.5.60A.014.009</RemoteUserAgent>

</DialogInfo>

<MediaLine Label=“main-audio“>

<Description>

<Connectivity>

<Ice>DIRECT</Ice>

</Connectivity>

<Security>None</Security>

<Offerer>true</Offerer>

<Transport>UDP</Transport>

<LocalAddr>

<IPAddr>mediationserver-external-ip </IPAddr>

<Port>61334</Port>

<Inside>true</Inside>

<SubnetMask>255.255.255.0</SubnetMask>

</LocalAddr>

<RemoteAddr>

<IPAddr>audiocodesgateway-IP </IPAddr>

<Port>6300</Port>

</RemoteAddr>

</Description>

<InboundStream Id=“720125189″ Start=“2009-06-02T11:09:31.9561587+02:00″ End=“2009-06-02T11:09:57.0183379+02:00″>

<Network>

<Jitter>

<InterArrival>1</InterArrival>

<InterArrivalMax>1</InterArrivalMax>

</Jitter>

<PacketLoss>

<LossRate>0</LossRate>

<LossRateMax>0</LossRateMax>

</PacketLoss>

<BurstGapLoss>

<BurstDensity>0</BurstDensity>

<BurstDuration>0</BurstDuration>

<GapDensity>0</GapDensity>

<GapDuration>23180</GapDuration>

</BurstGapLoss>

<Utilization>

<Packets>1225</Packets>

</Utilization>

</Network>

<Payload>

<Audio>

<Signal>

<RxAGCSignalLevel>2386</RxAGCSignalLevel>

<RxAGCNoiseLevel>6119</RxAGCNoiseLevel>

</Signal>

</Audio>

</Payload>

<QualityEstimates>

<Audio>

<RecvListenMOSMin>1.07999992</RecvListenMOSMin>

<SendListenMOS>1</SendListenMOS>

<SendListenMOSMin>1</SendListenMOSMin>

<NetworkMOS>

<OverallAvg>3.61</OverallAvg>

<OverallMin>3.61</OverallMin>

<DegradationAvg>0</DegradationAvg>

<DegradationMax>0</DegradationMax>

<DegradationJitterAvg>0</DegradationJitterAvg>

<DegradationPacketLossAvg>0</DegradationPacketLossAvg>

</NetworkMOS>

</Audio>

</QualityEstimates>

</InboundStream>

<OutboundStream Id=“4229682342″ Start=“2009-06-02T11:09:31.9561587+02:00″ End=“2009-06-02T11:09:57.0183379+02:00″>

<Network>

<Jitter>

<InterArrival>0</InterArrival>

<InterArrivalMax>2</InterArrivalMax>

</Jitter>

<PacketLoss>

<LossRate>0</LossRate>

<LossRateMax>0</LossRateMax>

</PacketLoss>

<Delay>

<RoundTrip>2</RoundTrip>

<RoundTripMax>4</RoundTripMax>

</Delay>

<Utilization>

<Packets>1250</Packets>

</Utilization>

</Network>

<Payload>

<Audio>

<PayloadType>8</PayloadType>

<PayloadDescription>PCMA</PayloadDescription>

<SampleRate>8000</SampleRate>

</Audio>

</Payload>

</OutboundStream>

</MediaLine>

</VQSessionReport>

</VQReportEvent>


Anhand des Call Control Servers bzw. der Outside Voice Control Applikation lässt sich gut nachvollziehen, wie ein Microsoft OCS Deployment im Grunde unbegrenzt um eigene Dienste erweitert werden kann. SIP ist dabei nur das Vermittlungsprotokoll, der MessageBody ein universeller Container und die OCS Infrastruktur das Vermittlungsnetzwerk. Alle vier Applikation die sich im Auslieferzustand des OCS R2 auf der Unified Communications Application Server Rolle (UCAS) befinden:

Applikations-Name Applikations-Identität
Conferencing Attendant Microsoft.Rtc.Applications.Caa
Conference Announcement Service Microsoft.Rtc.Applications.Cas
Outside Voice Control Microsoft.Rtc.Applications.Css
Response Group Service Microsoft.Rtc.Applications.Acd

sind mit Hilfe der Microsoft Office Communications Server 2007 R2 SDK geschrieben. Mit diesem Entwickler-Kit können also Drittanbieter genauso Lösungen On-Top erstellen, wie es die jeweiligen Entwicklungsabteilungen des Microsoft-RTC-Teams taten (RTC = Real-Time-Communications).

Im nächsten Beitrag „OCS R2 Outside Voice Control – Teil 3: Ausblick“ beschreibe ich wie sich die technische Architektur dieser Funktion verändern wird und welche Verbesserungen damit einhergehen werden…

Über den Autor:

Jan Boguslawski ist Consultant bei der ITaCS GmbH. Als Spezialist für die Microsofts Unified Communications und Messaging Lösungen liegt sein technischer Focus auf Office Communications Server & Exchange Server, inklusive deren Integration in Telekommunikationssysteme.

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!