Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

wwwhandler.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
#include "url.h"
#include "wwwhandler.h"

Data Structures

struct  cmd_dispatch_t

Defines

#define DEFAULT_TIMEOUT   (10*AW_TIMESTAMP_PER_SEC)
#define HTTP_CMD(cmd, tcd, handler)   { cmd, sizeof(cmd)-1, tcd, handler }
#define HTTP_HEADER(result_code, keywordblock)   result_code "Server: " AW_WWWHANDLER_SERVER "\r\n" keywordblock "\r\n"
#define MIME_TYPE(_suffix, _mime_type)

Functions

aw_wwwhandler_t * aw_create_wwwhandler (u_int32_t port, byte_t *docroot, aw_wwwhandler_options_t *options, aw_logger_t *logger)
 Create a www handler.

void aw_free_wwwhandler (aw_wwwhandler_t *h)
 Free handler and all associated resources.

int32_t aw_init_wwwhandler (aw_wwwhandler_t *h, u_int32_t port, byte_t *docroot, aw_wwwhandler_options_t *options, aw_logger_t *logger)
 Init a www handler.

int32_t aw_wwwhandler_append_cgipage (aw_wwwhandler_xtn_t *xtn, void *data, u_int32_t nbytes)
 Append to xtn->cgi.page.data.

aw_wwwhandler_io_code_t aw_wwwhandler_do_cgi (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, byte_t *prog)
aw_wwwhandler_io_code_t aw_wwwhandler_do_exec (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, const byte_t *prog, const byte_t *prog_argv[], const byte_t *httpheader)
 Run prog rebinding stdout to socket.

const byte_t * aw_wwwhandler_find_cgiheader_line (aw_wwwhandler_xtn_t *xtn, byte_t *key)
 Find string value associated with key from header in cgi GET or POST.

const byte_t * aw_wwwhandler_get_cgiarg (aw_wwwhandler_xtn_t *xtn, const byte_t *key)
 Find string value associated with key from form.

const byte_t * aw_wwwhandler_get_multi_cgiarg (aw_wwwhandler_xtn_t *xtn, const byte_t *key, const byte_t *last)
 Find string value associated with key from form for mutli select.

int32_t aw_wwwhandler_printf_cgipage (aw_wwwhandler_xtn_t *xtn, const char *fmt,...)
aw_wwwhandler_io_code_t aw_wwwhandler_tx_200 (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, time_t lastmod, u_int64_t size, int32_t max_age, byte_t *mime_type, byte_t *charset, byte_t *hdrs)
 Send a 200 response.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_cgi200 (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, byte_t *hdrs)
 Send 200 reponse for cgi page.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_cgipage (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn)
 Write xtn->cgi.page.data to socket and free at end of xtn.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_error (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, u_int32_t code, byte_t *message)
 Reply w/http error code.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_file (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn)
 Write file as content.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_header (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn)
 Write xtn->buffer to socket.

aw_wwwhandler_io_code_t aw_wwwhandler_tx_metadata (aw_handler_args_t *args, aw_wwwhandler_xtn_t *xtn, u_int32_t dir)
 Write metadata for file as HEAD response.


Define Documentation

#define DEFAULT_TIMEOUT   (10*AW_TIMESTAMP_PER_SEC)
 

#define HTTP_CMD (  cmd,
tcd,
handler   )     { cmd, sizeof(cmd)-1, tcd, handler }
 

#define HTTP_HEADER (  result_code,
keywordblock   )     result_code "Server: " AW_WWWHANDLER_SERVER "\r\n" keywordblock "\r\n"
 

#define MIME_TYPE (  _suffix,
_mime_type   ) 
 

Value:

{ \
.suffix = _suffix, .suffixlen = sizeof(_suffix)-1, .mime_type = _mime_type \
}


Function Documentation

aw_wwwhandler_t* aw_create_wwwhandler (  u_int32_t  port,
byte_t *  docroot,
aw_wwwhandler_options_t *  options,
aw_logger_t *  logger
) 
 

Create a www handler.

aw_create_wwwhandler

Parameters:
port Port
docroot Path of root of doc tree
options Constructor options (may be NULL)
logger Logger object
Returns:
Handler object

void aw_free_wwwhandler (  aw_wwwhandler_t *  p  ) 
 

Free handler and all associated resources.

aw_free_wwwhandler

Parameters:
p The handler

int32_t aw_init_wwwhandler (  aw_wwwhandler_t *  h,
u_int32_t  port,
byte_t *  docroot,
aw_wwwhandler_options_t *  options,
aw_logger_t *  logger
) 
 

Init a www handler.

aw_init_wwwhandler

Parameters:
h wwwhandler
port Port
docroot Path of root of doc tree
options Constructor options (may be NULL)
logger Logger object
Returns:
Non-zero on error

int32_t aw_wwwhandler_append_cgipage (  aw_wwwhandler_xtn_t *  xtn,
void *  data,
u_int32_t  nbytes
) 
 

Append to xtn->cgi.page.data.

aw_wwwhandler_append_cgipage

Parameters:
xtn Transaction
data Data to append
nbytes How much data
Returns:
0 on success, non-zero on error

aw_wwwhandler_io_code_t aw_wwwhandler_do_cgi (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
byte_t *  prog
) 
 

Todo:
CGI is not being done in the general sense (e.g., all the env vars), need to fix this

aw_wwwhandler_io_code_t aw_wwwhandler_do_exec (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
const byte_t *  prog,
const byte_t *  prog_argv[],
const byte_t *  httpheader
) 
 

Run prog rebinding stdout to socket.

aw_wwwhandler_do_exec

Parameters:
args Args
xtn Transaction
prog Path to prog
prog_argv Array of strings with prog 1st and NULL last (see execvp)
httpheader The http header string
Returns:
IO_OK on success

const byte_t* aw_wwwhandler_find_cgiheader_line (  aw_wwwhandler_xtn_t *  xtn,
byte_t *  key
)  [inline]
 

Find string value associated with key from header in cgi GET or POST.

aw_wwwhandler_find_cgiheader_line

Parameters:
xtn Transaction
key Header key
Returns:
Pointer to line or NULL if not found

const byte_t* aw_wwwhandler_get_cgiarg (  aw_wwwhandler_xtn_t *  xtn,
const byte_t *  key
)  [inline]
 

Find string value associated with key from form.

aw_wwwhandler_get_cgiarg

Parameters:
xtn Transaction
key Form key
Returns:
Pointer to value or NULL if not found

const byte_t* aw_wwwhandler_get_multi_cgiarg (  aw_wwwhandler_xtn_t *  xtn,
const byte_t *  key,
const byte_t *  last
)  [inline]
 

Find string value associated with key from form for mutli select.

aw_wwwhandler_get_multi_cgiarg

Parameters:
xtn Transaction
key Form key
last NULL on the 1st call then the output of previous calls to iterate
Returns:
Pointer to value or NULL if not found

int32_t aw_wwwhandler_printf_cgipage (  aw_wwwhandler_xtn_t *  xtn,
const char *  fmt,
... 
) 
 

aw_wwwhandler_io_code_t aw_wwwhandler_tx_200 (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
time_t  lastmod,
u_int64_t  size,
int32_t  max_age,
byte_t *  mime_type,
byte_t *  charset,
byte_t *  headers
) 
 

Send a 200 response.

aw_wwwhandler_tx_200

Parameters:
args Args
xtn Transaction
lastmod Last mod time for file
size File size for content
max_age If gt 0, then set Cache-Control: to max_age (seconds), else no-cache
mime_type Mime type for content
charset Character set to use (may be NULL to use handler default)
headers String of extra header lines
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_cgi200 (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
byte_t *  headers
) 
 

Send 200 reponse for cgi page.

aw_wwwhandler_tx_cgi200

Parameters:
args Args
xtn Transaction
headers String of extra header lines
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_cgipage (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn
) 
 

Write xtn->cgi.page.data to socket and free at end of xtn.

aw_wwwhandler_tx_cgibuffer

Parameters:
args Args
xtn Transaction
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_error (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
u_int32_t  code,
byte_t *  message
) 
 

Reply w/http error code.

aw_wwwhandler_tx_error

Parameters:
args Args
xtn Transaction
code Http error code
message HTML message (may be NULL)
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_file (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn
) 
 

Write file as content.

aw_wwwhandler_tx_file

Parameters:
args Args
xtn Transaction
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_header (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn
) 
 

Write xtn->buffer to socket.

aw_wwwhandler_tx_header

Parameters:
args Args
xtn Transaction
Returns:
IO_OK on success

aw_wwwhandler_io_code_t aw_wwwhandler_tx_metadata (  aw_handler_args_t *  args,
aw_wwwhandler_xtn_t *  xtn,
u_int32_t  dir
) 
 

Write metadata for file as HEAD response.

aw_wwwhandler_tx_metadata

Parameters:
args Args
xtn Transaction
dir If non-zero, append "/index.html" to end of path
Returns:
IO_OK on success

Aware 0.11.1 Copyright (C) 1998-2005 Russell Leighton (russ@elegant-software.com)