コード例 #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;
            }
        }
コード例 #2
0
        byte[] ExtractVerbData(NativeMethods.BINDINFO bindinfo)
        {
            if (bindinfo.cbstgmedData == 0)//|| bindinfo.stgmedData==IntPtr.Zero )
            {
                return(null);
            }

            NativeMethods.STGMEDIUM med = bindinfo.stgmedData;// (NativeMethods.STGMEDIUM)( Marshal.PtrToStructure(bindinfo.stgmedData,typeof(NativeMethods.STGMEDIUM)) );

            if ((med.tymed & NativeMethods.TYMED.TYMED_HGLOBAL) == 0)
            {
                return(null);
            }

            IStream pStream = null;

            int hresult = NativeMethods.CreateStreamOnHGlobal(
                med.hGlobal,
                0, out pStream);

            Marshal.ThrowExceptionForHR(hresult);

            try
            {
                if (pStream == null)
                {
                    return(null);
                }

                byte[] result = new byte[(int)bindinfo.cbstgmedData];

                pStream.Read(result, result.Length, IntPtr.Zero);

                return(result);
            }
            finally
            {
                Marshal.ReleaseComObject(pStream);
            }
        }