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 = 0;
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 ) = 0;
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 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 #if OPAL_AUDIO
00535
00542 class H323AudioCapability : public H323RealTimeCapability
00543 {
00544 PCLASSINFO(H323AudioCapability, H323RealTimeCapability);
00545
00546 public:
00551 H323AudioCapability();
00553
00559 virtual MainTypes GetMainType() const;
00561
00572 virtual unsigned GetDefaultSessionID() const;
00573
00582 virtual void SetTxFramesInPacket(
00583 unsigned frames
00584 );
00585
00591 virtual unsigned GetTxFramesInPacket() const;
00592
00598 virtual unsigned GetRxFramesInPacket() const;
00600
00611 virtual PBoolean OnSendingPDU(
00612 H245_Capability & pdu
00613 ) const;
00614
00623 virtual PBoolean OnSendingPDU(
00624 H245_DataType & pdu
00625 ) const;
00626
00635 virtual PBoolean OnSendingPDU(
00636 H245_ModeElement & pdu
00637 ) const;
00638
00647 virtual PBoolean OnSendingPDU(
00648 H245_AudioCapability & pdu,
00649 unsigned packetSize
00650 ) const;
00651 virtual PBoolean OnSendingPDU(
00652 H245_AudioCapability & pdu,
00653 unsigned packetSize,
00654 CommandType type
00655 ) const;
00656
00665 virtual PBoolean OnSendingPDU(
00666 H245_AudioMode & pdu
00667 ) const;
00668
00680 virtual PBoolean OnReceivedPDU(
00681 const H245_Capability & pdu
00682 );
00683
00693 virtual PBoolean OnReceivedPDU(
00694 const H245_DataType & pdu,
00695 PBoolean receiver
00696 );
00697
00706 virtual PBoolean OnReceivedPDU(
00707 const H245_AudioCapability & pdu,
00708 unsigned & packetSize
00709 );
00710 virtual PBoolean OnReceivedPDU(
00711 const H245_AudioCapability & pdu,
00712 unsigned & packetSize,
00713 CommandType type
00714 );
00716 };
00717
00718
00726 class H323NonStandardAudioCapability : public H323AudioCapability,
00727 public H323NonStandardCapabilityInfo
00728 {
00729 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
00730
00731 public:
00734 H323NonStandardAudioCapability(
00735 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00736 const BYTE * dataBlock,
00737 PINDEX dataSize
00738 );
00741 H323NonStandardAudioCapability(
00742 const BYTE * dataBlock = NULL,
00743 PINDEX dataSize = 0,
00744 PINDEX comparisonOffset = 0,
00745 PINDEX comparisonLength = P_MAX_INDEX
00746 );
00747
00750 H323NonStandardAudioCapability(
00751 const PString & oid,
00752 const BYTE * dataBlock = NULL,
00753 PINDEX dataSize = 0,
00754 PINDEX comparisonOffset = 0,
00755 PINDEX comparisonLength = P_MAX_INDEX
00756 );
00757
00760 H323NonStandardAudioCapability(
00761 BYTE country,
00762 BYTE extension,
00763 WORD maufacturer,
00764 const BYTE * dataBlock = NULL,
00765 PINDEX dataSize = 0,
00766 PINDEX comparisonOffset = 0,
00767 PINDEX comparisonLength = P_MAX_INDEX
00768 );
00770
00776 Comparison Compare(const PObject & obj) const;
00778
00786 virtual unsigned GetSubType() const;
00788
00799 virtual PBoolean OnSendingPDU(
00800 H245_AudioCapability & pdu,
00801 unsigned packetSize
00802 ) const;
00803
00812 virtual PBoolean OnSendingPDU(
00813 H245_AudioMode & pdu
00814 ) const;
00815
00824 virtual PBoolean OnReceivedPDU(
00825 const H245_AudioCapability & pdu,
00826 unsigned & packetSize
00827 );
00828
00831 virtual PBoolean IsMatch(
00832 const PASN_Choice & subTypePDU
00833 ) const;
00835 };
00836
00844 class H323GenericAudioCapability : public H323AudioCapability,
00845 public H323GenericCapabilityInfo
00846 {
00847 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
00848
00849 public:
00854 H323GenericAudioCapability(
00855 const PString & capabilityId,
00856 PINDEX maxBitRate = 0
00857 );
00859
00865 Comparison Compare(const PObject & obj) const;
00867
00875 virtual unsigned GetSubType() const;
00877
00888 virtual PBoolean OnSendingPDU(
00889 H245_AudioCapability & pdu,
00890 unsigned packetSize,
00891 CommandType type
00892 ) const;
00893
00902 virtual PBoolean OnSendingPDU(
00903 H245_AudioMode & pdu
00904 ) const;
00905
00914 virtual PBoolean OnReceivedPDU(
00915 const H245_AudioCapability & pdu,
00916 unsigned & packetSize,
00917 CommandType type
00918 );
00919
00922 virtual PBoolean IsMatch(
00923 const PASN_Choice & subTypePDU
00924 ) const;
00926 };
00927
00928 #endif // OPAL_AUDIO
00929
00930 #if OPAL_VIDEO
00931
00938 class H323VideoCapability : public H323RealTimeCapability
00939 {
00940 PCLASSINFO(H323VideoCapability, H323RealTimeCapability);
00941
00942 public:
00948 virtual MainTypes GetMainType() const;
00950
00961 virtual unsigned GetDefaultSessionID() const;
00963
00974 virtual PBoolean OnSendingPDU(
00975 H245_Capability & pdu
00976 ) const;
00977
00986 virtual PBoolean OnSendingPDU(
00987 H245_DataType & pdu
00988 ) const;
00989
00998 virtual PBoolean OnSendingPDU(
00999 H245_ModeElement & pdu
01000 ) const;
01001
01009 virtual PBoolean OnSendingPDU(
01010 H245_VideoCapability & pdu
01011 ) const;
01012 virtual PBoolean OnSendingPDU(
01013 H245_VideoCapability & pdu,
01014 CommandType type
01015 ) const;
01016
01025 virtual PBoolean OnSendingPDU(
01026 H245_VideoMode & pdu
01027 ) const = 0;
01028
01038 virtual PBoolean OnReceivedPDU(
01039 const H245_Capability & pdu
01040 );
01041
01049 virtual PBoolean OnReceivedPDU(
01050 const H245_DataType & pdu,
01051 PBoolean receiver
01052 );
01053
01061 virtual PBoolean OnReceivedPDU(
01062 const H245_VideoCapability & pdu
01063 );
01064 virtual PBoolean OnReceivedPDU(
01065 const H245_VideoCapability & pdu,
01066 CommandType type
01067 );
01069 };
01070
01071
01079 class H323NonStandardVideoCapability : public H323VideoCapability,
01080 public H323NonStandardCapabilityInfo
01081 {
01082 PCLASSINFO(H323NonStandardVideoCapability, H323VideoCapability);
01083
01084 public:
01087 H323NonStandardVideoCapability(
01088 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
01089 const BYTE * dataBlock,
01090 PINDEX dataSize
01091 );
01094 H323NonStandardVideoCapability(
01095 const BYTE * dataBlock = NULL,
01096 PINDEX dataSize = 0,
01097 PINDEX comparisonOffset = 0,
01098 PINDEX comparisonLength = P_MAX_INDEX
01099 );
01100
01103 H323NonStandardVideoCapability(
01104 const PString & oid,
01105 const BYTE * dataBlock = NULL,
01106 PINDEX dataSize = 0,
01107 PINDEX comparisonOffset = 0,
01108 PINDEX comparisonLength = P_MAX_INDEX
01109 );
01110
01113 H323NonStandardVideoCapability(
01114 BYTE country,
01115 BYTE extension,
01116 WORD maufacturer,
01117 const BYTE * dataBlock = NULL,
01118 PINDEX dataSize = 0,
01119 PINDEX comparisonOffset = 0,
01120 PINDEX comparisonLength = P_MAX_INDEX
01121 );
01123
01129 Comparison Compare(const PObject & obj) const;
01131
01140 virtual unsigned GetSubType() const;
01142
01153 virtual PBoolean OnSendingPDU(
01154 H245_VideoCapability & pdu
01155 ) const;
01156
01165 virtual PBoolean OnSendingPDU(
01166 H245_VideoMode & pdu
01167 ) const;
01168
01177 virtual PBoolean OnReceivedPDU(
01178 const H245_VideoCapability & pdu
01179 );
01180
01183 virtual PBoolean IsMatch(
01184 const PASN_Choice & subTypePDU
01185 ) const;
01187 };
01188
01196 class H323GenericVideoCapability : public H323VideoCapability,
01197 public H323GenericCapabilityInfo
01198 {
01199 PCLASSINFO(H323GenericVideoCapability, H323VideoCapability);
01200
01201 public:
01206 H323GenericVideoCapability(
01207 const PString & capabilityId,
01208 PINDEX maxBitRate = 0
01209 );
01211
01217 Comparison Compare(const PObject & obj) const;
01219
01227 virtual unsigned GetSubType() const;
01229
01240 virtual PBoolean OnSendingPDU(
01241 H245_VideoCapability & pdu,
01242 CommandType type
01243 ) const;
01244
01253 virtual PBoolean OnSendingPDU(
01254 H245_VideoMode & pdu
01255 ) const;
01256
01265 virtual PBoolean OnReceivedPDU(
01266 const H245_VideoCapability & pdu,
01267 CommandType type
01268 );
01270
01273 virtual PBoolean IsMatch(
01274 const PASN_Choice & subTypePDU
01275 ) const;
01276 };
01277
01278 #endif // OPAL_VIDEO
01279
01286 class H323DataCapability : public H323Capability
01287 {
01288 PCLASSINFO(H323DataCapability, H323Capability);
01289
01290 public:
01295 H323DataCapability(
01296 unsigned maxBitRate = 0
01297 );
01299
01305 virtual MainTypes GetMainType() const;
01307
01317 virtual unsigned GetDefaultSessionID() const;
01319
01330 virtual PBoolean OnSendingPDU(
01331 H245_Capability & pdu
01332 ) const;
01333
01342 virtual PBoolean OnSendingPDU(
01343 H245_DataType & pdu
01344 ) const;
01345
01354 virtual PBoolean OnSendingPDU(
01355 H245_ModeElement & pdu
01356 ) const;
01357
01365 virtual PBoolean OnSendingPDU(
01366 H245_DataApplicationCapability & pdu
01367 ) const;
01368 virtual PBoolean OnSendingPDU(
01369 H245_DataApplicationCapability & pdu,
01370 CommandType type
01371 ) const;
01372
01381 virtual PBoolean OnSendingPDU(
01382 H245_DataMode & pdu
01383 ) const = 0;
01384
01394 virtual PBoolean OnReceivedPDU(
01395 const H245_Capability & pdu
01396 );
01397
01405 virtual PBoolean OnReceivedPDU(
01406 const H245_DataType & pdu,
01407 PBoolean receiver
01408 );
01409
01417 virtual PBoolean OnReceivedPDU(
01418 const H245_DataApplicationCapability & pdu
01419 );
01420 virtual PBoolean OnReceivedPDU(
01421 const H245_DataApplicationCapability & pdu,
01422 CommandType type
01423 );
01425
01426 protected:
01427 unsigned maxBitRate;
01428 };
01429
01430
01438 class H323NonStandardDataCapability : public H323DataCapability,
01439 public H323NonStandardCapabilityInfo
01440 {
01441 PCLASSINFO(H323NonStandardDataCapability, H323DataCapability);
01442
01443 public:
01448 H323NonStandardDataCapability(
01449 unsigned maxBitRate,
01450 const BYTE * dataBlock = NULL,
01451 PINDEX dataSize = 0,
01452 PINDEX comparisonOffset = 0,
01453 PINDEX comparisonLength = P_MAX_INDEX
01454 );
01455
01458 H323NonStandardDataCapability(
01459 unsigned maxBitRate,
01460 const PString & oid,
01461 const BYTE * dataBlock = NULL,
01462 PINDEX dataSize = 0,
01463 PINDEX comparisonOffset = 0,
01464 PINDEX comparisonLength = P_MAX_INDEX
01465 );
01466
01469 H323NonStandardDataCapability(
01470 unsigned maxBitRate,
01471 BYTE country,
01472 BYTE extension,
01473 WORD maufacturer,
01474 const BYTE * dataBlock = NULL,
01475 PINDEX dataSize = 0,
01476 PINDEX comparisonOffset = 0,
01477 PINDEX comparisonLength = P_MAX_INDEX
01478 );
01480
01486 Comparison Compare(const PObject & obj) const;
01488
01497 virtual unsigned GetSubType() const;
01499
01510 virtual PBoolean OnSendingPDU(
01511 H245_DataApplicationCapability & pdu
01512 ) const;
01513
01522 virtual PBoolean OnSendingPDU(
01523 H245_DataMode & pdu
01524 ) const;
01525
01534 virtual PBoolean OnReceivedPDU(
01535 const H245_DataApplicationCapability & pdu
01536 );
01537
01540 virtual PBoolean IsMatch(
01541 const PASN_Choice & subTypePDU
01542 ) const;
01544 };
01545
01546
01548
01549
01552 class H323_G711Capability : public H323AudioCapability
01553 {
01554 PCLASSINFO(H323_G711Capability, H323AudioCapability)
01555
01556 public:
01558 enum Mode {
01560 ALaw,
01562 muLaw
01563 };
01565 enum Speed {
01567 At64k,
01569 At56k
01570 };
01571
01576 H323_G711Capability(
01577 Mode mode = muLaw,
01578 Speed speed = At64k
01579 );
01581
01586 virtual PObject * Clone() const;
01588
01597 virtual unsigned GetSubType() const;
01598
01601 virtual PString GetFormatName() const;
01603
01604 protected:
01605 Mode mode;
01606 Speed speed;
01607 };
01608
01609 #if 0
01610
01613 class H323_G728Capability : public H323AudioCapability
01614 {
01615 PCLASSINFO(H323_G728Capability, H323AudioCapability)
01616
01617 public:
01622 H323_G728Capability();
01624
01629 virtual PObject * Clone() const;
01631
01637 virtual unsigned GetSubType() const;
01638
01641 virtual PString GetFormatName() const;
01643 };
01644
01645
01648 class H323_G729Capability : public H323AudioCapability
01649 {
01650 PCLASSINFO(H323_G729Capability, H323AudioCapability)
01651
01652 public:
01654 enum Mode {
01655 e_Normal,
01656 e_AnnexA,
01657 e_AnnexB,
01658 e_AnnexA_AnnexB
01659 };
01660
01665 H323_G729Capability(
01666 Mode mode
01667 );
01669
01674 virtual PObject * Clone() const;
01676
01682 virtual unsigned GetSubType() const;
01683
01686 virtual PString GetFormatName() const;
01688
01689 protected:
01690 Mode mode;
01691 };
01692
01693
01696 class H323_G7231Capability : public H323AudioCapability
01697 {
01698 PCLASSINFO(H323_G7231Capability, H323AudioCapability)
01699
01700 public:
01705 H323_G7231Capability(
01706 PBoolean allowSIDFrames = PTrue
01707 );
01709
01714 virtual PObject * Clone() const;
01716
01722 virtual unsigned GetSubType() const;
01723
01726 virtual PString GetFormatName() const;
01728
01738 virtual PBoolean OnSendingPDU(
01739 H245_AudioCapability & pdu,
01740 unsigned packetSize
01741 ) const;
01742
01750 virtual PBoolean OnReceivedPDU(
01751 const H245_AudioCapability & pdu,
01752 unsigned & packetSize
01753 );
01755
01756 protected:
01757 PBoolean allowSIDFrames;
01758 };
01759
01760
01763 class H323_GSM0610Capability : public H323AudioCapability
01764 {
01765 PCLASSINFO(H323_GSM0610Capability, H323AudioCapability)
01766
01767 public:
01772 H323_GSM0610Capability();
01774
01779 virtual PObject * Clone() const;
01781
01790 virtual unsigned GetSubType() const;
01791
01794 virtual PString GetFormatName() const;
01795
01804 virtual void SetTxFramesInPacket(
01805 unsigned frames
01806 );
01808
01818 virtual PBoolean OnSendingPDU(
01819 H245_AudioCapability & pdu,
01820 unsigned packetSize
01821 ) const;
01822
01830 virtual PBoolean OnReceivedPDU(
01831 const H245_AudioCapability & pdu,
01832 unsigned & packetSize
01833 );
01835 };
01836
01837 #endif
01838
01839
01841
01844 class H323_UserInputCapability : public H323Capability
01845 {
01846 PCLASSINFO(H323_UserInputCapability, H323Capability);
01847
01848 public:
01851 enum SubTypes {
01852 BasicString,
01853 IA5String,
01854 GeneralString,
01855 SignalToneH245,
01856 HookFlashH245,
01857 SignalToneRFC2833,
01858 NumSubTypes
01859 };
01860 static const char * GetSubTypeName(SubTypes subType);
01861 friend ostream & operator<<(ostream & strm, SubTypes subType) { return strm << GetSubTypeName(subType); }
01862
01867 H323_UserInputCapability(
01868 SubTypes subType
01869 );
01871
01876 virtual PObject * Clone() const;
01878
01886 virtual MainTypes GetMainType() const;
01887
01891 virtual unsigned GetSubType() const;
01892
01895 virtual PString GetFormatName() const;
01897
01905 virtual H323Channel * CreateChannel(
01906 H323Connection & connection,
01907 H323Channel::Directions dir,
01908 unsigned sessionID,
01909 const H245_H2250LogicalChannelParameters * param
01911 ) const;
01913
01923 virtual PBoolean OnSendingPDU(
01924 H245_Capability & pdu
01925 ) const;
01926
01934 virtual PBoolean OnSendingPDU(
01935 H245_DataType & pdu
01936 ) const;
01937
01946 virtual PBoolean OnSendingPDU(
01947 H245_ModeElement & pdu
01948 ) const;
01949
01959 virtual PBoolean OnReceivedPDU(
01960 const H245_Capability & pdu
01961 );
01962
01970 virtual PBoolean OnReceivedPDU(
01971 const H245_DataType & pdu,
01972 PBoolean receiver
01973 );
01974
01983 virtual PBoolean IsUsable(
01984 const H323Connection & connection
01985 ) const;
01987
01988 static void AddAllCapabilities(
01989 H323Capabilities & capabilities,
01990 PINDEX descriptorNum,
01991 PINDEX simultaneous
01992 );
01993
01994 protected:
01995 SubTypes subType;
01996 };
01997
01998
01999
02001
02002 PARRAY(H323CapabilitiesList, H323Capability);
02003
02004 PARRAY(H323CapabilitiesListArray, H323CapabilitiesList);
02005
02006 class H323SimultaneousCapabilities : public H323CapabilitiesListArray
02007 {
02008 PCLASSINFO(H323SimultaneousCapabilities, H323CapabilitiesListArray);
02009 public:
02010 PBoolean SetSize(PINDEX newSize);
02011 };
02012
02013
02014 PARRAY(H323CapabilitiesSetArray, H323SimultaneousCapabilities);
02015
02016
02017 class H323CapabilitiesSet : public H323CapabilitiesSetArray
02018 {
02019 PCLASSINFO(H323CapabilitiesSet, H323CapabilitiesSetArray);
02020 public:
02022 PBoolean SetSize(PINDEX newSize);
02023 };
02024
02025
02028 class H323Capabilities : public PObject
02029 {
02030 PCLASSINFO(H323Capabilities, PObject);
02031 public:
02036 H323Capabilities();
02037
02040 H323Capabilities(
02041 const H323Connection & connection,
02042 const H245_TerminalCapabilitySet & pdu
02043 );
02044
02049 H323Capabilities(
02050 const H323Capabilities & original
02051 );
02052
02057 H323Capabilities & operator=(
02058 const H323Capabilities & original
02059 );
02061
02066 void PrintOn(
02067 ostream & strm
02068 ) const;
02070
02075 PINDEX GetSize() const { return table.GetSize(); }
02076
02079 H323Capability & operator[](PINDEX i) const { return table[i]; }
02080
02101 PINDEX SetCapability(
02102 PINDEX descriptorNum,
02103 PINDEX simultaneous,
02104 H323Capability * cap
02105 );
02106
02109 PINDEX AddMediaFormat(
02110 PINDEX descriptorNum,
02111 PINDEX simultaneous,
02112 const OpalMediaFormat & mediaFormat
02113 );
02114
02119 PINDEX AddAllCapabilities(
02120 PINDEX descriptorNum,
02121 PINDEX simultaneous,
02122 const PString & name,
02123 PBoolean exact = PFalse
02124 );
02125
02126
02127 PINDEX AddAllCapabilities(
02128 const H323EndPoint &,
02129 PINDEX descriptorNum,
02130 PINDEX simultaneous,
02131 const PString & name,
02132 PBoolean exact = PFalse
02133 )
02134 { return AddAllCapabilities(descriptorNum, simultaneous, name, exact); }
02135
02144 void Add(
02145 H323Capability * capability
02146 );
02147
02154 H323Capability * Copy(
02155 const H323Capability & capability
02156 );
02157
02162 void Remove(
02163 H323Capability * capability
02164 );
02165
02170 void Remove(
02171 const PString & formatName
02172 );
02173
02177 void Remove(
02178 const PStringArray & formatNames
02179 );
02180
02183 void RemoveAll();
02184
02192 H323Capability * FindCapability(
02193 unsigned capabilityNumber
02194 ) const;
02195
02211 H323Capability * FindCapability(
02212 const PString & formatName,
02213 H323Capability::CapabilityDirection direction = H323Capability::e_Unknown,
02215 PBoolean exact = PFalse
02216 ) const;
02217
02223 H323Capability * FindCapability(
02224 H323Capability::CapabilityDirection direction
02225 ) const;
02226
02234 H323Capability * FindCapability(
02235 const H323Capability & capability
02236 ) const;
02237
02243 H323Capability * FindCapability(
02244 const H245_Capability & cap
02245 ) const;
02246
02252 H323Capability * FindCapability(
02253 const H245_DataType & dataType
02254 ) const;
02255
02261 H323Capability * FindCapability(
02262 const H245_ModeElement & modeElement
02263 ) const;
02264
02270 H323Capability * FindCapability(
02271 H323Capability::MainTypes mainType,
02272 unsigned subType = UINT_MAX
02273 ) const;
02274
02277 void BuildPDU(
02278 const H323Connection & connection,
02279 H245_TerminalCapabilitySet & pdu
02280 ) const;
02281
02284 PBoolean Merge(
02285 const H323Capabilities & newCaps
02286 );
02287
02294 void Reorder(
02295 const PStringArray & preferenceOrder
02296 );
02297
02300 PBoolean IsAllowed(
02301 const H323Capability & capability
02302 );
02303
02306 PBoolean IsAllowed(
02307 unsigned capabilityNumber
02308 );
02309
02312 PBoolean IsAllowed(
02313 const H323Capability & capability1,
02314 const H323Capability & capability2
02315 );
02316
02319 PBoolean IsAllowed(
02320 unsigned capabilityNumber1,
02321 unsigned capabilityNumber2
02322 );
02323
02326 OpalMediaFormatList GetMediaFormats() const;
02327
02328 const PStringSet & GetMediaPacketizations() const { return mediaPacketizations; }
02330
02331 protected:
02332 H323CapabilitiesList table;
02333 H323CapabilitiesSet set;
02334 PStringSet mediaPacketizations;
02335 };
02336
02337
02339
02340
02341
02342 typedef PFactory<H323Capability, std::string> H323CapabilityFactory;
02343
02344 #define H323_REGISTER_CAPABILITY(cls, capName) static H323CapabilityFactory::Worker<cls> cls##Factory(capName, true); \
02345
02346 #endif // __OPAL_H323CAPS_H
02347
02348