示例#1
0
        internal PluggableProtocolRequest(
            PluggableProtocolHandler handler,
            string url,
            NativeMethods.IInternetBindInfo bind,
            NativeMethods.PI_FLAGS startFlags)
        {
            m_Url = new Uri(url);

            int bindf;

            NativeMethods.BINDINFO bindinfo = new NativeMethods.BINDINFO();

            bindinfo.cbSize = Marshal.SizeOf(typeof(NativeMethods.STGMEDIUM));
            bindinfo.cbSize = Marshal.SizeOf(typeof(NativeMethods.BINDINFO));

//            string userAgent=GetBindString(
//                bind,
//                NativeMethods.BINDSTRING.BINDSTRING_USERAGENT );
//
//            System.Diagnostics.Trace.WriteLine(
//                "useragent: "+GetBindString(bind,NativeMethods.BINDSTRING.BINDSTRING_USERAGENT)+"\r\n"+
//                "url: "+GetBindString(bind,NativeMethods.BINDSTRING.BINDSTRING_URL)+"\r\n"+
//                "post cookie: "+GetBindString(bind,NativeMethods.BINDSTRING.BINDSTRING_POST_COOKIE)+"\r\n"+
//                "post MIME: "+GetBindString(bind,NativeMethods.BINDSTRING.BINDSTRING_POST_DATA_MIME) );



            bind.GetBindInfo(out bindf, ref bindinfo);

            switch (bindinfo.dwBindVerb)
            {
            case NativeMethods.BINDVERB.BINDVERB_GET:     // GET

                m_Verb     = "GET";
                m_VerbData = null;
                break;

            case NativeMethods.BINDVERB.BINDVERB_POST:

                m_Verb     = "POST";
                m_VerbData = ExtractVerbData(bindinfo);

                break;

            case NativeMethods.BINDVERB.BINDVERB_PUT:

                m_Verb     = "PUT";
                m_VerbData = ExtractVerbData(bindinfo);

                break;

            case NativeMethods.BINDVERB.BINDVERB_CUSTOM:

                m_Verb     = Marshal.PtrToStringUni(bindinfo.szCustomVerb);
                m_VerbData = ExtractVerbData(bindinfo);

                break;
            }
        }
        void Start(
            string szUrl,
            NativeMethods.IInternetProtocolSink pOIProtSink,
            NativeMethods.IInternetBindInfo pOIBindInfo,
            NativeMethods.PI_FLAGS grfPI,
            int dwReserved)
        {
            lock ( sync )
            {
                m_Request = new PluggableProtocolRequest(this, szUrl, pOIBindInfo, grfPI);

                m_Response = new PluggableProtocolResponse(this, pOIProtSink);

                m_Started = true;
            }
            ErrorHandledOnStart(EventArgs.Empty);
        }
        void NativeMethods.IInternetProtocol.Start(
            string szUrl,
            NativeMethods.IInternetProtocolSink pOIProtSink,
            NativeMethods.IInternetBindInfo pOIBindInfo,
            NativeMethods.PI_FLAGS grfPI,
            int dwReserved)
        {
#if TRACE_INTERFACE_CALLS
            try
            {
#endif
            Start(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
#if TRACE_INTERFACE_CALLS
        }
        catch (Exception err)
        {
            throw err;
        }
#endif
        }
        void NativeMethods.IInternetProtocolRoot.Start(
            string szUrl,
            NativeMethods.IInternetProtocolSink pOIProtSink,
            NativeMethods.IInternetBindInfo pOIBindInfo,
            NativeMethods.PI_FLAGS grfPI,
            int dwReserved)
        {
#if TRACE_INTERFACE_CALLS
            TraceHelper.TraceMethod(this, szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
            try
            {
#endif
            Start(szUrl, pOIProtSink, pOIBindInfo, grfPI, dwReserved);
#if TRACE_INTERFACE_CALLS
        }

        catch (Exception err)
        {
            TraceHelper.TraceException(this, err);
            throw err;
        }
#endif
        }