
// Sends a response. The URL to be sent, additional HTTP headers,
// content length and optional header and trailer are specified
// sequentially in the request buffers

VOID
TwcSendFile(
    HANDLE Request,
    ULONG HTTPHeaderSize,
    ULONG ContentHeaderSize,
    ULONG URLLen,
    ULONG ContentTailSize
);

// Sends a response. The file to be sent, additional HTTP headers,
// content length and optional header and trailer are specified in the
request
// buffers. The filename is relative to the current directory.

VOID
TwcSendLargeFile(
    HANDLE Request,
    ULONG HTTPHeaderSize,
    ULONG ContentHeaderSize,
    ULONG FileNameLen,
    ULONG ContentTailSize
);

// Send a short message. The data itself is in the request buffer

VOID
TwcSendMessage(
    HANDLE Request,
    ULONG HTTPHeaderSize,
    ULONG ContentHeaderSize,
    ULONG ContentSize,
    ULONG ContentTailSize
);

// Send the Request structure's file buffer. Useful for larger responses

VOID
TwcSendBuffer(
    HANDLE Request,
    ULONG HTTPHeaderSize,
    ULONG ContentHeaderSize,
    ULONG BufSize,
    ULONG ContentTailSize
);

// Use SWC to read a file. The file is avaialable in the file buffer

VOID
TwcReadFile(
    HANDLE Request,
    PCHAR QueryString,
    ULONG QueryStringSize
);

// Utility routines to get information about the request

ULONG TwcQueryIpAddress(HANDLE Request);
PCHAR TwcQueryHttpRequest(HANDLE Request);
ULONG TwcQueryHttpRequestSize(HANDLE Request);
PCHAR TwcQueryRequestBuffer(HANDLE Request);

ULONG TwcQueryCurrentThreadId(HANDLE Request);

// buffers for reading and writing data

PCHAR TwcGetFileBuffer(HANDLE Request);
ULONG TwcGetFileBufferSize(HANDLE Request);

// Register function for request processing

VOID TwcRegisterCallback(PVOID callback);

// Create NumberOfProcessor threads and allocates NumberOfFileBuffers
buffers
// for request processing

ULONG TwcCreateThreads(ULONG NumberOfProcessors, ULONG
NumberOfFileBuffers);

// Init SWC

VOID TwcOpenSwcDevice();
