Annotation of embedaddon/strongswan/src/libfast/fast_request.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2007 Martin Willi
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: /**
! 17: * @defgroup fast_request fast_request
! 18: * @{ @ingroup libfast
! 19: */
! 20:
! 21: #ifndef FAST_REQUEST_H_
! 22: #define FAST_REQUEST_H_
! 23:
! 24: #include <fcgiapp.h>
! 25: #include <library.h>
! 26:
! 27: typedef struct fast_request_t fast_request_t;
! 28:
! 29: /**
! 30: * A HTTP request, encapsulates FCGX_Request.
! 31: *
! 32: * The response is also handled through the request object.
! 33: */
! 34: struct fast_request_t {
! 35:
! 36: /**
! 37: * Add a cookie to the reply (Set-Cookie header).
! 38: *
! 39: * @param name name of the cookie to set
! 40: * @param value value of the cookie
! 41: */
! 42: void (*add_cookie)(fast_request_t *this, char *name, char *value);
! 43:
! 44: /**
! 45: * Get a cookie the client sent in the request.
! 46: *
! 47: * @param name name of the cookie
! 48: * @return cookie value, NULL if no such cookie found
! 49: */
! 50: char* (*get_cookie)(fast_request_t *this, char *name);
! 51:
! 52: /**
! 53: * Get the request path relative to the application.
! 54: *
! 55: * @return path
! 56: */
! 57: char* (*get_path)(fast_request_t *this);
! 58:
! 59: /**
! 60: * Get the base path of the application.
! 61: *
! 62: * @return base path
! 63: */
! 64: char* (*get_base)(fast_request_t *this);
! 65:
! 66: /**
! 67: * Get the remote host address of this request.
! 68: *
! 69: * @return host address as string
! 70: */
! 71: char* (*get_host)(fast_request_t *this);
! 72:
! 73: /**
! 74: * Get the user agent string.
! 75: *
! 76: * @return user agent string
! 77: */
! 78: char* (*get_user_agent)(fast_request_t *this);
! 79:
! 80: /**
! 81: * Get a post/get variable included in the request.
! 82: *
! 83: * @param name name of the POST/GET variable
! 84: * @return value, NULL if not found
! 85: */
! 86: char* (*get_query_data)(fast_request_t *this, char *name);
! 87:
! 88: /**
! 89: * Get an arbitrary environment variable.
! 90: *
! 91: * @param name name of the environment variable
! 92: * @return value, NULL if not found
! 93: */
! 94: char* (*get_env_var)(fast_request_t *this, char *name);
! 95:
! 96: /**
! 97: * Read raw POST/PUT data from HTTP request.
! 98: *
! 99: * @param buf buffer to read data into
! 100: * @param len size of the supplied buffer
! 101: * @return number of bytes read, < 0 on error
! 102: */
! 103: int (*read_data)(fast_request_t *this, char *buf, int len);
! 104:
! 105: /**
! 106: * Close the session and it's context after handling.
! 107: */
! 108: void (*close_session)(fast_request_t *this);
! 109:
! 110: /**
! 111: * Has the session been closed by close_session()?
! 112: *
! 113: * @return TRUE if session has been closed
! 114: */
! 115: bool (*session_closed)(fast_request_t *this);
! 116:
! 117: /**
! 118: * Redirect the client to another location.
! 119: *
! 120: * @param fmt location format string
! 121: * @param ... variable argument for fmt
! 122: */
! 123: void (*redirect)(fast_request_t *this, char *fmt, ...);
! 124:
! 125: /**
! 126: * Get the HTTP referer.
! 127: *
! 128: * @return HTTP referer
! 129: */
! 130: char* (*get_referer)(fast_request_t *this);
! 131:
! 132: /**
! 133: * Redirect back to the referer.
! 134: */
! 135: void (*to_referer)(fast_request_t *this);
! 136:
! 137: /**
! 138: * Set a template value.
! 139: *
! 140: * @param key key to set
! 141: * @param value value to set key to
! 142: */
! 143: void (*set)(fast_request_t *this, char *key, char *value);
! 144:
! 145: /**
! 146: * Set a template value using format strings.
! 147: *
! 148: * Format string is in the form "key=value", where printf like format
! 149: * substitution occurs over the whole string.
! 150: *
! 151: * @param format printf like format string
! 152: * @param ... variable argument list
! 153: */
! 154: void (*setf)(fast_request_t *this, char *format, ...);
! 155:
! 156: /**
! 157: * Render a template.
! 158: *
! 159: * The render() function additionally sets a HDF variable "base"
! 160: * which points to the root of the web application and allows to point to
! 161: * other targets without to worry about path location.
! 162: *
! 163: * @param template clearsilver template file location
! 164: */
! 165: void (*render)(fast_request_t *this, char *template);
! 166:
! 167: /**
! 168: * Stream a format string to the client.
! 169: *
! 170: * Stream is not closed and may be called multiple times to allow
! 171: * server-push functionality.
! 172: *
! 173: * @param format printf like format string
! 174: * @param ... argument list to format string
! 175: * @return number of streamed bytes, < 0 if stream closed
! 176: */
! 177: int (*streamf)(fast_request_t *this, char *format, ...);
! 178:
! 179: /**
! 180: * Serve a request with headers and a body.
! 181: *
! 182: * @param headers HTTP headers, \n separated
! 183: * @param chunk body to write to output
! 184: */
! 185: void (*serve)(fast_request_t *this, char *headers, chunk_t chunk);
! 186:
! 187: /**
! 188: * Send a file from the file system.
! 189: *
! 190: * @param path path to file to serve
! 191: * @param mime mime type of file to send, or NULL
! 192: * @return TRUE if file served successfully
! 193: */
! 194: bool (*sendfile)(fast_request_t *this, char *path, char *mime);
! 195:
! 196: /**
! 197: * Increase the reference count to the stream.
! 198: *
! 199: * @return this with increased refcount
! 200: */
! 201: fast_request_t* (*get_ref)(fast_request_t *this);
! 202:
! 203: /**
! 204: * Destroy the fast_request_t.
! 205: */
! 206: void (*destroy) (fast_request_t *this);
! 207: };
! 208:
! 209: /**
! 210: * Create a request from the fastcgi struct.
! 211: *
! 212: * @param fd file descripter opened with FCGX_OpenSocket
! 213: * @param debug no stripping, no compression, timing information
! 214: */
! 215: fast_request_t *fast_request_create(int fd, bool debug);
! 216:
! 217: #endif /** REQUEST_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>