As you know, Office Communications Server 2007 Mediation Server uses a plus sign (+) to prefix E.164 numbers in the Request Uniform Resource Identifier (URI) for outgoing calls. However, certain private branch exchanges (PBXs) do not comply with RFC 3966 and do not accept numbers that are prefixed with a plus sign (+).
To make sure that OCS 2007 operates correctly with non-RFC 3966-compliant PBXs, Microsoft released an update for Mediation Server (R1), which is described in KB articles 952780 and 952785. After installing the update, it’s necessary to create a configuration file – MediationServerSvc.exe.config – with the following content:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="RemovePlusFromRequestURI" value="Yes" /> </appSettings> </configuration>
For OCS 2007 R2, the behavior changed a little bit. Microsoft incorporated the previous described workaround in the R2 binaries, but the configuration file is no longer needed. Instead, there’s a new WMI setting, RemovePlusFromRequestURI , which is described on this page: Enterprise Voice Server-Side Components:
By default, E.164 numbers in the Request URI of outgoing calls from Office Communications Server 2007 R2 are prefixed with a plus sign. Most PBXs process such numbers without problem. Some PBXs, however, do not accept numbers that are prefixed with a plus sign and do not route those calls correctly.
To assure interoperability with these PBXs, Office Communications Server 2007 R2 has a new Mediation Server setting for WMI called RemovePlusFromRequestURI. This setting can be set to YES or NO. The default value is NO.
Actually the RemovePlusFromRequestURI is a boolean property that can be set to TRUE or FALSE. The easiest way of changing its value, is by means of a VBScript:
' RemovePlusFromRequestURI ' Dim objLocator Dim objService Dim objInstances Dim objInstance Wscript.Echo "Connecting to local WMI store..." Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2") Wscript.Echo "select * from MSFT_SIPMediationServerConfigSetting" Set objInstances = _ objService.ExecQuery("select * from MSFT_SIPMediationServerConfigSetting") If IsNull(objInstances) Or (objInstances.Count = 0) Then Wscript.Echo "Error: No instance" Else For Each objInstance in objInstances objInstance.Properties_.Item("RemovePlusFromRequestURI").Value = "TRUE" objInstance.Put_ wscript.Echo "Done" Exit For Next End If Wscript.Echo ""
Run this script on the Mediation Server (don’t forget to run it using Administrator credentials) and you’re done.
To check the current value of this property (or to verify that the script worked), you can use the WBEMTest tool (also check this nice article: WBEM What?).
WMI Settings: Namespace: root\cimv2 Class: MSFT_SIPMediationServerConfigSetting (Open Class) Property: RemovePlusFromRequestURI Possible Values: TRUE/FALSE
Don’t forget to restart the Mediation Server service, after modifying this setting!
Office Communications Server 2007 Mediation Server uses a plus sign (+) to prefix E.164 numbers in the Request Uniform Resource Identifier (URI) for outgoing calls. Unfortunately, some IP-PBXs don't comply with RFC 3966 and do not accept numbers that
great post, thank you! I feel it's important to point out that most external PBX's aren't necessarily non-compliant to RFC3966 (a proposed standard not widely implemented, at least not yet), but rather many don't leverage E164 global numbering in their URI contexts. Most instead use something akin to a local URI (also specified in the RFC). One could easily argue that within OCS it should be just as easy to send/receive requests using "local" numbers within a private context as defined by 3966 to make it fully compliant with the standard.