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 #ifndef OPAL_H460_H4601_H
00044 #define OPAL_H460_H4601_H
00045
00046 #ifdef P_USE_PRAGMA
00047 #pragma interface
00048 #endif
00049
00050 #include <opal/buildopts.h>
00051
00052 #if OPAL_H460
00053
00054 #include <asn/h225.h>
00055 #include <h323/transaddr.h>
00056 #include <opal/guid.h>
00057 #include <ptlib/pluginmgr.h>
00058 #include <ptclib/url.h>
00059
00060
00061 #ifdef _MSC_VER
00062 #pragma warning(disable:4100)
00063 #endif
00064
00066
00067 template<class H225>
00068 class H460 : public H225 {
00069 public:
00070
00076 virtual void OnReceivedPDU(
00077 const H225 &
00078 ) {};
00079
00084 virtual PBoolean OnSendingPDU(
00085 H225 &
00086 ) const { return FALSE;};
00087
00088 protected:
00089
00090 };
00091
00092 class OpalOID : public PASN_ObjectId
00093 {
00094 public:
00095 OpalOID();
00096 OpalOID(
00097 const char * str
00098 );
00099
00100 OpalOID & operator+(const char *);
00101
00102 unsigned GetLastIdentifier()
00103 { return (*this)[GetSize()-1]; }
00104 };
00105
00106
00107
00109
00119 class H460_FeatureID : public H460<H225_GenericIdentifier>
00120 {
00121
00122 public:
00123
00128 H460_FeatureID();
00129
00132 H460_FeatureID(unsigned ID);
00133
00136 H460_FeatureID(OpalOID ID);
00137
00140 H460_FeatureID(PString ID);
00141
00142 H460_FeatureID(H225_GenericIdentifier ID);
00144
00149 operator unsigned () const
00150 { return ((PASN_Integer *)choice)->GetValue(); };
00151
00154 operator OpalOID & ()
00155 { return (OpalOID &)*choice; };
00156
00159 operator PString () const
00160 { return ((H225_GloballyUniqueID *)choice)->AsString(); };
00161
00162
00163 PINLINE H460_FeatureID & operator=(unsigned ID);
00164
00165 PINLINE H460_FeatureID & operator=(OpalOID ID);
00166
00167 PINLINE H460_FeatureID & operator=(PString ID);
00168
00171 unsigned GetFeatureType() const { return GetTag(); };
00172
00173 PString IDString() const;
00175
00178 PObject * Clone() const;
00179
00180 PObject::Comparison Compare(const PObject & obj) const;
00182
00183 };
00184
00185
00187
00192 class H460_Feature;
00193 class H460_FeatureTable;
00194 class H460_FeatureContent : public H460<H225_Content>
00195 {
00196
00197 public:
00198
00203 H460_FeatureContent();
00204
00208 H460_FeatureContent(PASN_OctetString & param);
00209
00212 H460_FeatureContent(const PString & param);
00213
00216 H460_FeatureContent(PASN_BMPString & param);
00217
00220 H460_FeatureContent(PBoolean param);
00221
00224 H460_FeatureContent(unsigned param, unsigned len);
00225
00228 H460_FeatureContent(const H460_FeatureID & id);
00229
00232 H460_FeatureContent(const H225_AliasAddress & add);
00233
00236 H460_FeatureContent(const PURL & add);
00237
00240 H460_FeatureContent(const H323TransportAddress & add);
00241
00244 H460_FeatureContent(const H460_FeatureTable & table);
00245
00248 H460_FeatureContent(const OpalGloballyUniqueID & guid);
00249
00252 H460_FeatureContent(H460_Feature * data);
00253
00256 H460_FeatureContent(const H225_Content & param);
00257
00259
00262 operator PASN_OctetString () const { return *((PASN_OctetString *)choice); };
00263 operator PString () const
00264 {
00265 switch (GetTag()) {
00266 case e_text:
00267 return ((PASN_IA5String &)*choice).GetValue();
00268 case e_transport:
00269 return H323TransportAddress(*(H225_TransportAddress *)choice);
00270 default:
00271 break;
00272 }
00273
00274 return PString();
00275 };
00276
00277 operator PASN_BMPString () const { return *(PASN_BMPString *)choice; };
00278 operator PBoolean () const { return *(PASN_Boolean *)choice; };
00279
00280 operator unsigned () const
00281 {
00282 switch (GetTag()) {
00283 case e_number8:
00284 case e_number16:
00285 case e_number32:
00286 return *(PASN_Integer*)choice;
00287 default:
00288 return 0;
00289 }
00290 }
00291
00292 operator H460_FeatureID () const { return *(H225_GenericIdentifier *)choice; };
00293 operator H225_AliasAddress () const { return *(H225_AliasAddress *)choice; };
00294 operator H323TransportAddress () const { return H323TransportAddress(*(H225_TransportAddress *)choice); };
00295 operator H460_FeatureTable *() { return (H460_FeatureTable *)choice; };
00296 operator H460_Feature *() { return (H460_Feature *)choice; };
00297
00299 };
00300
00302
00307 class H460_Feature;
00308 class H460_FeatureParameter : public H460<H225_EnumeratedParameter>
00309 {
00310
00311 public:
00312
00317 H460_FeatureParameter();
00318
00321 H460_FeatureParameter(unsigned Identifier);
00322
00325 H460_FeatureParameter(const PString & Identifier);
00326
00329 H460_FeatureParameter(const OpalOID & Identifier);
00330
00333 H460_FeatureParameter(const H225_EnumeratedParameter & param);
00334
00337 H460_FeatureParameter(const H460_FeatureID & ID);
00339
00344 const H460_FeatureID ID() { return m_id; };
00345
00348 void addContent(const H460_FeatureContent & con )
00349 { IncludeOptionalField(e_content); m_content = con; };
00350
00353 void replaceContent(const H460_FeatureContent & con )
00354 { if (hasContent())
00355 delete &m_content;
00356 m_content = con; };
00357
00360 PBoolean hasContent()
00361 { return (GetTag() == e_content); };
00362
00364
00365
00368 operator PASN_OctetString &();
00369 operator PString &();
00370 operator PASN_BMPString &();
00371 operator PBoolean ();
00372 operator unsigned ();
00373 operator H460_FeatureID &();
00374 operator H225_AliasAddress &();
00375 operator H323TransportAddress ();
00376 operator H225_ArrayOf_EnumeratedParameter &();
00377 operator PURL &();
00378 operator OpalGloballyUniqueID ();
00379
00380
00381 H460_FeatureContent operator=(
00382 const PASN_OctetString & value
00383 );
00384
00385 H460_FeatureContent operator=(
00386 const PString & value
00387 );
00388
00389 H460_FeatureContent operator=(
00390 const PASN_BMPString & value
00391 );
00392
00393 H460_FeatureContent operator=(
00394 const PBoolean & value
00395 );
00396
00397 H460_FeatureContent operator=(
00398 const unsigned & value
00399 );
00400
00401 H460_FeatureContent operator=(
00402 const H460_FeatureID & value
00403 );
00404
00405 H460_FeatureContent operator=(
00406 const H225_AliasAddress & value
00407 );
00408
00409 H460_FeatureContent operator=(
00410 const H323TransportAddress & value
00411 );
00412
00413 H460_FeatureContent operator=(
00414 const H460_FeatureTable & value
00415 );
00416
00417 H460_FeatureContent operator=(
00418 H460_Feature * value
00419 );
00420
00421 H460_FeatureContent operator=(
00422 const OpalGloballyUniqueID & value
00423 );
00424
00425
00426 };
00427
00429
00434 class H460_FeatureTable : public H460<H225_ArrayOf_EnumeratedParameter>
00435
00436 {
00437 public:
00438
00443 H460_FeatureTable();
00444
00447 H460_FeatureTable(const H225_ArrayOf_EnumeratedParameter & Xparams);
00449
00452
00457 H460_FeatureParameter & AddParameter(const H460_FeatureID & id, const H460_FeatureContent & con);
00458
00462 H460_FeatureParameter & AddParameter(const H460_FeatureID & id);
00463
00467 void AddParameter(H225_EnumeratedParameter & Xparam);
00468
00474 H460_FeatureParameter & GetParameter(PINDEX id);
00475
00482 H460_FeatureParameter & GetParameter(const H460_FeatureID & id);
00483
00488 PINDEX GetParameterIndex(const H460_FeatureID & id);
00489
00494 PBoolean HasParameter(const H460_FeatureID & id);
00495
00500 void RemoveParameter(PINDEX id);
00501
00506 void RemoveParameter(const H460_FeatureID & id);
00507
00512 void ReplaceParameter(const H460_FeatureID & id, const H460_FeatureContent & con);
00513
00517 int ParameterCount() { return GetSize(); };
00518
00526 PBoolean ParameterIsUnique(const H460_FeatureID & id);
00527
00530 inline H460_FeatureParameter & operator[](
00531 PINDEX id
00532 ) const { return operator[](id); };
00533
00536 H460_FeatureParameter & operator[](
00537 PINDEX id
00538 );
00540
00541 };
00542
00544
00548 class H323EndPoint;
00549 class H323Connection;
00550 class H460_Feature : public H460<H225_FeatureDescriptor>
00551 {
00552 public:
00555
00558 H460_Feature();
00559
00562 H460_Feature(unsigned Identifier);
00563
00566 H460_Feature(PString Identifier);
00567
00570 H460_Feature(OpalOID Indentifier);
00571
00574 H460_Feature(const H225_FeatureDescriptor & descriptor);
00575
00577
00580
00581 enum {
00582 FeatureNeeded = 1,
00583 FeatureDesired,
00584 FeatureSupported
00585 } FeatureCategory;
00586
00587
00588 enum {
00589 FeatureBase =4,
00590 FeatureBaseAll =5,
00591 FeatureBaseRas =6,
00592 FeatureBaseSignal=7,
00593 FeatureRas =8,
00594 FeatureSignal =16
00595 } FeatureInstance;
00596
00598
00603 operator unsigned () const { return (H460_FeatureID)m_id; };
00604
00607
00608
00611 operator PString () const { return (H460_FeatureID)m_id; };
00612
00615 H460_FeatureID GetFeatureID() { return m_id; };
00616
00619 void SetFeatureID(const H460_FeatureID & id) { m_id = id; };
00620
00623 PString GetFeatureIDAsString();
00624
00627 unsigned GetFeatureType() { return ((H460_FeatureID)m_id).GetFeatureType(); };
00629
00634 virtual H460_FeatureParameter & AddParameter(H460_FeatureID * id, const H460_FeatureContent & con);
00635
00638 virtual H460_FeatureParameter & AddParameter(H460_FeatureID * id);
00639
00642 virtual void AddParameter(H460_FeatureParameter * param);
00643
00646 virtual void RemoveParameter(PINDEX id);
00647
00650 virtual void ReplaceParameter(const H460_FeatureID id, const H460_FeatureContent & con);
00651
00654 H460_FeatureParameter & GetFeatureParameter(PINDEX id);
00655
00658 H460_FeatureParameter & GetFeatureParameter(const H460_FeatureID & id);
00659
00662 PBoolean HasFeatureParameter(const H460_FeatureID & id);
00663
00666 PBoolean Contains(const H460_FeatureID & id);
00667
00670 H460_FeatureParameter & Value(const H460_FeatureID & id);
00671
00674 inline H460_FeatureParameter & operator()(
00675 PINDEX id
00676 ) const { return operator()(id); };
00677
00678 H460_FeatureParameter & operator()(
00679 PINDEX id
00680 );
00681
00684 inline H460_FeatureParameter & operator[](
00685 const H460_FeatureID & id
00686 ) const { return operator()(id); };
00687
00688 H460_FeatureParameter & operator()(
00689 const H460_FeatureID & id
00690 );
00691
00694 int GetParameterCount()
00695 { return CurrentTable->ParameterCount(); };
00696
00699 H460_FeatureTable & GetCurrentTable();
00700
00703 void SetCurrentTable(H460_FeatureTable & table);
00704
00707 void SetCurrentTable(H460_FeatureParameter & param);
00708
00711 void SetDefaultTable();
00712
00714
00719 static PStringList GetFeatureNames(PPluginManager * pluginMgr = NULL);
00720
00723 static PStringList GetFeatureFriendlyNames(const PString & feature, PPluginManager * pluginMgr = NULL);
00724
00727 static H460_Feature * CreateFeature(const PString & featurename,
00728 int FeatureType = FeatureBase,
00729 PPluginManager * pluginMgr = NULL
00730 );
00733 static PStringList GetFeatureName() { return PStringList("empty"); };
00734
00737 static PStringList GetFeatureFriendlyName() { return PStringList("empty"); };
00738
00742 static int GetPurpose() { return FeatureBase; };
00743
00746 virtual void AttachEndPoint(H323EndPoint * _ep);
00747
00750 virtual void AttachConnection(H323Connection * _con);
00751
00753
00756
00757
00758
00759
00760
00761 virtual PBoolean OnSendGatekeeperRequest(H225_FeatureDescriptor & ) { return FALSE; };
00762 virtual PBoolean OnSendGatekeeperConfirm(H225_FeatureDescriptor & ) { return FALSE; };
00763 virtual PBoolean OnSendGatekeeperReject(H225_FeatureDescriptor & ) { return FALSE; };
00764
00765 virtual void OnReceiveGatekeeperRequest(const H225_FeatureDescriptor & ) {};
00766 virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & ) {};
00767 virtual void OnReceiveGatekeeperReject(const H225_FeatureDescriptor & ) {};
00768
00769 virtual PBoolean OnSendRegistrationRequest(H225_FeatureDescriptor & ) { return FALSE; };
00770 virtual PBoolean OnSendRegistrationConfirm(H225_FeatureDescriptor & ) { return FALSE; };
00771 virtual PBoolean OnSendRegistrationReject(H225_FeatureDescriptor & ) { return FALSE; };
00772
00773 virtual void OnReceiveRegistrationRequest(const H225_FeatureDescriptor & ) {};
00774 virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & ) {};
00775 virtual void OnReceiveRegistrationReject(const H225_FeatureDescriptor & ) {};
00776
00777 virtual PBoolean OnSendAdmissionRequest(H225_FeatureDescriptor & ) { return FALSE; };
00778 virtual PBoolean OnSendAdmissionConfirm(H225_FeatureDescriptor & ) { return FALSE; };
00779 virtual PBoolean OnSendAdmissionReject(H225_FeatureDescriptor & ) { return FALSE; };
00780
00781 virtual void OnReceiveAdmissionRequest(const H225_FeatureDescriptor & ) {};
00782 virtual void OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & ) {};
00783 virtual void OnReceiveAdmissionReject(const H225_FeatureDescriptor & ) {};
00784
00785 virtual PBoolean OnSendLocationRequest(H225_FeatureDescriptor & ) { return FALSE; };
00786 virtual PBoolean OnSendLocationConfirm(H225_FeatureDescriptor & ) { return FALSE; };
00787 virtual PBoolean OnSendLocationReject(H225_FeatureDescriptor & ) { return FALSE; };
00788
00789 virtual void OnReceiveLocationRequest(const H225_FeatureDescriptor & ) {};
00790 virtual void OnReceiveLocationConfirm(const H225_FeatureDescriptor & ) {};
00791 virtual void OnReceiveLocationReject(const H225_FeatureDescriptor & ) {};
00792
00793 virtual PBoolean OnSendServiceControlIndication(H225_FeatureDescriptor & ) { return FALSE; };
00794 virtual PBoolean OnSendServiceControlResponse(H225_FeatureDescriptor & ) { return FALSE; };
00795
00796 virtual void OnReceiveServiceControlIndication(const H225_FeatureDescriptor & ) {};
00797 virtual void OnReceiveServiceControlResponse(const H225_FeatureDescriptor & ) {};
00798
00799 virtual PBoolean OnSendNonStandardMessage(H225_FeatureDescriptor & ) { return FALSE; };
00800 virtual void OnReceiveNonStandardMessage(const H225_FeatureDescriptor & ) {};
00801
00802 virtual PBoolean OnSendUnregistrationRequest(H225_FeatureDescriptor & ) { return FALSE; };
00803 virtual void OnReceiveUnregistrationRequest(const H225_FeatureDescriptor & ) {};
00804
00805 virtual PBoolean OnSendEndpoint(H225_FeatureDescriptor & ) { return FALSE; };
00806 virtual void OnReceiveEndpoint(const H225_FeatureDescriptor & ) {};
00807
00808 virtual PBoolean OnSendInfoRequestMessage(H225_FeatureDescriptor & ) { return FALSE; };
00809 virtual void OnReceiveInfoRequestMessage(const H225_FeatureDescriptor & ) {};
00810
00811 virtual PBoolean OnSendInfoRequestResponseMessage(H225_FeatureDescriptor & ) { return FALSE; };
00812 virtual void OnReceiveInfoRequestResponseMessage(const H225_FeatureDescriptor & ) {};
00813
00814 virtual PBoolean OnSendDisengagementRequestMessage(H225_FeatureDescriptor & ) { return FALSE; };
00815 virtual void OnReceiveDisengagementRequestMessage(const H225_FeatureDescriptor & ) {};
00816
00817 virtual PBoolean OnSendDisengagementConfirmMessage(H225_FeatureDescriptor & ) { return FALSE; };
00818 virtual void OnReceiveDisengagementConfirmMessage(const H225_FeatureDescriptor & ) {};
00820
00823
00824 virtual PBoolean OnSendSetup_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00825 virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & ) {};
00826
00827 virtual PBoolean OnSendAlerting_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00828 virtual void OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & ) {};
00829
00830 virtual PBoolean OnSendCallProceeding_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00831 virtual void OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & ) {};
00832
00833 virtual PBoolean OnSendCallConnect_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00834 virtual void OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & ) {};
00835
00836 virtual PBoolean OnSendFacility_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00837 virtual void OnReceiveFacility_UUIE(const H225_FeatureDescriptor & ) {};
00838
00839 virtual PBoolean OnSendReleaseComplete_UUIE(H225_FeatureDescriptor & ) { return FALSE; };
00840 virtual void OnReceiveReleaseComplete_UUIE(const H225_FeatureDescriptor & ) {};
00841
00842 virtual PBoolean OnSendUnAllocatedPDU(H225_FeatureDescriptor & ) { return FALSE; };
00843 virtual void OnReceivedUnAllocatedPDU(const H225_FeatureDescriptor & ) {};
00844
00846
00849
00850
00851
00852
00853
00855
00856 protected:
00857 H460_FeatureTable * CurrentTable;
00858 H323EndPoint * ep;
00859 H323Connection * con;
00860 };
00861
00862 class H460_FeatureStd : public H460_Feature
00863 {
00864 PCLASSINFO(H460_FeatureStd, H460_Feature);
00865 public:
00866
00869 H460_FeatureStd() {};
00870
00873 H460_FeatureStd(unsigned Identifier);
00875
00880 H460_FeatureParameter & Add(unsigned id, const H460_FeatureContent & con);
00881
00884 void Remove(unsigned id);
00885
00888 void Replace(unsigned id,const H460_FeatureContent & con);
00889
00892 PBoolean HasParameter(unsigned id);
00893
00896 H460_FeatureParameter & GetParameter(unsigned id);
00898
00901 inline H460_FeatureParameter & operator[] (
00902 unsigned id
00903 ) { return GetParameter(id); };
00904
00905 };
00906
00907 class H460_FeatureNonStd : public H460_Feature
00908 {
00909 PCLASSINFO(H460_FeatureNonStd, H460_Feature);
00910 public:
00911
00916 H460_FeatureNonStd(PString Identifier);
00918
00923 H460_FeatureParameter & Add(const PString id, const H460_FeatureContent & con);
00924
00927 void Remove(const PString & id);
00928
00931 void Replace( const PString & id, const H460_FeatureContent & con);
00932
00935 PBoolean HasParameter(PString id);
00936
00938
00941 inline H460_FeatureParameter & operator[](
00942 PString id
00943 ) const { return operator[](id); };
00944
00947 H460_FeatureParameter & operator[](
00948 PString id
00949 );
00950
00951 };
00952
00953 class H460_FeatureOID : public H460_Feature
00954 {
00955 PCLASSINFO(H460_FeatureOID, H460_Feature);
00956 public:
00957
00962 H460_FeatureOID(OpalOID Identifier);
00964
00969 H460_FeatureParameter & Add(const PString & id, const H460_FeatureContent & con);
00970
00973 void Remove(const PString & id);
00974
00977 void Replace(const PString & id, const H460_FeatureContent & con);
00978
00981 PBoolean HasParameter(OpalOID id);
00982
00985 PBoolean Contains(const PString & id);
00986
00989 H460_FeatureParameter & Value(const PString & id);
00990
00992
00995 inline H460_FeatureParameter & operator[](
00996 OpalOID id
00997 ) const { return operator[](id); };
00998
01001 H460_FeatureParameter & operator[](
01002 OpalOID id
01003 );
01004
01005 protected:
01006 PString GetBase();
01007
01008 };
01010
01011
01012 PDICTIONARY(H460_Features, H460_FeatureID , H460_Feature);
01013
01015
01016 class H323EndPoint;
01017 class H460_FeatureSet : public PObject
01018 {
01019 PCLASSINFO(H460_FeatureSet, PObject);
01020 public:
01021
01024 H460_FeatureSet();
01025
01028 H460_FeatureSet(H460_FeatureSet * _base);
01029
01032 H460_FeatureSet(const H225_FeatureSet & fs);
01033
01036 H460_FeatureSet(const H225_ArrayOf_GenericData & genericData);
01037
01040 H460_FeatureSet * DeriveNewFeatureSet();
01041
01044 virtual PBoolean LoadFeatureSet(int inst = H460_Feature::FeatureBase,
01045 H323Connection * con = NULL);
01046
01051 PBoolean ProcessFirstPDU(const H225_FeatureSet & fs);
01052
01055 virtual PBoolean CreateFeatureSet(const H225_FeatureSet & fs);
01056
01059 virtual PBoolean LoadFeature(const PString & featid);
01060
01063 PBoolean AddFeature(H460_Feature * Nfeat);
01064
01067 void RemoveFeature(H460_FeatureID id);
01068
01071 H460_Feature * GetFeature(const H460_FeatureID & id);
01072
01075 PBoolean HasFeature(const H460_FeatureID & feat);
01076
01080 void ReceiveFeature(unsigned id, const H225_FeatureSet & Message);
01081
01085 PBoolean SendFeature(unsigned id, H225_FeatureSet & Message);
01086
01089 virtual void AttachEndPoint(H323EndPoint * _ep);
01090
01093 virtual void AttachBaseFeatureSet(H460_FeatureSet * _baseSet);
01094
01097 H323EndPoint * GetEndPoint() { return ep; };
01098
01099 protected:
01100
01101 PBoolean CreateFeatureSetPDU(H225_FeatureSet & fs, unsigned MessageID);
01102
01103 void ReadFeatureSetPDU(const H225_FeatureSet & fs, unsigned MessageID);
01104
01105 H460_FeatureID GetFeatureIDPDU(H225_FeatureDescriptor & pdu);
01106
01107 PBoolean CreateFeaturePDU(H460_Feature & Feat, H225_FeatureDescriptor & pdu, unsigned MessageID);
01108 void ReadFeaturePDU(H460_Feature & Feat, const H225_FeatureDescriptor & pdu, unsigned MessageID);
01109
01110 PString PTracePDU(PINDEX id) const;
01111
01112 H460_Features Features;
01113 H323EndPoint * ep;
01114 H460_FeatureSet * baseSet;
01115
01116 };
01117
01119
01120 template <class className> class H460PluginServiceDescriptor : public PDevicePluginServiceDescriptor
01121 {
01122 public:
01123 virtual PObject * CreateInstance(int ) const { return new className; }
01124 virtual PStringArray GetDeviceNames(int ) const { return className::GetFeatureFriendlyName(); }
01125 virtual bool ValidateDeviceName(const PString & deviceName, int userData) const
01126 {
01127 PStringList devices = className::GetFeatureName();
01128 if ((deviceName == devices[0]) &&
01129 (className::GetPurpose() >= userData) &&
01130 (className::GetPurpose() < userData*2)) {
01131
01132 return TRUE;
01133 } else
01134 return FALSE;
01135 }
01136 };
01137
01138 #define H460_FEATURE(name) \
01139 static H460PluginServiceDescriptor<H460_Feature##name> H460_Feature##name##_descriptor; \
01140 PCREATE_PLUGIN(H460_Feature##name##, H460_Feature, &H460_Feature##name##_descriptor); \
01141
01142
01143 #ifdef _MSC_VER
01144 #pragma warning(disable:4100)
01145 #endif
01146
01147 #endif // OPAL_H460
01148
01149 #endif // OPAL_H460_H4601_H