#include <MSFT_ExchangeTransferHack.h>

The problem is that the Refer-To URI has a domain-part that is taken from the callers Contact address rather than the domain of the proxy. If that contact address refers to a B2BUA that can resolve it based just on the user part, this works - but that is not going to be true in most proxy-based configurations, including ours. For full details, see the discussion in the microsoft forum url in the External Issue Reference.
This AuthPlugin is a workaround; it recognizes when a REFER:
having recognized this, it rewrites the domain of the Refer-To URI to be the domain of the proxy.
See XECS-872
Public Member Functions | |
| virtual | ~MSFT_ExchangeTransferHack () |
| destructor | |
| virtual AuthResult | authorizeAndModify (const UtlString &id, const Url &requestUri, RouteState &routeState, const UtlString &method, AuthResult priorResult, SipMessage &request, bool bSpiralingRequest, UtlString &reason) |
| Called for any request - enforces the restrictions specified by authrules. | |
| virtual void | readConfig (OsConfigDb &configDb) |
| Read (or re-read) the authorization rules. | |
| virtual void | announceAssociatedSipRouter (SipRouter *sipRouter) |
| Used to announce the SIP Router instance that is logically associated with this Auth Plugin. Plugins that need to interact with their associated SIP Router can override this method and save the passed pointer for later use. | |
Static Protected Attributes | |
| static const char * | RecognizerConfigKey = "USERAGENT" |
Private Member Functions | |
| MSFT_ExchangeTransferHack (const UtlString &instanceName) | |
| Constructor - private so that only the factory can call it. | |
Private Attributes | |
| RegEx * | mUserAgentRegEx |
| SipRouter * | mpSipRouter |
Friends | |
| class | MSFT_ExchangeTransferHackTest |
| AuthPlugin * | getAuthPlugin (const UtlString &name) |
| Factory used by PluginHooks to dynamically link the plugin instance. | |
| ~MSFT_ExchangeTransferHack | ( | ) | [virtual] |
destructor
| MSFT_ExchangeTransferHack | ( | const UtlString & | instanceName | ) | [private] |
Constructor - private so that only the factory can call it.
constructor
| instanceName | the configured name for this plugin instance |
| AuthPlugin::AuthResult authorizeAndModify | ( | const UtlString & | id, | |
| const Url & | requestUri, | |||
| RouteState & | routeState, | |||
| const UtlString & | method, | |||
| AuthResult | priorResult, | |||
| SipMessage & | request, | |||
| bool | bSpiralingRequest, | |||
| UtlString & | reason | |||
| ) | [virtual] |
Called for any request - enforces the restrictions specified by authrules.
| id | The authenticated identity of the request originator, if any (the null string if not). This is in the form of a SIP uri identity value as used in the credentials database (user) without the scheme or any parameters. |
| requestUri | parsed target Uri |
| routeState | the state for this request. |
| method | the request method |
| priorResult | results from earlier plugins. |
| request | see AuthPlugin regarding modifying |
| bSpiralingRequest | request spiraling indication |
| reason | rejection reason |
Implements AuthPlugin.
| void readConfig | ( | OsConfigDb & | configDb | ) | [virtual] |
Read (or re-read) the authorization rules.
Read (or re-read) the configuration.
| configDb | a subhash of the individual configuration parameters for this instance of this plugin. |
Implements AuthPlugin.
| void announceAssociatedSipRouter | ( | SipRouter * | sipRouter | ) | [virtual] |
Used to announce the SIP Router instance that is logically associated with this Auth Plugin. Plugins that need to interact with their associated SIP Router can override this method and save the passed pointer for later use.
Reimplemented from AuthPlugin.
friend class MSFT_ExchangeTransferHackTest [friend] |
| AuthPlugin* getAuthPlugin | ( | const UtlString & | name | ) | [friend] |
Factory used by PluginHooks to dynamically link the plugin instance.
const char * RecognizerConfigKey = "USERAGENT" [static, protected] |
RegEx* mUserAgentRegEx [private] |
SipRouter* mpSipRouter [private] |