# Module httpserver

This module implements a simple HTTP-Server.

Example:

    import strutils, sockets, httpserver

    var counter = 0
    proc handleRequest(client: TSocket, path, query: string): bool {.procvar.} =
      inc(counter)
      client.send("Hello for the $#th time." % $counter & wwwNL)
      return false # do not stop processing

    run(handleRequest, TPort(80))

# Imports

parseutils, strutils, os, osproc, strtabs, streams, sockets, asyncio

# Types

    TServer* = object of TObject
      socket: TSocket
      port: TPort
      client*: TSocket            ## the socket to write the file data to
      reqMethod*: string          ## Request method. GET or POST.
      path*, query*: string       ## path and query the client requested
      headers*: PStringTable      ## headers with which the client made the request
      body*: string               ## only set with POST requests
      ip*: string                 ## ip address of the requesting client

  contains the current server state

    PAsyncHTTPServer* = ref TAsyncHTTPServer

# Consts

    wwwNL* = "\x0D\x0A"

# Procs

    proc serveFile*(client: TSocket; filename: string)

  serves a file to the client.

    proc open*(s: var TServer; port = TPort(80))

  creates a new server at port port. If `port == 0` a free port is acquired that can be accessed later by the `port` proc.

    proc port*(s: var TServer): TPort

  get the port number the server has acquired.

    proc next*(s: var TServer)

  proceed to the first/next request.

    proc close*(s: TServer)

  closes the server (and the socket the server uses).

    proc run*(handleRequest: proc (client: TSocket; path, query: string): bool {.
        closure.}; port = TPort(80))

  encapsulates the server object and main loop

    proc asyncHTTPServer*(handleRequest: proc (server: PAsyncHTTPServer;
        client: TSocket; path, query: string): bool {.closure.}; port = TPort(80);
                          address = ""): PAsyncHTTPServer

  Creates an Asynchronous HTTP server at `port`.

    proc register*(d: PDispatcher; s: PAsyncHTTPServer)

  Registers a `PAsyncHTTPServer` with a `PDispatcher`.

    proc close*(h: PAsyncHTTPServer)

  Closes the `PAsyncHTTPServer`.

Generated: 2012-09-23 21:47:54 UTC