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
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 #ifndef __OPAL_H323CAPS_H
00263 #define __OPAL_H323CAPS_H
00264
00265 #ifdef P_USE_PRAGMA
00266 #pragma interface
00267 #endif
00268
00269
00270 #include <opal/mediafmt.h>
00271 #include <h323/channels.h>
00272
00273
00274
00275
00276
00277
00278
00279 class PASN_Choice;
00280 class H245_Capability;
00281 class H245_DataType;
00282 class H245_ModeElement;
00283 class H245_AudioCapability;
00284 class H245_AudioMode;
00285 class H245_VideoCapability;
00286 class H245_VideoMode;
00287 class H245_DataApplicationCapability;
00288 class H245_DataMode;
00289 class H245_DataProtocolCapability;
00290 class H245_H2250LogicalChannelParameters;
00291 class H245_TerminalCapabilitySet;
00292 class H245_NonStandardParameter;
00293 class H323Connection;
00294 class H323Capabilities;
00295 class H245_CapabilityIdentifier;
00296 class H245_GenericCapability;
00297 class H245_GenericParameter;
00298
00300
00314 class H323Capability : public PObject
00315 {
00316 PCLASSINFO(H323Capability, PObject);
00317
00318 public:
00323 H323Capability();
00325
00331 Comparison Compare(const PObject & obj) const;
00332
00335 void PrintOn(ostream & strm) const;
00337
00340 enum MainTypes {
00342 e_Audio,
00344 e_Video,
00346 e_Data,
00348 e_UserInput,
00350 e_NumMainTypes
00351 };
00352
00358 virtual MainTypes GetMainType() const = 0;
00359
00363 virtual unsigned GetSubType() const = 0;
00364
00367 virtual PString GetFormatName() const = 0;
00369
00375 static H323Capability * Create(
00376 const PString & name
00377 );
00378
00387 virtual unsigned GetDefaultSessionID() const;
00388
00397 virtual void SetTxFramesInPacket(
00398 unsigned frames
00399 );
00400
00405 virtual unsigned GetTxFramesInPacket() const;
00406
00411 virtual unsigned GetRxFramesInPacket() const;
00412
00418 virtual H323Channel * CreateChannel(
00419 H323Connection & connection,
00420 H323Channel::Directions dir,
00421 unsigned sessionID,
00422 const H245_H2250LogicalChannelParameters * param
00424 ) const = 0;
00426
00429 enum CommandType {
00430 e_TCS,
00431 e_OLC,
00432 e_ReqMode
00433 };
00434
00442 virtual BOOL OnSendingPDU(
00443 H245_Capability & pdu
00444 ) const = 0;
00445
00453 virtual BOOL OnSendingPDU(
00454 H245_DataType & pdu
00455 ) const = 0;
00456
00464 virtual BOOL OnSendingPDU(
00465 H245_ModeElement & pdu
00466 ) const = 0;
00467
00480 virtual BOOL OnReceivedPDU(
00481 const H245_Capability & pdu
00482 );
00483
00491 virtual BOOL OnReceivedPDU(
00492 const H245_DataType & pdu,
00493 BOOL receiver
00494 ) = 0;
00495
00498 virtual BOOL IsMatch(
00499 const PASN_Choice & subTypePDU
00500 ) const;
00501
00509 virtual BOOL IsUsable(
00510 const H323Connection & connection
00511 ) const;
00513
00516 enum CapabilityDirection {
00517 e_Unknown,
00518 e_Receive,
00519 e_Transmit,
00520 e_ReceiveAndTransmit,
00521 e_NoDirection,
00522 NumCapabilityDirections
00523 };
00524
00527 CapabilityDirection GetCapabilityDirection() const { return capabilityDirection; }
00528
00531 void SetCapabilityDirection(
00532 CapabilityDirection dir
00533 ) { capabilityDirection = dir; }
00534
00536 unsigned GetCapabilityNumber() const { return assignedCapabilityNumber; }
00537
00539 void SetCapabilityNumber(unsigned num) { assignedCapabilityNumber = num; }
00540
00543 OpalMediaFormat GetMediaFormat() const;
00544
00546 RTP_DataFrame::PayloadTypes GetPayloadType() const { return rtpPayloadType; }
00547
00549 void SetPayloadType(RTP_DataFrame::PayloadTypes pt) { rtpPayloadType = pt; }
00550
00552 virtual void AttachQoS(RTP_QOS *) { }
00554
00555 #if PTRACING
00556 friend ostream & operator<<(ostream & o , MainTypes t);
00557 friend ostream & operator<<(ostream & o , CapabilityDirection d);
00558 #endif
00559
00560 protected:
00561 OpalMediaFormat & GetWritableMediaFormat();
00562
00563 unsigned assignedCapabilityNumber;
00564 CapabilityDirection capabilityDirection;
00565 RTP_DataFrame::PayloadTypes rtpPayloadType;
00566
00567 private:
00568 OpalMediaFormat mediaFormat;
00569
00570 friend class H323Capabilities;
00571 };
00572
00573
00574
00583 class H323NonStandardCapabilityInfo
00584 {
00585 public:
00586 typedef PObject::Comparison (*CompareFuncType)(struct PluginCodec_H323NonStandardCodecData *);
00587
00590 H323NonStandardCapabilityInfo(
00591 CompareFuncType compareFunc,
00592 const BYTE * dataBlock,
00593 PINDEX dataSize
00594 );
00595
00598 H323NonStandardCapabilityInfo(
00599 const BYTE * dataBlock,
00600 PINDEX dataSize,
00601 PINDEX comparisonOffset = 0,
00602 PINDEX comparisonLength = P_MAX_INDEX
00603 );
00604
00607 H323NonStandardCapabilityInfo(
00608 const PString & oid,
00609 const BYTE * dataBlock,
00610 PINDEX dataSize,
00611 PINDEX comparisonOffset = 0,
00612 PINDEX comparisonLength = P_MAX_INDEX
00613 );
00614
00617 H323NonStandardCapabilityInfo(
00618 BYTE country,
00619 BYTE extension,
00620 WORD maufacturer,
00621 const BYTE * dataBlock,
00622 PINDEX dataSize,
00623 PINDEX comparisonOffset = 0,
00624 PINDEX comparisonLength = P_MAX_INDEX
00625 );
00626
00629 virtual ~H323NonStandardCapabilityInfo();
00630
00635 virtual BOOL OnSendingPDU(
00636 PBYTEArray & data
00637 ) const;
00638
00643 virtual BOOL OnReceivedPDU(
00644 const PBYTEArray & data
00645 );
00646
00647 BOOL IsMatch(const H245_NonStandardParameter & param) const;
00648
00649 PObject::Comparison CompareParam(
00650 const H245_NonStandardParameter & param
00651 ) const;
00652
00653 protected:
00654 BOOL OnSendingNonStandardPDU(
00655 PASN_Choice & pdu,
00656 unsigned nonStandardTag
00657 ) const;
00658 BOOL OnReceivedNonStandardPDU(
00659 const PASN_Choice & pdu,
00660 unsigned nonStandardTag
00661 );
00662
00663 PObject::Comparison CompareInfo(
00664 const H323NonStandardCapabilityInfo & obj
00665 ) const;
00666 PObject::Comparison CompareData(
00667 const PBYTEArray & data
00668 ) const;
00669
00670 PString oid;
00671 BYTE t35CountryCode;
00672 BYTE t35Extension;
00673 WORD manufacturerCode;
00674 PBYTEArray nonStandardData;
00675 PINDEX comparisonOffset;
00676 PINDEX comparisonLength;
00677 CompareFuncType compareFunc;
00678 };
00679
00689 class H323GenericCapabilityInfo
00690 {
00691 public:
00692 H323GenericCapabilityInfo(
00693 const PString & id,
00694 PINDEX maxBitRate = 0
00695 );
00696 H323GenericCapabilityInfo(const H323GenericCapabilityInfo & obj);
00697 virtual ~H323GenericCapabilityInfo();
00698
00699 protected:
00700 virtual BOOL OnSendingGenericPDU(
00701 H245_GenericCapability & pdu,
00702 const OpalMediaFormat & mediaFormat,
00703 H323Capability::CommandType type
00704 ) const;
00705 virtual BOOL OnReceivedGenericPDU(
00706 OpalMediaFormat & mediaFormat,
00707 const H245_GenericCapability & pdu,
00708 H323Capability::CommandType type
00709 );
00710
00711 BOOL IsMatch(
00712 const H245_GenericCapability & param
00713 ) const;
00714 PObject::Comparison CompareInfo(
00715 const H323GenericCapabilityInfo & obj
00716 ) const;
00717
00718
00719 H245_CapabilityIdentifier * identifier;
00720 unsigned maxBitRate;
00721 };
00722
00729 class H323RealTimeCapability : public H323Capability
00730 {
00731 PCLASSINFO(H323RealTimeCapability, H323Capability);
00732
00733 public:
00738 virtual H323Channel * CreateChannel(
00739 H323Connection & connection,
00740 H323Channel::Directions dir,
00741 unsigned sessionID,
00742 const H245_H2250LogicalChannelParameters * param
00744 ) const;
00745
00746 H323RealTimeCapability();
00747 H323RealTimeCapability(const H323RealTimeCapability &rtc);
00748 virtual ~H323RealTimeCapability();
00749 void AttachQoS(RTP_QOS * _rtpqos);
00750
00751 protected:
00752 RTP_QOS * rtpqos;
00754 };
00755
00756 #if OPAL_AUDIO
00757
00764 class H323AudioCapability : public H323RealTimeCapability
00765 {
00766 PCLASSINFO(H323AudioCapability, H323RealTimeCapability);
00767
00768 public:
00773 H323AudioCapability();
00775
00781 virtual MainTypes GetMainType() const;
00783
00794 virtual unsigned GetDefaultSessionID() const;
00795
00804 virtual void SetTxFramesInPacket(
00805 unsigned frames
00806 );
00807
00813 virtual unsigned GetTxFramesInPacket() const;
00814
00820 virtual unsigned GetRxFramesInPacket() const;
00822
00833 virtual BOOL OnSendingPDU(
00834 H245_Capability & pdu
00835 ) const;
00836
00845 virtual BOOL OnSendingPDU(
00846 H245_DataType & pdu
00847 ) const;
00848
00857 virtual BOOL OnSendingPDU(
00858 H245_ModeElement & pdu
00859 ) const;
00860
00869 virtual BOOL OnSendingPDU(
00870 H245_AudioCapability & pdu,
00871 unsigned packetSize
00872 ) const;
00873 virtual BOOL OnSendingPDU(
00874 H245_AudioCapability & pdu,
00875 unsigned packetSize,
00876 CommandType type
00877 ) const;
00878
00887 virtual BOOL OnSendingPDU(
00888 H245_AudioMode & pdu
00889 ) const;
00890
00902 virtual BOOL OnReceivedPDU(
00903 const H245_Capability & pdu
00904 );
00905
00915 virtual BOOL OnReceivedPDU(
00916 const H245_DataType & pdu,
00917 BOOL receiver
00918 );
00919
00928 virtual BOOL OnReceivedPDU(
00929 const H245_AudioCapability & pdu,
00930 unsigned & packetSize
00931 );
00932 virtual BOOL OnReceivedPDU(
00933 const H245_AudioCapability & pdu,
00934 unsigned & packetSize,
00935 CommandType type
00936 );
00938 };
00939
00940
00948 class H323NonStandardAudioCapability : public H323AudioCapability,
00949 public H323NonStandardCapabilityInfo
00950 {
00951 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
00952
00953 public:
00956 H323NonStandardAudioCapability(
00957 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00958 const BYTE * dataBlock,
00959 PINDEX dataSize
00960 );
00963 H323NonStandardAudioCapability(
00964 const BYTE * dataBlock = NULL,
00965 PINDEX dataSize = 0,
00966 PINDEX comparisonOffset = 0,
00967 PINDEX comparisonLength = P_MAX_INDEX
00968 );
00969
00972 H323NonStandardAudioCapability(
00973 const PString & oid,
00974 const BYTE * dataBlock = NULL,
00975 PINDEX dataSize = 0,
00976 PINDEX comparisonOffset = 0,
00977 PINDEX comparisonLength = P_MAX_INDEX
00978 );
00979
00982 H323NonStandardAudioCapability(
00983 BYTE country,
00984 BYTE extension,
00985 WORD maufacturer,
00986 const BYTE * dataBlock = NULL,
00987 PINDEX dataSize = 0,
00988 PINDEX comparisonOffset = 0,
00989 PINDEX comparisonLength = P_MAX_INDEX
00990 );
00992
00998 Comparison Compare(const PObject & obj) const;
01000
01008 virtual unsigned GetSubType() const;
01010
01021 virtual BOOL OnSendingPDU(
01022 H245_AudioCapability & pdu,
01023 unsigned packetSize
01024 ) const;
01025
01034 virtual BOOL OnSendingPDU(
01035 H245_AudioMode & pdu
01036 ) const;
01037
01046 virtual BOOL OnReceivedPDU(
01047 const H245_AudioCapability & pdu,
01048 unsigned & packetSize
01049 );
01050
01053 virtual BOOL IsMatch(
01054 const PASN_Choice & subTypePDU
01055 ) const;
01057 };
01058
01066 class H323GenericAudioCapability : public H323AudioCapability,
01067 public H323GenericCapabilityInfo
01068 {
01069 PCLASSINFO(H323NonStandardAudioCapability, H323AudioCapability);
01070
01071 public:
01076 H323GenericAudioCapability(
01077 const PString & capabilityId,
01078 PINDEX maxBitRate = 0
01079 );
01081
01087 Comparison Compare(const PObject & obj) const;
01089
01097 virtual unsigned GetSubType() const;
01099
01110 virtual BOOL OnSendingPDU(
01111 H245_AudioCapability & pdu,
01112 unsigned packetSize,
01113 CommandType type
01114 ) const;
01115
01124 virtual BOOL OnSendingPDU(
01125 H245_AudioMode & pdu
01126 ) const;
01127
01136 virtual BOOL OnReceivedPDU(
01137 const H245_AudioCapability & pdu,
01138 unsigned & packetSize,
01139 CommandType type
01140 );
01141
01144 virtual BOOL IsMatch(
01145 const PASN_Choice & subTypePDU
01146 ) const;
01148 };
01149
01150 #endif // OPAL_AUDIO
01151
01152 #if OPAL_VIDEO
01153
01160 class H323VideoCapability : public H323RealTimeCapability
01161 {
01162 PCLASSINFO(H323VideoCapability, H323RealTimeCapability);
01163
01164 public:
01170 virtual MainTypes GetMainType() const;
01172
01183 virtual unsigned GetDefaultSessionID() const;
01185
01196 virtual BOOL OnSendingPDU(
01197 H245_Capability & pdu
01198 ) const;
01199
01208 virtual BOOL OnSendingPDU(
01209 H245_DataType & pdu
01210 ) const;
01211
01220 virtual BOOL OnSendingPDU(
01221 H245_ModeElement & pdu
01222 ) const;
01223
01231 virtual BOOL OnSendingPDU(
01232 H245_VideoCapability & pdu
01233 ) const;
01234 virtual BOOL OnSendingPDU(
01235 H245_VideoCapability & pdu,
01236 CommandType type
01237 ) const;
01238
01247 virtual BOOL OnSendingPDU(
01248 H245_VideoMode & pdu
01249 ) const = 0;
01250
01260 virtual BOOL OnReceivedPDU(
01261 const H245_Capability & pdu
01262 );
01263
01271 virtual BOOL OnReceivedPDU(
01272 const H245_DataType & pdu,
01273 BOOL receiver
01274 );
01275
01283 virtual BOOL OnReceivedPDU(
01284 const H245_VideoCapability & pdu
01285 );
01286 virtual BOOL OnReceivedPDU(
01287 const H245_VideoCapability & pdu,
01288 CommandType type
01289 );
01291 };
01292
01293
01301 class H323NonStandardVideoCapability : public H323VideoCapability,
01302 public H323NonStandardCapabilityInfo
01303 {
01304 PCLASSINFO(H323NonStandardVideoCapability, H323VideoCapability);
01305
01306 public:
01309 H323NonStandardVideoCapability(
01310 H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
01311 const BYTE * dataBlock,
01312 PINDEX dataSize
01313 );
01316 H323NonStandardVideoCapability(
01317 const BYTE * dataBlock = NULL,
01318 PINDEX dataSize = 0,
01319 PINDEX comparisonOffset = 0,
01320 PINDEX comparisonLength = P_MAX_INDEX
01321 );
01322
01325 H323NonStandardVideoCapability(
01326 const PString & oid,
01327 const BYTE * dataBlock = NULL,
01328 PINDEX dataSize = 0,
01329 PINDEX comparisonOffset = 0,
01330 PINDEX comparisonLength = P_MAX_INDEX
01331 );
01332
01335 H323NonStandardVideoCapability(
01336 BYTE country,
01337 BYTE extension,
01338 WORD maufacturer,
01339 const BYTE * dataBlock = NULL,
01340 PINDEX dataSize = 0,
01341 PINDEX comparisonOffset = 0,
01342 PINDEX comparisonLength = P_MAX_INDEX
01343 );
01345
01351 Comparison Compare(const PObject & obj) const;
01353
01362 virtual unsigned GetSubType() const;
01364
01375 virtual BOOL OnSendingPDU(
01376 H245_VideoCapability & pdu
01377 ) const;
01378
01387 virtual BOOL OnSendingPDU(
01388 H245_VideoMode & pdu
01389 ) const;
01390
01399 virtual BOOL OnReceivedPDU(
01400 const H245_VideoCapability & pdu
01401 );
01402
01405 virtual BOOL IsMatch(
01406 const PASN_Choice & subTypePDU
01407 ) const;
01409 };
01410
01418 class H323GenericVideoCapability : public H323VideoCapability,
01419 public H323GenericCapabilityInfo
01420 {
01421 PCLASSINFO(H323GenericVideoCapability, H323VideoCapability);
01422
01423 public:
01428 H323GenericVideoCapability(
01429 const PString & capabilityId,
01430 PINDEX maxBitRate = 0
01431 );
01433
01439 Comparison Compare(const PObject & obj) const;
01441
01449 virtual unsigned GetSubType() const;
01451
01462 virtual BOOL OnSendingPDU(
01463 H245_VideoCapability & pdu,
01464 CommandType type
01465 ) const;
01466
01475 virtual BOOL OnSendingPDU(
01476 H245_VideoMode & pdu
01477 ) const;
01478
01487 virtual BOOL OnReceivedPDU(
01488 const H245_VideoCapability & pdu,
01489 CommandType type
01490 );
01492
01495 virtual BOOL IsMatch(
01496 const PASN_Choice & subTypePDU
01497 ) const;
01498 };
01499
01500 #endif // OPAL_VIDEO
01501
01508 class H323DataCapability : public H323Capability
01509 {
01510 PCLASSINFO(H323DataCapability, H323Capability);
01511
01512 public:
01517 H323DataCapability(
01518 unsigned maxBitRate = 0
01519 );
01521
01527 virtual MainTypes GetMainType() const;
01529
01539 virtual unsigned GetDefaultSessionID() const;
01541
01552 virtual BOOL OnSendingPDU(
01553 H245_Capability & pdu
01554 ) const;
01555
01564 virtual BOOL OnSendingPDU(
01565 H245_DataType & pdu
01566 ) const;
01567
01576 virtual BOOL OnSendingPDU(
01577 H245_ModeElement & pdu
01578 ) const;
01579
01587 virtual BOOL OnSendingPDU(
01588 H245_DataApplicationCapability & pdu
01589 ) const;
01590 virtual BOOL OnSendingPDU(
01591 H245_DataApplicationCapability & pdu,
01592 CommandType type
01593 ) const;
01594
01603 virtual BOOL OnSendingPDU(
01604 H245_DataMode & pdu
01605 ) const = 0;
01606
01616 virtual BOOL OnReceivedPDU(
01617 const H245_Capability & pdu
01618 );
01619
01627 virtual BOOL OnReceivedPDU(
01628 const H245_DataType & pdu,
01629 BOOL receiver
01630 );
01631
01639 virtual BOOL OnReceivedPDU(
01640 const H245_DataApplicationCapability & pdu
01641 );
01642 virtual BOOL OnReceivedPDU(
01643 const H245_DataApplicationCapability & pdu,
01644 CommandType type
01645 );
01647
01648 protected:
01649 unsigned maxBitRate;
01650 };
01651
01652
01660 class H323NonStandardDataCapability : public H323DataCapability,
01661 public H323NonStandardCapabilityInfo
01662 {
01663 PCLASSINFO(H323NonStandardDataCapability, H323DataCapability);
01664
01665 public:
01670 H323NonStandardDataCapability(
01671 unsigned maxBitRate,
01672 const BYTE * dataBlock = NULL,
01673 PINDEX dataSize = 0,
01674 PINDEX comparisonOffset = 0,
01675 PINDEX comparisonLength = P_MAX_INDEX
01676 );
01677
01680 H323NonStandardDataCapability(
01681 unsigned maxBitRate,
01682 const PString & oid,
01683 const BYTE * dataBlock = NULL,
01684 PINDEX dataSize = 0,
01685 PINDEX comparisonOffset = 0,
01686 PINDEX comparisonLength = P_MAX_INDEX
01687 );
01688
01691 H323NonStandardDataCapability(
01692 unsigned maxBitRate,
01693 BYTE country,
01694 BYTE extension,
01695 WORD maufacturer,
01696 const BYTE * dataBlock = NULL,
01697 PINDEX dataSize = 0,
01698 PINDEX comparisonOffset = 0,
01699 PINDEX comparisonLength = P_MAX_INDEX
01700 );
01702
01708 Comparison Compare(const PObject & obj) const;
01710
01719 virtual unsigned GetSubType() const;
01721
01732 virtual BOOL OnSendingPDU(
01733 H245_DataApplicationCapability & pdu
01734 ) const;
01735
01744 virtual BOOL OnSendingPDU(
01745 H245_DataMode & pdu
01746 ) const;
01747
01756 virtual BOOL OnReceivedPDU(
01757 const H245_DataApplicationCapability & pdu
01758 );
01759
01762 virtual BOOL IsMatch(
01763 const PASN_Choice & subTypePDU
01764 ) const;
01766 };
01767
01768
01770
01771
01774 class H323_G711Capability : public H323AudioCapability
01775 {
01776 PCLASSINFO(H323_G711Capability, H323AudioCapability)
01777
01778 public:
01780 enum Mode {
01782 ALaw,
01784 muLaw
01785 };
01787 enum Speed {
01789 At64k,
01791 At56k
01792 };
01793
01798 H323_G711Capability(
01799 Mode mode = muLaw,
01800 Speed speed = At64k
01801 );
01803
01808 virtual PObject * Clone() const;
01810
01819 virtual unsigned GetSubType() const;
01820
01823 virtual PString GetFormatName() const;
01825
01826 protected:
01827 Mode mode;
01828 Speed speed;
01829 };
01830
01831 #if 0
01832
01835 class H323_G728Capability : public H323AudioCapability
01836 {
01837 PCLASSINFO(H323_G728Capability, H323AudioCapability)
01838
01839 public:
01844 H323_G728Capability();
01846
01851 virtual PObject * Clone() const;
01853
01859 virtual unsigned GetSubType() const;
01860
01863 virtual PString GetFormatName() const;
01865 };
01866
01867
01870 class H323_G729Capability : public H323AudioCapability
01871 {
01872 PCLASSINFO(H323_G729Capability, H323AudioCapability)
01873
01874 public:
01876 enum Mode {
01877 e_Normal,
01878 e_AnnexA,
01879 e_AnnexB,
01880 e_AnnexA_AnnexB
01881 };
01882
01887 H323_G729Capability(
01888 Mode mode
01889 );
01891
01896 virtual PObject * Clone() const;
01898
01904 virtual unsigned GetSubType() const;
01905
01908 virtual PString GetFormatName() const;
01910
01911 protected:
01912 Mode mode;
01913 };
01914
01915
01918 class H323_G7231Capability : public H323AudioCapability
01919 {
01920 PCLASSINFO(H323_G7231Capability, H323AudioCapability)
01921
01922 public:
01927 H323_G7231Capability(
01928 BOOL allowSIDFrames = TRUE
01929 );
01931
01936 virtual PObject * Clone() const;
01938
01944 virtual unsigned GetSubType() const;
01945
01948 virtual PString GetFormatName() const;
01950
01960 virtual BOOL OnSendingPDU(
01961 H245_AudioCapability & pdu,
01962 unsigned packetSize
01963 ) const;
01964
01972 virtual BOOL OnReceivedPDU(
01973 const H245_AudioCapability & pdu,
01974 unsigned & packetSize
01975 );
01977
01978 protected:
01979 BOOL allowSIDFrames;
01980 };
01981
01982
01985 class H323_GSM0610Capability : public H323AudioCapability
01986 {
01987 PCLASSINFO(H323_GSM0610Capability, H323AudioCapability)
01988
01989 public:
01994 H323_GSM0610Capability();
01996
02001 virtual PObject * Clone() const;
02003
02012 virtual unsigned GetSubType() const;
02013
02016 virtual PString GetFormatName() const;
02017
02026 virtual void SetTxFramesInPacket(
02027 unsigned frames
02028 );
02030
02040 virtual BOOL OnSendingPDU(
02041 H245_AudioCapability & pdu,
02042 unsigned packetSize
02043 ) const;
02044
02052 virtual BOOL OnReceivedPDU(
02053 const H245_AudioCapability & pdu,
02054 unsigned & packetSize
02055 );
02057 };
02058
02059 #endif
02060
02061
02063
02066 class H323_UserInputCapability : public H323Capability
02067 {
02068 PCLASSINFO(H323_UserInputCapability, H323Capability);
02069
02070 public:
02073 enum SubTypes {
02074 BasicString,
02075 IA5String,
02076 GeneralString,
02077 SignalToneH245,
02078 HookFlashH245,
02079 SignalToneRFC2833,
02080 NumSubTypes
02081 };
02082 static const char * GetSubTypeName(SubTypes subType);
02083 friend ostream & operator<<(ostream & strm, SubTypes subType) { return strm << GetSubTypeName(subType); }
02084
02089 H323_UserInputCapability(
02090 SubTypes subType
02091 );
02093
02098 virtual PObject * Clone() const;
02100
02108 virtual MainTypes GetMainType() const;
02109
02113 virtual unsigned GetSubType() const;
02114
02117 virtual PString GetFormatName() const;
02119
02127 virtual H323Channel * CreateChannel(
02128 H323Connection & connection,
02129 H323Channel::Directions dir,
02130 unsigned sessionID,
02131 const H245_H2250LogicalChannelParameters * param
02133 ) const;
02135
02145 virtual BOOL OnSendingPDU(
02146 H245_Capability & pdu
02147 ) const;
02148
02156 virtual BOOL OnSendingPDU(
02157 H245_DataType & pdu
02158 ) const;
02159
02168 virtual BOOL OnSendingPDU(
02169 H245_ModeElement & pdu
02170 ) const;
02171
02181 virtual BOOL OnReceivedPDU(
02182 const H245_Capability & pdu
02183 );
02184
02192 virtual BOOL OnReceivedPDU(
02193 const H245_DataType & pdu,
02194 BOOL receiver
02195 );
02196
02205 virtual BOOL IsUsable(
02206 const H323Connection & connection
02207 ) const;
02209
02210 static void AddAllCapabilities(
02211 H323Capabilities & capabilities,
02212 PINDEX descriptorNum,
02213 PINDEX simultaneous
02214 );
02215
02216 protected:
02217 SubTypes subType;
02218 };
02219
02220
02221
02223
02224 PLIST(H323CapabilitiesList, H323Capability);
02225
02226 PARRAY(H323CapabilitiesListArray, H323CapabilitiesList);
02227
02228 class H323SimultaneousCapabilities : public H323CapabilitiesListArray
02229 {
02230 PCLASSINFO(H323SimultaneousCapabilities, H323CapabilitiesListArray);
02231 public:
02232 BOOL SetSize(PINDEX newSize);
02233 };
02234
02235
02236 PARRAY(H323CapabilitiesSetArray, H323SimultaneousCapabilities);
02237
02238
02239 class H323CapabilitiesSet : public H323CapabilitiesSetArray
02240 {
02241 PCLASSINFO(H323CapabilitiesSet, H323CapabilitiesSetArray);
02242 public:
02244 BOOL SetSize(PINDEX newSize);
02245 };
02246
02247
02250 class H323Capabilities : public PObject
02251 {
02252 PCLASSINFO(H323Capabilities, PObject);
02253 public:
02258 H323Capabilities();
02259
02262 H323Capabilities(
02263 const H323Connection & connection,
02264 const H245_TerminalCapabilitySet & pdu
02265 );
02266
02271 H323Capabilities(
02272 const H323Capabilities & original
02273 );
02274
02279 H323Capabilities & operator=(
02280 const H323Capabilities & original
02281 );
02283
02288 void PrintOn(
02289 ostream & strm
02290 ) const;
02292
02297 PINDEX GetSize() const { return table.GetSize(); }
02298
02301 H323Capability & operator[](PINDEX i) const { return table[i]; }
02302
02323 PINDEX SetCapability(
02324 PINDEX descriptorNum,
02325 PINDEX simultaneous,
02326 H323Capability * cap
02327 );
02328
02331 PINDEX AddMediaFormat(
02332 PINDEX descriptorNum,
02333 PINDEX simultaneous,
02334 const OpalMediaFormat & mediaFormat
02335 );
02336
02341 PINDEX AddAllCapabilities(
02342 PINDEX descriptorNum,
02343 PINDEX simultaneous,
02344 const PString & name,
02345 BOOL exact = FALSE
02346 );
02347
02348
02349 PINDEX AddAllCapabilities(
02350 const H323EndPoint &,
02351 PINDEX descriptorNum,
02352 PINDEX simultaneous,
02353 const PString & name,
02354 BOOL exact = FALSE
02355 )
02356 { return AddAllCapabilities(descriptorNum, simultaneous, name, exact); }
02357
02366 void Add(
02367 H323Capability * capability
02368 );
02369
02376 H323Capability * Copy(
02377 const H323Capability & capability
02378 );
02379
02384 void Remove(
02385 H323Capability * capability
02386 );
02387
02392 void Remove(
02393 const PString & formatName
02394 );
02395
02399 void Remove(
02400 const PStringArray & formatNames
02401 );
02402
02405 void RemoveAll();
02406
02414 H323Capability * FindCapability(
02415 unsigned capabilityNumber
02416 ) const;
02417
02433 H323Capability * FindCapability(
02434 const PString & formatName,
02435 H323Capability::CapabilityDirection direction = H323Capability::e_Unknown,
02437 BOOL exact = FALSE
02438 ) const;
02439
02445 H323Capability * FindCapability(
02446 H323Capability::CapabilityDirection direction
02447 ) const;
02448
02456 H323Capability * FindCapability(
02457 const H323Capability & capability
02458 ) const;
02459
02465 H323Capability * FindCapability(
02466 const H245_Capability & cap
02467 ) const;
02468
02474 H323Capability * FindCapability(
02475 const H245_DataType & dataType
02476 ) const;
02477
02483 H323Capability * FindCapability(
02484 const H245_ModeElement & modeElement
02485 ) const;
02486
02492 H323Capability * FindCapability(
02493 H323Capability::MainTypes mainType,
02494 unsigned subType = UINT_MAX
02495 ) const;
02496
02499 void BuildPDU(
02500 const H323Connection & connection,
02501 H245_TerminalCapabilitySet & pdu
02502 ) const;
02503
02506 BOOL Merge(
02507 const H323Capabilities & newCaps
02508 );
02509
02516 void Reorder(
02517 const PStringArray & preferenceOrder
02518 );
02519
02522 BOOL IsAllowed(
02523 const H323Capability & capability
02524 );
02525
02528 BOOL IsAllowed(
02529 unsigned capabilityNumber
02530 );
02531
02534 BOOL IsAllowed(
02535 const H323Capability & capability1,
02536 const H323Capability & capability2
02537 );
02538
02541 BOOL IsAllowed(
02542 unsigned capabilityNumber1,
02543 unsigned capabilityNumber2
02544 );
02545
02548 OpalMediaFormatList GetMediaFormats() const;
02550
02551 protected:
02552 H323CapabilitiesList table;
02553 H323CapabilitiesSet set;
02554 };
02555
02556
02558
02559
02560
02561 typedef PFactory<H323Capability, std::string> H323CapabilityFactory;
02562
02563 #define H323_REGISTER_CAPABILITY(cls, capName) static H323CapabilityFactory::Worker<cls> cls##Factory(capName, true); \
02564
02565 #endif // __OPAL_H323CAPS_H
02566
02567