A noisy (and annoying) red herring in Microsoft Exchange Unified Messaging…

After integrating Office Communications Server 2007 R2 with Microsoft Exchange Unified Messaging, you will likely begin seeing the following warning events in the application log of your Exchange UM server:

 

Log Name: Application
Source: Microsoft Exchange Speech Engine
Date: 3/18/2009 3:20:59 PM
Event ID: 32768
Task Category: Telephony Application Host
Level: Warning
Keywords: Classic
User: N/A
Computer: exchange.contoso.com
Description:
The Telephony Manager declined a call with Call Id 'dc792cb1-3c0e-4a97-a8dc-ec948047af15' for the following reason in component telephony session: 'The media description received from the remote SIP peer has an invalid content type 'multipart/alternative' .'.
Further trace information for support personnel follows:
Microsoft.SpeechServer.Core.InvalidMediaException: The media description received from the remote SIP peer has an invalid content type 'multipart/alternative'.
at Microsoft.SpeechServer.Core.MediaNegotiation..ctor(LoggingContext loggingContext, ContentDescription rtcRemoteMediaOffer)
at Microsoft.SpeechServer.Core.TelephonySessionInbound.CreateMediaNegotiation(ContentDescription rtcMediaDescription, SessionInfo sessionInfo, CallInfo callInfo, IPEndPoint sipPeerEndpoint)
at Microsoft.SpeechServer.Core.TelephonySessionInbound.Initialize(SessionInfo sessionInfo, SessionReceivedEventArgs e, CallInfo callInfo, EventSerializer serializer, SpeechSession speechSession, Boolean isTlsConnection)
at Microsoft.SpeechServer.Core.TelephonySessionInbound..ctor(SessionInfo sessionInfo, SessionReceivedEventArgs e, CallInfo callInfo)
at Microsoft.SpeechServer.Core.TelephonyManager.CreateSession(Int32 inviteReceivedTickCount, SessionReceivedEventArgs e)
at Microsoft.SpeechServer.Core.TelephonyManager.SignalingSessionReceived(Object sender, SessionReceivedEventArgs e)

 

When establishing a new communication session, Office Communications Server 2007 R2 servers and Office Communicator 2007 R2 clients send INVITE packets containing two content-types in the Session Description Protocol header - multipart/alternative and application/sdp.  An example of a SIP INVITE packet containing a multipart/alternative SDP header is as follows:

 

INVITE sip:+99999@contoso.com;user=phone SIP/2.0
FROM: <sip:8035551212;phone-context=OCSDialPlan.@contoso.com;user=phone>;epid=F01E04E310;tag=f956eca3
TO: <sip:+99999@contoso.com;user=phone>
CSEQ: 2 INVITE
CALL-ID: 79d13a14-43ec-4e13-a6a6-f979b1be29bc
MAX-FORWARDS: 70
VIA: SIP/2.0/TLS 172.16.100.14:51389;branch=z9hG4bKea1445fc
CONTACT: <sip:mediation.contoso.com@contoso.com;gruu;opaque=srvr:MediationServer:ZhPi_7KMWUmmgB7TjsJGFwAA;grid=65a46c0db6a94987b6112fdf75debae1>;isGateway
CONTENT-LENGTH: 3756
SUPPORTED: replaces
SUPPORTED: ms-safe-transfer
SUPPORTED: gruu-10
SUPPORTED: 100rel
USER-AGENT: RTCC/3.5.0.0 MediationServer
CONTENT-TYPE: multipart/alternative; boundary=PEWk0jo6TZDEZV6x20NdmKWLb77TQXmJ
ALLOW: UPDATE
ms-call-source: non-ms-rtc
ALLOW: Ack, Cancel, Bye,Invite,Refer
--PEWk0jo6TZDEZV6x20NdmKWLb77TQXmJ
Content-Type: application/sdp
Content-Disposition: Session;handling=optional;ms-proxy-2007fallback
v=0
o=- 0 0 IN IP4 172.16.100.14
s=session
c=IN IP4 172.16.100.14
b=CT:1000
t=0 0
m=audio 61403 RTP/AVP 0 8 115 13 118 97 101
c=IN IP4 172.16.100.14
a=rtcp:63118
a=candidate:8uYF8WoopUJPCI4MDrHCjMd7pqDEw4pwmi+20YQQPdU 1 G4uv9228YqA+oymvWVNWxQ UDP 0.830 172.16.100.14 61403
a=candidate:8uYF8WoopUJPCI4MDrHCjMd7pqDEw4pwmi+20YQQPdU 2 G4uv9228YqA+oymvWVNWxQ UDP 0.830 172.16.100.14 63118
a=candidate:wuGldT9QcjdnV2grSvcspxkD1p60lv4IYc0IQwvFTro 1 X0QWDqNOUrMRQMUY2UgMbw UDP 0.840 192.168.1.6 62529
a=candidate:wuGldT9QcjdnV2grSvcspxkD1p60lv4IYc0IQwvFTro 2 X0QWDqNOUrMRQMUY2UgMbw UDP 0.840 192.168.1.6 61678
a=candidate:6e022tbN+JijS66/X2ox6uibF06W+gXwSmDEe3f8qn0 1 HAdnegImYwjYqJN+C4Lv1w TCP 0.150 192.168.1.4 57675
a=candidate:6e022tbN+JijS66/X2ox6uibF06W+gXwSmDEe3f8qn0 2 HAdnegImYwjYqJN+C4Lv1w TCP 0.150 192.168.1.4 57675
a=candidate:q8m0LE/ANqdYI+blG2DdKq9l2IHBRSz5kAEJrwUfeRs 1 plsV5Xw4383v6y+TvuRNpg UDP 0.450 192.168.1.4 50345
a=candidate:q8m0LE/ANqdYI+blG2DdKq9l2IHBRSz5kAEJrwUfeRs 2 plsV5Xw4383v6y+TvuRNpg UDP 0.450 192.168.1.4 55579
a=candidate:pfsQA8Ln5g+1rTF/cIgcFnConcOe8kKO8usfhShSf1U 1 +pQb87qvxhvEmbXtEL3SSA TCP 0.250 172.16.100.14 62535
a=candidate:pfsQA8Ln5g+1rTF/cIgcFnConcOe8kKO8usfhShSf1U 2 +pQb87qvxhvEmbXtEL3SSA TCP 0.250 172.16.100.14 62535
a=cryptoscale:1 client AES_CM_128_HMAC_SHA1_80 inline:aCRifvWJaqBraHSwOnxCbJ+eYLSBcbVAJWmlBxN5|2^31|1:1
a=crypto:2 AES_CM_128_HMAC_SHA1_80 inline:W6hq2uEdw7KTE40QD3W0VQELX5N0SOHPqb5FnEdd|2^31|1:1
a=crypto:3 AES_CM_128_HMAC_SHA1_80 inline:9ultE2zyH47xhIUoP+1F+45rwuPTrkmJPOyrxvjF|2^31
a=label:main-audio
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:115 x-msrta/8000
a=fmtp:115 bitrate=11800
a=rtpmap:13 CN/8000
a=rtpmap:118 CN/16000
a=rtpmap:97 RED/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
--PEWk0jo6TZDEZV6x20NdmKWLb77TQXmJ
Content-Type: application/sdp
v=0
o=- 0 0 IN IP4 172.16.100.14
s=session
c=IN IP4 172.16.100.14
b=CT:1000
t=0 0
m=audio 62656 RTP/AVP 0 8 115 13 118 97 101
c=IN IP4 172.16.100.14
a=rtcp:61136
a=ice-ufrag:EemT
a=ice-pwd:QpAk7SA0jndrKxm4H3KJ6c80
a=candidate:1 1 UDP 2130706431 172.16.100.14 62656 typ host
a=candidate:1 2 UDP 2130705918 172.16.100.14 61136 typ host
a=candidate:2 1 UDP 2130705919 192.168.1.6 61612 typ host
a=candidate:2 2 UDP 2130705406 192.168.1.6 61014 typ host
a=candidate:3 1 tcp-pass 6555135 192.168.1.4 58713 typ relay raddr 192.168.1.4 rport 58713
a=candidate:3 2 tcp-pass 6555134 192.168.1.4 58713 typ relay raddr 192.168.1.4 rport 58713
a=candidate:4 1 UDP 16647679 192.168.1.4 53984 typ relay raddr 192.168.1.4 rport 53984
a=candidate:4 2 UDP 16647678 192.168.1.4 53202 typ relay raddr 192.168.1.4 rport 53202
a=candidate:5 1 tcp-act 7076351 192.168.1.4 58713 typ relay raddr 192.168.1.4 rport 58713
a=candidate:5 2 tcp-act 7075838 192.168.1.4 58713 typ relay raddr 192.168.1.4 rport 58713
a=candidate:6 1 tcp-act 1684797439 172.16.100.14 62831 typ srflx raddr 172.16.100.14 rport 62831
a=candidate:6 2 tcp-act 1684796926 172.16.100.14 62831 typ srflx raddr 172.16.100.14 rport 62831
a=cryptoscale:1 client AES_CM_128_HMAC_SHA1_80 inline:aCRifvWJaqBraHSwOnxCbJ+eYLSBcbVAJWmlBxN5|2^31|1:1
a=crypto:2 AES_CM_128_HMAC_SHA1_80 inline:W6hq2uEdw7KTE40QD3W0VQELX5N0SOHPqb5FnEdd|2^31|1:1
a=crypto:3 AES_CM_128_HMAC_SHA1_80 inline:9ultE2zyH47xhIUoP+1F+45rwuPTrkmJPOyrxvjF|2^31
a=label:main-audio
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:115 x-msrta/8000
a=fmtp:115 bitrate=11800
a=rtpmap:13 CN/8000
a=rtpmap:118 CN/16000
a=rtpmap:97 RED/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
--PEWk0jo6TZDEZV6x20NdmKWLb77TQXmJ--

 

Although these SDP headers are easily handled by OCS 2007 R2 servers and OC clients, the Speech Engine component of Exchange Unified Messaging will log an exception and reject any call containing an SDP header with the multipart/alternative content-type. 

Fortunately, after rejecting the initial call attempt, OCS 2007 R2 will retry the call by immediately sending a second INVITE to the Unified Messaging server.  On the second attempt, the OCS 2007 R2 server will send a Session Description Protocol header containing only the application/sdp content-type.  Unified Messaging will accept and process this SDP header successfully, allowing the call to be established.

You can safely ignore these warnings, as this is expected behavior in OCS 2007 R2 / Unified Messaging integrated environments.