internal PluggableProtocolResponse(
     PluggableProtocolHandler handler,
     NativeMethods.IInternetProtocolSink sink)
 {
     this.handler = handler;
     this.m_Sink  = sink;
 }
        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
        }