namespace ProtocolPlugin
{       
    // This client-implemented managed interface, 
    // called each time the new request must be processed.
    public interface iProtoPlug
    {

        // Is called by unmanaged code when the new request should be processed.

        // You must return the text/html data stream, encoded in UTF-8.

        // The return value is the document length in bytes.

        // 'url' is the full URL requested by the browser, including the protocol fraction.

        int getStream( string url, out Stream objStream );
    }
 
    // This managed class represents the main DLL entry point.
    public class ProtoPlug : IDisposable
    {

        // 'strProtocol' is the fraction of the URLs that comes before the "://" characters.

        // 'handler' is managed client-implemented object that generates the HTML content when requested.

        public ProtoPlug( string strProtocol, iProtoPlug handler );
    }
}