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 #if !defined(_H460_H)
00046 #define _H460_H
00047
00048
00049 #ifdef P_USE_PRAGMA
00050 #pragma interface
00051 #endif
00052
00053 #include "h225.h"
00054 #include "transports.h"
00055 #include "guid.h"
00056 #include <ptlib/pluginmgr.h>
00057 #include <ptclib/url.h>
00058
00059
00060 #ifdef _MSC_VER
00061 #pragma warning(disable:4100)
00062 #endif
00063
00065
00066 template<class H225>
00067 class H460 : public H225 {
00068 public:
00069
00075 virtual void OnReceivedPDU(
00076 const H225 &
00077 ) {};
00078
00083 virtual BOOL OnSendingPDU(
00084 H225 &
00085 ) const { return FALSE;};
00086
00087 protected:
00088
00089 };
00090
00091 class OpalOID : public PASN_ObjectId
00092 {
00093 public:
00094
00095 OpalOID();
00096
00097 OpalOID(
00098 const char * str
00099 );
00100
00101 OpalOID & operator+(const char *);
00102
00103 unsigned GetLastIdentifier() {
00104 return (*this)[GetSize()-1];
00105 }
00106 };
00107
00108
00109
00111
00121 class H460_FeatureID : public H460<H225_GenericIdentifier>
00122 {
00123
00124 public:
00125
00130 H460_FeatureID();
00131
00134 H460_FeatureID(unsigned ID);
00135
00138 H460_FeatureID(OpalOID ID);
00139
00142 H460_FeatureID(PString ID);
00143
00144 H460_FeatureID(H225_GenericIdentifier ID);
00146
00151 operator unsigned () const
00152 { return ((PASN_Integer *)choice)->GetValue(); };
00153
00156 operator OpalOID & ()
00157 { return (OpalOID &)*choice; };
00158
00161 operator PString () const
00162 { return ((H225_GloballyUniqueID *)choice)->AsString(); };
00163
00164
00165 PINLINE H460_FeatureID & operator=(unsigned ID);
00166
00167 PINLINE H460_FeatureID & operator=(OpalOID ID);
00168
00169 PINLINE H460_FeatureID & operator=(PString ID);
00170
00173 unsigned GetFeatureType() const { return GetTag(); };
00174
00175 PString IDString() const;
00177
00180 PObject * Clone() const;
00181
00182 PObject::Comparison Compare(const PObject & obj) const;
00184
00185 };
00186
00187
00189
00194 class H460_Feature;
00195 class H460_FeatureTable;
00196 class H460_FeatureContent : public H460<H225_Content>
00197 {
00198
00199 public:
00200
00205 H460_FeatureContent();
00206
00210 H460_FeatureContent(PASN_OctetString & param);
00211
00214 H460_FeatureContent(const PString & param);
00215
00218 H460_FeatureContent(PASN_BMPString & param);
00219
00222 H460_FeatureContent(BOOL param);
00223
00226 H460_FeatureContent(unsigned param, unsigned len);
00227
00230 H460_FeatureContent(const H460_FeatureID & id);
00231
00234 H460_FeatureContent(const H225_AliasAddress & add);
00235
00238 H460_FeatureContent(const PURL & add);
00239
00242 H460_FeatureContent(const H323TransportAddress & add);
00243
00246 H460_FeatureContent(const H460_FeatureTable & table);
00247
00250 H460_FeatureContent(const OpalGloballyUniqueID & guid);
00251
00254 H460_FeatureContent(H460_Feature * data);
00255
00258 H460_FeatureContent(const H225_Content & param);
00259
00261
00264 operator PASN_OctetString () const { return *((PASN_OctetString *)choice); };
00265 operator PString () const
00266 {
00267 switch (GetTag()) {
00268 case e_text:
00269 return ((PASN_IA5String &)*choice).GetValue();
00270 case e_transport:
00271 return H323TransportAddress(*(H225_TransportAddress *)choice);
00272 }
00273
00274 return PString();
00275 };
00276
00277 operator PASN_BMPString () const { return *(PASN_BMPString *)choice; };
00278 operator BOOL () 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 BOOL hasContent()
00361 { return (GetTag() == e_content); };
00362
00364
00365
00368 operator PASN_OctetString &();
00369 operator PString &();
00370 operator PASN_BMPString &();
00371 operator BOOL ();
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 BOOL & 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(H460_FeatureID & id, H460_FeatureContent & con);
00458
00462 H460_FeatureParameter & AddParameter(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 BOOL 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, H460_FeatureContent & con);
00513
00517 int ParameterCount() { return GetSize(); };
00518
00526 BOOL 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, 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(H460_FeatureID id, H460_FeatureContent & con);
00651
00654 H460_FeatureParameter & GetFeatureParameter(PINDEX id);
00655
00658 H460_FeatureParameter & GetFeatureParameter(const H460_FeatureID & id);
00659
00662 BOOL HasFeatureParameter(const H460_FeatureID & id);
00663
00666 BOOL 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 BOOL OnSendGatekeeperRequest(H225_FeatureDescriptor & pdu) { return FALSE; };
00762 virtual BOOL OnSendGatekeeperConfirm(H225_FeatureDescriptor & pdu) { return FALSE; };
00763 virtual BOOL OnSendGatekeeperReject(H225_FeatureDescriptor & pdu) { return FALSE; };
00764
00765 virtual void OnReceiveGatekeeperRequest(const H225_FeatureDescriptor & pdu) {};
00766 virtual void OnReceiveGatekeeperConfirm(const H225_FeatureDescriptor & pdu) {};
00767 virtual void OnReceiveGatekeeperReject(const H225_FeatureDescriptor & pdu) {};
00768
00769 virtual BOOL OnSendRegistrationRequest(H225_FeatureDescriptor & pdu) { return FALSE; };
00770 virtual BOOL OnSendRegistrationConfirm(H225_FeatureDescriptor & pdu) { return FALSE; };
00771 virtual BOOL OnSendRegistrationReject(H225_FeatureDescriptor & pdu) { return FALSE; };
00772
00773 virtual void OnReceiveRegistrationRequest(const H225_FeatureDescriptor & pdu) {};
00774 virtual void OnReceiveRegistrationConfirm(const H225_FeatureDescriptor & pdu) {};
00775 virtual void OnReceiveRegistrationReject(const H225_FeatureDescriptor & pdu) {};
00776
00777 virtual BOOL OnSendAdmissionRequest(H225_FeatureDescriptor & pdu) { return FALSE; };
00778 virtual BOOL OnSendAdmissionConfirm(H225_FeatureDescriptor & pdu) { return FALSE; };
00779 virtual BOOL OnSendAdmissionReject(H225_FeatureDescriptor & pdu) { return FALSE; };
00780
00781 virtual void OnReceiveAdmissionRequest(const H225_FeatureDescriptor & pdu) {};
00782 virtual void OnReceiveAdmissionConfirm(const H225_FeatureDescriptor & pdu) {};
00783 virtual void OnReceiveAdmissionReject(const H225_FeatureDescriptor & pdu) {};
00784
00785 virtual BOOL OnSendLocationRequest(H225_FeatureDescriptor & pdu) { return FALSE; };
00786 virtual BOOL OnSendLocationConfirm(H225_FeatureDescriptor & pdu) { return FALSE; };
00787 virtual BOOL OnSendLocationReject(H225_FeatureDescriptor & pdu) { return FALSE; };
00788
00789 virtual void OnReceiveLocationRequest(const H225_FeatureDescriptor & pdu) {};
00790 virtual void OnReceiveLocationConfirm(const H225_FeatureDescriptor & pdu) {};
00791 virtual void OnReceiveLocationReject(const H225_FeatureDescriptor & pdu) {};
00792
00793 virtual BOOL OnSendServiceControlIndication(H225_FeatureDescriptor & pdu) { return FALSE; };
00794 virtual BOOL OnSendServiceControlResponse(H225_FeatureDescriptor & pdu) { return FALSE; };
00795
00796 virtual void OnReceiveServiceControlIndication(const H225_FeatureDescriptor & pdu) {};
00797 virtual void OnReceiveServiceControlResponse(const H225_FeatureDescriptor & pdu) {};
00798
00799 virtual BOOL OnSendNonStandardMessage(H225_FeatureDescriptor & pdu) { return FALSE; };
00800 virtual void OnReceiveNonStandardMessage(const H225_FeatureDescriptor & pdu) {};
00801
00802 virtual BOOL OnSendUnregistrationRequest(H225_FeatureDescriptor & pdu) { return FALSE; };
00803 virtual void OnReceiveUnregistrationRequest(const H225_FeatureDescriptor & pdu) {};
00804
00805 virtual BOOL OnSendEndpoint(H225_FeatureDescriptor & pdu) { return FALSE; };
00806 virtual void OnReceiveEndpoint(const H225_FeatureDescriptor & pdu) {};
00807
00808 virtual BOOL OnSendInfoRequestMessage(H225_FeatureDescriptor & pdu) { return FALSE; };
00809 virtual void OnReceiveInfoRequestMessage(const H225_FeatureDescriptor & pdu) {};
00810
00811 virtual BOOL OnSendInfoRequestResponseMessage(H225_FeatureDescriptor & pdu) { return FALSE; };
00812 virtual void OnReceiveInfoRequestResponseMessage(const H225_FeatureDescriptor & pdu) {};
00813
00814 virtual BOOL OnSendDisengagementRequestMessage(H225_FeatureDescriptor & pdu) { return FALSE; };
00815 virtual void OnReceiveDisengagementRequestMessage(const H225_FeatureDescriptor & pdu) {};
00816
00817 virtual BOOL OnSendDisengagementConfirmMessage(H225_FeatureDescriptor & pdu) { return FALSE; };
00818 virtual void OnReceiveDisengagementConfirmMessage(const H225_FeatureDescriptor & pdu) {};
00820
00823
00824 virtual BOOL OnSendSetup_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00825 virtual void OnReceiveSetup_UUIE(const H225_FeatureDescriptor & pdu) {};
00826
00827 virtual BOOL OnSendAlerting_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00828 virtual void OnReceiveAlerting_UUIE(const H225_FeatureDescriptor & pdu) {};
00829
00830 virtual BOOL OnSendCallProceeding_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00831 virtual void OnReceiveCallProceeding_UUIE(const H225_FeatureDescriptor & pdu) {};
00832
00833 virtual BOOL OnSendCallConnect_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00834 virtual void OnReceiveCallConnect_UUIE(const H225_FeatureDescriptor & pdu) {};
00835
00836 virtual BOOL OnSendFacility_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00837 virtual void OnReceiveFacility_UUIE(const H225_FeatureDescriptor & pdu) {};
00838
00839 virtual BOOL OnSendReleaseComplete_UUIE(H225_FeatureDescriptor & pdu) { return FALSE; };
00840 virtual void OnReceiveReleaseComplete_UUIE(const H225_FeatureDescriptor & pdu) {};
00841
00842 virtual BOOL OnSendUnAllocatedPDU(H225_FeatureDescriptor & pdu) { return FALSE; };
00843 virtual void OnReceivedUnAllocatedPDU(const H225_FeatureDescriptor & pdu) {};
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, H460_FeatureContent & con);
00881
00884 void Remove(unsigned id);
00885
00888 void Replace(unsigned id, H460_FeatureContent & con);
00889
00892 BOOL 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(PString id, H460_FeatureContent & con);
00924
00927 void Remove(PString id);
00928
00931 void Replace(PString id, H460_FeatureContent & con);
00932
00935 BOOL 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, H460_FeatureContent & con);
00970
00973 void Remove(const PString & id);
00974
00977 void Replace(const PString & id, H460_FeatureContent & con);
00978
00981 BOOL HasParameter(OpalOID id);
00982
00985 BOOL 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 & generic);
01037
01040 H460_FeatureSet & DeriveNewFeatureSet();
01041
01044 virtual BOOL LoadFeatureSet(int inst = H460_Feature::FeatureBase,
01045 H323Connection * con = NULL);
01046
01051 BOOL ProcessFirstPDU(const H225_FeatureSet & fs);
01052
01055 virtual BOOL CreateFeatureSet(const H225_FeatureSet & fs);
01056
01059 virtual BOOL LoadFeature(const PString & featid);
01060
01063 BOOL AddFeature(H460_Feature * Nfeat);
01064
01067 void RemoveFeature(H460_FeatureID id);
01068
01071 H460_Feature * GetFeature(const H460_FeatureID & id);
01072
01075 BOOL HasFeature(const H460_FeatureID & feat);
01076
01080 void ReceiveFeature(unsigned id, const H225_FeatureSet & Message);
01081
01085 BOOL 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 BOOL 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 BOOL 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 PStringList 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 // !defined(_H460_H)
01148