OPAL  Version 3.10.10
h224handler.h
Go to the documentation of this file.
1 /*
2  * h224handler.h
3  *
4  * H.224 protocol handler implementation for the OpenH323 Project.
5  *
6  * Copyright (c) 2006 Network for Educational Technology, ETH Zurich.
7  * Written by Hannes Friederich.
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  * Contributor(s): ______________________________________.
20  *
21  * $Revision: 27149 $
22  * $Author: rjongbloed $
23  * $Date: 2012-03-07 18:32:36 -0600 (Wed, 07 Mar 2012) $
24  */
25 
26 #ifndef OPAL_H224_H224HANDLER_H
27 #define OPAL_H224_H224HANDLER_H
28 
29 #ifdef P_USE_PRAGMA
30 #pragma interface
31 #endif
32 
33 #ifndef _PTLIB_H
34 #include <ptlib.h>
35 #endif
36 
37 #include <opal/buildopts.h>
38 
39 #include <opal/connection.h>
40 #include <opal/transports.h>
41 #include <opal/mediastrm.h>
42 #include <rtp/rtp.h>
43 #include <h224/h224.h>
44 
45 class OpalH224Handler;
46 
47 class OpalH224Client : public PObject
48 {
49  PCLASSINFO(OpalH224Client, PObject);
50 
51 public:
52 
55 
56  enum {
57  CMEClientID = 0x00,
58  H281ClientID = 0x01,
61  };
62 
66  virtual BYTE GetClientID() const = 0;
67 
70  virtual BYTE GetExtendedClientID() const { return 0x00; }
71 
75  virtual BYTE GetCountryCode() const { return 0xff; /* CountryCodeEscape */ }
76 
80  virtual BYTE GetCountryCodeExtension() const { return 0x00; }
81 
85  virtual WORD GetManufacturerCode() const { return 0x0000; }
86 
90  virtual BYTE GetManufacturerClientID() const { return 0x00; }
91 
95  virtual PBoolean HasExtraCapabilities() const { return false; }
96 
100  virtual void OnReceivedExtraCapabilities(const BYTE * /*capabilities*/, PINDEX /*size*/) { }
101 
105  virtual void OnReceivedMessage(const H224_Frame & /*message*/) { }
106 
110  virtual void SendExtraCapabilities() const { }
111 
112  virtual Comparison Compare(const PObject & obj);
113 
115  void SetH224Handler(OpalH224Handler * handler) { h224Handler = handler; }
116 
119 
120  PBoolean GetRemoteClientAvailable() const { return remoteClientAvailable; }
122 
123 protected:
124 
128 };
129 
130 PSORTED_LIST(OpalH224ClientList, OpalH224Client);
131 
133 
134 class OpalH224MediaStream;
135 
136 class OpalH224Handler : public PObject
137 {
138  PCLASSINFO(OpalH224Handler, PObject);
139 
140 public:
141 
142  OpalH224Handler();
144 
145  enum {
146  Broadcast = 0x0000,
147 
150  CMEMessage = 0x00,
151  CMECommand = 0xff,
152 
154  };
155 
157  PBoolean AddClient(OpalH224Client & client);
158  PBoolean RemoveClient(OpalH224Client & client);
159 
161  void SetTransmitMediaFormat(const OpalMediaFormat & mediaFormat);
162  void SetReceiveMediaFormat(const OpalMediaFormat & mediaFormat);
163 
166 
167  virtual void StartTransmit();
168  virtual void StopTransmit();
169 
171  PBoolean SendClientList();
172 
174  PBoolean SendExtraCapabilities();
175 
177  PBoolean SendClientListCommand();
178 
180  PBoolean SendExtraCapabilitiesCommand(const OpalH224Client & client);
181 
183  PBoolean SendExtraCapabilitiesMessage(const OpalH224Client & client, BYTE *data, PINDEX length);
184 
186  PBoolean TransmitClientFrame(const OpalH224Client & client, H224_Frame & frame);
187 
188  PBoolean HandleFrame(const RTP_DataFrame & rtpFrame);
189  virtual PBoolean OnReceivedFrame(H224_Frame & frame);
190  virtual PBoolean OnReceivedCMEMessage(H224_Frame & frame);
191  virtual PBoolean OnReceivedClientList(H224_Frame & frame);
192  virtual PBoolean OnReceivedClientListCommand();
193  virtual PBoolean OnReceivedExtraCapabilities(H224_Frame & frame);
194  virtual PBoolean OnReceivedExtraCapabilitiesCommand();
195 
196  PMutex & GetTransmitMutex() { return transmitMutex; }
197 
198 protected:
199 
201  PBoolean canTransmit;
206 
208 
209  OpalH224ClientList clients;
210 
211 private:
212  void TransmitFrame(H224_Frame & frame);
213 
214  PBoolean transmitHDLCTunneling;
215  PBoolean receiveHDLCTunneling;
216 };
217 
219 
221 {
223 
224  public:
226  OpalH224Handler & h224Handler,
228  unsigned sessionID,
229  PBoolean isSource);
231 
232  virtual void OnStartMediaPatch();
233  virtual PBoolean ReadPacket(RTP_DataFrame & packet);
234  virtual PBoolean WritePacket(RTP_DataFrame & packet);
235  virtual PBoolean IsSynchronous() const { return false; }
236  virtual PBoolean RequiresPatchThread() const { return isSource ? false : true; }
237 
238  private:
239  virtual void InternalClose();
240 
241  OpalH224Handler & h224Handler;
242 };
243 
244 #endif // OPAL_H224_H224HANDLER_H
245 
OpalH224MediaStream * transmitMediaStream
Definition: h224handler.h:205
Definition: h224handler.h:153
PBoolean HandleFrame(const RTP_DataFrame &rtpFrame)
PBoolean SendClientListCommand()
Definition: h224handler.h:136
PMutex & GetTransmitMutex()
Definition: h224handler.h:196
Definition: h224handler.h:59
virtual PBoolean IsSynchronous() const
Definition: h224handler.h:235
bool isSource
Definition: mediastrm.h:421
virtual BYTE GetCountryCode() const
Definition: h224handler.h:75
virtual BYTE GetManufacturerClientID() const
Definition: h224handler.h:90
Definition: h224handler.h:47
virtual PBoolean RequiresPatchThread() const
Definition: h224handler.h:236
Definition: h224handler.h:148
PBoolean SendExtraCapabilitiesMessage(const OpalH224Client &client, BYTE *data, PINDEX length)
virtual void OnReceivedExtraCapabilities(const BYTE *, PINDEX)
Definition: h224handler.h:100
virtual void StopTransmit()
Definition: h224handler.h:149
PTime * transmitStartTime
Definition: h224handler.h:204
PBoolean SendExtraCapabilitiesCommand(const OpalH224Client &client)
Definition: h224.h:91
PBoolean TransmitClientFrame(const OpalH224Client &client, H224_Frame &frame)
PBoolean AddClient(OpalH224Client &client)
Definition: h224handler.h:151
virtual PBoolean OnReceivedClientList(H224_Frame &frame)
void SetTransmitMediaFormat(const OpalMediaFormat &mediaFormat)
BYTE transmitBitIndex
Definition: h224handler.h:203
RTP_DataFrame transmitFrame
Definition: h224handler.h:202
virtual PBoolean OnReceivedExtraCapabilitiesCommand()
unsigned sessionID
Definition: mediastrm.h:417
Definition: rtp.h:71
PBoolean SendClientList()
Definition: mediafmt.h:724
PMutex transmitMutex
Definition: h224handler.h:200
PBoolean GetRemoteClientAvailable() const
Definition: h224handler.h:120
PBoolean remoteClientAvailable
Definition: h224handler.h:125
virtual void OnReceivedMessage(const H224_Frame &)
Definition: h224handler.h:105
virtual void StartTransmit()
virtual PBoolean WritePacket(RTP_DataFrame &packet)
virtual void SendExtraCapabilities() const
Definition: h224handler.h:110
OpalH224MediaStream(OpalConnection &connection, OpalH224Handler &h224Handler, const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
PSORTED_LIST(OpalH224ClientList, OpalH224Client)
virtual WORD GetManufacturerCode() const
Definition: h224handler.h:85
OpalH224Handler * h224Handler
Definition: h224handler.h:127
void SetTransmitMediaStream(OpalH224MediaStream *transmitMediaStream)
PBoolean canTransmit
Definition: h224handler.h:201
PBoolean SendExtraCapabilities()
PBoolean GetRemoteClientHasExtraCapabilities() const
Definition: h224handler.h:121
virtual PBoolean OnReceivedFrame(H224_Frame &frame)
void SetH224Handler(OpalH224Handler *handler)
Definition: h224handler.h:115
virtual void OnStartMediaPatch()
virtual PBoolean HasExtraCapabilities() const
Definition: h224handler.h:95
void SetReceiveMediaFormat(const OpalMediaFormat &mediaFormat)
virtual PBoolean OnReceivedExtraCapabilities(H224_Frame &frame)
virtual PBoolean ReadPacket(RTP_DataFrame &packet)
Definition: mediastrm.h:111
OpalMediaFormat mediaFormat
Definition: mediastrm.h:419
virtual PBoolean OnReceivedClientListCommand()
Definition: connection.h:353
OpalConnection & connection
Definition: mediastrm.h:416
Definition: h224handler.h:220
H224_Frame receiveFrame
Definition: h224handler.h:207
Definition: h224handler.h:58
Definition: h224handler.h:150
virtual BYTE GetClientID() const =0
Definition: h224handler.h:146
OpalH224ClientList clients
Definition: h224handler.h:209
virtual Comparison Compare(const PObject &obj)
Definition: h224handler.h:57
Definition: h224handler.h:60
virtual PBoolean OnReceivedCMEMessage(H224_Frame &frame)
void SetRemoteClientAvailable(PBoolean remoteClientAvailable, PBoolean remoteClientHasExtraCapabilities)
virtual BYTE GetExtendedClientID() const
Definition: h224handler.h:70
PBoolean remoteClientHasExtraCapabilities
Definition: h224handler.h:126
PBoolean RemoveClient(OpalH224Client &client)
virtual BYTE GetCountryCodeExtension() const
Definition: h224handler.h:80