OPAL
Version 3.12.9
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: 27199 $
26
* $Author: rjongbloed $
27
* $Date: 2012-03-15 18:19:15 +1100 (Thu, 15 Mar 2012) $
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/buildopts.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
duration
125
);
126
127
virtual
void
OnStartReceive
(
128
char
tone,
129
unsigned
timestamp
130
);
131
virtual
void
OnStartReceive
(
132
char
tone
133
);
134
virtual
void
OnEndReceive
(
135
char
tone,
136
unsigned
duration,
137
unsigned
timestamp
138
);
139
140
void
UseRTPSession
(
bool
rx,
OpalRTPSession
* session);
141
142
OpalMediaFormat
GetTxMediaFormat
()
const
;
143
OpalMediaFormat
GetRxMediaFormat
()
const
;
144
void
SetTxMediaFormat
(
const
OpalMediaFormat
& mediaFormat);
145
void
SetRxMediaFormat
(
const
OpalMediaFormat
& mediaFormat);
146
147
static
PINDEX
ASCIIToRFC2833
(
char
tone,
bool
hasNSE);
148
static
char
RFC2833ToASCII
(PINDEX rfc2833,
bool
hasNSE);
149
150
protected
:
151
void
SendAsyncFrame
();
152
153
PDECLARE_RTPFilterNotifier
(
OpalRFC2833Proto
, ReceivedPacket);
154
PDECLARE_NOTIFIER
(PTimer,
OpalRFC2833Proto
, ReceiveTimeout);
155
PDECLARE_NOTIFIER
(PTimer,
OpalRFC2833Proto
, AsyncTimeout);
156
157
OpalMediaFormat
m_baseMediaFormat
;
158
RTP_DataFrame::PayloadTypes
m_txPayloadType
;
159
RTP_DataFrame::PayloadTypes
m_rxPayloadType
;
160
OpalRFC2833EventsMask
m_txEvents
;
161
OpalRFC2833EventsMask
m_rxEvents
;
162
PNotifier
m_receiveNotifier
;
163
OpalRTPSession::FilterNotifier
m_receiveHandler
;
164
165
enum
{
166
ReceiveIdle
,
167
ReceiveActive
,
168
ReceiveEnding
169
}
m_receiveState
;
170
171
PMutex
m_receiveMutex
;
172
BYTE
m_receivedTone
;
173
unsigned
m_tonesReceived
;
174
PTimer
m_receiveTimer
;
175
DWORD
m_previousReceivedTimestamp
;
176
177
enum
{
178
TransmitIdle
,
179
TransmitActive
,
180
TransmitEnding1
,
181
TransmitEnding2
,
182
TransmitEnding3
,
183
}
m_transmitState
;
184
185
PMutex
m_sendMutex
;
186
OpalRTPSession
*
m_rtpSession
;
187
PTimer
m_asyncTransmitTimer
;
188
PTimer
m_asyncDurationTimer
;
189
DWORD
m_transmitTimestamp
;
190
bool
m_rewriteTransmitTimestamp
;
191
PTimeInterval
m_asyncStart
;
192
BYTE
m_transmitCode
;
193
unsigned
m_transmitDuration
;
194
};
195
196
197
#endif // OPAL_CODEC_RFC2833_H
198
199
include
codec
rfc2833.h
Generated on Mon Feb 17 2014 13:37:51 for OPAL by
1.8.3.1