OPAL  Version 3.10.10
h323caps.h
Go to the documentation of this file.
1 /*
2  * h323caps.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  * $Revision: 27461 $
30  * $Author: rjongbloed $
31  * $Date: 2012-04-17 13:11:41 -0500 (Tue, 17 Apr 2012) $
32  */
33 
34 #ifndef OPAL_H323_H323CAPS_H
35 #define OPAL_H323_H323CAPS_H
36 
37 #ifdef P_USE_PRAGMA
38 #pragma interface
39 #endif
40 
41 #include <opal/buildopts.h>
42 
43 #if OPAL_H323
44 
45 #include <opal/mediafmt.h>
46 #include <h323/channels.h>
47 
48 
49 /* The following classes have forward references to avoid including the VERY
50  large header files for H225 and H245. If an application requires access
51  to the protocol classes they can include them, but for simple usage their
52  inclusion can be avoided.
53  */
54 class PASN_Choice;
55 class H245_Capability;
56 class H245_DataType;
57 class H245_ModeElement;
58 class H245_AudioCapability;
59 class H245_AudioMode;
60 class H245_VideoCapability;
61 class H245_VideoMode;
62 class H245_DataApplicationCapability;
63 class H245_DataMode;
64 class H245_DataProtocolCapability;
65 class H245_H2250LogicalChannelParameters;
66 class H245_TerminalCapabilitySet;
67 class H245_NonStandardParameter;
68 class H323Connection;
69 class H323Capabilities;
70 class H245_CapabilityIdentifier;
71 class H245_GenericCapability;
72 class H245_GenericParameter;
73 
75 
89 class H323Capability : public PObject
90 {
91  PCLASSINFO(H323Capability, PObject);
92 
93  public:
100 
106  Comparison Compare(const PObject & obj) const;
107 
110  void PrintOn(ostream & strm) const;
112 
115  enum MainTypes {
128  };
129 
135  virtual MainTypes GetMainType() const = 0;
136 
140  virtual unsigned GetSubType() const = 0;
141 
144  virtual PString GetFormatName() const = 0;
146 
152  static H323Capability * Create(
153  const PString & name
154  );
155 
156  enum {
161  };
162 
171  virtual unsigned GetDefaultSessionID() const;
172 
181  virtual void SetTxFramesInPacket(
182  unsigned frames
183  );
184 
189  virtual unsigned GetTxFramesInPacket() const;
190 
195  virtual unsigned GetRxFramesInPacket() const;
196 
202  virtual H323Channel * CreateChannel(
203  H323Connection & connection,
205  unsigned sessionID,
206  const H245_H2250LogicalChannelParameters * param
208  ) const = 0;
210 
213  enum CommandType {
217  };
218 
226  virtual PBoolean OnSendingPDU(
227  H245_Capability & pdu
228  ) const = 0;
229 
237  virtual PBoolean OnSendingPDU(
238  H245_DataType & pdu
239  ) const;
240 
248  virtual PBoolean OnSendingPDU(
249  H245_ModeElement & pdu
250  ) const = 0;
251 
264  virtual PBoolean OnReceivedPDU(
265  const H245_Capability & pdu
266  );
267 
275  virtual PBoolean OnReceivedPDU(
276  const H245_DataType & pdu,
277  PBoolean receiver
278  );
279 
282  virtual PBoolean IsMatch(
283  const PASN_Choice & subTypePDU,
284  const PString & mediaPacketization
285  ) const;
286 
294  virtual PBoolean IsUsable(
295  const H323Connection & connection
296  ) const;
298 
308  };
309 
313 
318  ) { capabilityDirection = dir; }
319 
321  unsigned GetCapabilityNumber() const { return assignedCapabilityNumber; }
322 
324  void SetCapabilityNumber(unsigned num) { assignedCapabilityNumber = num; }
325 
329 
332  bool UpdateMediaFormat(
333  const OpalMediaFormat & format
334  );
335 
338 
341 
343  virtual void AttachQoS(RTP_QOS *) { }
345 
346 #if PTRACING
347  friend ostream & operator<<(ostream & o , MainTypes t);
348  friend ostream & operator<<(ostream & o , CapabilityDirection d);
349 #endif
350 
351  protected:
353 
356 
357  private:
358  mutable OpalMediaFormat m_mediaFormat;
359  P_REMOVE_VIRTUAL(PBoolean, IsMatch(const PASN_Choice &) const, false);
360 
361  friend class H323Capabilities;
362 };
363 
364 
365 
375 {
376  public:
377  typedef PObject::Comparison (*CompareFuncType)(struct PluginCodec_H323NonStandardCodecData *);
378 
383  const BYTE * dataBlock,
384  PINDEX dataSize
385  );
386 
390  const BYTE * dataBlock,
391  PINDEX dataSize,
392  PINDEX comparisonOffset = 0,
393  PINDEX comparisonLength = P_MAX_INDEX
394  );
395 
399  const PString & oid,
400  const BYTE * dataBlock,
401  PINDEX dataSize,
402  PINDEX comparisonOffset = 0,
403  PINDEX comparisonLength = P_MAX_INDEX
404  );
405 
409  BYTE country,
410  BYTE extension,
411  WORD maufacturer,
412  const BYTE * dataBlock,
413  PINDEX dataSize,
414  PINDEX comparisonOffset = 0,
415  PINDEX comparisonLength = P_MAX_INDEX
416  );
417 
421 
426  virtual PBoolean OnSendingPDU(
427  PBYTEArray & data
428  ) const;
429 
434  virtual PBoolean OnReceivedPDU(
435  const PBYTEArray & data
436  );
437 
438  PBoolean IsMatch(const H245_NonStandardParameter & param) const;
439 
440  PObject::Comparison CompareParam(
441  const H245_NonStandardParameter & param
442  ) const;
443 
444  protected:
445  PBoolean OnSendingNonStandardPDU(
446  PASN_Choice & pdu,
447  unsigned nonStandardTag
448  ) const;
449  PBoolean OnReceivedNonStandardPDU(
450  const PASN_Choice & pdu,
451  unsigned nonStandardTag
452  );
453 
454  PObject::Comparison CompareInfo(
456  ) const;
457  PObject::Comparison CompareData(
458  const PBYTEArray & data
459  ) const;
460 
461  PString oid;
465  PBYTEArray nonStandardData;
469 };
470 
481 {
482  public:
484  const PString & id,
485  unsigned maxBitRate = 0
486  );
487 
489 
490  protected:
491  virtual PBoolean OnSendingGenericPDU(
492  H245_GenericCapability & pdu,
493  const OpalMediaFormat & mediaFormat,
495  ) const;
496  virtual PBoolean OnReceivedGenericPDU(
497  OpalMediaFormat & mediaFormat,
498  const H245_GenericCapability & pdu,
500  );
501 
502  PBoolean IsMatch(
503  const H245_GenericCapability & param
504  ) const;
505  PObject::Comparison CompareInfo(
506  const H323GenericCapabilityInfo & obj
507  ) const;
508 
509 
510  PString m_identifier;
511  unsigned maxBitRate;
512 };
513 
521 {
523 
524  public:
529  virtual H323Channel * CreateChannel(
530  H323Connection & connection,
532  unsigned sessionID,
533  const H245_H2250LogicalChannelParameters * param
535  ) const;
536 
539  virtual ~H323RealTimeCapability();
540  void AttachQoS(RTP_QOS * _rtpqos);
541 
542  protected:
545 };
546 
547 
555 {
557 
558  public:
565 
571  virtual MainTypes GetMainType() const;
573 
584  virtual unsigned GetDefaultSessionID() const;
585 
594  virtual void SetTxFramesInPacket(
595  unsigned frames
596  );
597 
603  virtual unsigned GetTxFramesInPacket() const;
604 
610  virtual unsigned GetRxFramesInPacket() const;
612 
623  virtual PBoolean OnSendingPDU(
624  H245_Capability & pdu
625  ) const;
626 
635  virtual PBoolean OnSendingPDU(
636  H245_DataType & pdu
637  ) const;
638 
647  virtual PBoolean OnSendingPDU(
648  H245_ModeElement & pdu
649  ) const;
650 
659  virtual PBoolean OnSendingPDU(
660  H245_AudioCapability & pdu,
661  unsigned packetSize
662  ) const;
663  virtual PBoolean OnSendingPDU(
664  H245_AudioCapability & pdu,
665  unsigned packetSize,
666  CommandType type
667  ) const;
668 
677  virtual PBoolean OnSendingPDU(
678  H245_AudioMode & pdu
679  ) const;
680 
692  virtual PBoolean OnReceivedPDU(
693  const H245_Capability & pdu
694  );
695 
705  virtual PBoolean OnReceivedPDU(
706  const H245_DataType & pdu,
707  PBoolean receiver
708  );
709 
718  virtual PBoolean OnReceivedPDU(
719  const H245_AudioCapability & pdu,
720  unsigned & packetSize
721  );
722  virtual PBoolean OnReceivedPDU(
723  const H245_AudioCapability & pdu,
724  unsigned & packetSize,
725  CommandType type
726  );
728 };
729 
730 
740 {
742 
743  public:
748  const BYTE * dataBlock,
749  PINDEX dataSize
750  );
754  const BYTE * dataBlock = NULL,
755  PINDEX dataSize = 0,
756  PINDEX comparisonOffset = 0,
757  PINDEX comparisonLength = P_MAX_INDEX
758  );
759 
763  const PString & oid,
764  const BYTE * dataBlock = NULL,
765  PINDEX dataSize = 0,
766  PINDEX comparisonOffset = 0,
767  PINDEX comparisonLength = P_MAX_INDEX
768  );
769 
773  BYTE country,
774  BYTE extension,
775  WORD maufacturer,
776  const BYTE * dataBlock = NULL,
777  PINDEX dataSize = 0,
778  PINDEX comparisonOffset = 0,
779  PINDEX comparisonLength = P_MAX_INDEX
780  );
782 
788  Comparison Compare(const PObject & obj) const;
790 
798  virtual unsigned GetSubType() const;
800 
811  virtual PBoolean OnSendingPDU(
812  H245_AudioCapability & pdu,
813  unsigned packetSize
814  ) const;
815 
824  virtual PBoolean OnSendingPDU(
825  H245_AudioMode & pdu
826  ) const;
827 
836  virtual PBoolean OnReceivedPDU(
837  const H245_AudioCapability & pdu,
838  unsigned & packetSize
839  );
840 
843  virtual PBoolean IsMatch(
844  const PASN_Choice & subTypePDU,
845  const PString & mediaPacketization
846  ) const;
848 };
849 
859 {
861 
862  public:
868  const PString & capabilityId,
869  PINDEX maxBitRate = 0
870  );
872 
878  Comparison Compare(const PObject & obj) const;
880 
888  virtual unsigned GetSubType() const;
890 
901  virtual PBoolean OnSendingPDU(
902  H245_AudioCapability & pdu,
903  unsigned packetSize,
904  CommandType type
905  ) const;
906 
915  virtual PBoolean OnSendingPDU(
916  H245_AudioMode & pdu
917  ) const;
918 
927  virtual PBoolean OnReceivedPDU(
928  const H245_AudioCapability & pdu,
929  unsigned & packetSize,
930  CommandType type
931  );
932 
935  virtual PBoolean IsMatch(
936  const PASN_Choice & subTypePDU,
937  const PString & mediaPacketization
938  ) const;
940 };
941 
942 
943 #if OPAL_VIDEO
944 
952 {
954 
955  public:
961  virtual MainTypes GetMainType() const;
963 
974  virtual unsigned GetDefaultSessionID() const;
976 
987  virtual PBoolean OnSendingPDU(
988  H245_Capability & pdu
989  ) const;
990 
999  virtual PBoolean OnSendingPDU(
1000  H245_DataType & pdu
1001  ) const;
1002 
1011  virtual PBoolean OnSendingPDU(
1012  H245_ModeElement & pdu
1013  ) const;
1014 
1022  virtual PBoolean OnSendingPDU(
1023  H245_VideoCapability & pdu
1024  ) const;
1025  virtual PBoolean OnSendingPDU(
1026  H245_VideoCapability & pdu,
1027  CommandType type
1028  ) const;
1029 
1038  virtual PBoolean OnSendingPDU(
1039  H245_VideoMode & pdu
1040  ) const = 0;
1041 
1051  virtual PBoolean OnReceivedPDU(
1052  const H245_Capability & pdu
1053  );
1054 
1062  virtual PBoolean OnReceivedPDU(
1063  const H245_DataType & pdu,
1064  PBoolean receiver
1065  );
1066 
1074  virtual PBoolean OnReceivedPDU(
1075  const H245_VideoCapability & pdu
1076  );
1077  virtual PBoolean OnReceivedPDU(
1078  const H245_VideoCapability & pdu,
1079  CommandType type
1080  );
1082 };
1083 
1084 
1094 {
1096 
1097  public:
1102  const BYTE * dataBlock,
1103  PINDEX dataSize
1104  );
1108  const BYTE * dataBlock = NULL,
1109  PINDEX dataSize = 0,
1110  PINDEX comparisonOffset = 0,
1111  PINDEX comparisonLength = P_MAX_INDEX
1112  );
1113 
1117  const PString & oid,
1118  const BYTE * dataBlock = NULL,
1119  PINDEX dataSize = 0,
1120  PINDEX comparisonOffset = 0,
1121  PINDEX comparisonLength = P_MAX_INDEX
1122  );
1123 
1127  BYTE country,
1128  BYTE extension,
1129  WORD maufacturer,
1130  const BYTE * dataBlock = NULL,
1131  PINDEX dataSize = 0,
1132  PINDEX comparisonOffset = 0,
1133  PINDEX comparisonLength = P_MAX_INDEX
1134  );
1136 
1142  Comparison Compare(const PObject & obj) const;
1144 
1153  virtual unsigned GetSubType() const;
1155 
1166  virtual PBoolean OnSendingPDU(
1167  H245_VideoCapability & pdu
1168  ) const;
1169 
1178  virtual PBoolean OnSendingPDU(
1179  H245_VideoMode & pdu
1180  ) const;
1181 
1190  virtual PBoolean OnReceivedPDU(
1191  const H245_VideoCapability & pdu
1192  );
1193 
1196  virtual PBoolean IsMatch(
1197  const PASN_Choice & subTypePDU,
1198  const PString & mediaPacketization
1199  ) const;
1201 };
1202 
1212 {
1214 
1215  public:
1221  const PString & capabilityId,
1222  PINDEX maxBitRate = 0
1223  );
1225 
1231  Comparison Compare(const PObject & obj) const;
1233 
1241  virtual unsigned GetSubType() const;
1243 
1254  virtual PBoolean OnSendingPDU(
1255  H245_VideoCapability & pdu,
1256  CommandType type
1257  ) const;
1258 
1267  virtual PBoolean OnSendingPDU(
1268  H245_VideoMode & pdu
1269  ) const;
1270 
1279  virtual PBoolean OnReceivedPDU(
1280  const H245_VideoCapability & pdu,
1281  CommandType type
1282  );
1283 
1286  virtual PBoolean IsMatch(
1287  const PASN_Choice & subTypePDU,
1288  const PString & mediaPacketization
1289  ) const;
1291 };
1292 
1293 
1294 #if OPAL_H239
1295 
1299 {
1301 
1302  public:
1308  const PString & identifier
1309  );
1311 
1319  virtual unsigned GetSubType() const;
1321 
1332  virtual PBoolean OnSendingPDU(
1333  H245_VideoCapability & pdu,
1334  CommandType type
1335  ) const;
1336 
1345  virtual PBoolean OnSendingPDU(
1346  H245_VideoMode & pdu
1347  ) const;
1348 
1357  virtual PBoolean OnReceivedPDU(
1358  const H245_VideoCapability & pdu,
1359  CommandType type
1360  );
1361 
1364  virtual PBoolean IsMatch(
1365  const PASN_Choice & subTypePDU,
1366  const PString & mediaPacketization
1367  ) const;
1369 
1370  protected:
1372 };
1373 
1374 
1376 
1381 {
1383 
1384  public:
1390  const PString & identifier
1391  );
1393 
1399  virtual MainTypes GetMainType() const;
1400 
1406  virtual unsigned GetSubType() const;
1408 
1419  virtual PBoolean OnSendingPDU(
1420  H245_Capability & pdu
1421  ) const;
1422 
1430  virtual PBoolean OnSendingPDU(
1431  H245_ModeElement & pdu
1432  ) const;
1433 
1443  virtual PBoolean OnReceivedPDU(
1444  const H245_Capability & pdu
1445  );
1446 
1449  virtual PBoolean IsMatch(
1450  const PASN_Choice & subTypePDU,
1451  const PString & mediaPacketization
1452  ) const;
1454 
1462  virtual H323Channel * CreateChannel(
1463  H323Connection & connection,
1465  unsigned sessionID,
1466  const H245_H2250LogicalChannelParameters * param
1468  ) const;
1470 };
1471 
1472 
1474 
1476 {
1478 
1479  public:
1485  const OpalMediaFormat & videoFormat
1486  );
1488 
1494  Comparison Compare(const PObject & obj) const;
1495 
1498  virtual PObject * Clone() const;
1499 
1502  void PrintOn(ostream & strm) const;
1504 
1509  virtual PString GetFormatName() const;
1511 
1522  virtual PBoolean OnSendingPDU(
1523  H245_VideoCapability & pdu,
1524  CommandType type
1525  ) const;
1526 
1535  virtual PBoolean OnReceivedPDU(
1536  const H245_VideoCapability & pdu,
1537  CommandType type
1538  );
1540 };
1541 
1542 
1544 
1546 {
1548 
1549  public:
1556 
1561  virtual PObject * Clone() const;
1563 
1568  virtual PString GetFormatName() const;
1570 };
1571 
1572 
1573 #endif // OPAL_H239
1574 
1575 #endif // OPAL_VIDEO
1576 
1577 
1585 {
1586  PCLASSINFO(H323DataCapability, H323Capability);
1587 
1588  public:
1594  unsigned maxBitRate = 0
1595  );
1597 
1603  virtual MainTypes GetMainType() const;
1605 
1615  virtual unsigned GetDefaultSessionID() const;
1617 
1628  virtual PBoolean OnSendingPDU(
1629  H245_Capability & pdu
1630  ) const;
1631 
1640  virtual PBoolean OnSendingPDU(
1641  H245_DataType & pdu
1642  ) const;
1643 
1652  virtual PBoolean OnSendingPDU(
1653  H245_ModeElement & pdu
1654  ) const;
1655 
1663  virtual PBoolean OnSendingPDU(
1664  H245_DataApplicationCapability & pdu
1665  ) const;
1666  virtual PBoolean OnSendingPDU(
1667  H245_DataApplicationCapability & pdu,
1668  CommandType type
1669  ) const;
1670 
1679  virtual PBoolean OnSendingPDU(
1680  H245_DataMode & pdu
1681  ) const = 0;
1682 
1692  virtual PBoolean OnReceivedPDU(
1693  const H245_Capability & pdu
1694  );
1695 
1703  virtual PBoolean OnReceivedPDU(
1704  const H245_DataType & pdu,
1705  PBoolean receiver
1706  );
1707 
1715  virtual PBoolean OnReceivedPDU(
1716  const H245_DataApplicationCapability & pdu
1717  );
1718  virtual PBoolean OnReceivedPDU(
1719  const H245_DataApplicationCapability & pdu,
1720  CommandType type
1721  );
1723 
1724  protected:
1725  unsigned maxBitRate;
1726 };
1727 
1728 
1738 {
1740 
1741  public:
1747  unsigned maxBitRate,
1748  const BYTE * dataBlock = NULL,
1749  PINDEX dataSize = 0,
1750  PINDEX comparisonOffset = 0,
1751  PINDEX comparisonLength = P_MAX_INDEX
1752  );
1753 
1757  unsigned maxBitRate,
1758  const PString & oid,
1759  const BYTE * dataBlock = NULL,
1760  PINDEX dataSize = 0,
1761  PINDEX comparisonOffset = 0,
1762  PINDEX comparisonLength = P_MAX_INDEX
1763  );
1764 
1768  unsigned maxBitRate,
1769  BYTE country,
1770  BYTE extension,
1771  WORD maufacturer,
1772  const BYTE * dataBlock = NULL,
1773  PINDEX dataSize = 0,
1774  PINDEX comparisonOffset = 0,
1775  PINDEX comparisonLength = P_MAX_INDEX
1776  );
1778 
1784  Comparison Compare(const PObject & obj) const;
1786 
1795  virtual unsigned GetSubType() const;
1797 
1808  virtual PBoolean OnSendingPDU(
1809  H245_DataApplicationCapability & pdu
1810  ) const;
1811 
1820  virtual PBoolean OnSendingPDU(
1821  H245_DataMode & pdu
1822  ) const;
1823 
1832  virtual PBoolean OnReceivedPDU(
1833  const H245_DataApplicationCapability & pdu
1834  );
1835 
1838  virtual PBoolean IsMatch(
1839  const PASN_Choice & subTypePDU,
1840  const PString & mediaPacketization
1841  ) const;
1843 };
1844 
1845 
1847 // Known audio codecs
1848 
1852 {
1854 
1855  public:
1857  enum Mode {
1862  };
1864  enum Speed {
1869  };
1870 
1876  Mode mode = muLaw,
1877  Speed speed = At64k
1878  );
1880 
1885  virtual PObject * Clone() const;
1887 
1896  virtual unsigned GetSubType() const;
1897 
1900  virtual PString GetFormatName() const;
1902 
1903  protected:
1906 };
1907 
1909 
1913 {
1915 
1916  public:
1919  enum SubTypes {
1927  };
1928  static const char * GetSubTypeName(SubTypes subType);
1929  friend ostream & operator<<(ostream & strm, SubTypes subType) { return strm << GetSubTypeName(subType); }
1930 
1937  );
1939 
1944  virtual PObject * Clone() const;
1946 
1954  virtual MainTypes GetMainType() const;
1955 
1959  virtual unsigned GetSubType() const;
1960 
1963  virtual PString GetFormatName() const;
1965 
1973  virtual H323Channel * CreateChannel(
1974  H323Connection & connection,
1976  unsigned sessionID,
1977  const H245_H2250LogicalChannelParameters * param
1979  ) const;
1981 
1991  virtual PBoolean OnSendingPDU(
1992  H245_Capability & pdu
1993  ) const;
1994 
2002  virtual PBoolean OnSendingPDU(
2003  H245_DataType & pdu
2004  ) const;
2005 
2014  virtual PBoolean OnSendingPDU(
2015  H245_ModeElement & pdu
2016  ) const;
2017 
2027  virtual PBoolean OnReceivedPDU(
2028  const H245_Capability & pdu
2029  );
2030 
2038  virtual PBoolean OnReceivedPDU(
2039  const H245_DataType & pdu,
2040  PBoolean receiver
2041  );
2042 
2051  virtual PBoolean IsUsable(
2052  const H323Connection & connection
2053  ) const;
2055 
2056  static void AddAllCapabilities(
2057  H323Capabilities & capabilities,
2058  PINDEX descriptorNum,
2059  PINDEX simultaneous,
2060  bool includeRFC2833 = true
2061  );
2062 
2063  protected:
2065 };
2066 
2067 
2068 
2070 
2071 PARRAY(H323CapabilitiesList, H323Capability);
2072 
2073 PARRAY(H323CapabilitiesListArray, H323CapabilitiesList);
2074 
2075 class H323SimultaneousCapabilities : public H323CapabilitiesListArray
2076 {
2077  PCLASSINFO(H323SimultaneousCapabilities, H323CapabilitiesListArray);
2078  public:
2079  PBoolean SetSize(PINDEX newSize);
2080 };
2081 
2082 
2083 PARRAY(H323CapabilitiesSetArray, H323SimultaneousCapabilities);
2084 
2085 
2086 class H323CapabilitiesSet : public H323CapabilitiesSetArray
2087 {
2088  PCLASSINFO(H323CapabilitiesSet, H323CapabilitiesSetArray);
2089  public:
2091  PBoolean SetSize(PINDEX newSize);
2092 };
2093 
2094 
2097 class H323Capabilities : public PObject
2098 {
2099  PCLASSINFO(H323Capabilities, PObject);
2100  public:
2105  H323Capabilities();
2106 
2110  const H323Connection & connection,
2111  const H245_TerminalCapabilitySet & pdu
2112  );
2113 
2119  const H323Capabilities & original
2120  );
2121 
2127  const H323Capabilities & original
2128  );
2130 
2135  void PrintOn(
2136  ostream & strm
2137  ) const;
2139 
2144  PINDEX GetSize() const { return table.GetSize(); }
2145 
2148  H323Capability & operator[](PINDEX i) const { return table[i]; }
2149 
2170  PINDEX SetCapability(
2171  PINDEX descriptorNum,
2172  PINDEX simultaneous,
2173  H323Capability * cap
2174  );
2175 
2178  PINDEX AddMediaFormat(
2179  PINDEX descriptorNum,
2180  PINDEX simultaneous,
2181  const OpalMediaFormat & mediaFormat
2182  );
2183 
2188  PINDEX AddAllCapabilities(
2189  PINDEX descriptorNum,
2190  PINDEX simultaneous,
2191  const PString & name,
2192  PBoolean exact = false
2193  );
2194 
2195  // this function is retained for backwards compatibility
2197  const H323EndPoint &,
2198  PINDEX descriptorNum,
2199  PINDEX simultaneous,
2200  const PString & name,
2201  PBoolean exact = false
2202  )
2203  { return AddAllCapabilities(descriptorNum, simultaneous, name, exact); }
2204 
2213  void Add(
2214  H323Capability * capability
2215  );
2216 
2223  H323Capability * Copy(
2224  const H323Capability & capability
2225  );
2226 
2231  void Remove(
2232  H323Capability * capability
2233  );
2234 
2239  void Remove(
2240  const PString & formatName
2241  );
2242 
2246  void Remove(
2247  const PStringArray & formatNames
2248  );
2249 
2252  void RemoveAll();
2253 
2262  unsigned capabilityNumber
2263  ) const;
2264 
2281  const PString & formatName,
2284  PBoolean exact = false
2285  ) const;
2286 
2294  ) const;
2295 
2304  const H323Capability & capability
2305  ) const;
2306 
2313  const H245_Capability & cap
2314  ) const;
2315 
2322  const H245_DataType & dataType,
2323  const PString & mediaPacketization = PString::Empty()
2324  ) const;
2325 
2332  const H245_ModeElement & modeElement,
2333  const PString & mediaPacketization = PString::Empty()
2334  ) const;
2335 
2342  H323Capability::MainTypes mainType,
2343  unsigned subType = UINT_MAX
2344  ) const;
2345 
2348  void BuildPDU(
2349  const H323Connection & connection,
2350  H245_TerminalCapabilitySet & pdu
2351  ) const;
2352 
2355  PBoolean Merge(
2356  const H323Capabilities & newCaps
2357  );
2358 
2365  void Reorder(
2366  const PStringArray & preferenceOrder
2367  );
2368 
2371  PBoolean IsAllowed(
2372  const H323Capability & capability
2373  );
2374 
2377  PBoolean IsAllowed(
2378  unsigned capabilityNumber
2379  );
2380 
2383  PBoolean IsAllowed(
2384  const H323Capability & capability1,
2385  const H323Capability & capability2
2386  );
2387 
2390  PBoolean IsAllowed(
2391  unsigned capabilityNumber1,
2392  unsigned capabilityNumber2
2393  );
2394 
2398 
2399  const PStringSet & GetMediaPacketizations() const { return m_mediaPacketizations; }
2401 
2402  protected:
2403  H323CapabilitiesList table;
2406 };
2407 
2408 
2410 
2411 /* New capability registration macros based on abstract factories
2412  */
2413 typedef PFactory<H323Capability, std::string> H323CapabilityFactory;
2414 
2415 #define H323_REGISTER_CAPABILITY(cls, capName) static H323CapabilityFactory::Worker<cls> cls##Factory(capName, true); \
2416 
2417 
2418 #endif // OPAL_H323
2419 
2420 #endif // OPAL_H323_H323CAPS_H
2421 
2422 
H323NonStandardAudioCapability(H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE *dataBlock, PINDEX dataSize)
CommandType
Definition: h323caps.h:213
Definition: h323caps.h:159
CapabilityDirection
Definition: h323caps.h:301
Definition: h323caps.h:374
PObject::Comparison CompareInfo(const H323NonStandardCapabilityInfo &obj) const
Definition: h323caps.h:520
virtual void SetTxFramesInPacket(unsigned frames)
PString m_identifier
Definition: h323caps.h:510
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const
Mode
Specific G.711 encoding algorithm.
Definition: h323caps.h:1857
void Remove(H323Capability *capability)
virtual PBoolean OnSendingPDU(PBYTEArray &data) const
void PrintOn(ostream &strm) const
Definition: h323caps.h:302
BYTE t35Extension
Definition: h323caps.h:463
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const
unsigned maxBitRate
Definition: h323caps.h:511
H323H239VideoCapability(const OpalMediaFormat &videoFormat)
Definition: h323caps.h:216
PObject::Comparison(* CompareFuncType)(struct PluginCodec_H323NonStandardCodecData *)
Definition: h323caps.h:377
H323ExtendedVideoCapability(const PString &identifier)
Comparison Compare(const PObject &obj) const
void SetPayloadType(RTP_DataFrame::PayloadTypes pt)
Set the payload type for the capaibility.
Definition: h323caps.h:340
static const char * GetSubTypeName(SubTypes subType)
virtual PString GetFormatName() const
Definition: h323caps.h:480
SubTypes
Definition: h323caps.h:1919
H323Capability & operator[](PINDEX i) const
Definition: h323caps.h:2148
static void AddAllCapabilities(H323Capabilities &capabilities, PINDEX descriptorNum, PINDEX simultaneous, bool includeRFC2833=true)
virtual unsigned GetSubType() const
PStringSet m_mediaPacketizations
Definition: h323caps.h:2405
virtual ~H323GenericCapabilityInfo()
Definition: h323caps.h:488
Speed speed
Definition: h323caps.h:1905
Definition: h323caps.h:89
RTP_DataFrame::PayloadTypes GetPayloadType() const
Definition: mediafmt.h:914
H323NonStandardDataCapability(unsigned maxBitRate, const BYTE *dataBlock=NULL, PINDEX dataSize=0, PINDEX comparisonOffset=0, PINDEX comparisonLength=P_MAX_INDEX)
Directions
Definition: channels.h:129
PINDEX comparisonOffset
Definition: h323caps.h:466
Definition: h323caps.h:158
PObject::Comparison CompareData(const PBYTEArray &data) const
virtual H323Channel * CreateChannel(H323Connection &connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters *param) const
Definition: h323caps.h:306
virtual unsigned GetSubType() const
BYTE t35CountryCode
Definition: h323caps.h:462
CapabilityDirection GetCapabilityDirection() const
Definition: h323caps.h:312
User Input capability.
Definition: h323caps.h:123
Definition: h323caps.h:1475
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const
virtual void SetTxFramesInPacket(unsigned frames)
Comparison Compare(const PObject &obj) const
virtual PBoolean OnSendingPDU(H245_VideoCapability &pdu, CommandType type) const
Definition: h323caps.h:1920
Count of main types.
Definition: h323caps.h:127
virtual MainTypes GetMainType() const
Definition: rtp.h:58
virtual H323Channel * CreateChannel(H323Connection &connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters *param) const
virtual unsigned GetSubType() const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
virtual PString GetFormatName() const
Definition: h323caps.h:214
Comparison Compare(const PObject &obj) const
Definition: h323caps.h:2086
virtual unsigned GetDefaultSessionID() const
virtual H323Channel * CreateChannel(H323Connection &connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters *param) const
virtual MainTypes GetMainType() const
H323GenericCapabilityInfo(const PString &id, unsigned maxBitRate=0)
European standard.
Definition: h323caps.h:1859
virtual PString GetFormatName() const =0
virtual unsigned GetSubType() const
European standard.
Definition: h323caps.h:1866
virtual PBoolean OnReceivedPDU(const H245_DataApplicationCapability &pdu)
PayloadTypes
Definition: rtp.h:86
virtual PObject * Clone() const
virtual unsigned GetDefaultSessionID() const
Definition: h323caps.h:1851
PFactory< H323Capability, std::string > H323CapabilityFactory
Definition: h323caps.h:2413
American standard.
Definition: h323caps.h:1868
WORD manufacturerCode
Definition: h323caps.h:464
Definition: mediafmt.h:72
Generic Control.
Definition: h323caps.h:125
PINDEX AddMediaFormat(PINDEX descriptorNum, PINDEX simultaneous, const OpalMediaFormat &mediaFormat)
PString oid
Definition: h323caps.h:461
Definition: channels.h:99
PObject::Comparison CompareInfo(const H323GenericCapabilityInfo &obj) const
Speed
Specific G.711 encoding bit rates.
Definition: h323caps.h:1864
PObject::Comparison CompareParam(const H245_NonStandardParameter &param) const
static H323Capability * Create(const PString &name)
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)
virtual unsigned GetSubType() const
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const
OpalMediaFormat GetMediaFormat() const
Definition: h323caps.h:1092
H323GenericVideoCapability(const PString &capabilityId, PINDEX maxBitRate=0)
H323Capability * Copy(const H323Capability &capability)
virtual unsigned GetRxFramesInPacket() const
PBoolean SetSize(PINDEX newSize)
Set the new size of the table, internal use only.
virtual PBoolean OnSendingPDU(H245_DataApplicationCapability &pdu) const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
Definition: mediafmt.h:724
CapabilityDirection capabilityDirection
Unique ID assigned to capability.
Definition: h323caps.h:355
Audio codec capability.
Definition: h323caps.h:117
virtual MainTypes GetMainType() const
H323CapabilitiesList table
Definition: h323caps.h:2403
const PStringSet & GetMediaPacketizations() const
Definition: h323caps.h:2399
H323Capability * FindCapability(unsigned capabilityNumber) const
H323Capabilities & operator=(const H323Capabilities &original)
Definition: h323caps.h:307
unsigned assignedCapabilityNumber
Definition: h323caps.h:354
PINDEX comparisonLength
Definition: h323caps.h:467
unsigned GetCapabilityNumber() const
Get unique capability number.
Definition: h323caps.h:321
void Reorder(const PStringArray &preferenceOrder)
PBoolean SetSize(PINDEX newSize)
virtual PBoolean OnSendingPDU(H245_VideoCapability &pdu) const
Arbitrary data capability.
Definition: h323caps.h:121
virtual unsigned GetRxFramesInPacket() const
unsigned maxBitRate
Definition: h323caps.h:1725
virtual PBoolean OnReceivedPDU(const H245_AudioCapability &pdu, unsigned &packetSize, CommandType type)
Definition: h323caps.h:160
H323NonStandardVideoCapability(H323NonStandardCapabilityInfo::CompareFuncType compareFunc, const BYTE *dataBlock, PINDEX dataSize)
virtual PBoolean OnSendingPDU(H245_AudioCapability &pdu, unsigned packetSize, CommandType type) const
PBoolean Merge(const H323Capabilities &newCaps)
virtual PBoolean OnReceivedPDU(const H245_VideoCapability &pdu)
virtual PString GetFormatName() const
PINDEX SetCapability(PINDEX descriptorNum, PINDEX simultaneous, H323Capability *cap)
Definition: h323caps.h:303
void SetCapabilityNumber(unsigned num)
Set unique capability number.
Definition: h323caps.h:324
SubTypes subType
Definition: h323caps.h:2064
virtual PBoolean OnReceivedPDU(const PBYTEArray &data)
const unsigned char * data
Definition: opalplugin.h:642
virtual H323Channel * CreateChannel(H323Connection &connection, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters *param) const =0
Definition: h323caps.h:1924
virtual unsigned GetSubType() const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
Definition: h323caps.h:1584
Definition: h323con.h:130
virtual unsigned GetSubType() const =0
H323GenericControlCapability(const PString &identifier)
Definition: h323caps.h:157
virtual PBoolean OnReceivedPDU(const H245_VideoCapability &pdu, CommandType type)
PBYTEArray nonStandardData
Definition: h323caps.h:465
friend ostream & operator<<(ostream &strm, SubTypes subType)
Definition: h323caps.h:1929
PBoolean OnSendingNonStandardPDU(PASN_Choice &pdu, unsigned nonStandardTag) const
Definition: h323caps.h:1926
Definition: h323caps.h:1545
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const
virtual PBoolean IsUsable(const H323Connection &connection) const
virtual PBoolean OnReceivedPDU(const H245_VideoCapability &pdu, CommandType type)
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)
ostream & operator<<(ostream &strm, OpalSilenceDetector::Mode mode)
virtual MainTypes GetMainType() const
American standard.
Definition: h323caps.h:1861
Definition: h323caps.h:2097
PINDEX AddAllCapabilities(const H323EndPoint &, PINDEX descriptorNum, PINDEX simultaneous, const PString &name, PBoolean exact=false)
Definition: h323caps.h:2196
Comparison Compare(const PObject &obj) const
CompareFuncType compareFunc
Definition: h323caps.h:468
virtual ~H323RealTimeCapability()
virtual PBoolean IsUsable(const H323Connection &connection) const
void AttachQoS(RTP_QOS *_rtpqos)
Attach a QoS specification to this channel.
Definition: h323caps.h:951
Definition: opalplugin.h:637
PARRAY(H323CapabilitiesList, H323Capability)
virtual PBoolean OnSendingPDU(H245_VideoCapability &pdu, CommandType type) const
virtual PBoolean OnReceivedPDU(const H245_AudioCapability &pdu, unsigned &packetSize)
void SetPayloadType(RTP_DataFrame::PayloadTypes type)
Definition: mediafmt.h:915
Definition: h323caps.h:1736
virtual PBoolean OnReceivedPDU(const H245_VideoCapability &pdu, CommandType type)
Comparison Compare(const PObject &obj) const
void PrintOn(ostream &strm) const
virtual PBoolean OnSendingGenericPDU(H245_GenericCapability &pdu, const OpalMediaFormat &mediaFormat, H323Capability::CommandType type) const
virtual PBoolean OnSendingPDU(H245_VideoCapability &pdu, CommandType type) const
OpalMediaFormatList m_videoFormats
Definition: h323caps.h:1371
virtual PBoolean OnSendingPDU(H245_AudioCapability &pdu, unsigned packetSize) const
void Add(H323Capability *capability)
RTP_DataFrame::PayloadTypes GetPayloadType() const
Get the payload type for the capaibility.
Definition: h323caps.h:337
Definition: h323caps.h:215
Comparison Compare(const PObject &obj) const
virtual PObject * Clone() const
Definition: h323caps.h:305
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)
bool UpdateMediaFormat(const OpalMediaFormat &format)
virtual unsigned GetDefaultSessionID() const
RTP_QOS * rtpqos
Definition: h323caps.h:543
PBoolean IsAllowed(const H323Capability &capability)
Definition: h323caps.h:2075
Definition: h323caps.h:1298
Comparison Compare(const PObject &obj) const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
virtual MainTypes GetMainType() const
Definition: h323caps.h:738
virtual unsigned GetSubType() const
void BuildPDU(const H323Connection &connection, H245_TerminalCapabilitySet &pdu) const
Definition: h323caps.h:1922
virtual void AttachQoS(RTP_QOS *)
Attach a QoS specification to this channel.
Definition: h323caps.h:343
Definition: h323caps.h:1379
virtual MainTypes GetMainType() const =0
PINDEX AddAllCapabilities(PINDEX descriptorNum, PINDEX simultaneous, const PString &name, PBoolean exact=false)
H323CapabilitiesSet set
Definition: h323caps.h:2404
Video codec capability.
Definition: h323caps.h:119
OpalMediaFormatList GetMediaFormats() const
Definition: h323caps.h:1210
Definition: h323caps.h:1912
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
virtual unsigned GetSubType() const
Definition: h323caps.h:1923
H323_UserInputCapability(SubTypes subType)
PBoolean IsMatch(const H245_NonStandardParameter &param) const
virtual unsigned GetTxFramesInPacket() const
void PrintOn(ostream &strm) const
virtual PObject * Clone() const
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
virtual PBoolean OnReceivedGenericPDU(OpalMediaFormat &mediaFormat, const H245_GenericCapability &pdu, H323Capability::CommandType type)
virtual unsigned GetSubType() const
Definition: h323caps.h:1921
PBoolean OnReceivedNonStandardPDU(const PASN_Choice &pdu, unsigned nonStandardTag)
Definition: h323ep.h:85
void SetCapabilityDirection(CapabilityDirection dir)
Definition: h323caps.h:316
virtual unsigned GetDefaultSessionID() const
Definition: h323caps.h:554
virtual PObject * Clone() const
Mode mode
Definition: h323caps.h:1904
MainTypes
Definition: h323caps.h:115
virtual unsigned GetTxFramesInPacket() const
H323DataCapability(unsigned maxBitRate=0)
H323GenericAudioCapability(const PString &capabilityId, PINDEX maxBitRate=0)
PBoolean IsMatch(const H245_GenericCapability &param) const
virtual PString GetFormatName() const
Definition: h323caps.h:857
H323_G711Capability(Mode mode=muLaw, Speed speed=At64k)
OpalMediaFormat & GetWritableMediaFormat() const
virtual PBoolean OnSendingPDU(H245_Capability &pdu) const =0
H323NonStandardCapabilityInfo(CompareFuncType compareFunc, const BYTE *dataBlock, PINDEX dataSize)
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)
virtual PBoolean IsMatch(const PASN_Choice &subTypePDU, const PString &mediaPacketization) const
PINDEX GetSize() const
Definition: h323caps.h:2144
Definition: h323caps.h:304
virtual PBoolean OnReceivedPDU(const H245_Capability &pdu)