00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __OPAL_H323CAPS_H
00035 #define __OPAL_H323CAPS_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041
00042 #include <opal/mediafmt.h>
00043 #include <h323/channels.h>
00044
00045
00046
00047
00048
00049
00050
00051 class PASN_Choice;
00052 class H245_Capability;
00053 class H245_DataType;
00054 class H245_ModeElement;
00055 class H245_AudioCapability;
00056 class H245_AudioMode;
00057 class H245_VideoCapability;
00058 class H245_VideoMode;
00059 class H245_DataApplicationCapability;
00060 class H245_DataMode;
00061 class H245_DataProtocolCapability;
00062 class H245_H2250LogicalChannelParameters;
00063 class H245_TerminalCapabilitySet;
00064 class H245_NonStandardParameter;
00065 class H323Connection;
00066 class H323Capabilities;
00067 class H245_CapabilityIdentifier;
00068 class H245_GenericCapability;
00069 class H245_GenericParameter;
00070
00072
00086 class H323Capability : public PObject
00087 {
00088 PCLASSINFO(H323Capability, PObject);
00089
00090 public:
00095 H323Capability();
00097
00103 Comparison Compare(const PObject & obj) const;
00104
00107 void PrintOn(ostream & strm) const;
00109
00112 enum MainTypes {
00114 e_Audio,
00116 e_Video,
00118 e_Data,
00120 e_UserInput,
00122 e_NumMainTypes
00123 };
00124
00130 virtual MainTypes GetMainType() const = 0;
00131
00135 virtual unsigned GetSubType() const = 0;
00136
00139 virtual PString GetFormatName() const = 0;
00141
00147 static H323Capability * Create(
00148 const PString & name
00149 );
00150
00159 virtual unsigned GetDefaultSessionID() const;
00160
00169 virtual void SetTxFramesInPacket(
00170 unsigned frames
00171 );
00172
00177 virtual unsigned GetTxFramesInPacket() const;
00178
00183 virtual unsigned GetRxFramesInPacket() const;
00184
00190 virtual H323Channel * CreateChannel(
00191 H323Connection & connection,
00192 H323Channel::Directions dir,
00193 unsigned sessionID,
00194 const H245_H2250LogicalChannelParameters * param
00196 ) const = 0;
00198
00201 enum CommandType {
00202 e_TCS,
00203 e_OLC,
00204 e_ReqMode
00205 };
00206
00214 virtual PBoolean OnSendingPDU(
00215 H245_Capability & pdu
00216 ) const = 0;
00217
00225 virtual PBoolean OnSendingPDU(
00226 H245_DataType & pdu
00227 ) const;
00228
00236 virtual PBoolean OnSendingPDU(
00237 H245_ModeElement & pdu
00238 ) const = 0;
00239
00252 virtual PBoolean OnReceivedPDU(
00253 const H245_Capability & pdu
00254 );
00255
00263 virtual PBoolean OnReceivedPDU(
00264 const H245_DataType & pdu,
00265 PBoolean receiver
00266 );
00267
00270 virtual PBoolean IsMatch(
00271 const PASN_Choice & subTypePDU
00272 ) const;
00273
00281 virtual PBoolean IsUsable(
00282 const H323Connection & connection
00283 ) const;
00285
00288 enum CapabilityDirection {
00289 e_Unknown,
00290 e_Receive,
00291 e_Transmit,
00292 e_ReceiveAndTransmit,
00293 e_NoDirection,
00294 NumCapabilityDirections
00295 };
00296
00299 CapabilityDirection GetCapabilityDirection() const { return capabilityDirection; }
00300
00303 void SetCapabilityDirection(
00304 CapabilityDirection dir
00305 ) { capabilityDirection = dir; }
00306
00308 unsigned GetCapabilityNumber() const { return assignedCapabilityNumber; }
00309
00311 void SetCapabilityNumber(unsigned num) { assignedCapabilityNumber = num; }
00312
00315 OpalMediaFormat GetMediaFormat() const;
00316
00319 bool SetMediaFormatOptions(
00320 const OpalMediaFormat & format
00321 );
00322
00324 RTP_DataFrame::PayloadTypes GetPayloadType() const { return rtpPayloadType; }
00325
00327 void SetPayloadType(RTP_DataFrame::PayloadTypes pt) { rtpPayloadType = pt; }
00328
00330 virtual void AttachQoS(RTP_QOS *) { }
00332
00333 #if PTRACING
00334 friend ostream & operator<<(ostream & o , MainTypes t);
00335 friend ostream & operator<<(ostream & o , CapabilityDirection d);
00336 #endif
00337
00338 protected:
00339 OpalMediaFormat & GetWritableMediaFormat();
00340
00341 unsigned assignedCapabilityNumber;
00342 CapabilityDirection capabilityDirection;
00343 RTP_DataFrame::PayloadTypes rtpPayloadType;
00344
00345 private:
00346 mutable OpalMediaFormat mediaFormat;
00347
00348 friend class H323Capabilities;
00349 };
00350
00351
00352
00361 class H323NonStandardCapabilityInfo
00362 {
00363 public:
00364 typedef PObject::Comparison (*CompareFuncType)(struct PluginCodec_H323NonStandardCodecData *);
00365
00368 H323NonStandardCapabilityInfo(
00369 CompareFuncType compareFunc,
00370 const BYTE * dataBlock,
00371 PINDEX dataSize
00372 );
00373
00376 H323NonStandardCapabilityInfo(
00377 const BYTE * dataBlock,
00378 PINDEX dataSize,
00379 PINDEX comparisonOffset = 0,
00380 PINDEX comparisonLength = P_MAX_INDEX
00381 );
00382
00385 H323NonStandardCapabilityInfo(
00386 const PString & oid,
00387 const BYTE * dataBlock,
00388 PINDEX dataSize,
00389 PINDEX comparisonOffset = 0,
00390 PINDEX comparisonLength = P_MAX_INDEX
00391 );
00392
00395 H323NonStandardCapabilityInfo(
00396 BYTE country,
00397 BYTE extension,
00398 WORD maufacturer,
00399 const BYTE * dataBlock,
00400 PINDEX dataSize,
00401 PINDEX comparisonOffset = 0,
00402 PINDEX comparisonLength = P_MAX_INDEX
00403 );
00404
00407 virtual ~H323NonStandardCapabilityInfo();
00408
00413 virtual PBoolean OnSendingPDU(
00414 PBYTEArray & data
00415 ) const;
00416
00421 virtual PBoolean OnReceivedPDU(
00422 const PBYTEArray & data
00423 );
00424
00425 PBoolean IsMatch(const H245_NonStandardParameter & param) const;
00426
00427 PObject::Comparison CompareParam(
00428 const H245_NonStandardParameter & param
00429 ) const;
00430
00431 protected:
00432 PBoolean OnSendingNonStandardPDU(
00433 PASN_Choice & pdu,
00434 unsigned nonStandardTag
00435 ) const;
00436 PBoolean OnReceivedNonStandardPDU(
00437 const PASN_Choice & pdu,
00438 unsigned nonStandardTag
00439 );
00440
00441 PObject::Comparison CompareInfo(
00442 const H323NonStandardCapabilityInfo & obj
00443 ) const;
00444 PObject::Comparison CompareData(
00445 const PBYTEArray & data
00446 ) const;
00447
00448 PString oid;
00449 BYTE t35CountryCode;
00450 BYTE t35Extension;
00451 WORD manufacturerCode;
00452 PBYTEArray nonStandardData;
00453 PINDEX comparisonOffset;
00454 PINDEX comparisonLength;
00455 CompareFuncType compareFunc;
00456 };
00457
00467 class H323GenericCapabilityInfo
00468 {
00469 public:
00470 H323GenericCapabilityInfo(
00471 const PString & id,
00472 PINDEX maxBitRate = 0
00473 );
00474 H323GenericCapabilityInfo(const H323GenericCapabilityInfo & obj);
00475 virtual ~H323GenericCapabilityInfo();
00476
00477 protected:
00478 virtual PBoolean OnSendingGenericPDU(
00479 H245_GenericCapability & pdu,
00480 const OpalMediaFormat & mediaFormat,
00481 H323Capability::CommandType type
00482 ) const;
00483 virtual PBoolean OnReceivedGenericPDU(
00484 OpalMediaFormat & mediaFormat,
00485 const H245_GenericCapability & pdu,
00486 H323Capability::CommandType type
00487 );
00488
00489 PBoolean IsMatch(
00490 const H245_GenericCapability & param
00491 ) const;
00492 PObject::Comparison CompareInfo(
00493 const H323GenericCapabilityInfo & obj
00494 ) const;
00495
00496
00497 H245_CapabilityIdentifier * identifier;
00498 unsigned maxBitRate;
00499 };
00500
00507 class H323RealTimeCapability : public H323Capability
00508 {
00509 PCLASSINFO(H323RealTimeCapability, H323Capability);
00510
00511 public:
00516 virtual H323Channel * CreateChannel(
00517 H323Connection & connection,
00518 H323Channel::Directions dir,
00519 unsigned sessionID,
00520 const H245_H2250LogicalChannelParameters * param
00522 ) const;
00523
00524 H323RealTimeCapability();
00525 H323RealTimeCapability(const H323RealTimeCapability &rtc);
00526 virtual ~H323RealTimeCapability();
00527 void AttachQoS(RTP_QOS * _rtpqos);
00528
00529 protected:
00530 RTP_QOS * rtpqos;
00532 };
00533
00534
00541 class H323AudioCapability : public H323RealTimeCapability
00542 {
00543 PCLASSINFO(H323AudioCapability, H323RealTimeCapability);
00544
00545 public:
00550 H323AudioCapability();
00552
00558 virtual MainTypes GetMainType() const;
00560
00571 virtual unsigned GetDefaultSessionID() const;
00572
00581 virtual void SetTxFramesInPacket(
00582 unsigned frames
00583 );
00584
00590 virtual unsigned GetTxFramesInPacket() const;
00591
00597 virtual unsigned GetRxFramesInPacket() const;
00599
00610 virtual PBoolean OnSendingPDU(
00611 H245_Capability & pdu
00612 ) const;
00613
00622 virtual PBoolean OnSendingPDU(
00623 H245_DataType & pdu
00624 ) const;
00625
00634 virtual PBoolean OnSendingPDU(
00635 H245_ModeElement & pdu
00636 ) const;
00637
00646 virtual PBoolean OnSendingPDU(
00647 H245_AudioCapability & pdu,
00648 unsigned packetSize
00649 ) const;
00650 virtual PBoolean OnSendingPDU(
00651 H245_AudioCapability & pdu,
00652 unsigned packetSize,
00653 CommandType type
00654 ) const;
00655
00664 virtual PBoolean OnSendingPDU(
00665 H245_AudioMode & pdu
00666 ) const;
00667
00679 virtual PBoolean OnReceivedPDU(
00680 const H245_Capability & pdu
00681 );
00682
00692 virtual PBoolean OnReceivedPDU(
00693 const H245_DataType & pdu,
00694 PBoolean receiver
00695 );
00696
00705 virtual PBoolean OnReceivedPDU(
00706 const H245_AudioCapability & pdu,
00707 unsigned & packetSize
00708 );
00709 virtual PBoolean OnReceivedPDU(
00710 const H245_AudioCapability & pdu,
00711 unsigned & packetSize,
00712 CommandType type
00713 );
00715 };
00716
00717
00725 class H323NonStandardAudioCapability : public H323AudioCapability,
00726 public H323NonStandardCapabilityInfo
00727 {
00728 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
00729
00730 public:
00733 H323NonStandardAudioCapability(
00734 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00735 const BYTE * dataBlock,
00736 PINDEX dataSize
00737 );
00740 H323NonStandardAudioCapability(
00741 const BYTE * dataBlock = NULL,
00742 PINDEX dataSize = 0,
00743 PINDEX comparisonOffset = 0,
00744 PINDEX comparisonLength = P_MAX_INDEX
00745 );
00746
00749 H323NonStandardAudioCapability(
00750 const PString & oid,
00751 const BYTE * dataBlock = NULL,
00752 PINDEX dataSize = 0,
00753 PINDEX comparisonOffset = 0,
00754 PINDEX comparisonLength = P_MAX_INDEX
00755 );
00756
00759 H323NonStandardAudioCapability(
00760 BYTE country,
00761 BYTE extension,
00762 WORD maufacturer,
00763 const BYTE * dataBlock = NULL,
00764 PINDEX dataSize = 0,
00765 PINDEX comparisonOffset = 0,
00766 PINDEX comparisonLength = P_MAX_INDEX
00767 );
00769
00775 Comparison Compare(const PObject & obj) const;
00777
00785 virtual unsigned GetSubType() const;
00787
00798 virtual PBoolean OnSendingPDU(
00799 H245_AudioCapability & pdu,
00800 unsigned packetSize
00801 ) const;
00802
00811 virtual PBoolean OnSendingPDU(
00812 H245_AudioMode & pdu
00813 ) const;
00814
00823 virtual PBoolean OnReceivedPDU(
00824 const H245_AudioCapability & pdu,
00825 unsigned & packetSize
00826 );
00827
00830 virtual PBoolean IsMatch(
00831 const PASN_Choice & subTypePDU
00832 ) const;
00834 };
00835
00843 class H323GenericAudioCapability : public H323AudioCapability,
00844 public H323GenericCapabilityInfo
00845 {
00846 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
00847
00848 public:
00853 H323GenericAudioCapability(
00854 const PString & capabilityId,
00855 PINDEX maxBitRate = 0
00856 );
00858
00864 Comparison Compare(const PObject & obj) const;
00866
00874 virtual unsigned GetSubType() const;
00876
00887 virtual PBoolean OnSendingPDU(
00888 H245_AudioCapability & pdu,
00889 unsigned packetSize,
00890 CommandType type
00891 ) const;
00892
00901 virtual PBoolean OnSendingPDU(
00902 H245_AudioMode & pdu
00903 ) const;
00904
00913 virtual PBoolean OnReceivedPDU(
00914 const H245_AudioCapability & pdu,
00915 unsigned & packetSize,
00916 CommandType type
00917 );
00918
00921 virtual PBoolean IsMatch(
00922 const PASN_Choice & subTypePDU
00923 ) const;
00925 };
00926
00927
00928 #if OPAL_VIDEO
00929
00936 class H323VideoCapability : public H323RealTimeCapability
00937 {
00938 PCLASSINFO(H323VideoCapability, H323RealTimeCapability);
00939
00940 public:
00946 virtual MainTypes GetMainType() const;
00948
00959 virtual unsigned GetDefaultSessionID() const;
00961
00972 virtual PBoolean OnSendingPDU(
00973 H245_Capability & pdu
00974 ) const;
00975
00984 virtual PBoolean OnSendingPDU(
00985 H245_DataType & pdu
00986 ) const;
00987
00996 virtual PBoolean OnSendingPDU(
00997 H245_ModeElement & pdu
00998 ) const;
00999
01007 virtual PBoolean OnSendingPDU(
01008 H245_VideoCapability & pdu
01009 ) const;
01010 virtual PBoolean OnSendingPDU(
01011 H245_VideoCapability & pdu,
01012 CommandType type
01013 ) const;
01014
01023 virtual PBoolean OnSendingPDU(
01024 H245_VideoMode & pdu
01025 ) const = 0;
01026
01036 virtual PBoolean OnReceivedPDU(
01037 const H245_Capability & pdu
01038 );
01039
01047 virtual PBoolean OnReceivedPDU(
01048 const H245_DataType & pdu,
01049 PBoolean receiver
01050 );
01051
01059 virtual PBoolean OnReceivedPDU(
01060 const H245_VideoCapability & pdu
01061 );
01062 virtual PBoolean OnReceivedPDU(
01063 const H245_VideoCapability & pdu,
01064 CommandType type
01065 );
01067 };
01068
01069
01077 class H323NonStandardVideoCapability : public H323VideoCapability,
01078 public H323NonStandardCapabilityInfo
01079 {
01080 PCLASSINFO(H323NonStandardVideoCapability, H323VideoCapability);
01081
01082 public:
01085 H323NonStandardVideoCapability(
01086 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
01087 const BYTE * dataBlock,
01088 PINDEX dataSize
01089 );
01092 H323NonStandardVideoCapability(
01093 const BYTE * dataBlock = NULL,
01094 PINDEX dataSize = 0,
01095 PINDEX comparisonOffset = 0,
01096 PINDEX comparisonLength = P_MAX_INDEX
01097 );
01098
01101 H323NonStandardVideoCapability(
01102 const PString & oid,
01103 const BYTE * dataBlock = NULL,
01104 PINDEX dataSize = 0,
01105 PINDEX comparisonOffset = 0,
01106 PINDEX comparisonLength = P_MAX_INDEX
01107 );
01108
01111 H323NonStandardVideoCapability(
01112 BYTE country,
01113 BYTE extension,
01114 WORD maufacturer,
01115 const BYTE * dataBlock = NULL,
01116 PINDEX dataSize = 0,
01117 PINDEX comparisonOffset = 0,
01118 PINDEX comparisonLength = P_MAX_INDEX
01119 );
01121
01127 Comparison Compare(const PObject & obj) const;
01129
01138 virtual unsigned GetSubType() const;
01140
01151 virtual PBoolean OnSendingPDU(
01152 H245_VideoCapability & pdu
01153 ) const;
01154
01163 virtual PBoolean OnSendingPDU(
01164 H245_VideoMode & pdu
01165 ) const;
01166
01175 virtual PBoolean OnReceivedPDU(
01176 const H245_VideoCapability & pdu
01177 );
01178
01181 virtual PBoolean IsMatch(
01182 const PASN_Choice & subTypePDU
01183 ) const;
01185 };
01186
01194 class H323GenericVideoCapability : public H323VideoCapability,
01195 public H323GenericCapabilityInfo
01196 {
01197 PCLASSINFO(H323GenericVideoCapability, H323VideoCapability);
01198
01199 public:
01204 H323GenericVideoCapability(
01205 const PString & capabilityId,
01206 PINDEX maxBitRate = 0
01207 );
01209
01215 Comparison Compare(const PObject & obj) const;
01217
01225 virtual unsigned GetSubType() const;
01227
01238 virtual PBoolean OnSendingPDU(
01239 H245_VideoCapability & pdu,
01240 CommandType type
01241 ) const;
01242
01251 virtual PBoolean OnSendingPDU(
01252 H245_VideoMode & pdu
01253 ) const;
01254
01263 virtual PBoolean OnReceivedPDU(
01264 const H245_VideoCapability & pdu,
01265 CommandType type
01266 );
01268
01271 virtual PBoolean IsMatch(
01272 const PASN_Choice & subTypePDU
01273 ) const;
01274 };
01275
01276 #endif // OPAL_VIDEO
01277
01284 class H323DataCapability : public H323Capability
01285 {
01286 PCLASSINFO(H323DataCapability, H323Capability);
01287
01288 public:
01293 H323DataCapability(
01294 unsigned maxBitRate = 0
01295 );
01297
01303 virtual MainTypes GetMainType() const;
01305
01315 virtual unsigned GetDefaultSessionID() const;
01317
01328 virtual PBoolean OnSendingPDU(
01329 H245_Capability & pdu
01330 ) const;
01331
01340 virtual PBoolean OnSendingPDU(
01341 H245_DataType & pdu
01342 ) const;
01343
01352 virtual PBoolean OnSendingPDU(
01353 H245_ModeElement & pdu
01354 ) const;
01355
01363 virtual PBoolean OnSendingPDU(
01364 H245_DataApplicationCapability & pdu
01365 ) const;
01366 virtual PBoolean OnSendingPDU(
01367 H245_DataApplicationCapability & pdu,
01368 CommandType type
01369 ) const;
01370
01379 virtual PBoolean OnSendingPDU(
01380 H245_DataMode & pdu
01381 ) const = 0;
01382
01392 virtual PBoolean OnReceivedPDU(
01393 const H245_Capability & pdu
01394 );
01395
01403 virtual PBoolean OnReceivedPDU(
01404 const H245_DataType & pdu,
01405 PBoolean receiver
01406 );
01407
01415 virtual PBoolean OnReceivedPDU(
01416 const H245_DataApplicationCapability & pdu
01417 );
01418 virtual PBoolean OnReceivedPDU(
01419 const H245_DataApplicationCapability & pdu,
01420 CommandType type
01421 );
01423
01424 protected:
01425 unsigned maxBitRate;
01426 };
01427
01428
01436 class H323NonStandardDataCapability : public H323DataCapability,
01437 public H323NonStandardCapabilityInfo
01438 {
01439 PCLASSINFO(H323NonStandardDataCapability, H323DataCapability);
01440
01441 public:
01446 H323NonStandardDataCapability(
01447 unsigned maxBitRate,
01448 const BYTE * dataBlock = NULL,
01449 PINDEX dataSize = 0,
01450 PINDEX comparisonOffset = 0,
01451 PINDEX comparisonLength = P_MAX_INDEX
01452 );
01453
01456 H323NonStandardDataCapability(
01457 unsigned maxBitRate,
01458 const PString & oid,
01459 const BYTE * dataBlock = NULL,
01460 PINDEX dataSize = 0,
01461 PINDEX comparisonOffset = 0,
01462 PINDEX comparisonLength = P_MAX_INDEX
01463 );
01464
01467 H323NonStandardDataCapability(
01468 unsigned maxBitRate,
01469 BYTE country,
01470 BYTE extension,
01471 WORD maufacturer,
01472 const BYTE * dataBlock = NULL,
01473 PINDEX dataSize = 0,
01474 PINDEX comparisonOffset = 0,
01475 PINDEX comparisonLength = P_MAX_INDEX
01476 );
01478
01484 Comparison Compare(const PObject & obj) const;
01486
01495 virtual unsigned GetSubType() const;
01497
01508 virtual PBoolean OnSendingPDU(
01509 H245_DataApplicationCapability & pdu
01510 ) const;
01511
01520 virtual PBoolean OnSendingPDU(
01521 H245_DataMode & pdu
01522 ) const;
01523
01532 virtual PBoolean OnReceivedPDU(
01533 const H245_DataApplicationCapability & pdu
01534 );
01535
01538 virtual PBoolean IsMatch(
01539 const PASN_Choice & subTypePDU
01540 ) const;
01542 };
01543
01544
01546
01547
01550 class H323_G711Capability : public H323AudioCapability
01551 {
01552 PCLASSINFO(H323_G711Capability, H323AudioCapability)
01553
01554 public:
01556 enum Mode {
01558 ALaw,
01560 muLaw
01561 };
01563 enum Speed {
01565 At64k,
01567 At56k
01568 };
01569
01574 H323_G711Capability(
01575 Mode mode = muLaw,
01576 Speed speed = At64k
01577 );
01579
01584 virtual PObject * Clone() const;
01586
01595 virtual unsigned GetSubType() const;
01596
01599 virtual PString GetFormatName() const;
01601
01602 protected:
01603 Mode mode;
01604 Speed speed;
01605 };
01606
01607 #if 0
01608
01611 class H323_G728Capability : public H323AudioCapability
01612 {
01613 PCLASSINFO(H323_G728Capability, H323AudioCapability)
01614
01615 public:
01620 H323_G728Capability();
01622
01627 virtual PObject * Clone() const;
01629
01635 virtual unsigned GetSubType() const;
01636
01639 virtual PString GetFormatName() const;
01641 };
01642
01643
01646 class H323_G729Capability : public H323AudioCapability
01647 {
01648 PCLASSINFO(H323_G729Capability, H323AudioCapability)
01649
01650 public:
01652 enum Mode {
01653 e_Normal,
01654 e_AnnexA,
01655 e_AnnexB,
01656 e_AnnexA_AnnexB
01657 };
01658
01663 H323_G729Capability(
01664 Mode mode
01665 );
01667
01672 virtual PObject * Clone() const;
01674
01680 virtual unsigned GetSubType() const;
01681
01684 virtual PString GetFormatName() const;
01686
01687 protected:
01688 Mode mode;
01689 };
01690
01691
01694 class H323_G7231Capability : public H323AudioCapability
01695 {
01696 PCLASSINFO(H323_G7231Capability, H323AudioCapability)
01697
01698 public:
01703 H323_G7231Capability(
01704 PBoolean allowSIDFrames = PTrue
01705 );
01707
01712 virtual PObject * Clone() const;
01714
01720 virtual unsigned GetSubType() const;
01721
01724 virtual PString GetFormatName() const;
01726
01736 virtual PBoolean OnSendingPDU(
01737 H245_AudioCapability & pdu,
01738 unsigned packetSize
01739 ) const;
01740
01748 virtual PBoolean OnReceivedPDU(
01749 const H245_AudioCapability & pdu,
01750 unsigned & packetSize
01751 );
01753
01754 protected:
01755 PBoolean allowSIDFrames;
01756 };
01757
01758
01761 class H323_GSM0610Capability : public H323AudioCapability
01762 {
01763 PCLASSINFO(H323_GSM0610Capability, H323AudioCapability)
01764
01765 public:
01770 H323_GSM0610Capability();
01772
01777 virtual PObject * Clone() const;
01779
01788 virtual unsigned GetSubType() const;
01789
01792 virtual PString GetFormatName() const;
01793
01802 virtual void SetTxFramesInPacket(
01803 unsigned frames
01804 );
01806
01816 virtual PBoolean OnSendingPDU(
01817 H245_AudioCapability & pdu,
01818 unsigned packetSize
01819 ) const;
01820
01828 virtual PBoolean OnReceivedPDU(
01829 const H245_AudioCapability & pdu,
01830 unsigned & packetSize
01831 );
01833 };
01834
01835 #endif
01836
01837
01839
01842 class H323_UserInputCapability : public H323Capability
01843 {
01844 PCLASSINFO(H323_UserInputCapability, H323Capability);
01845
01846 public:
01849 enum SubTypes {
01850 BasicString,
01851 IA5String,
01852 GeneralString,
01853 SignalToneH245,
01854 HookFlashH245,
01855 SignalToneRFC2833,
01856 NumSubTypes
01857 };
01858 static const char * GetSubTypeName(SubTypes subType);
01859 friend ostream & operator<<(ostream & strm, SubTypes subType) { return strm << GetSubTypeName(subType); }
01860
01865 H323_UserInputCapability(
01866 SubTypes subType
01867 );
01869
01874 virtual PObject * Clone() const;
01876
01884 virtual MainTypes GetMainType() const;
01885
01889 virtual unsigned GetSubType() const;
01890
01893 virtual PString GetFormatName() const;
01895
01903 virtual H323Channel * CreateChannel(
01904 H323Connection & connection,
01905 H323Channel::Directions dir,
01906 unsigned sessionID,
01907 const H245_H2250LogicalChannelParameters * param
01909 ) const;
01911
01921 virtual PBoolean OnSendingPDU(
01922 H245_Capability & pdu
01923 ) const;
01924
01932 virtual PBoolean OnSendingPDU(
01933 H245_DataType & pdu
01934 ) const;
01935
01944 virtual PBoolean OnSendingPDU(
01945 H245_ModeElement & pdu
01946 ) const;
01947
01957 virtual PBoolean OnReceivedPDU(
01958 const H245_Capability & pdu
01959 );
01960
01968 virtual PBoolean OnReceivedPDU(
01969 const H245_DataType & pdu,
01970 PBoolean receiver
01971 );
01972
01981 virtual PBoolean IsUsable(
01982 const H323Connection & connection
01983 ) const;
01985
01986 static void AddAllCapabilities(
01987 H323Capabilities & capabilities,
01988 PINDEX descriptorNum,
01989 PINDEX simultaneous
01990 );
01991
01992 protected:
01993 SubTypes subType;
01994 };
01995
01996
01997
01999
02000 PARRAY(H323CapabilitiesList, H323Capability);
02001
02002 PARRAY(H323CapabilitiesListArray, H323CapabilitiesList);
02003
02004 class H323SimultaneousCapabilities : public H323CapabilitiesListArray
02005 {
02006 PCLASSINFO(H323SimultaneousCapabilities, H323CapabilitiesListArray);
02007 public:
02008 PBoolean SetSize(PINDEX newSize);
02009 };
02010
02011
02012 PARRAY(H323CapabilitiesSetArray, H323SimultaneousCapabilities);
02013
02014
02015 class H323CapabilitiesSet : public H323CapabilitiesSetArray
02016 {
02017 PCLASSINFO(H323CapabilitiesSet, H323CapabilitiesSetArray);
02018 public:
02020 PBoolean SetSize(PINDEX newSize);
02021 };
02022
02023
02026 class H323Capabilities : public PObject
02027 {
02028 PCLASSINFO(H323Capabilities, PObject);
02029 public:
02034 H323Capabilities();
02035
02038 H323Capabilities(
02039 const H323Connection & connection,
02040 const H245_TerminalCapabilitySet & pdu
02041 );
02042
02047 H323Capabilities(
02048 const H323Capabilities & original
02049 );
02050
02055 H323Capabilities & operator=(
02056 const H323Capabilities & original
02057 );
02059
02064 void PrintOn(
02065 ostream & strm
02066 ) const;
02068
02073 PINDEX GetSize() const { return table.GetSize(); }
02074
02077 H323Capability & operator[](PINDEX i) const { return table[i]; }
02078
02099 PINDEX SetCapability(
02100 PINDEX descriptorNum,
02101 PINDEX simultaneous,
02102 H323Capability * cap
02103 );
02104
02107 PINDEX AddMediaFormat(
02108 PINDEX descriptorNum,
02109 PINDEX simultaneous,
02110 const OpalMediaFormat & mediaFormat
02111 );
02112
02117 PINDEX AddAllCapabilities(
02118 PINDEX descriptorNum,
02119 PINDEX simultaneous,
02120 const PString & name,
02121 PBoolean exact = PFalse
02122 );
02123
02124
02125 PINDEX AddAllCapabilities(
02126 const H323EndPoint &,
02127 PINDEX descriptorNum,
02128 PINDEX simultaneous,
02129 const PString & name,
02130 PBoolean exact = PFalse
02131 )
02132 { return AddAllCapabilities(descriptorNum, simultaneous, name, exact); }
02133
02142 void Add(
02143 H323Capability * capability
02144 );
02145
02152 H323Capability * Copy(
02153 const H323Capability & capability
02154 );
02155
02160 void Remove(
02161 H323Capability * capability
02162 );
02163
02168 void Remove(
02169 const PString & formatName
02170 );
02171
02175 void Remove(
02176 const PStringArray & formatNames
02177 );
02178
02181 void RemoveAll();
02182
02190 H323Capability * FindCapability(
02191 unsigned capabilityNumber
02192 ) const;
02193
02209 H323Capability * FindCapability(
02210 const PString & formatName,
02211 H323Capability::CapabilityDirection direction = H323Capability::e_Unknown,
02213 PBoolean exact = PFalse
02214 ) const;
02215
02221 H323Capability * FindCapability(
02222 H323Capability::CapabilityDirection direction
02223 ) const;
02224
02232 H323Capability * FindCapability(
02233 const H323Capability & capability
02234 ) const;
02235
02241 H323Capability * FindCapability(
02242 const H245_Capability & cap
02243 ) const;
02244
02250 H323Capability * FindCapability(
02251 const H245_DataType & dataType
02252 ) const;
02253
02259 H323Capability * FindCapability(
02260 const H245_ModeElement & modeElement
02261 ) const;
02262
02268 H323Capability * FindCapability(
02269 H323Capability::MainTypes mainType,
02270 unsigned subType = UINT_MAX
02271 ) const;
02272
02275 void BuildPDU(
02276 const H323Connection & connection,
02277 H245_TerminalCapabilitySet & pdu
02278 ) const;
02279
02282 PBoolean Merge(
02283 const H323Capabilities & newCaps
02284 );
02285
02292 void Reorder(
02293 const PStringArray & preferenceOrder
02294 );
02295
02298 PBoolean IsAllowed(
02299 const H323Capability & capability
02300 );
02301
02304 PBoolean IsAllowed(
02305 unsigned capabilityNumber
02306 );
02307
02310 PBoolean IsAllowed(
02311 const H323Capability & capability1,
02312 const H323Capability & capability2
02313 );
02314
02317 PBoolean IsAllowed(
02318 unsigned capabilityNumber1,
02319 unsigned capabilityNumber2
02320 );
02321
02324 OpalMediaFormatList GetMediaFormats() const;
02325
02326 const PStringSet & GetMediaPacketizations() const { return mediaPacketizations; }
02328
02329 protected:
02330 H323CapabilitiesList table;
02331 H323CapabilitiesSet set;
02332 PStringSet mediaPacketizations;
02333 };
02334
02335
02337
02338
02339
02340 typedef PFactory<H323Capability, std::string> H323CapabilityFactory;
02341
02342 #define H323_REGISTER_CAPABILITY(cls, capName) static H323CapabilityFactory::Worker<cls> cls##Factory(capName, true); \
02343
02344 #endif // __OPAL_H323CAPS_H
02345
02346