/*
* clirw.h
*
* Module for CLI/ANI manipulation.
*
* Copyright (c) 2005, Michal Zygmuntowicz
*
* This work is published under the GNU Public License (GPL)
* see file COPYING for details.
* We also explicitely grant the right to link this code
* with the OpenH323 library.
*/
#ifndef CLIRW_H
#define CLIRW_H "#(@) $Id: clirw.h,v 1.4 2005/05/30 15:23:22 zvision Exp $"
#include <string>
#include <vector>
#include "Toolkit.h"
struct SetupAuthData;
class SignalingMsg;
template <class> class H225SignalingMsg;
class H225_Setup_UUIE;
typedef H225SignalingMsg<H225_Setup_UUIE> SetupMsg;
/// Perform Calling-Party-Number-IE/Setup-UUIE.sourceAddress rewritting
class CLIRewrite {
public:
/// a single CLI/ANI rewrite rule
struct RewriteRule {
RewriteRule();
PString AsString() const;
/// match condition to apply the rule
enum MatchType {
MatchDialedNumber, /// dialed number before any rewrite
MatchDestinationNumber, /// dailed number after global rewrite
MatchCallerNumber /// CLI/ANI
};
/// how to perform number matching and rewritting
enum RewriteType {
PrefixToNumber, /// match by a prefix, replace with a complete number
PrefixToPrefix, /// match by a prefix, replace only the prefix part
NumberToNumber /// match by a complete number, replace with a complete number
};
/// how to hide caller's number
enum ScreeningType {
NoScreening, /// leave as it is
HideFromTerminals, /// hide only if a callee is a terminal
AlwaysHide /// always hide
};
/// manual CLIR (presentatio indicator) control
enum CLIRType {
CLIRPassthrough, /// leave PI as received from a caller
RestrictPresentation, /// set PI to restricted
AllowPresentation /// set PI to allowed
};
/// how to process received CLIR (PI) information
enum CLIRRule {
IgnoreCLIR, /// use the global settings to make the decission
ForwardCLIR, /// do nothing, just forward as received
ApplyCLIRForTerminals, /// hide caller's number, if the callee is a terminal and PI=restricted
AlwaysApplyCLIR /// always hide caller's number, if PI=restricted
};
int m_matchType; /// match condition
int m_rewriteType; /// number matching/rewritting rule
int m_screeningType; /// caller's number hiding
int m_manualCLIR; /// CLIR settings override
int m_CLIRPolicy; /// how to process CLIR
std::string m_prefix; /// the prefix to match
std::vector<std::string> m_cli; /// list of new CLIs
};
typedef std::vector<RewriteRule> RewriteRules;
typedef std::pair<NetworkAddress, RewriteRules> SingleIpRule;
typedef std::vector<SingleIpRule> SingleIpRules;
typedef std::pair<NetworkAddress, SingleIpRules> DoubleIpRule;
typedef std::vector<DoubleIpRule> DoubleIpRules;
CLIRewrite();
/// Rewrite CLI before any Setup message processing, like auth & routing
void InRewrite(
SetupMsg &msg /// Q.931 Setup message to be rewritten
);
/** Rewrite CLI before the Setup is sent to the terminating party
and after auth/acct/routing is performed.
*/
void OutRewrite(
SetupMsg &msg, /// Q.931 Setup message to be rewritten
SetupAuthData &authData, /// additional data
const PIPSocket::Address &destAddr /// destination address
);
private:
void Rewrite(
SetupMsg &msg, /// Q.931 Setup message to be rewritten
const SingleIpRule &ipRule, /// rule to use for rewrite
bool inbound, /// rule type
SetupAuthData *authData /// additional data for outbound rules
) const;
CLIRewrite(const CLIRewrite &);
CLIRewrite & operator=(const CLIRewrite &);
private:
SingleIpRules m_inboundRules; /// a set of inbound CLI/ANI rewrite rules
DoubleIpRules m_outboundRules; /// a set of outbound CLI/ANI rewrite rules
bool m_processSourceAddress; /// true to rewrite numbers in sourceAddress Setup-UUIE
bool m_removeH323Id; /// true to put in the sourceAddress Setup-UUIE field only rewritten ANI/CLI
int m_CLIRPolicy; /// how to process CLIR
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1