OPAL
Version 3.14.3
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
rfc2833.h
Go to the documentation of this file.
1
/*
2
* rfc2833.h
3
*
4
* Open Phone Abstraction Library (OPAL)
5
* Formally known as the Open H323 project.
6
*
7
* Copyright (c) 2001 Equivalence Pty. Ltd.
8
*
9
* The contents of this file are subject to the Mozilla Public License
10
* Version 1.0 (the "License"); you may not use this file except in
11
* compliance with the License. You may obtain a copy of the License at
12
* http://www.mozilla.org/MPL/
13
*
14
* Software distributed under the License is distributed on an "AS IS"
15
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
16
* the License for the specific language governing rights and limitations
17
* under the License.
18
*
19
* The Original Code is Open Phone Abstraction Library.
20
*
21
* The Initial Developer of the Original Code is Equivalence Pty. Ltd.
22
*
23
* Contributor(s): ______________________________________.
24
*
25
* $Revision: 31638 $
26
* $Author: rjongbloed $
27
* $Date: 2014-03-31 12:33:26 +1100 (Mon, 31 Mar 2014) $
28
*/
29
30
#ifndef OPAL_CODEC_RFC2833_H
31
#define OPAL_CODEC_RFC2833_H
32
33
#ifdef P_USE_PRAGMA
34
#pragma interface
35
#endif
36
37
#include <
opal_config.h
>
38
39
#include <
opal/mediafmt.h
>
40
#include <
rtp/rtp_session.h
>
41
42
43
class
OpalRTPConnection
;
44
45
47
48
class
OpalRFC2833EventsMask
:
public
std::vector<bool>
49
{
50
public
:
51
enum
{
NumEvents
= 256 };
52
OpalRFC2833EventsMask
(
bool
defaultValue =
false
);
53
OpalRFC2833EventsMask
(
const
char
* defaultValues);
54
OpalRFC2833EventsMask
&
operator&=
(
const
OpalRFC2833EventsMask
& other);
55
friend
ostream &
operator<<
(ostream & strm,
const
OpalRFC2833EventsMask
& mask);
56
friend
istream &
operator>>
(istream & strm,
OpalRFC2833EventsMask
& mask);
57
};
58
59
typedef
OpalMediaOptionValue<OpalRFC2833EventsMask>
OpalRFC288EventsOption
;
60
const
PCaselessString &
OpalRFC288EventsName
();
61
62
64
65
class
OpalRFC2833Info
:
public
PObject
66
{
67
PCLASSINFO(
OpalRFC2833Info
, PObject);
68
public
:
69
// the following values are mandated by RFC 2833
70
enum
NTEEvent
{
71
Digit0
= 0,
72
Digit1
= 1,
73
Digit2
= 2,
74
Digit3
= 3,
75
Digit4
= 4,
76
Digit5
= 5,
77
Digit6
= 6,
78
Digit7
= 7,
79
Digit8
= 8,
80
Digit9
= 9,
81
Star
= 10,
82
Hash
= 11,
83
A
= 12,
84
B
= 13,
85
C
= 14,
86
D
= 15,
87
Flash
= 16,
88
CED
= 32,
89
CNG
= 36
90
};
91
92
OpalRFC2833Info
(
93
char
tone
,
94
unsigned
duration
= 0,
95
unsigned
timestamp
= 0
96
);
97
98
char
GetTone
()
const
{
return
tone
; }
99
unsigned
GetDuration
()
const
{
return
duration
; }
100
unsigned
GetTimestamp
()
const
{
return
timestamp
; }
101
bool
IsToneStart
()
const
{
return
duration
== 0; }
102
103
protected
:
104
char
tone
;
105
unsigned
duration
;
106
unsigned
timestamp
;
107
};
108
109
111
112
class
OpalRFC2833Proto
:
public
PObject
113
{
114
PCLASSINFO(
OpalRFC2833Proto
, PObject);
115
public
:
116
OpalRFC2833Proto
(
117
const
PNotifier & receiveNotifier,
118
const
OpalMediaFormat
& mediaFormat
119
);
120
~OpalRFC2833Proto
();
121
122
virtual
bool
SendToneAsync
(
123
char
tone,
124
unsigned
milliseconds
125
);
126
127
virtual
void
OnStartReceive
(
128
char
tone,
129
unsigned
timestamp
130
);
131
virtual
void
OnEndReceive
();
132
133
void
UseRTPSession
(
bool
rx,
OpalRTPSession
* session);
134
135
OpalMediaFormat
GetTxMediaFormat
()
const
;
136
OpalMediaFormat
GetRxMediaFormat
()
const
;
137
void
SetTxMediaFormat
(
const
OpalMediaFormat
& mediaFormat);
138
void
SetRxMediaFormat
(
const
OpalMediaFormat
& mediaFormat);
139
140
static
PINDEX
ASCIIToRFC2833
(
char
tone,
bool
hasNSE);
141
static
char
RFC2833ToASCII
(PINDEX rfc2833,
bool
hasNSE);
142
143
protected
:
144
bool
InternalTransmitFrame
();
145
bool
AbortTransmit
();
146
WORD
GetTimestampSince
(
const
PTimeInterval & tick)
const
;
147
148
PDECLARE_RTPFilterNotifier
(
OpalRFC2833Proto
, ReceivedPacket);
149
PDECLARE_NOTIFIER
(PTimer,
OpalRFC2833Proto
, ReceiveTimeout);
150
PDECLARE_NOTIFIER
(PTimer,
OpalRFC2833Proto
, TransmitTimeout);
151
152
OpalMediaFormat
m_baseMediaFormat
;
153
RTP_DataFrame::PayloadTypes
m_txPayloadType
;
154
RTP_DataFrame::PayloadTypes
m_rxPayloadType
;
155
OpalRFC2833EventsMask
m_txEvents
;
156
OpalRFC2833EventsMask
m_rxEvents
;
157
PNotifier
m_receiveNotifier
;
158
OpalRTPSession::FilterNotifier
m_receiveHandler
;
159
160
OpalRTPSession
*
m_rtpSession
;
161
162
enum
{
163
TransmitIdle
,
164
TransmitActive
,
165
TransmitEnding1
,
166
TransmitEnding2
,
167
TransmitEnding3
,
168
}
m_transmitState
;
169
PTimer
m_transmitUpdateTimer
;
170
PTimer
m_transmitDurationTimer
;
171
DWORD
m_transmitTimestamp
;
172
PTimeInterval
m_transmitStartTime
;
173
BYTE
m_transmitCode
;
174
WORD
m_transmitDuration
;
175
PMutex
m_transmitMutex
;
176
177
bool
m_receiveIdle
;
178
BYTE
m_receivedTone
;
179
DWORD
m_receivedTimestamp
;
180
WORD
m_receivedDuration
;
181
PTimer
m_receiveTimer
;
182
PMutex
m_receiveMutex
;
183
184
P_REMOVE_VIRTUAL_VOID
(
OnStartReceive
(
char
));
185
P_REMOVE_VIRTUAL_VOID
(
OnEndReceive
(
char
,
unsigned
,
unsigned
));
186
};
187
188
189
#endif // OPAL_CODEC_RFC2833_H
190
191
include
codec
rfc2833.h
Generated on Fri Oct 10 2014 21:36:58 for OPAL by
1.8.3.1