summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
blob: 5bdadca50323fd0e31961fa973dc528c2cbb4b72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
 * Oreka -- A media capture and retrieval platform
 * 
 * Copyright (C) 2005, orecx LLC
 *
 * http://www.orecx.com
 *
 * This program is free software, distributed under the terms of
 * the GNU General Public License.
 * Please refer to http://www.gnu.org/copyleft/gpl.html
 *
 */

#ifndef __VOIPCONFIG_H__
#define __VOIPCONFIG_H__

#include <list>
#include "StdString.h"
#include "Object.h"
#include "boost/shared_ptr.hpp"
#include "PacketHeaderDefs.h"
 
#define DEVICE_PARAM "Device"

/** This class defines various configuration parameters for the generator. */
class VoIpConfig : public Object
{
public:
	VoIpConfig();	
	void Define(Serializer* s);
	void Validate();

	CStdString GetClassName();
	ObjectRef NewInstance();
	inline ObjectRef Process() {return ObjectRef();};

	bool IsPartOfLan(struct in_addr);
	bool IsMediaGateway(struct in_addr);
	bool IsRtpTrackingIpAddress(struct in_addr addr);
	bool IsDeviceWanted(CStdString device);
	bool IsPacketWanted(IpHeaderStruct* ipHeader);

	CStdString m_device;				// old style but can still be used for specifying single device
	std::list<CStdString> m_devices;	// new style devices csv
	std::list<unsigned int> m_mediaGateways;
	std::list<CStdString> m_asciiMediaGateways;
	std::list<unsigned int> m_lanMasks;
	std::list<CStdString> m_asciiLanMasks;
	std::list<unsigned int> m_rtpTrackUsingIpAddresses;
	std::list<CStdString> m_asciiRtpTrackUsingIpAddresses;

	std::list<CStdString> m_asciiAllowedIpRanges;	// CIDR notation
	std::list<unsigned int> m_allowedIpRangePrefixes;
	std::list<unsigned int> m_allowedIpRangeBitWidths;
	std::list<CStdString> m_asciiBlockedIpRanges;	// CIDR notation
	std::list<unsigned int> m_blockedIpRangePrefixes;
	std::list<unsigned int> m_blockedIpRangeBitWidths;

	CStdString m_pcapFile;
	CStdString m_pcapDirectory;
	bool m_pcapRepeat;
	bool m_sipDropIndirectInvite;
	int m_pcapSocketBufferSize;
	bool m_pcapFastReplay;
	int m_pcapFastReplaySleepUsPerSec;
	int m_rtpSessionTimeoutSec;
	int m_rtpSessionWithSignallingTimeoutSec;
	int m_rtpSessionOnHoldTimeOutSec;
	int m_rtpSessionWithSignallingInitialTimeoutSec;
	bool m_pcapTest;
	CStdString m_pcapFilter;
	bool m_rtpDiscontinuityDetect;
	int  m_rtpDiscontinuityMinSeqDelta;
	bool m_rtpDetectOnOddPorts;
	bool m_rtpReportDtmf;
	IpRanges m_rtpBlockedIpRanges;
	bool m_rtpTrackByUdpPortOnly;

	bool m_iax2Support;
	bool m_sipOverTcpSupport;
	bool m_sipLogFailedCalls;
	bool m_sipUse200OkMediaAddress;
	bool m_sipDetectSessionProgress;
	bool m_sipReportFullAddress;
	bool m_sipDynamicMediaAddress;
	IpRanges m_sipIgnoredMediaAddresses;
	bool m_sipIgnoreBye;
	bool m_sipReportNamesAsTags;
	bool m_sipRequestUriAsLocalParty;
	bool m_sipTreat200OkAsInvite;
	bool m_sipAllowMultipleMediaAddresses;
	bool m_sip302MovedTemporarilySupport;

	bool m_rtcpDetect;
	bool m_inInMode;

	bool m_useMacIfNoLocalParty;
	bool m_localPartyForceLocalIp;
	bool m_localPartyForceLocalMac;
	bool m_localPartyUseName;
	bool m_partiesUseName;

	bool m_skinnyIgnoreStopMediaTransmission;
	bool m_skinnyIgnoreOpenReceiveChannelAck;
	bool m_skinnyDynamicMediaAddress;
	bool m_skinnyAllowCallInfoUpdate;
	bool m_skinnyAllowLateCallInfo;
	bool m_skinnyNameAsLocalParty;
	bool m_skinnyCallInfoStopsPrevious;
	bool m_cucm7_1Mode;
	std::list<CStdString> m_skinnyReportTags;

	std::list<CStdString> m_dnisNumbers;
	std::list<CStdString> m_sipExtractFields;

	bool m_sangomaEnable;	// not a config parm, derived from the two following
	int m_sangomaTcpPortDelta;	// not a config parm, derived from the two following
	int m_sangomaRxTcpPortStart;
	int m_sangomaTxTcpPortStart;
	int m_skinnyTcpPort;
	std::list<CStdString> m_sipDomains;
	std::list<CStdString> m_sipDirectionReferenceIpAddresses;
	std::list<CStdString> m_sipDirectionReferenceUserAgents;
	IpRanges m_lanIpRanges;
	IpRanges m_mediaAddressBlockedIpRanges;

	bool m_dahdiIntercept;
};

//========================================

#define VOIP_CONFIG_PARAM "VoIpPlugin"

/** This class represents the top of the configuration hierarchy for the generator. */
class VoIpConfigTopObject : public Object
{
public:
	void Define(Serializer* s);
	void Validate();

	CStdString GetClassName();
	ObjectRef NewInstance();
	inline ObjectRef Process() {return ObjectRef();};
	
	VoIpConfig m_config;
};

typedef boost::shared_ptr<VoIpConfigTopObject> VoIpConfigTopObjectRef;


#endif