/***********************************************************************
* Code listing from "Advanced Linux Programming," by CodeSourcery LLC *
* Copyright (C) 2001 by New Riders Publishing *
* See COPYRIGHT for license information. *
***********************************************************************/
#ifndef SERVER_H
#define SERVER_H
#include
#include
/*** Symbols defined in common.c. ************************************/
/* The name of this program. */
extern const char* program_name;
/* If non-zero, print verbose messages. */
extern int verbose;
/* Like malloc, except aborts the program if allocation fails. */
extern void* xmalloc (size_t size);
/* Like realloc, except aborts the program if allocation fails. */
extern void* xrealloc (void* ptr, size_t size);
/* Like strdup, except aborts the program if allocation fails. */
extern char* xstrdup (const char* s);
/* Print an error message for a failed call OPERATION, using the value
of errno, and end the program. */
extern void system_error (const char* operation);
/* Print an error message for failure involving CAUSE, including a
descriptive MESSAGE, and end the program. */
extern void error (const char* cause, const char* message);
/* Return the directory containing the running program's executable.
The return value is a memory buffer which the caller must deallocate
using free. This function calls abort on failure. */
extern char* get_self_executable_directory ();
/*** Symbols defined in module.c **************************************/
/* An instance of a loaded server module. */
struct server_module {
/* The shared library handle corresponding to the loaded module. */
void* handle;
/* A name describing the module. */
const char* name;
/* The function which generates the HTML results for this module. */
void (* generate_function) (int);
};
/* The directory from which modules are loaded. */
extern char* module_dir;
/* Attempt to load a server module with the name MODULE_PATH. If a
server module exists with this path, loads the module and returns a
server_module structure representing it. Otherwise, returns NULL. */
extern struct server_module* module_open (const char* module_path);
/* Close a server module and deallocate the MODULE object. */
extern void module_close (struct server_module* module);
/*** Symbols defined in server.c. ************************************/
/* Run the server on LOCAL_ADDRESS and PORT. */
extern void server_run (struct in_addr local_address, uint16_t port);
#endif /* SERVER_H */