//
//
// Copyright (C) 2004 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// Copyright (C) 2004 Pingtel Corp.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
//////////////////////////////////////////////////////////////////////////////
#ifndef URLMAPPING_H
#define URLMAPPING_H
// SYSTEM INCLUDES
//#include <...>
// APPLICATION INCLUDES
#include <os/OsDefs.h>
#include "os/OsStatus.h"
#include "sipdb/ResultSet.h"
#include "xmlparser/tinyxml.h"
// DEFINES
#define XML_TAG_MAPPINGS "mappings"
#define XML_TAG_HOSTMATCH "hostMatch"
#define XML_TAG_HOSTPATTERN "hostPattern"
#define XML_TAG_USERMATCH "userMatch"
#define XML_TAG_USERPATTERN "userPattern"
#define XML_TAG_PERMISSIONMATCH "permissionMatch"
#define XML_TAG_PERMISSION "permission"
#define XML_ATT_AUTHTYPE "authType"
#define XML_PERMISSION_911 "emergency-dialing"
#define XML_PERMISSION_1800 "1800-dialing"
#define XML_PERMISSION_1900 "1900-dialing"
#define XML_PERMISSION_1877 "1877-dialing"
#define XML_PERMISSION_1888 "1888-dialing"
#define XML_PERMISSION_1 "domestic-dialing"
#define XML_PERMISSION_011 "international-dialing"
#define XML_TAG_TRANSFORM "transform"
#define XML_TAG_URL "url"
#define XML_TAG_HOST "host"
#define XML_TAG_USER "user"
#define XML_TAG_FIELDPARAMS "fieldparams"
#define XML_TAG_URLPARAMS "urlparams"
#define XML_TAG_HEADERPARAMS "headerparams"
#define XML_SYMBOL_USER "{user}"
#define XML_SYMBOL_USER_ESCAPED "{user-escaped}"
#define XML_SYMBOL_DIGITS "{digits}"
#define XML_SYMBOL_DIGITS_ESCAPED "{digits-escaped}"
#define XML_SYMBOL_HOST "{host}"
#define XML_SYMBOL_HEADERPARAMS "{headerparams}"
#define XML_SYMBOL_URLPARAMS "{urlparams}"
#define XML_SYMBOL_URI "{uri}"
#define XML_SYMBOL_LOCALHOST "{localhost}"
#define XML_SYMBOL_MEDIASERVER "{mediaserver}"
#define XML_SYMBOL_VOICEMAIL "{voicemail}"
#define XML_SYMBOL_VDIGITS "{vdigits}"
#define XML_SYMBOL_VDIGITS_ESCAPED "{vdigits-escaped}"
class TiXmlNode;
class Url;
class RegEx;
class UrlMappingTest;
// MACROS
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// CONSTANTS
// STRUCTS
// TYPEDEFS
// FORWARD DECLARATIONS
class UrlMapping
{
/* //////////////////////////// PUBLIC //////////////////////////////////// */
public:
/* ============================ CREATORS ================================== */
UrlMapping();
virtual ~UrlMapping();
//:Destructor
/* ============================ MANIPULATORS ============================== */
/* ============================ ACCESSORS ================================= */
OsStatus loadMappings(
const UtlString configFileName,
const UtlString mediaserver = "",
const UtlString& voicemail = "",
const UtlString& localhost = "");
OsStatus getPermissionRequired(
const Url& requestUri,
UtlBoolean& isPSTNNumber,
ResultSet& rPermissions);
OsStatus getContactList(const Url& requestUri,
ResultSet& rRegistratons,
UtlBoolean& isPSTNNumber,
ResultSet& rPermissions);
/* //////////////////////////// PROTECTED ///////////////////////////////// */
protected:
friend class UrlMappingTest;
TiXmlNode* mPrevMappingNode;
TiXmlElement* mPrevMappingElement;
TiXmlNode* mPrevHostMatchNode;
TiXmlNode* mPrevUserMatchNode;
TiXmlNode* mPrevPermMatchNode;
TiXmlDocument *mDoc;
UtlBoolean mParseFirstTime;
UtlString mVoicemail;
UtlString mLocalhost;
UtlString mMediaServer;
OsStatus parseHostMatchContainer(const Url& requestUri,
ResultSet& rRegistratons,
UtlBoolean& isPSTNNumber,
UtlBoolean& doTransform,
ResultSet& rPermissions,
TiXmlNode* mappingsNode,
TiXmlNode* previousHostMatchNode = NULL);
OsStatus parseUserMatchContainer(const Url& requestUri,
ResultSet& rRegistratons,
UtlBoolean& isPSTNNumber,
UtlBoolean& doTransform,
ResultSet& rPermissions,
TiXmlNode* hostMatchNode,
TiXmlNode* previousUserMatchNode = NULL);
OsStatus parsePermMatchContainer(const Url& requestUri,
const UtlString& vdigits,
ResultSet& rRegistratons,
UtlBoolean& doTransform,
ResultSet& rPermissions,
TiXmlNode* userMatchNode,
TiXmlNode* previousPermMatchNode = NULL);
OsStatus doTransform(const Url& requestUri,
const UtlString& vdigits,
ResultSet& rRegistratons,
TiXmlNode* permMatchNode);
void replaceAll(const UtlString& originalString,
UtlString &modifiedString,
const UtlString& replaceWhat,
const UtlString& replaceWith);
void convertDialString2RegEx(const UtlString& source, UtlString& regExp);
void getVDigits(RegEx& userPattern,
UtlString& vdigits);
void replaceSymbols(const UtlString &string,
const Url& requestUri,
const UtlString& vdigits,
UtlString& modifiedString);
/* //////////////////////////// PRIVATE /////////////////////////////////// */
private:
};
/* ============================ INLINE METHODS ============================ */
#endif // URLMAPPING_H
syntax highlighted by Code2HTML, v. 0.9.1