# Protocol Modules

A protocol module is invoked by the HTAccess module in order to access a document. Each protocol module is responsible for handling the transmission of a data object either from the application to a remote server, or vice verse.

The protocol modules are registered dynamically (using static linking) and the User's Guide describes how modules can be registered. Each protocol module is responsible for establishing the connection to the remote server (or the local file-system) and extract information using a specific access method. When data arrives from the network, it is passed on to the format manager.

Most of the protocol modules are now implemented as state machines in order to support libwww Threads. When the client parses a request to the library a HTRequest Structure is filled out and parsed to a load function in the access manager, for example HTLoadAnchor. HTRequest contains all information needed by the Library in order to fulfill a request.

File access
  This module provides access to files on a local file system. Due to general confusion of the "file://" access scheme in the URL Specifications tries FTP access on failure.
FTP access
  This is a complete state based FTP client which is capable of communicating with a lot of weird FTP servers. It uses `PASV` as the default method for establishing the data connection as `PORT` does not work if the application is run from a firewall machine, as is often the case with proxy server.
HTTP access
  The HTTP module handles document search and retrieve using the HTTP protocol. See also information on the current implementation of the HTTP client. The module is now a complete state machine which is a required functionality in the libwww thread model. It uses streams for both outgoing and incoming data, the outgoing stream is implemented in HTTPReq.c and the incoming stream in HTTP.c
News access
  The NNTP internet news protocol is handled by HTNews which builds a hypertext object.

  This module is under reconstruction!

Gopher access
  The internet gopher access to menus and flat files (and links to telnet nodes, WhoIs servers, CSO Name Server etc.) is handled by HTGopher Module.
Telnet access
  This module provides the possibility of running telnet sessions in a subshell. It also provides functionality for rlogin and tn3270.
WAIS access
  WAIS access is not compiled into the Library by default as it requires the freeWAIS library. This is easily changed in the platform dependent `Makefile.include` in the

      	WWW/All/<platform⁢

  directory. However, if this library is present then the application can communicate directly with a WAIS server. Otherwise it must go through a gateway program.