21 #define AFW_IMPLEMENTATION_ID "afw_server_fcgi"
22 #define AFW_IMPLEMENTATION_SPECIFIC NULL
37 impl_afw_request_read_raw_request_body(
39 size, (
void *)buffer, &size_read, more_to_read, xctx);
46 impl_write_content_cb(
53 impl_afw_request_write_raw_response_body(
64 FCGX_Request *fcgx_request,
77 self->pub.inf = &impl_afw_request_inf;
78 self->pub.xctx = xctx;
79 self->fcgx_request = fcgx_request;
80 self->server = server;
81 self->pub.read_content_cb = impl_read_content_cb;
82 self->pub.write_content_cb = impl_write_content_cb;
95 server->environment_variables_object,
true, xctx->p, xctx);
109 if (!self->pub.uri || self->pub.uri->len == 0) {
112 if (self->pub.uri && self->pub.uri->len != 0) {
113 for (c = self->pub.uri->s, len = self->pub.uri->len;
118 self->pub.uri->s, c - self->pub.uri->s,
124 if (!self->pub.uri || self->pub.uri->len == 0) {
127 " property required", xctx);
141 self->pub.properties,
149 self->pub.content_length = atoi(length_z);
171 impl_afw_request_release(
189 impl_afw_request_set_error_info(
197 self->pub.error_info = error_info;
206 impl_afw_request_read_raw_request_body(
217 unsigned char *b = buffer;
220 if (self->state > afw_request_state_content_read) {
222 "read_request_body() called out of order", xctx);
224 self->state = afw_request_state_content_read;
229 for (*size = 0; *size < buffer_size; (*size)++) {
230 c = FCGX_GetChar(self->fcgx_request->in);
245 impl_afw_request_set_response_status_code(
256 if (self->state >= afw_request_state_status_set) {
259 self->state = afw_request_state_status_set;
266 rv = FCGX_FPrintF(self->fcgx_request->out,
272 rv = FCGX_FPrintF(self->fcgx_request->out,
278 "FCGX_FPrintF() failed", xctx);
288 impl_afw_request_write_response_header(
299 if (self->state > afw_request_state_header_written) {
301 "write_response_header() called out of order", xctx);
303 self->state = afw_request_state_header_written;
306 rv = FCGX_FPrintF(self->fcgx_request->out,
311 "FCGX_FPrintF() failed.", xctx);
321 impl_afw_request_write_raw_response_body(
329 apr_size_t remaining;
335 if (self->state > afw_request_state_response_written) {
337 "write_response_body() called out of order", xctx);
341 if (self->state < afw_request_state_response_written) {
343 self->fcgx_request->out);
346 "FCGX_PutStr() failed", xctx);
351 self->state = afw_request_state_response_written;
354 for (next = (
const char *)buffer, remaining = size;
357 remaining = remaining - n)
359 n = (remaining > INT_MAX) ? INT_MAX : (
int)remaining;
360 rv = FCGX_PutStr(next, n, self->fcgx_request->out);
363 "FCGX_PutStr() failed", xctx);
374 impl_afw_request_flush_response(
382 rv = FCGX_FFlush(self->fcgx_request->out);
385 "FCGX_FFlush() failed", xctx);
395 impl_afw_request_finish_response(
405 if (self->state < afw_request_state_response_written) {
407 self->fcgx_request->out);
410 "FCGX_PutStr() failed", xctx);
415 if (self->state >= afw_request_state_response_finished) {
417 "finish_response() called out of order", xctx);
419 self->state = afw_request_state_response_finished;
425 rv = FCGX_FFlush(self->fcgx_request->out);
428 "FCGX_FFlush() failed", xctx);
Adaptive Framework Core API.
Interface afw_interface implementation declares.
Internal header file for AFW FCGI Server.
const afw_object_t * afw_server_fcgi_internal_create_properties_object(afw_server_fcgi_internal_request_t *request, afw_xctx_t *xctx)
afw_server_fcgi_internal_request_t * afw_server_fcgi_internal_create_request(afw_server_fcgi_internal_t *server, FCGX_Request *fcgx_request, afw_xctx_t *xctx)
#define AFW_UTF8_FMT_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify arg.
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
afw_utf8_octet_t afw_utf8_z_t
NFC normalized UTF-8 null terminated string.
char afw_utf8_octet_t
8 bits of utf-8 codepoint.
apr_size_t afw_size_t
size_t.
#define AFW_THROW_ERROR_RV_Z(code, rv_source_id, rv, message_z, xctx)
Macro used to set error and rv in xctx and throw it.
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
#define afw_object_get_property(instance, property_name, xctx)
Call method get_property of interface afw_object.
afw_object_old_get_property_as_utf8(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Get an object's property value as a string in specified pool.
#define AFW_REQUEST_Q_PN_REQUEST_URI
Request property name REQUEST_URI quoted string.
#define AFW_REQUEST_Q_PN_PATH_INFO
Request property name PATH_INFO quoted string.
#define AFW_REQUEST_s_PN_QUERY_STRING
Request property name QUERY_STRING afw_utf8_t.
#define AFW_REQUEST_Q_PN_QUERY_STRING
Request property name QUERY_STRING quoted string.
#define AFW_REQUEST_s_PN_CONTENT_TYPE
Request property name CONTENT_TYPE afw_utf8_t.
#define AFW_REQUEST_s_PN_PATH_INFO
Request property name PATH_INFO afw_utf8_t.
#define AFW_REQUEST_s_PN_REQUEST_URI
Request property name REQUEST_URI afw_utf8_t.
#define AFW_REQUEST_s_PN_REQUEST_METHOD
Request accept header REQUEST_METHOD afw_utf8_t.
#define AFW_REQUEST_Q_PN_REQUEST_METHOD
Request property name REQUEST_METHOD quoted string.
#define AFW_REQUEST_s_PN_CONTENT_LENGTH
Request property name CONTENT_LENGTH afw_utf8_t.
#define AFW_REQUEST_s_PN_HTTP_ACCEPT
Request property name HTTP_ACCEPT afw_utf8_t.
afw_runtime_xctx_set_object(const afw_object_t *object, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set an object pointer in the xctx's runtime objects.
afw_utf8_parse_csv(const afw_utf8_t *s, const afw_pool_t *p, afw_xctx_t *xctx)
Check to see if a string equals a utf8_z string.
#define afw_utf8_create(s, len, p, xctx)
Create utf-8 string without copy unless necessary in pool specified.
afw_value_as_utf8(const afw_value_t *value, const afw_pool_t *p, afw_xctx_t *xctx)
afw_value_as_utf8_z(const afw_value_t *value, const afw_pool_t *p, afw_xctx_t *xctx)
afw_xctx_push_qualifier_object(const afw_utf8_t *qualifier_name, const afw_object_t *qualifier_object, afw_boolean_t secure, const afw_pool_t *p, afw_xctx_t *xctx)
Push qualifier object on to stack.
#define afw_xctx_calloc_type(type, xctx)
Macro to allocate cleared memory to hold type in xctx's pool.
Interface afw_object public struct.
Interface afw_pool public struct.
Interface afw_request public struct.
NFC normalized UTF-8 string.
Interface afw_value public struct.
Interface afw_xctx public struct.