News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

Troubles with WinHTTP

Started by sasaers, March 20, 2015, 10:05:24 AM

Previous topic - Next topic

sasaers

Hi guys. While reading about WinHTTP I found one problem I can't solve. It's about IWinHttpRequest::SetProxy method. How to use methods in MASM? I tried to find it in export table of winhttp.dll  but it doesn't exist.



Thanks!

dedndave

it's a COM interface - the masm32 package doesn't have all the necessary includes
we generally make our own for COM

dedndave

as COM interfaces go, this one's not too bad

this is from the platform sdk, httprequest.idl file

#include "httprequestid.h"




[
    uuid(662901fc-6951-4854-9eb2-d9a2570f2b2e),
    helpstring("Microsoft WinHTTP Services, version 5.1"),
    lcid(0x0000),
    version(5.1)

]
library WinHttp
{
    importlib ("stdole2.tlb");

    typedef [public] long   HTTPREQUEST_PROXY_SETTING;
    const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT    = 0x00000000;
    const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG  = 0x00000000;
    const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT     = 0x00000001;
    const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY      = 0x00000002;

    typedef [public] long   HTTPREQUEST_SETCREDENTIALS_FLAGS;
    const HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_SERVER   = 0x00000000;
    const HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_PROXY    = 0x00000001;

    typedef
    [uuid(12782009-FE90-4877-9730-E5E183669B19), helpstring("WinHttpRequest Options")]
    enum WinHttpRequestOption
    {
        WinHttpRequestOption_UserAgentString,
        WinHttpRequestOption_URL,
        WinHttpRequestOption_URLCodePage,
        WinHttpRequestOption_EscapePercentInURL,
        WinHttpRequestOption_SslErrorIgnoreFlags,
        WinHttpRequestOption_SelectCertificate,
        WinHttpRequestOption_EnableRedirects,
        WinHttpRequestOption_UrlEscapeDisable,
        WinHttpRequestOption_UrlEscapeDisableQuery,
        WinHttpRequestOption_SecureProtocols,
        WinHttpRequestOption_EnableTracing,
        WinHttpRequestOption_RevertImpersonationOverSsl,
        WinHttpRequestOption_EnableHttpsToHttpRedirects,
        WinHttpRequestOption_EnablePassportAuthentication,
        WinHttpRequestOption_MaxAutomaticRedirects,
        WinHttpRequestOption_MaxResponseHeaderSize,
        WinHttpRequestOption_MaxResponseDrainSize,
        WinHttpRequestOption_EnableHttp1_1,
        WinHttpRequestOption_EnableCertificateRevocationCheck
    } WinHttpRequestOption;

    typedef
    [uuid(9d8a6df8-13de-4b1f-a330-67c719d62514)]
    enum WinHttpRequestAutoLogonPolicy
    {
        AutoLogonPolicy_Always,
        AutoLogonPolicy_OnlyIfBypassProxy,
        AutoLogonPolicy_Never
    } WinHttpRequestAutoLogonPolicy;

    typedef
    [uuid(152a1ca2-55a9-43a3-b187-0605bb886349)]
    enum WinHttpRequestSslErrorFlags
    {
        SslErrorFlag_UnknownCA       = 0x00000100,
        SslErrorFlag_CertWrongUsage  = 0x00000200,
        SslErrorFlag_CertCNInvalid   = 0x00001000,
        SslErrorFlag_CertDateInvalid = 0x00002000,
        SslErrorFlag_Ignore_All      = 0x00003300
    } WinHttpRequestSslErrorFlags;


    typedef
    [uuid(6b2c51c1-a8ea-46bd-b928-c9b76f9f14dd)]
    enum WinHttpRequestSecureProtocols
    {
        SecureProtocol_SSL2 = 0x00000008,
        SecureProtocol_SSL3 = 0x00000020,
        SecureProtocol_TLS1 = 0x00000080,
        SecureProtocol_ALL  = 0x000000A8
    } WinHttpRequestSecureProtocols;


    [
        object,
        uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b),
        odl,
        dual,
        oleautomation,
        nonextensible,
        helpstring("IWinHttpRequest Interface"),
        pointer_default(unique)
    ]
    interface IWinHttpRequest : IDispatch
    {
        [id(DISPID_HTTPREQUEST_SETPROXY), helpstring("Specify proxy configuration")]
        HRESULT SetProxy([in] HTTPREQUEST_PROXY_SETTING ProxySetting,
                         [in, optional] VARIANT ProxyServer,
                         [in, optional] VARIANT BypassList);

        [id(DISPID_HTTPREQUEST_SETCREDENTIALS), helpstring("Specify authentication credentials")]
        HRESULT SetCredentials([in] BSTR UserName,
                         [in] BSTR Password,
[in] HTTPREQUEST_SETCREDENTIALS_FLAGS Flags);

        [id(DISPID_HTTPREQUEST_OPEN), helpstring("Open HTTP connection")]
        HRESULT Open([in] BSTR Method, [in] BSTR Url, [in, optional] VARIANT Async);

        [id(DISPID_HTTPREQUEST_SETREQUESTHEADER), helpstring("Add HTTP request header")]
        HRESULT SetRequestHeader([in] BSTR Header, [in] BSTR Value);

        [id(DISPID_HTTPREQUEST_GETRESPONSEHEADER), helpstring("Get HTTP response header")]
        HRESULT GetResponseHeader([in] BSTR Header, [out, retval] BSTR * Value);

        [id(DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS), helpstring("Get all HTTP response headers")]
        HRESULT GetAllResponseHeaders([out, retval] BSTR * Headers);

        [id(DISPID_HTTPREQUEST_SEND), helpstring("Send HTTP request")]
        HRESULT Send([in, optional] VARIANT Body);

        [propget, id(DISPID_HTTPREQUEST_STATUS),  helpstring("Get HTTP status code")]
        HRESULT Status([out, retval] long * Status);

        [propget, id(DISPID_HTTPREQUEST_STATUSTEXT),  helpstring("Get HTTP status text")]
        HRESULT StatusText([out, retval] BSTR * Status);

        [propget, id(DISPID_HTTPREQUEST_RESPONSETEXT),  helpstring("Get response body as a string")]
        HRESULT ResponseText([out, retval] BSTR * Body);

        [propget, id(DISPID_HTTPREQUEST_RESPONSEBODY), helpstring("Get response body as a safearray of UI1")]
        HRESULT ResponseBody([out, retval] VARIANT * Body);

        [propget, id(DISPID_HTTPREQUEST_RESPONSESTREAM), helpstring("Get response body as a stream")]
        HRESULT ResponseStream([out, retval] VARIANT * Body);

        [propget, id(DISPID_HTTPREQUEST_OPTION)]
        HRESULT Option([in] WinHttpRequestOption Option, [out, retval] VARIANT * Value);

        [propput, id(DISPID_HTTPREQUEST_OPTION)]
        HRESULT Option([in] WinHttpRequestOption Option, [in] VARIANT Value);

        [id(DISPID_HTTPREQUEST_WAITFORRESPONSE), helpstring("Wait for asynchronous send to complete, with optional timeout (in seconds)")]
        HRESULT WaitForResponse([in, optional] VARIANT Timeout, [out, retval] VARIANT_BOOL * Succeeded);

        [id(DISPID_HTTPREQUEST_ABORT), helpstring("Abort an asynchronous operation in progress")]
        HRESULT Abort();

        [id(DISPID_HTTPREQUEST_SETTIMEOUTS), helpstring("Specify timeout settings (in milliseconds)")]
        HRESULT SetTimeouts([in] long ResolveTimeout, [in] long ConnectTimeout, [in] long SendTimeout, [in] long ReceiveTimeout);

        [id(DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE), helpstring("Specify a client certificate")]
        HRESULT SetClientCertificate([in] BSTR ClientCertificate);

        [id(DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY), helpstring("Specify if credentials should be sent automatically")]
        HRESULT SetAutoLogonPolicy([in] WinHttpRequestAutoLogonPolicy AutoLogonPolicy);
    };

    [
        object,
        uuid(f97f4e15-b787-4212-80d1-d380cbbf982e),
        odl,
        oleautomation,
        nonextensible,
        helpstring("IWinHttpRequestEvents Interface"),
        pointer_default(unique)
    ]
    interface IWinHttpRequestEvents : IUnknown
    {
        void OnResponseStart([in] long Status, [in] BSTR ContentType);

        void OnResponseDataAvailable([in] SAFEARRAY(unsigned char) * Data);

        void OnResponseFinished();

        void OnError([in] long ErrorNumber, [in] BSTR ErrorDescription);
    };


    // WinHttpRequest Class
    [
        uuid(2087c2f4-2cef-4953-a8ab-66779b670495),
        helpstring("WinHttpRequest component")
    ]
    coclass WinHttpRequest
    {   
        [default] interface IWinHttpRequest;
        [default, source] interface IWinHttpRequestEvents;
    };
}