OPAL  Version 3.18.8
channels.h
Go to the documentation of this file.
1 /*
2  * channels.h
3  *
4  * H.323 protocol handler
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open H323 Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Portions of this code were written with the assisance of funding from
25  * Vovida Networks, Inc. http://www.vovida.com.
26  *
27  * Contributor(s): ______________________________________.
28  */
29 
30 #ifndef OPAL_H323_CHANNELS_H
31 #define OPAL_H323_CHANNELS_H
32 
33 #ifdef P_USE_PRAGMA
34 #pragma interface
35 #endif
36 
37 #include <opal_config.h>
38 
39 #if OPAL_H323
40 
41 #include <rtp/rtp.h>
42 #include <h323/transaddr.h>
43 #include <opal/mediastrm.h>
44 
45 
46 class H245_OpenLogicalChannel;
47 class H245_OpenLogicalChannelAck;
48 class H245_OpenLogicalChannel_forwardLogicalChannelParameters;
49 class H245_OpenLogicalChannel_reverseLogicalChannelParameters;
50 class H245_H2250LogicalChannelParameters;
51 class H245_H2250LogicalChannelAckParameters;
52 class H245_ArrayOf_GenericInformation;
53 class H245_MiscellaneousCommand_type;
54 class H245_MiscellaneousIndication_type;
55 
56 class H323EndPoint;
57 class H323Connection;
58 class H323Capability;
59 
60 
62 
66 class H323ChannelNumber : public PObject
67 {
68  PCLASSINFO(H323ChannelNumber, PObject);
69 
70  public:
71  H323ChannelNumber() { number = 0; fromRemote = false; }
72  H323ChannelNumber(unsigned number, PBoolean fromRemote);
73 
74  virtual PObject * Clone() const;
75  virtual PINDEX HashFunction() const;
76  virtual void PrintOn(ostream & strm) const;
77  virtual Comparison Compare(const PObject & obj) const;
78 
80  operator unsigned() const { return number; }
81  PBoolean IsFromRemote() const { return fromRemote; }
82 
83  protected:
84  unsigned number;
85  PBoolean fromRemote;
86 };
87 
88 
95 class H323Channel : public PObject
96 {
97  PCLASSINFO(H323Channel, PObject);
98 
99  public:
104  H323Channel(
106  const H323Capability & capability
107  );
108 
113  ~H323Channel();
115 
118  virtual void PrintOn(
119  ostream & strm
120  ) const;
122 
125  enum Directions {
130  };
131 #if PTRACING
132  friend ostream & operator<<(ostream & out, Directions dir);
133 #endif
134 
139  virtual Directions GetDirection() const = 0;
140 
146  virtual unsigned GetSessionID() const;
147 
154  virtual bool SetSessionID(
155  unsigned sessionID
156  );
157 
164  virtual PBoolean GetMediaTransportAddress(
165  OpalTransportAddress & data,
166  OpalTransportAddress & control
167  ) const;
168 
176  virtual PBoolean SetInitialBandwidth() = 0;
177 
184  virtual bool PreOpen();
185 
190  virtual PBoolean Open();
191 
194  virtual void Close();
195 
198  PBoolean IsOpen() const { return opened && m_terminating == 0; }
199 
207  virtual OpalMediaStreamPtr GetMediaStream() const;
208 
212  virtual void SetMediaStream(OpalMediaStreamPtr mediaStream);
213 
214 
217  virtual PBoolean OnSendingPDU(
218  H245_OpenLogicalChannel & openPDU
219  ) const;
220 
226  virtual void OnSendOpenAck(
227  const H245_OpenLogicalChannel & open,
228  H245_OpenLogicalChannelAck & ack
229  ) const;
230 
237  virtual PBoolean OnReceivedPDU(
238  const H245_OpenLogicalChannel & pdu,
239  unsigned & errorCode
240  );
241 
248  virtual PBoolean OnReceivedAckPDU(
249  const H245_OpenLogicalChannelAck & pdu
250  );
251 
255  virtual void OnFlowControl(
256  long bitRateRestriction
257  );
258 
262  virtual void OnMiscellaneousCommand(
263  const H245_MiscellaneousCommand_type & type
264  );
265 
269  virtual void OnMiscellaneousIndication(
270  const H245_MiscellaneousIndication_type & type
271  );
272 
276  virtual void OnJitterIndication(
277  DWORD jitter,
278  int skippedFrameCount,
279  int additionalBuffer
280  );
282 
287  const H323ChannelNumber & GetNumber() const { return number; }
288 
291  void SetNumber(const H323ChannelNumber & num) { number = num; }
292 
296 
300 
303  OpalBandwidth GetBandwidthUsed() const { return m_bandwidthUsed; }
304 
307  bool SetBandwidthUsed(
308  OpalBandwidth bandwidth
309  );
310 
313  const H323Capability & GetCapability() const { return *capability; }
314 
317 
319  virtual bool UpdateMediaFormat(const OpalMediaFormat & mediaFormat);
321 
322  protected:
323  virtual void InternalClose();
324 
330  bool opened;
331  atomic<bool> m_terminating;
332 
333  private:
334  OpalBandwidth m_bandwidthUsed;
335 };
336 
337 
338 PLIST(H323LogicalChannelList, H323Channel);
339 
340 
341 
349 {
351 
352  public:
359  const H323Capability & capability,
360  Directions direction
361  );
362 
367 
374  virtual Directions GetDirection() const;
375 
383  virtual PBoolean SetInitialBandwidth();
384 
391  virtual bool PreOpen();
392 
395  virtual PBoolean Open();
396 
398  virtual bool UpdateMediaFormat(const OpalMediaFormat & mediaFormat);
400 
406  virtual OpalMediaStreamPtr GetMediaStream() const;
407 
411  virtual void SetMediaStream(OpalMediaStreamPtr mediaStream);
413 
414 
415  protected:
416  virtual void InternalClose();
417 
418  bool receiver;
420 };
421 
422 
430 {
432 
433  public:
440  const H323Capability & capability
441  );
443 
450  virtual Directions GetDirection() const;
452 };
453 
454 
456 
460 {
462 
463  public:
470  const H323Capability & capability,
471  Directions direction
472  );
474 
479  virtual PBoolean OnSendingPDU(
480  H245_OpenLogicalChannel & openPDU
481  ) const;
482 
486  virtual void OnSendOpenAck(
487  const H245_OpenLogicalChannel & open,
488  H245_OpenLogicalChannelAck & ack
489  ) const;
490 
491  virtual void OnSendOpenAck(
492  H245_H2250LogicalChannelAckParameters & param
493  ) const;
494 
495 
503  virtual PBoolean OnReceivedPDU(
504  const H245_OpenLogicalChannel & pdu,
505  unsigned & errorCode
506  );
507 
515  virtual PBoolean OnReceivedAckPDU(
516  const H245_OpenLogicalChannelAck & pdu
517  );
519 
524  virtual PBoolean OnSendingPDU(
525  H245_H2250LogicalChannelParameters & param
526  ) const;
527 
530  virtual PBoolean OnSendingAltPDU(
531  H245_ArrayOf_GenericInformation & alternate
532  ) const = 0;
533 
544  virtual PBoolean OnReceivedPDU(
545  const H245_H2250LogicalChannelParameters & param,
546  unsigned & errorCode
547  );
548 
555  virtual PBoolean OnReceivedAckPDU(
556  const H245_H2250LogicalChannelAckParameters & param
557  );
558 
561 };
562 
563 
565 
573 {
575 
576  public:
583  const H323Capability & capability,
584  Directions direction,
585  unsigned sessionID
586  );
587 
592 
597  virtual unsigned GetSessionID() const;
598 
601  virtual PBoolean OnSendingPDU(
602  H245_OpenLogicalChannel & openPDU
603  ) const;
604 
608  virtual void OnSendOpenAck(
609  const H245_OpenLogicalChannel & open,
610  H245_OpenLogicalChannelAck & ack
611  ) const;
612 
620  virtual PBoolean OnReceivedPDU(
621  const H245_OpenLogicalChannel & pdu,
622  unsigned & errorCode
623  );
624 
632  virtual PBoolean OnReceivedAckPDU(
633  const H245_OpenLogicalChannelAck & pdu
634  );
636 
645  virtual PBoolean CreateListener();
646 
654  virtual PBoolean CreateTransport();
656 
657  protected:
658  virtual void InternalClose();
659 
660  unsigned sessionID;
666 };
667 
668 
669 #endif // OPAL_H323
670 
671 #endif // OPAL_H323_CHANNELS_H
672 
673 
virtual void SetMediaStream(OpalMediaStreamPtr mediaStream)
virtual bool UpdateMediaFormat(const OpalMediaFormat &mediaFormat)
Update media format options.
virtual PBoolean GetMediaTransportAddress(OpalTransportAddress &data, OpalTransportAddress &control) const
H323Connection & connection
Definition: channels.h:326
unsigned sessionID
Definition: channels.h:660
H323DataChannel(H323Connection &connection, const H323Capability &capability, Directions direction, unsigned sessionID)
virtual bool UpdateMediaFormat(const OpalMediaFormat &mediaFormat)
Update media format options.
virtual Directions GetDirection() const
virtual void InternalClose()
const H323Capability & GetCapability() const
Definition: channels.h:313
virtual PINDEX HashFunction() const
PBoolean autoDeleteTransport
Definition: channels.h:664
virtual void SetMediaStream(OpalMediaStreamPtr mediaStream)
Definition: channels.h:459
virtual OpalMediaStreamPtr GetMediaStream() const
virtual bool SetSessionID(unsigned sessionID)
virtual OpalMediaStreamPtr GetMediaStream() const
Definition: h323caps.h:95
PBoolean autoDeleteListener
Definition: channels.h:662
Directions
Definition: channels.h:125
Definition: transports.h:788
virtual PBoolean CreateListener()
PSafePtr< OpalMediaStream > OpalMediaStreamPtr
Definition: mediastrm.h:493
H323ChannelNumber number
Definition: channels.h:328
const H323ChannelNumber & GetReverseChannel() const
Definition: channels.h:295
virtual PBoolean OnReceivedAckPDU(const H245_OpenLogicalChannelAck &pdu)
OpalMediaStreamPtr m_mediaStream
Definition: channels.h:419
bool SetBandwidthUsed(OpalBandwidth bandwidth)
Definition: channels.h:129
virtual unsigned GetSessionID() const
PBoolean IsFromRemote() const
Definition: channels.h:81
H323Channel(H323Connection &connection, const H323Capability &capability)
virtual void OnMiscellaneousCommand(const H245_MiscellaneousCommand_type &type)
atomic< bool > m_terminating
Definition: channels.h:331
virtual void InternalClose()
virtual PBoolean OnSendingPDU(H245_OpenLogicalChannel &openPDU) const
virtual PBoolean SetInitialBandwidth()
Definition: transports.h:411
PayloadTypes
Definition: rtp.h:556
virtual PBoolean OnSendingAltPDU(H245_ArrayOf_GenericInformation &alternate) const =0
H323Capability * capability
Definition: channels.h:327
H323Listener * listener
Definition: channels.h:661
Definition: channels.h:95
virtual unsigned GetSessionID() const
Definition: channels.h:572
Definition: mediafmt.h:60
virtual Directions GetDirection() const =0
virtual PObject * Clone() const
virtual Directions GetDirection() const
Definition: mediafmt.h:806
PBoolean IsOpen() const
Definition: channels.h:198
virtual PBoolean OnReceivedAckPDU(const H245_OpenLogicalChannelAck &pdu)
virtual Comparison Compare(const PObject &obj) const
Definition: channels.h:127
virtual PBoolean CreateTransport()
PLIST(H323LogicalChannelList, H323Channel)
Definition: h323con.h:137
virtual PBoolean OnReceivedPDU(const H245_OpenLogicalChannel &pdu, unsigned &errorCode)
virtual PBoolean Open()
virtual void OnSendOpenAck(const H245_OpenLogicalChannel &open, H245_OpenLogicalChannelAck &ack) const
H323UnidirectionalChannel(H323Connection &connection, const H323Capability &capability, Directions direction)
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual void OnJitterIndication(DWORD jitter, int skippedFrameCount, int additionalBuffer)
virtual PBoolean SetInitialBandwidth()=0
H323EndPoint & endpoint
Definition: channels.h:325
H323_RealTimeChannel(H323Connection &connection, const H323Capability &capability, Directions direction)
unsigned number
Definition: channels.h:84
virtual PBoolean OnReceivedPDU(const H245_OpenLogicalChannel &pdu, unsigned &errorCode)
bool opened
Definition: channels.h:330
virtual void InternalClose()
virtual void Close()
Definition: channels.h:348
virtual void OnMiscellaneousIndication(const H245_MiscellaneousIndication_type &type)
H323BidirectionalChannel(H323Connection &connection, const H323Capability &capability)
Definition: channels.h:429
Definition: channels.h:128
Definition: channels.h:66
PBoolean fromRemote
Definition: channels.h:85
H323ChannelNumber reverseChannel
Definition: channels.h:329
bool receiver
Definition: channels.h:418
virtual void OnSendOpenAck(const H245_OpenLogicalChannel &open, H245_OpenLogicalChannelAck &ack) const
void SetNumber(const H323ChannelNumber &num)
Definition: channels.h:291
PBoolean separateReverseChannel
Definition: channels.h:665
Definition: channels.h:126
Definition: transports.h:151
void SetReverseChannel(const H323ChannelNumber &num)
Definition: channels.h:299
Definition: h323ep.h:82
virtual PBoolean OnSendingPDU(H245_OpenLogicalChannel &openPDU) const
H323ChannelNumber()
Definition: channels.h:71
virtual void PrintOn(ostream &strm) const
const H323ChannelNumber & GetNumber() const
Definition: channels.h:287
virtual PBoolean OnReceivedAckPDU(const H245_OpenLogicalChannelAck &pdu)
H323Transport * transport
Definition: channels.h:663
virtual void OnFlowControl(long bitRateRestriction)
virtual bool PreOpen()
virtual PBoolean OnReceivedPDU(const H245_OpenLogicalChannel &pdu, unsigned &errorCode)
RTP_DataFrame::PayloadTypes GetDynamicRTPPayloadType() const
virtual void OnSendOpenAck(const H245_OpenLogicalChannel &open, H245_OpenLogicalChannelAck &ack) const
virtual void PrintOn(ostream &strm) const
H323ChannelNumber & operator++(int)
OpalMediaFormat GetMediaFormat() const
Get the media format (from capability)
virtual PBoolean OnSendingPDU(H245_OpenLogicalChannel &openPDU) const
virtual PBoolean Open()
OpalBandwidth GetBandwidthUsed() const
Definition: channels.h:303