hxauthn.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:21k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxauthn.h,v 1.1.1.1.50.3 2004/07/09 01:45:08 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _HXAUTHN_H_
  50. #define _HXAUTHN_H_
  51. /*
  52.  * Forward declarations of some interfaces defined or used here-in.
  53.  */
  54. typedef _INTERFACE  IUnknown     IUnknown;
  55. typedef _INTERFACE  IHXCredRequest     IHXCredRequest;
  56. typedef _INTERFACE  IHXCredRequestResponse     IHXCredRequestResponse;
  57. typedef _INTERFACE  IHXClientAuthConversation     IHXClientAuthConversation;
  58. typedef _INTERFACE  IHXClientAuthResponse     IHXClientAuthResponse;
  59. typedef _INTERFACE  IHXServerAuthConversation     IHXServerAuthConversation;
  60. typedef _INTERFACE  IHXServerAuthResponse     IHXServerAuthResponse;
  61. typedef _INTERFACE  IHXUserContext     IHXUserContext;
  62. typedef _INTERFACE  IHXUserProperties     IHXUserProperties;
  63. typedef _INTERFACE  IHXUserImpersonation     IHXUserImpersonation;
  64. typedef _INTERFACE  IHXChallenge     IHXChallenge;
  65. typedef _INTERFACE  IHXChallengeResponse     IHXChallengeResponse;
  66. typedef _INTERFACE  IHXRequest     IHXRequest;
  67. typedef _INTERFACE  IHXBuffer     IHXBuffer;
  68. typedef _INTERFACE  IHXValues     IHXValues;
  69. /****************************************************************************
  70.  * 
  71.  *  Interface:
  72.  *
  73.  * IHXCredRequest
  74.  *
  75.  *  Purpose:
  76.  *
  77.  * This is queried from the response interface passed into 
  78.  * IHXClientAuthConversation::MakeResponse.  MakeResponse
  79.  * uses it to request the current user to enter their credentials. 
  80.  *
  81.  *  IHXCredRequest:
  82.  *
  83.  * {00002801-0901-11d1-8B06-00A024406D59}
  84.  *
  85.  */
  86. DEFINE_GUID(IID_IHXCredRequest,   0x00002801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  87. #undef  INTERFACE
  88. #define INTERFACE   IHXCredRequest
  89. DECLARE_INTERFACE_(IHXCredRequest, IUnknown)
  90. {
  91.     /*
  92.      * IUnknown methods
  93.      */
  94.     STDMETHOD(QueryInterface) (THIS_
  95. REFIID riid,
  96. void** ppvObj) PURE;
  97.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  98.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  99.     /************************************************************************
  100.      * Method:
  101.      *     IHXCredRequest::GetCredentials
  102.      * Purpose:
  103.      *     
  104.      *     Call this to request the credentials.  Usually presents UI to 
  105.      *     the user asking for username and password.
  106.      *
  107.      *     While ignored at this time, pValuesCredentialRequest should
  108.      *     contain CString properties that describe the reason for the 
  109.      *     request. (like the URL, the Realm, the Auth protocol, and how 
  110.      *     secure it is, etc..)  In the future this data will be displayed
  111.      *     to the user.
  112.      *
  113.      */
  114.     STDMETHOD(GetCredentials)
  115.     (
  116. THIS_
  117. IHXCredRequestResponse* pCredRequestResponseRequester,
  118. IHXValues* pValuesCredentialRequest
  119.     ) PURE;
  120. };
  121. /****************************************************************************
  122.  * 
  123.  *  Interface:
  124.  *
  125.  * IHXCredRequestResponse
  126.  *
  127.  *  Purpose:
  128.  *
  129.  * This is implemented by a client authenticator in order to receive
  130.  * the credentials requested in IHXCredRequest::GetCredentials
  131.  *
  132.  *  IHXCredRequestResponse:
  133.  *
  134.  * {00002800-0901-11d1-8B06-00A024406D59}
  135.  *
  136.  */
  137. DEFINE_GUID(IID_IHXCredRequestResponse,   0x00002800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  138. #undef  INTERFACE
  139. #define INTERFACE   IHXCredRequestResponse
  140. DECLARE_INTERFACE_(IHXCredRequestResponse, IUnknown)
  141. {
  142.     /*
  143.      * IUnknown methods
  144.      */
  145.     STDMETHOD(QueryInterface) (THIS_
  146. REFIID riid,
  147. void** ppvObj) PURE;
  148.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  149.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  150.     /************************************************************************
  151.      * Method:
  152.      *     IHXCredRequestResponse::CredentialsReady
  153.      * Purpose:
  154.      *     
  155.      *     Reports the success or failure of 
  156.      *     IHXCredRequest::GetCredentials
  157.      *
  158.      *     If successful pValuesCredentials contains the requested 
  159.      *     credentials.  (usually CString:Username and CString:Password)
  160.      *
  161.      */
  162.     STDMETHOD(CredentialsReady)
  163.     (
  164. THIS_
  165. HX_RESULT ResultStatus,
  166. IHXValues* pValuesCredentials
  167.     ) PURE;
  168. };
  169. /****************************************************************************
  170.  * 
  171.  *  Interface:
  172.  *
  173.  * IHXClientAuthConversation
  174.  *
  175.  *  Purpose:
  176.  *
  177.  * This is implemented by a client authenticator in order to perform 
  178.  * the client side of an authentication protocol.
  179.  *
  180.  *  IHXClientAuthConversation:
  181.  *
  182.  * {00002803-0901-11d1-8B06-00A024406D59}
  183.  *
  184.  */
  185. DEFINE_GUID(IID_IHXClientAuthConversation,   0x00002803, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  186. /*
  187.  *  The IHXCommonClassFactory supports creating an instance
  188.  *  of this object.
  189.  */
  190. #define CLSID_CHXClientAuthenticator IID_IHXClientAuthConversation
  191. #undef  INTERFACE
  192. #define INTERFACE   IHXClientAuthConversation
  193. DECLARE_INTERFACE_(IHXClientAuthConversation, IUnknown)
  194. {
  195.     /*
  196.      * IUnknown methods
  197.      */
  198.     STDMETHOD(QueryInterface) (THIS_
  199. REFIID riid,
  200. void** ppvObj) PURE;
  201.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  202.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  203.     /************************************************************************
  204.      * Method:
  205.      *     IHXClientAuthConversation::MakeResponse
  206.      * Purpose:
  207.      *     
  208.      *     Call this when a challenge is received from the server.
  209.      *     
  210.      *     pRequestChallengeHeaders should contain the server challenge.
  211.      *
  212.      */
  213.     STDMETHOD(MakeResponse)
  214.     (
  215. THIS_
  216. IHXClientAuthResponse* pClientAuthResponseRequester,
  217. IHXRequest* pRequestChallengeHeaders
  218.     ) PURE;
  219.     /************************************************************************
  220.      * Method:
  221.      *     IHXClientAuthConversation::IsDone
  222.      * Purpose:
  223.      *     
  224.      *     Call this to determine whether the conversation is complete.
  225.      *     (some protocols have more then one message exchange.)
  226.      *
  227.      */
  228.     STDMETHOD_(BOOL,IsDone)(THIS) PURE;
  229.     /************************************************************************
  230.      * Method:
  231.      *     IHXClientAuthConversation::Authenticated
  232.      * Purpose:
  233.      *     
  234.      *     Call this to signal the authenticator that the conversation 
  235.      *     just completed succeeded or failed.
  236.      *
  237.      */
  238.     STDMETHOD(Authenticated)(THIS_ BOOL bAuthenticated) PURE;
  239. };
  240. /****************************************************************************
  241.  * 
  242.  *  Interface:
  243.  *
  244.  * IHXClientAuthResponse
  245.  *
  246.  *  Purpose:
  247.  *
  248.  * This is implemented by the client core in order to receive the 
  249.  * response generated by IHXClientAuthConversation::MakeResponse
  250.  *
  251.  *  IHXClientAuthResponse:
  252.  *
  253.  * {00002802-0901-11d1-8B06-00A024406D59}
  254.  *
  255.  */
  256. DEFINE_GUID(IID_IHXClientAuthResponse,   0x00002802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  257. #undef  INTERFACE
  258. #define INTERFACE   IHXClientAuthResponse
  259. DECLARE_INTERFACE_(IHXClientAuthResponse, IUnknown)
  260. {
  261.     /*
  262.      * IUnknown methods
  263.      */
  264.     STDMETHOD(QueryInterface) (THIS_
  265. REFIID riid,
  266. void** ppvObj) PURE;
  267.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  268.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  269.     /************************************************************************
  270.      * Method:
  271.      *     IHXClientAuthResponse::ResponseReady
  272.      * Purpose:
  273.      *     
  274.      *     Reports the success or failure of 
  275.      *     IHXClientAuthConversation::MakeResponse
  276.      *
  277.      *     pRequestResponseHeaders should be the same Request object 
  278.      *     that was passed into MakeResponse, it should contain
  279.      *     CString values for each MimeHeader it wishes to send to 
  280.      *     the Server.
  281.      *
  282.      */
  283.     STDMETHOD(ResponseReady)
  284.     (
  285. THIS_
  286. HX_RESULT ResultStatus,
  287. IHXRequest* pRequestResponseHeaders
  288.     ) PURE;
  289. };
  290. /****************************************************************************
  291.  * 
  292.  *  Interface:
  293.  *
  294.  * IHXServerAuthConversation
  295.  *
  296.  *  Purpose:
  297.  *
  298.  * This is implemented by a server authenticator in order to perform 
  299.  * the server side of an authentication protocol.
  300.  *
  301.  *  IHXServerAuthConversation:
  302.  *
  303.  * {00002805-0901-11d1-8B06-00A024406D59}
  304.  *
  305.  */
  306. DEFINE_GUID(IID_IHXServerAuthConversation,   0x00002805, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  307. /*
  308.  *  The IHXCommonClassFactory supports creating an instance
  309.  *  of this object.
  310.  */
  311. #define CLSID_CHXServerAuthenticator IID_IHXServerAuthResponse
  312. #undef  INTERFACE
  313. #define INTERFACE   IHXServerAuthConversation
  314. DECLARE_INTERFACE_(IHXServerAuthConversation, IUnknown)
  315. {
  316.     /*
  317.      * IUnknown methods
  318.      */
  319.     STDMETHOD(QueryInterface) (THIS_
  320. REFIID riid,
  321. void** ppvObj) PURE;
  322.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  323.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  324.     /************************************************************************
  325.      * Method:
  326.      *     IHXServerAuthConversation::MakeChallenge
  327.      * Purpose:
  328.      *     
  329.      *     Call this to create a challenge for a client.  If the request 
  330.      *     passed in does not contain a respose from the client, then it 
  331.      *     will generate the initial challenge.
  332.      *
  333.      *     pRequestResponseHeaders is the request for a secured URL.  If
  334.      *     this is the initial request for the URL it probably does not
  335.      *     have any credentials from the client.
  336.      *
  337.      */
  338.     STDMETHOD(MakeChallenge)
  339.     (
  340. THIS_
  341. IHXServerAuthResponse* pServerAuthResponseRequester,
  342. IHXRequest* pRequestResponseHeaders
  343.     ) PURE;
  344.     /************************************************************************
  345.      * Method:
  346.      *     IHXServerAuthConversation::IsAuthenticated
  347.      * Purpose:
  348.      *     
  349.      *     Call this to determine whether the last response from the 
  350.      *     client completed the authentication successfully.
  351.      *
  352.      */
  353.     STDMETHOD_(BOOL,IsAuthenticated)(THIS) PURE;
  354.     /************************************************************************
  355.      * Method:
  356.      *     IHXServerAuthConversation::GetUserContext
  357.      * Purpose:
  358.      *     
  359.      *     Call this to retrieve the Context of the user that completed
  360.      *     authentication successfully.
  361.      *
  362.      *     If successful pUnknownUser is a valid context
  363.      *
  364.      */
  365.     STDMETHOD(GetUserContext)(THIS_ REF(IUnknown*) pUnknownUser) PURE;
  366. };
  367. /****************************************************************************
  368.  * 
  369.  *  Interface:
  370.  *
  371.  * IHXServerAuthResponse
  372.  *
  373.  *  Purpose:
  374.  *
  375.  * This is implemented by various server plugins in order to receive the 
  376.  * challenge generated by IHXServerAuthConversation::MakeChallenge
  377.  *
  378.  *  IHXServerAuthResponse:
  379.  *
  380.  * {00002804-0901-11d1-8B06-00A024406D59}
  381.  *
  382.  */
  383. DEFINE_GUID(IID_IHXServerAuthResponse,   0x00002804, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  384. #undef  INTERFACE
  385. #define INTERFACE   IHXServerAuthResponse
  386. DECLARE_INTERFACE_(IHXServerAuthResponse, IUnknown)
  387. {
  388.     /*
  389.      * IUnknown methods
  390.      */
  391.     STDMETHOD(QueryInterface) (THIS_
  392. REFIID riid,
  393. void** ppvObj) PURE;
  394.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  395.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  396.     /************************************************************************
  397.      * Method:
  398.      *     IHXServerAuthResponse::ChallengeReady
  399.      * Purpose:
  400.      *     
  401.      *     Reports the success or failure of 
  402.      *     IHXServerAuthConversation::MakeChallenge
  403.      *
  404.      *     pRequestChallengeHeaders should be the same Request object 
  405.      *     that was passed into MakeChallenge, it should contain
  406.      *     CString values for each MimeHeader it wishes to send to 
  407.      *     the client.
  408.      *
  409.      */
  410.     STDMETHOD(ChallengeReady)
  411.     (
  412. THIS_
  413. HX_RESULT ResultStatus,
  414. IHXRequest* pRequestChallengeHeaders
  415.     ) PURE;
  416. };
  417. /****************************************************************************
  418.  * 
  419.  *  Interface:
  420.  *
  421.  * IHXUserContext
  422.  *
  423.  *  Purpose:
  424.  *
  425.  * This is implemented by a user context in order to provide 
  426.  * access to information about the currently authenticated user.
  427.  *
  428.  *  IHXUserContext:
  429.  *
  430.  * {00002806-0901-11d1-8B06-00A024406D59}
  431.  *
  432.  */
  433. DEFINE_GUID(IID_IHXUserContext,   0x00002806, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  434. #undef  INTERFACE
  435. #define INTERFACE   IHXUserContext
  436. DECLARE_INTERFACE_(IHXUserContext, IUnknown)
  437. {
  438.     /*
  439.      * IUnknown methods
  440.      */
  441.     STDMETHOD(QueryInterface) (THIS_
  442. REFIID riid,
  443. void** ppvObj) PURE;
  444.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  445.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  446.     /************************************************************************
  447.      * Method:
  448.      *     IHXUserContext::IsMemberOf
  449.      * Purpose:
  450.      *     
  451.      *     Call this to determine whether the authenticated user
  452.      *     is a member of the specified group.
  453.      *
  454.      */
  455.     STDMETHOD(IsMemberOf)(THIS_ IHXBuffer* pBufferGroupID) PURE;
  456. };
  457. /****************************************************************************
  458.  * 
  459.  *  Interface:
  460.  *
  461.  * IHXUserProperties
  462.  *
  463.  *  Purpose:
  464.  *
  465.  * This is implemented by a user context in order to provide 
  466.  * access to properties of the currently authenticated user.
  467.  *
  468.  *  IHXUserProperties:
  469.  *
  470.  * {00002807-0901-11d1-8B06-00A024406D59}
  471.  *
  472.  */
  473. DEFINE_GUID(IID_IHXUserProperties,   0x00002807, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  474. #undef  INTERFACE
  475. #define INTERFACE   IHXUserProperties
  476. DECLARE_INTERFACE_(IHXUserProperties, IUnknown)
  477. {
  478.     /*
  479.      * IUnknown methods
  480.      */
  481.     STDMETHOD(QueryInterface) (THIS_
  482. REFIID riid,
  483. void** ppvObj) PURE;
  484.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  485.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  486.     /************************************************************************
  487.      * Method:
  488.      *     IHXUserProperties::GetPrincipalID
  489.      * Purpose:
  490.      *     
  491.      *     Call this to determine the principalID of the authenticated user.
  492.      *
  493.      */
  494.     STDMETHOD(GetPrincipalID)(THIS_ REF(IHXBuffer*) pBufferPrincipalID) PURE;
  495.     /************************************************************************
  496.      * Method:
  497.      *     IHXUserProperties::GetAuthorityName
  498.      * Purpose:
  499.      *     
  500.      *     Call this to determine the authority name that authorized the 
  501.      *     authenticated user. (realm or domain name)
  502.      *
  503.      */
  504.     STDMETHOD(GetAuthorityName)(THIS_ REF(IHXBuffer*) pBufferAuthorityName) PURE;
  505. };
  506. /****************************************************************************
  507.  * 
  508.  *  Interface:
  509.  *
  510.  * IHXUserImpersonation
  511.  *
  512.  *  Purpose:
  513.  *
  514.  * This can be implemented by a user context in order to provide 
  515.  * the ability to have the server impersonate the currently authenticated
  516.  * user.
  517.  *
  518.  *  IHXUserImpersonation:
  519.  *
  520.  * {00002808-0901-11d1-8B06-00A024406D59}
  521.  *
  522.  */
  523. DEFINE_GUID(IID_IHXUserImpersonation,   0x00002808, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  524. #undef  INTERFACE
  525. #define INTERFACE   IHXUserImpersonation
  526. DECLARE_INTERFACE_(IHXUserImpersonation, IUnknown)
  527. {
  528.     /*
  529.      * IUnknown methods
  530.      */
  531.     STDMETHOD(QueryInterface) (THIS_
  532. REFIID riid,
  533. void** ppvObj) PURE;
  534.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  535.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  536.     /************************************************************************
  537.      * Method:
  538.      *     IHXUserImpersonation::Start
  539.      * Purpose:
  540.      *     
  541.      *     Call this to impersonate the authenticated user.
  542.      *
  543.      */
  544.     STDMETHOD(Start)(THIS) PURE;
  545.     /************************************************************************
  546.      * Method:
  547.      *     IHXUserImpersonation::Stop
  548.      * Purpose:
  549.      *     
  550.      *     Call this to stop impersonating the authenticated user.
  551.      *
  552.      */
  553.     STDMETHOD(Stop)(THIS) PURE;
  554. };
  555. /****************************************************************************
  556.  * 
  557.  *  Interface:
  558.  *
  559.  * IHXChallenge
  560.  *
  561.  *  Purpose:
  562.  *
  563.  * This is implemented by the server core in order to allow 
  564.  * additional exchanges of information with the client without
  565.  * creating a new request. (It is stored in the IHXRequest object
  566.  * and can be retrieved by calling IHXRequestContext::GetRequester()
  567.  * if it is absent then the protocol that this request was made on 
  568.  * does not support multi-message authentication (PNA doesn't) )
  569.  *
  570.  *  IHXChallenge:
  571.  *
  572.  * {0000280A-0901-11d1-8B06-00A024406D59}
  573.  *
  574.  */
  575. DEFINE_GUID(IID_IHXChallenge,   0x0000280A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  576. #undef  INTERFACE
  577. #define INTERFACE   IHXChallenge
  578. DECLARE_INTERFACE_(IHXChallenge, IUnknown)
  579. {
  580.     /*
  581.      * IUnknown methods
  582.      */
  583.     STDMETHOD(QueryInterface) (THIS_
  584. REFIID riid,
  585. void** ppvObj) PURE;
  586.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  587.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  588.     /************************************************************************
  589.      * Method:
  590.      *     IHXChallenge::SendChallenge
  591.      * Purpose:
  592.      *     
  593.      *     Call this to request additional information from the client.
  594.      *
  595.      *     pRequestChallenge should be the same Request object 
  596.      *     that was passed into MakeChallenge, it should contain
  597.      *     CString values for each MimeHeader it wishes to send to 
  598.      *     the client.
  599.      *
  600.      */
  601.     STDMETHOD(SendChallenge)
  602.     (
  603. THIS_
  604. IHXChallengeResponse* pChallengeResponseSender,
  605. IHXRequest* pRequestChallenge
  606.     ) PURE;
  607. };
  608. /****************************************************************************
  609.  * 
  610.  *  Interface:
  611.  *
  612.  * IHXChallengeResponse
  613.  *
  614.  *  Purpose:
  615.  *
  616.  * This is implemented by a server authenticator in order to 
  617.  * receive the Response returned by the client in response to 
  618.  * IHXChallenge::SendChallenge.
  619.  *
  620.  *  IHXChallengeResponse:
  621.  *
  622.  * {00002809-0901-11d1-8B06-00A024406D59}
  623.  *
  624.  */
  625. DEFINE_GUID(IID_IHXChallengeResponse,   0x00002809, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  626. #undef  INTERFACE
  627. #define INTERFACE   IHXChallengeResponse
  628. DECLARE_INTERFACE_(IHXChallengeResponse, IUnknown)
  629. {
  630.     /*
  631.      * IUnknown methods
  632.      */
  633.     STDMETHOD(QueryInterface) (THIS_
  634. REFIID riid,
  635. void** ppvObj) PURE;
  636.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  637.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  638.     /************************************************************************
  639.      * Method:
  640.      *     IHXChallengeResponse::ResponseReady
  641.      * Purpose:
  642.      *     
  643.      *     Called this to return the additional information requested 
  644.      *     from IHXChallenge::SendChallenge.
  645.      *
  646.      *     pRequestResponse should be the same Request object 
  647.      *     that was passed into MakeChallenge and SendChallenge.
  648.      *
  649.      */
  650.     STDMETHOD(ResponseReady)
  651.     (
  652. THIS_
  653. IHXRequest* pRequestResponse
  654.     ) PURE;
  655. };
  656. #endif //!_HXAUTHN_H_