OPAL  Version 3.18.8
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 
22 #ifndef OPAL_H224_H224HANDLER_H
23 #define OPAL_H224_H224HANDLER_H
24 
25 #ifdef P_USE_PRAGMA
26 #pragma interface
27 #endif
28 
29 #include <opal_config.h>
30 
31 #if OPAL_HAS_H224
32 
33 #include <opal/connection.h>
34 #include <opal/transports.h>
35 #include <opal/mediastrm.h>
36 #include <rtp/rtp.h>
37 #include <h224/h224.h>
38 
39 class OpalH224Handler;
40 
41 class OpalH224Client : public PObject
42 {
43  PCLASSINFO(OpalH224Client, PObject);
44 
45 public:
46 
49 
50  enum {
51  CMEClientID = 0x00,
52  H281ClientID = 0x01,
55  };
56 
60  virtual BYTE GetClientID() const = 0;
61 
64  virtual BYTE GetExtendedClientID() const { return 0x00; }
65 
69  virtual BYTE GetCountryCode() const { return 0xff; /* CountryCodeEscape */ }
70 
74  virtual BYTE GetCountryCodeExtension() const { return 0x00; }
75 
79  virtual WORD GetManufacturerCode() const { return 0x0000; }
80 
84  virtual BYTE GetManufacturerClientID() const { return 0x00; }
85 
89  virtual bool HasExtraCapabilities() const { return false; }
90 
94  virtual void OnReceivedExtraCapabilities(const BYTE * /*capabilities*/, PINDEX /*size*/) { }
95 
99  virtual void OnReceivedMessage(const H224_Frame & /*message*/) { }
100 
104  virtual void SendExtraCapabilities() const { }
105 
106  virtual Comparison Compare(const PObject & obj);
107 
109  void SetH224Handler(OpalH224Handler * handler) { m_h224Handler = handler; }
110 
112  void SetRemoteClientAvailable(bool remoteClientAvailable, bool remoteClientHasExtraCapabilities);
113 
116 
117 protected:
121 };
122 
123 PSORTED_LIST(OpalH224ClientList, OpalH224Client);
124 
125 
127 
128 class OpalH224MediaStream;
129 
130 class OpalH224Handler : public PObject
131 {
132  PCLASSINFO(OpalH224Handler, PObject);
133 
134 public:
135 
136  OpalH224Handler();
138 
139  enum {
140  Broadcast = 0x0000,
141 
144  CMEMessage = 0x00,
145  CMECommand = 0xff,
146 
148  };
149 
151  bool AddClient(OpalH224Client & client);
152  bool RemoveClient(OpalH224Client & client);
153 
155  void SetTransmitMediaStream(OpalH224MediaStream * transmitMediaStream);
156 
157  virtual void StartTransmit();
158  virtual void StopTransmit();
159 
161  bool SendClientList();
162 
164  bool SendExtraCapabilities();
165 
167  bool SendClientListCommand();
168 
170  bool SendExtraCapabilitiesCommand(const OpalH224Client & client);
171 
173  bool SendExtraCapabilitiesMessage(const OpalH224Client & client, BYTE *data, PINDEX length);
174 
176  bool TransmitClientFrame(const OpalH224Client & client, H224_Frame & frame);
177 
178  virtual bool OnReceivedFrame(H224_Frame & frame);
179  virtual bool OnReceivedCMEMessage(H224_Frame & frame);
180  virtual bool OnReceivedClientList(H224_Frame & frame);
181  virtual bool OnReceivedClientListCommand();
182  virtual bool OnReceivedExtraCapabilities(H224_Frame & frame);
183  virtual bool OnReceivedExtraCapabilitiesCommand();
184 
185 protected:
186  bool TransmitFrame(H224_Frame & frame);
188  BYTE clientID,
189  BYTE extendedClientID,
190  BYTE countryCode,
191  BYTE countryCodeExtension,
192  WORD manufacturerCode,
193  BYTE manufacturerClientID
194  ) const;
195 
196  PDECLARE_MUTEX( m_transmitMutex);
202 
203  OpalH224ClientList m_clients;
204 };
205 
207 
209 {
211 
212  public:
213  OpalH224MediaStream(OpalConnection & connection,
214  OpalH224Handler & h224Handler,
215  const OpalMediaFormat & mediaFormat,
216  unsigned sessionID,
217  bool isSource);
219 
220  virtual void OnStartMediaPatch();
221  virtual PBoolean ReadPacket(RTP_DataFrame & packet);
222  virtual PBoolean WritePacket(RTP_DataFrame & packet);
223  virtual PBoolean IsSynchronous() const { return false; }
224  virtual PBoolean RequiresPatchThread() const { return IsSink(); }
225 
226  private:
227  virtual void InternalClose();
228 
229  OpalH224Handler & m_h224Handler;
230  unsigned m_consecutiveErrors;
231 };
232 
233 
234 #endif // OPAL_HAS_H224
235 
236 #endif // OPAL_H224_H224HANDLER_H
OpalH224MediaStream(OpalConnection &connection, OpalH224Handler &h224Handler, const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
PTime m_transmitStartTime
Definition: h224handler.h:200
virtual bool OnReceivedFrame(H224_Frame &frame)
Definition: h224handler.h:130
bool AddClient(OpalH224Client &client)
virtual PBoolean IsSynchronous() const
Definition: h224handler.h:223
virtual BYTE GetCountryCode() const
Definition: h224handler.h:69
virtual BYTE GetManufacturerClientID() const
Definition: h224handler.h:84
Definition: h224handler.h:41
bool TransmitClientFrame(const OpalH224Client &client, H224_Frame &frame)
virtual bool OnReceivedExtraCapabilitiesCommand()
virtual PBoolean RequiresPatchThread() const
Definition: h224handler.h:224
bool RemoveClient(OpalH224Client &client)
virtual bool OnReceivedExtraCapabilities(H224_Frame &frame)
bool TransmitFrame(H224_Frame &frame)
bool SendClientListCommand()
bool m_remoteClientAvailable
Definition: h224handler.h:118
virtual void OnReceivedExtraCapabilities(const BYTE *, PINDEX)
Definition: h224handler.h:94
PINDEX m_transmitBitIndex
Definition: h224handler.h:199
Definition: h224handler.h:145
Definition: h224handler.h:53
bool IsSink() const
Definition: mediastrm.h:359
virtual void StopTransmit()
Definition: h224.h:69
OpalH224Handler * m_h224Handler
Definition: h224handler.h:120
bool GetRemoteClientHasExtraCapabilities() const
Definition: h224handler.h:115
bool SendExtraCapabilitiesCommand(const OpalH224Client &client)
Definition: rtp.h:540
bool m_transmitHDLCTunneling
Definition: h224handler.h:198
Definition: mediafmt.h:806
virtual void OnReceivedMessage(const H224_Frame &)
Definition: h224handler.h:99
bool m_canTransmit
Definition: h224handler.h:197
OpalH224MediaStream * m_transmitMediaStream
Definition: h224handler.h:201
bool GetRemoteClientAvailable() const
Definition: h224handler.h:114
virtual void StartTransmit()
virtual PBoolean WritePacket(RTP_DataFrame &packet)
virtual void SendExtraCapabilities() const
Definition: h224handler.h:104
PSORTED_LIST(OpalH224ClientList, OpalH224Client)
virtual WORD GetManufacturerCode() const
Definition: h224handler.h:79
Definition: h224handler.h:143
OpalH224ClientList m_clients
Definition: h224handler.h:203
void SetTransmitMediaStream(OpalH224MediaStream *transmitMediaStream)
bool SendExtraCapabilitiesMessage(const OpalH224Client &client, BYTE *data, PINDEX length)
Definition: h224handler.h:142
void SetH224Handler(OpalH224Handler *handler)
Definition: h224handler.h:109
virtual void OnStartMediaPatch()
Definition: h224handler.h:52
virtual PBoolean ReadPacket(RTP_DataFrame &packet)
Definition: mediastrm.h:110
Definition: h224handler.h:54
PDECLARE_MUTEX(m_transmitMutex)
Definition: connection.h:415
Definition: h224handler.h:208
OpalH224Client * FindClient(BYTE clientID, BYTE extendedClientID, BYTE countryCode, BYTE countryCodeExtension, WORD manufacturerCode, BYTE manufacturerClientID) const
Definition: h224handler.h:144
bool m_remoteClientHasExtraCapabilities
Definition: h224handler.h:119
virtual BYTE GetClientID() const =0
bool SendClientList()
virtual Comparison Compare(const PObject &obj)
virtual bool OnReceivedClientList(H224_Frame &frame)
Definition: h224handler.h:51
virtual bool OnReceivedCMEMessage(H224_Frame &frame)
virtual bool OnReceivedClientListCommand()
bool SendExtraCapabilities()
Definition: h224handler.h:147
virtual BYTE GetExtendedClientID() const
Definition: h224handler.h:64
void SetRemoteClientAvailable(bool remoteClientAvailable, bool remoteClientHasExtraCapabilities)
virtual bool HasExtraCapabilities() const
Definition: h224handler.h:89
virtual BYTE GetCountryCodeExtension() const
Definition: h224handler.h:74
Definition: h224handler.h:140