// winsip.idl // cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("// winsip.idl") cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("// (C) Copyright 2000-2001 Microsoft Corporation. All Rights Reserved.") cpp_quote("//") cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF") cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO") cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A") cpp_quote("// PARTICULAR PURPOSE.") cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("") cpp_quote("#include ") import "unknwn.idl"; import "ocidl.idl"; import "wbemcli.idl"; // // STRING is the struct defined in ntdef.h // cpp_quote("#ifndef _NTDEF_") typedef char * PCHAR; typedef BYTE * PBYTE; typedef struct _STRING { USHORT Length; USHORT MaximumLength; [size_is(MaximumLength), length_is(Length) ] PCHAR Buffer; } STRING; typedef STRING *PSTRING; cpp_quote("#endif // _NTDEF_") typedef ULONG_PTR SIP_HANDLE; typedef SIP_HANDLE* PSIP_HANDLE; // SIP header types %11 typedef DWORD SIPHeaderID; const SIPHeaderID SIP_HID_UNKNOWN = 0; // 1 or more const SIPHeaderID SIP_HID_VIA = 1; // 1 or more headers const SIPHeaderID SIP_HID_CONTACT = 2; // 1+ const SIPHeaderID SIP_HID_ROUTE = 3; // 1+ const SIPHeaderID SIP_HID_TO = 4; const SIPHeaderID SIP_HID_FROM = 5; const SIPHeaderID SIP_HID_CALL_ID = 6; const SIPHeaderID SIP_HID_CSEQ = 7; const SIPHeaderID SIP_HID_CONTENT_LENGTH = 8; const SIPHeaderID SIP_HID_RECORD_ROUTE = 9; const SIPHeaderID SIP_HID_PROXY_AUTHORIZATION = 10; const SIPHeaderID SIP_HID_AUTHENTICATION_INFO = 14; const SIPHeaderID SIP_HID_AUTHORIZATION = 15; const SIPHeaderID SIP_HID_EVENT = 16; const SIPHeaderID SIP_HID_EXPIRES = 17; const SIPHeaderID SIP_HID_MAX_FORWARDS = 18; const SIPHeaderID SIP_HID_PROXY_AUTHENTICATE = 19; const SIPHeaderID SIP_HID_PROXY_AUTHENTICATION_INFO = 20; const SIPHeaderID SIP_HID_SOAPACTION = 24; const SIPHeaderID SIP_HID_ACCEPT = 25; const SIPHeaderID SIP_HID_ACCEPT_CONTACT = 26; const SIPHeaderID SIP_HID_ACCEPT_ENCODING = 27; const SIPHeaderID SIP_HID_ACCEPT_LANGUAGE = 28; const SIPHeaderID SIP_HID_ALLOW = 29; const SIPHeaderID SIP_HID_ALLOW_EVENTS = 30; const SIPHeaderID SIP_HID_CONTENT_DISPOSITION = 31; const SIPHeaderID SIP_HID_CONTENT_ENCODING = 32; const SIPHeaderID SIP_HID_CONTENT_FUNCTION = 33; const SIPHeaderID SIP_HID_CONTENT_LANGUAGE = 34; const SIPHeaderID SIP_HID_CONTENT_KEY = 35; const SIPHeaderID SIP_HID_CONTENT_TYPE = 36; const SIPHeaderID SIP_HID_DATE = 37; const SIPHeaderID SIP_HID_ENCRYPTION = 38; const SIPHeaderID SIP_HID_HIDE = 39; const SIPHeaderID SIP_HID_IN_REPLY_TO = 40; const SIPHeaderID SIP_HID_MIME_VERSION = 41; const SIPHeaderID SIP_HID_ORGANIZATION = 42; const SIPHeaderID SIP_HID_PRIORITY = 43; const SIPHeaderID SIP_HID_PROXY_REQUIRE = 44; const SIPHeaderID SIP_HID_PROXY_TYPE = 45; const SIPHeaderID SIP_HID_REJECT_CONTACT = 46; const SIPHeaderID SIP_HID_REQUEST_DISPOSITION = 47; const SIPHeaderID SIP_HID_REQUIRE = 48; const SIPHeaderID SIP_HID_RESPONSE_KEY = 49; const SIPHeaderID SIP_HID_RETRY_AFTER = 50; const SIPHeaderID SIP_HID_SERVER = 51; const SIPHeaderID SIP_HID_SUBJECT = 52; const SIPHeaderID SIP_HID_SUPPORTED = 53; const SIPHeaderID SIP_HID_TIMESTAMP = 54; const SIPHeaderID SIP_HID_UNSUPPORTED = 55; const SIPHeaderID SIP_HID_USER_AGENT = 56; const SIPHeaderID SIP_HID_WARNING = 57; const SIPHeaderID SIP_HID_WWW_AUTHENTICATE = 58; typedef enum { URI_SCHEME_UNKNOWN, URI_SCHEME_SIP } URI_SCHEME; typedef enum { CONTACT_ACTION_UNKNOWN, CONTACT_ACTION_PROXY, CONTACT_ACTION_REDIRECT } CONTACT_ACTION; typedef enum { SIP_MODULE_INCOMING_PROCESSING, SIP_MODULE_ROUTING_PROCESSING, SIP_MODULE_OUTGOING_PROCESSING } SIP_MODULE_TYPE; typedef enum { SIP_AUTH_PKG_UNKNOWN = 0x00, SIP_AUTH_PKG_NONE = 0x01, SIP_AUTH_PKG_NEGOTIATE = 0x02, SIP_AUTH_PKG_KERBEROS = 0x04, SIP_AUTH_PKG_NTLM = 0x08, SIP_AUTH_PKG_DIGEST = 0x10, SIP_AUTH_PKG_BASIC = 0x20, SIP_AUTH_PKG_ANY = 0xFF, } SIP_AUTH_PACKAGEID; const USHORT SIP_AUTH_PACKAGES = 0x7; // // values used by extension modules to register for state events // typedef enum { SIP_REGISTRATION_RAW_SIP_MESSAGES = 0x1, // all sip messages, no state SIP_REGISTRATION_TRANSACTION_EVENTS = 0x2, SIP_REGISTRATION_DIALOG_EVENTS = 0x4 } SIPRegistrationType; // // definitions for session types observed by the state manager // typedef enum { SIP_SESSION_TYPE_TRANSACTION, SIP_SESSION_TYPE_DIALOG } SIPEventType; // // possible transaction state events // typedef enum { // helper flags SIP_COMPLETED_FLAG = 0x100, SIP_REPLY_FLAG = 0x200, SIP_RETRANSMISSION_FLAG = 0x400, SIP_REROUTE_FLAG = 0x800, // the actual possible transaction state events SIP_TRANSACTION_NONE = 0x0, // received a message that started a new transaction SIP_TRANSACTION_REQUEST_STARTED = 0x1, SIP_TRANSACTION_REQUEST_STARTED_REROUTE = SIP_TRANSACTION_REQUEST_STARTED | SIP_REROUTE_FLAG, // received a retransmission for an existing transaction SIP_TRANSACTION_REQUEST_RETRANSMISSION = 0x2 | SIP_RETRANSMISSION_FLAG, SIP_TRANSACTION_REQUEST_RETRANSMISSION_REROUTE = SIP_TRANSACTION_REQUEST_RETRANSMISSION | SIP_REROUTE_FLAG, // received a cancel for an existing transaction SIP_TRANSACTION_REQUEST_CANCEL_ATTEMPTED = 0x3, SIP_TRANSACTION_REQUEST_CANCEL_ATTEMPTED_REROUTE = SIP_TRANSACTION_REQUEST_CANCEL_ATTEMPTED | SIP_REROUTE_FLAG, // received a provisional reply for an existing transaction SIP_TRANSACTION_REPLY_PROVISIONAL = 0x4 | SIP_REPLY_FLAG, // received a final reply for an existing transaction SIP_TRANSACTION_REPLY_ERROR_COMPLETED = 0x5 | SIP_COMPLETED_FLAG | SIP_REPLY_FLAG, SIP_TRANSACTION_REPLY_CANCELLED_COMPLETED = 0x6 | SIP_COMPLETED_FLAG | SIP_REPLY_FLAG, SIP_TRANSACTION_REPLY_REDIRECT_COMPLETED = 0x7 | SIP_COMPLETED_FLAG | SIP_REPLY_FLAG, SIP_TRANSACTION_REPLY_SUCCESS_COMPLETED = 0x8 | SIP_COMPLETED_FLAG | SIP_REPLY_FLAG, // transaction completed due to a timeout SIP_TRANSACTION_TIMEOUT_COMPLETED = 0x9 | SIP_COMPLETED_FLAG, // transaction completed due to a timeout that took place after cancel successfully completed SIP_TRANSACTION_TIMEOUT_CANCEL_COMPLETED = 0xa | SIP_COMPLETED_FLAG, // we received a terminating non-success response to cancel SIP_TRANSACTION_REQUEST_CANCEL_CANCELLED = 0xb, // we received a success reply to the cancel SIP_TRANSACTION_REQUEST_CANCEL_REPLIED = 0xc | SIP_REPLY_FLAG, // // ack is a transaction in itself // SIP_TRANSACTION_REQUEST_ACK = 0xd | SIP_COMPLETED_FLAG, SIP_TRANSACTION_REQUEST_ACK_REROUTE = SIP_TRANSACTION_REQUEST_ACK | SIP_REROUTE_FLAG } SIPTransactionEvent; // // Multimedia Session State events // typedef enum { SIP_DIALOG_NONE = 0x0, SIP_DIALOG_INITIATED = 0x1, SIP_DIALOG_INITIATED_REROUTE = SIP_DIALOG_INITIATED | SIP_REROUTE_FLAG, SIP_DIALOG_CONFIRMED = 0x2, SIP_DIALOG_ESTABLISHED = 0x3, SIP_DIALOG_ESTABLISHED_REROUTE = SIP_DIALOG_ESTABLISHED | SIP_REROUTE_FLAG, SIP_DIALOG_REINITIATED = 0x4, SIP_DIALOG_REINITIATED_REROUTE = SIP_DIALOG_REINITIATED | SIP_REROUTE_FLAG, SIP_DIALOG_RECONFIRMED = 0x5, SIP_DIALOG_REESTABLISHED = 0x6, SIP_DIALOG_REESTABLISHED_REROUTE = SIP_DIALOG_REESTABLISHED | SIP_REROUTE_FLAG, SIP_DIALOG_REINITIATION_TIMED_OUT = 0x7, SIP_DIALOG_RECONFIRMATION_TIMED_OUT = 0x8, SIP_DIALOG_REINITIATION_REJECTED = 0x9, SIP_DIALOG_REINITIATION_CANCELLED = 0xa, SIP_DIALOG_CLOSED = 0xb | SIP_COMPLETED_FLAG, SIP_DIALOG_CLOSED_TIMED_OUT = 0xc | SIP_COMPLETED_FLAG, SIP_DIALOG_CLOSED_REJECTED = 0xd | SIP_COMPLETED_FLAG, SIP_DIALOG_CLOSED_CANCELLED = 0xe | SIP_COMPLETED_FLAG, SIP_DIALOG_MAX = 0xf } SIPDialogEvent; // // Status code definition // //Informational cpp_quote("#define STATUS_CODE_TRYING 100") cpp_quote("#define STATUS_CODE_RINGING 180") cpp_quote("#define STATUS_CODE_FORWARDED 181") cpp_quote("#define STATUS_CODE_QUEUED 182") cpp_quote("#define STATUS_CODE_SESSION_PROGRESS 183") //Successful cpp_quote("#define STATUS_CODE_OK 200") cpp_quote("#define STATUS_CODE_ACCEPTED 202") //Redirection cpp_quote("#define STATUS_CODE_MULTIPLE_CHOICES 300") cpp_quote("#define STATUS_CODE_MOVED_PERMANENTLY 301") cpp_quote("#define STATUS_CODE_MOVED_TEMPORARILY 302") cpp_quote("#define STATUS_CODE_USE_PROXY 305") cpp_quote("#define STATUS_CODE_ALTERNATIVE_SERVICES 380") //Request Failure cpp_quote("#define STATUS_CODE_BAD_REQUEST 400") cpp_quote("#define STATUS_CODE_UNAUTHORIZED 401") cpp_quote("#define STATUS_CODE_PAYMENT_REQUIRED 402") cpp_quote("#define STATUS_CODE_FORBIDDEN 403") cpp_quote("#define STATUS_CODE_NOT_FOUND 404") cpp_quote("#define STATUS_CODE_METHOD_UNALLOWED 405") cpp_quote("#define STATUS_CODE_NOT_ACCEPTABLE 406") cpp_quote("#define STATUS_CODE_PXY_AUTHENTICATION_REQUIRED 407") cpp_quote("#define STATUS_CODE_TIMEOUT 408") cpp_quote("#define STATUS_CODE_CONFLICT 409") cpp_quote("#define STATUS_CODE_GONE 410") cpp_quote("#define STATUS_CODE_LENGTH_REQUIRED 411") cpp_quote("#define STATUS_CODE_ENTITY_TOOLARGE 413") cpp_quote("#define STATUS_CODE_URI_TOOLONG 414") cpp_quote("#define STATUS_CODE_UNSUPPORTED_MEDIA_TYPE 415") cpp_quote("#define STATUS_CODE_BAD_EXTENSION 420") cpp_quote("#define STATUS_CODE_TEMP_UNAVAILABLE 480") cpp_quote("#define STATUS_CODE_CALLLEG_UNAVAILABLE 481") cpp_quote("#define STATUS_CODE_LOOP_DETECTED 482") cpp_quote("#define STATUS_CODE_TOOMANY_HOPS 483") cpp_quote("#define STATUS_CODE_ADDRESS_INCOMPLETE 484") cpp_quote("#define STATUS_CODE_AMBIGUOUS 485") cpp_quote("#define STATUS_CODE_BUSY_HERE 486") cpp_quote("#define STATUS_CODE_TERMINATED 487") cpp_quote("#define STATUS_CODE_NOT_ACCEPTABLE_HERE 488") //Server Failure cpp_quote("#define STATUS_CODE_SERVER_INTERNAL 500") cpp_quote("#define STATUS_CODE_NOT_IMPLEMENTED 501") cpp_quote("#define STATUS_CODE_BAD_GATEWAY 502") cpp_quote("#define STATUS_CODE_SERVICE_UNAVAILABLE 503") cpp_quote("#define STATUS_CODE_SERVER_TIMEOUT 504") cpp_quote("#define STATUS_CODE_VERSION_INCOMPATIBLE 505") //Global Failure cpp_quote("#define STATUS_CODE_BUSY_ALL 600") cpp_quote("#define STATUS_CODE_DECLINE 603") cpp_quote("#define STATUS_CODE_NONEXIST_ALL 604") cpp_quote("#define STATUS_CODE_NOT_ACCEPTABLE_ALL 606") interface ISIPElement; interface ISIPHeader; interface IUri; interface ISIPUrl; interface ISIPFromToHeader; interface ISIPContactEntry; interface ISIPContactEnum; interface ISIPMessage; interface ISIPRequest; interface ISIPResponse; interface ISIPEvent; interface ISIPController; interface ISIPModuleControl; interface ISIPModuleCallback; interface IEnumSIPModule; interface ISIPProxy; interface ISIPRegistrationDB; interface ISIPEventLogging; interface ISIPAuthRequest; interface ISIPExtensionModulePropertyPages; interface ISIPSerialize; ///////////////////////////////////////////////////////////////// // ISIPElement ///////////////////////////////////////////////////////////////// [ local, object, uuid(8eeebdef-acd5-467e-b631-fe5650f065bd), helpstring("ISIPElement Interface"), pointer_default(unique) ] interface ISIPElement : IUnknown { HRESULT GetContentString( [out] PSTRING pstrContent ); } ///////////////////////////////////////////////////////////////// // ISIPHeader ///////////////////////////////////////////////////////////////// [ local, object, uuid(f59970a5-6f54-4269-9b96-416f8d231a85), helpstring("ISIPHeader Interface"), pointer_default(unique) ] interface ISIPHeader : ISIPElement { HRESULT GetHeaderID( [out] SIPHeaderID * pHeaderID ); HRESULT GetHeaderNameString( [out] PSTRING pstrHeaderNameString ); } ///////////////////////////////////////////////////////////////// // IUri ///////////////////////////////////////////////////////////////// [ local, object, uuid(3ff9e85e-b735-4384-aff8-0f72d6dad59d), helpstring("IUri Interface"), pointer_default(unique) ] interface IUri : ISIPElement { HRESULT GetURIScheme( [out] URI_SCHEME * pUriScheme ); HRESULT GetDisplayName( [out] PSTRING pstrDisplayName ); HRESULT GetUser( [out] PSTRING pstrUser ); HRESULT GetPassword( [out] PSTRING pstrPassword ); HRESULT GetHost( [out] PSTRING pstrHost ); HRESULT GetPort( [out] PSTRING pstrPort ); // // Return a NULL-terminated normalized "user@host" string // HRESULT GetUserAtHost( [out] PSTRING pstrUserName ); } ///////////////////////////////////////////////////////////////// // ISIPUrl ///////////////////////////////////////////////////////////////// [ local, object, uuid(45af89e5-b0aa-423f-bb54-d623b1505642), helpstring("ISIPUrl Interface"), pointer_default(unique) ] interface ISIPUrl : IUri { HRESULT GetTransport( [out] PSTRING pstrTransport ); HRESULT GetUserParam( [out] PSTRING pstrUserParam ); HRESULT GetMethod( [out] PSTRING pstrMethod ); HRESULT GetTtl( [out] PSTRING pstrTtl ); HRESULT GetMaddr( [out] PSTRING pstrMaddr ); HRESULT GetHeaders( [out] PSTRING pstrHeaders ); } ///////////////////////////////////////////////////////////////// // ISIPFromToHeader ///////////////////////////////////////////////////////////////// [ local, object, uuid(4fd9e8f8-b6a4-4391-b03b-9d89b8b0a02b), helpstring("ISIPFromToHeader Interface"), pointer_default(unique) ] interface ISIPFromToHeader : ISIPHeader { HRESULT GetUri( [out] IUri ** ppUri ); HRESULT GetTag( [out] STRING * pstrTag ); } ///////////////////////////////////////////////////////////////// // ISIPContactEntry ///////////////////////////////////////////////////////////////// [ local, object, uuid(0c64209e-6276-4b95-baee-20e0b0e8332b), helpstring("ISIPContactEntry Interface"), pointer_default(unique) ] interface ISIPContactEntry : ISIPElement { // Is the entry '*' ? HRESULT IsAll( [out] BOOL * pbAll ); HRESULT GetUri( [out] IUri ** ppUri ); HRESULT GetAction( [out] CONTACT_ACTION* pAction ); HRESULT GetQValue( [out] DWORD * pdwQValue ); HRESULT GetExpires( [out] PSTRING pstrExpires ); HRESULT SetExpires( [in] PSTRING pstrExpires ); HRESULT GetGenericParameter( [in] PSTRING pstrParamName, [out] PSTRING pstrParamValue ); } ///////////////////////////////////////////////////////////////// // ISIPContactEnum ///////////////////////////////////////////////////////////////// [ local, object, uuid(7b219813-0e07-49d5-b029-289f3de2e12c), helpstring("ISIPContactEnum Interface"), pointer_default(unique) ] interface ISIPContactEnum : IUnknown { HRESULT Next( [out] ISIPContactEntry ** ppContactEntry ); HRESULT Reset(); HRESULT Clone( [out] ISIPContactEnum ** ppTwinContactEnum ); } ///////////////////////////////////////////////////////////////// // ISIPMessage ///////////////////////////////////////////////////////////////// [ local, object, uuid(48F2C19C-CB7A-4231-82EB-A6B5EC0A250A), helpstring("ISIPMessage Interface"), pointer_default(unique) ] interface ISIPMessage : IUnknown { HRESULT IsIncomingMessage( [out, retval] BOOL * pbIncomingMessage ); HRESULT GetSipVersion( [out] PSTRING pstrSipVersion ); // Generic header interface HRESULT GetHeader( [in] SIPHeaderID headerID, [out, retval] ISIPHeader ** ppSipHeader ); // Get the next SIP header of the same header type HRESULT GetNextHeader( [in] ISIPHeader * pSipHeader, [out, retval] ISIPHeader ** ppNextSipHeader ); // // They will be put ahead of the existing headers // HRESULT AddHeader( [in] SIPHeaderID headerID, [in] PSTRING pstrBuffer ); HRESULT DeleteHeader( [in] ISIPHeader * pSipHeader ); // Body interface HRESULT GetBody( [out] PSTRING pstrBody ); HRESULT SetBody( [in] PSTRING pstrBody ); HRESULT GetContactEnum( [out, retval] ISIPContactEnum ** ppContactEnum ); HRESULT Discard(); // Only used for locally generated message HRESULT Send(); // // functions for manipulating message context // HRESULT SetMessageContext([in] IUnknown *pMessageContext); HRESULT GetMessageContext([out] IUnknown **ppMessageContext); } ///////////////////////////////////////////////////////////////// // ISIPRequest ///////////////////////////////////////////////////////////////// [ local, object, uuid(BB3BCA24-CD24-401c-9B0F-1223C13AEF57), helpstring("ISIPRequest Interface"), pointer_default(unique) ] interface ISIPRequest : ISIPMessage { // Start line interface HRESULT GetMethod( [out] PSTRING pstrMethod ); HRESULT GetRequestURI( [out] IUri ** ppSipRequestUri ); // // Authentication // HRESULT GetAuthenticationInfo( [out] ISIPAuthRequest** ppAuthentication ); // // Proxy Request Info will be used to reconstruct this // request to be forwarded // HRESULT GetProxyRequestInfo( [out] IUnknown ** ppProxyRequestInfo ); // A routing method // only valid for routing-processing E.M. HRESULT SetRequestURI( [in] IUri * pSipRequestUri ); // Reply with the default Reason Phrase HRESULT Reply( [in] DWORD dwStatusCode ); // Create a request with those typical headers from the current request HRESULT CreateTypicalRequest( [in] PSTRING pstrMethod, [in] IUri * pSipRequestUri, [in] IUnknown * pProxyRequestInfo, [out] ISIPRequest ** ppNewRequest ); HRESULT CreateTypicalResponse( [in] DWORD dwStatusCode, [in] PSTRING pstrReasonPhrase, [out] ISIPResponse ** ppSipResponse ); // Instruct the proxy to add a record route header // for this request... HRESULT AddRecordRoute(); } ///////////////////////////////////////////////////////////////// // ISIPAuthRequest ///////////////////////////////////////////////////////////////// [ local, object, uuid(6D63F6AD-92B0-4cc0-B600-672773B81261), helpstring("ISIPAuthRequest Interface"), pointer_default(unique) ] interface ISIPAuthRequest : IUnknown { HRESULT GetProtocol( [out] SIP_AUTH_PACKAGEID* psaPackageID ); HRESULT GetUser( [out] PSTRING pstrUser ); HRESULT GetSecurityHandle( [out] HANDLE* pSecHandle ); HRESULT GetDelegatable( [out] BOOL* pDelegatable ); HRESULT Authenticate( [in] DWORD dwPackages ); } ///////////////////////////////////////////////////////////////// // ISIPResponse ///////////////////////////////////////////////////////////////// [ local, object, uuid(C2B69E61-52C1-4c9d-A86F-1AD115AF219B), helpstring("ISIPResponse Interface"), pointer_default(unique) ] interface ISIPResponse : ISIPMessage { // Start line interface HRESULT GetStatusCode( [out] DWORD * pdwStatusCode ); HRESULT GetReasonPhrase( [out] PSTRING pstrReasonPhrase ); } ///////////////////////////////////////////////////////////////// // ISIPEvent ///////////////////////////////////////////////////////////////// [ local, object, uuid(9f35f2f6-2a3d-465a-94e8-452b049a88d7), helpstring("ISIPEvent Interface"), pointer_default(unique) ] interface ISIPEvent : IUnknown { HRESULT GetMessage( [out] ISIPMessage ** ppSipMessage ); HRESULT GetStateEvents( [out] SIPTransactionEvent *pTransactionEvent, [out] SIPDialogEvent *pDialogEvent ); HRESULT GetRegistrationContext( [in] SIPRegistrationType enRegistrationContext, [out] IUnknown ** ppRegistrationContext ); // // The Extension module maintains its context // by these Set/Get methods // HRESULT SetStateContext( [in] SIPEventType enSessionType, [in] IUnknown * pEventContext ); HRESULT GetStateContext( [in] SIPEventType enSessionType, [out] IUnknown ** ppEventContext ); HRESULT CompleteProcessing(); } ///////////////////////////////////////////////////////////////// // ISIPController ///////////////////////////////////////////////////////////////// [ local, object, uuid(f2d8cbbb-aa79-4577-a4b6-d6e78d243c7d), helpstring("ISIPController Interface"), pointer_default(unique) ] interface ISIPController : IUnknown { // // event handler // HRESULT OnError( [in] SIP_HANDLE hModuleHandle, [in] HRESULT hrError, [in] DWORD Reserved, [in,unique,string] LPWSTR szErrorDescription); // // method used by extension modules to get private interfaces on other extension modules // HRESULT GetModule( [in] SIP_HANDLE hModuleHandle, [in] CLSID *pProvidingEMClassID, [in] SIP_MODULE_TYPE ProvidingEMType, [in] IID *pRequestedInterface, [out] IUnknown **ppIUnknown ); } ///////////////////////////////////////////////////////////////// // ISIPModuleControl ///////////////////////////////////////////////////////////////// [ local, object, uuid(A1ED44F2-39DE-4d51-B252-25CF6071FABF), helpstring("ISIPModuleControl Interface"), pointer_default(unique) ] interface ISIPModuleControl : IUnknown { // // Lifetime control // HRESULT Initialize( [in] ISIPController * pController, [in] ISIPProxy * pSIPProxy, [in] ISIPEventLogging * pEventLogging, [in] SIP_MODULE_TYPE ModuleType, [in] SIP_HANDLE hModuleHandle, [out] ISIPRegistrationDB ** ppISIPRegistrationDB ); HRESULT Shutdown(); // // service control // HRESULT Start(); HRESULT Stop(); // // Communication between extension modules // HRESULT GetPrivateInterface( [in] CLSID * pRequestingEM, [in] IID * pRequestedInterface, [out] IUnknown ** ppIUnknown ); } ///////////////////////////////////////////////////////////////// // ISIPModuleCallback ///////////////////////////////////////////////////////////////// [ local, object, uuid(4c14b478-67d6-4677-b456-4096c2edd36b), helpstring("ISIPModuleCallback Interface"), pointer_default(unique) ] interface ISIPModuleCallback : IUnknown { HRESULT OnEvent( [in] ISIPEvent * pSipEvent ); } ///////////////////////////////////////////////////////////////// // ISIPExtensionModulePropertyPages ///////////////////////////////////////////////////////////////// [ object, uuid(1184A566-9CD8-487e-8B27-6F1D687A8E1F), dual, helpstring("ISIPExtensionModulePropertyPages Interface"), pointer_default(unique) ] interface ISIPExtensionModulePropertyPages : ISpecifyPropertyPages { HRESULT SetInstance( [in] IWbemClassObject *pInstance ); HRESULT GetTitle( [out] BSTR *pbstrTitle ); }; ///////////////////////////////////////////////////////////////// // ISIPAdminCredentials ///////////////////////////////////////////////////////////////// [ object, uuid(1A9683B4-BA07-4d94-B384-E54E645121FA), dual, helpstring("ISIPAdminCredentials Interface"), pointer_default(unique) ] interface ISIPAdminCredentials : IUnknown { HRESULT putMachineName( [in] const LPCWSTR pwszMachineName ); HRESULT putUserName( [in] const LPCWSTR pwszUserName ); HRESULT putPassword( [in] const LPCWSTR pwszPassword ); HRESULT getMachineName( [out] BSTR *pbstrMachineName ); HRESULT getUserName( [out] BSTR *pbstrUserName ); HRESULT getPassword( [out] BSTR *pbstrPassword ); }; ///////////////////////////////////////////////////////////////// // ISIPCreateExtensionModule ///////////////////////////////////////////////////////////////// [ object, uuid(0F926CF4-C18A-47de-8F2A-532349D8C83B), dual, helpstring("ISIPCreateExtensionModule Interface"), pointer_default(unique) ] interface ISIPCreateExtensionModule : IUnknown { HRESULT CreateNewExtensionModuleInstance( [in] IWbemServices *pIService, [out] IWbemClassObject **ppIClassObject ); }; ///////////////////////////////////////////////////////////////// // ISIPRegistrationDB ///////////////////////////////////////////////////////////////// [ local, object, uuid(97b805b8-812e-4eda-adbd-7a003f047cc3), helpstring("ISIPRegistrationDB Interface"), pointer_default(unique) ] interface ISIPRegistrationDB : IUnknown { HRESULT IsDomainSupported( [in] PSTRING pstrDomain, [out] BOOL * pbSupported ); HRESULT GetAllContacts( [in] PSTRING pstrUserAtHost, [in] PSTRING pstrMethod, [in] BOOL bMethodsOnly, [out] SAFEARRAY(ISIPContactEntry*) * ppsaContacts ); HRESULT GetPreferredContact( [in] PSTRING strUserAtHost, [in] PSTRING pstrMethod, [in] BOOL bMethodsOnly, [out] ISIPContactEntry ** ppContactEntry ); } ///////////////////////////////////////////////////////////////// // ISIPProxy ///////////////////////////////////////////////////////////////// [ local, object, uuid(FA9C6B4E-E338-4D14-B5D2-9EF95EA0A4C4), helpstring("ISIPProxy Interface"), pointer_default(unique) ] interface ISIPProxy : IUnknown { HRESULT CreateRequest( [in] SIP_HANDLE hModuleHandle, [in] PSTRING pstrMethod, [in] IUri * pUri, [in] PSTRING pstrFromHeaderContent, [in] PSTRING pstrToHeaderContent, [in] PSTRING pstrCallIDHeaderContent, [in] PSTRING pstrCSeqHeaderContent, [in] IUnknown * pProxyRequestInfo, [out] ISIPRequest ** ppRequest ); HRESULT CreateRequestEx( [in] SIP_HANDLE hModuleHandle, [in] PSTRING pstrMethod, [in] ISIPContactEntry * pContact, [in] PSTRING pstrFromHeaderContent, [in] PSTRING pstrToHeaderContent, [in] PSTRING pstrCallIDHeaderContent, [in] PSTRING pstrCSeqHeaderContent, [in] IUnknown * pProxyRequestInfo, [out] ISIPRequest ** ppRequest ); HRESULT CreateProxyRequestInfoObject( [out] IUnknown ** ppProxyRequestInfo ); HRESULT CreateUri( [in] URI_SCHEME uriScheme, [in] PSTRING pstrDisplayName, [in] PSTRING pstrUriString, [out] IUri ** ppUri ); HRESULT GetHeaderID( [in] PSTRING pstrHeaderName, [out] SIPHeaderID * pHeaderID ); HRESULT GetHeaderName( [in] SIPHeaderID headerID, [out] PSTRING pstrHeaderName ); HRESULT GetRegistrationDB( [out] ISIPRegistrationDB ** ppRegistrationDB ); HRESULT RegisterURI( [in] SIP_HANDLE hModuleHandle, [in] IUri * pSipRequestURI, // this must be "INVITE" if session types includes SIP_REGISTRATION_DIALOG_EVENTS [in] PSTRING pstrMethod, [in] DWORD dwSessionTypes, // or'ed SIPRegistrationType values [in] IUnknown *punkRegistrationContext // the context that // the module wants // to associate with // the uri pattern // requested in IUri ); HRESULT DeregisterURI( [in] SIP_HANDLE hModuleHandle, [in] IUri * pSipRequestUri ); HRESULT FindRegistrationContext( [in] SIP_HANDLE hModuleHandle, [in] STRING *pstrMethod, [in] SIPRegistrationType enRegistrationType, [in] IUri *pURI, [out] IUnknown **ppUnkRegistrationContext ); } ///////////////////////////////////////////////////////////////// // ISIPEventLogging ///////////////////////////////////////////////////////////////// [ object, uuid(834673F0-3076-427a-9D1E-3E3768E6AF5C), helpstring("Event Logging"), pointer_default(unique) ] interface ISIPEventLogging : IUnknown { // ReportEvent methods should be called // only between RegisterEventSource and DeregisterEventSource HRESULT ReportEvent( [in] WORD wType, // Event type such as EVENTLOG_ERROR_TYPE [in] WORD wCategory, // Event category [in] DWORD dwEventID // The event ID ); HRESULT ReportEventBLOB( [in] WORD wType, // Event type such as EVENTLOG_ERROR_TYPE [in] WORD wCategory, // Event category [in] DWORD dwEventID, // The event ID [in] WORD wNumStrings, // number of insertion strings [in,size_is(wNumStrings)] LPCWSTR *lpStrings, // Array of insertion strings (for %1 etc) [in] DWORD dwDataSize, // Size of binary data in bytes [in,size_is(dwDataSize)] const BYTE *lpRawData // Custom binary data buffer that will be attached to the event ); }; ///////////////////////////////////////////////////////////////// // ISIPSerialize ///////////////////////////////////////////////////////////////// [ object, uuid(de680840-d7b3-427a-9d00-9d4a45ff9b8c), helpstring("Serializing"), pointer_default(unique) ] interface ISIPSerialize : IUnknown { HRESULT Store( [out] DWORD * pdwBufferSize, [out,size_is(, *pdwBufferSize)] BYTE ** ppbBuffer ); HRESULT Restore( [in] const DWORD dwBufferSize, [in,size_is(dwBufferSize)] const BYTE * pbBuffer ); };