30 if (xctx->stream_anchor) {
33 *streamNumber = (
afw_size_t)afw_stream_number_stdout;
37 *streamNumber = (
afw_size_t)afw_stream_number_stderr;
41 *streamNumber = (
afw_size_t)afw_stream_number_console;
45 *streamNumber = (
afw_size_t)afw_stream_number_response_body;
49 *streamNumber = (
afw_size_t)afw_stream_number_raw_response_body;
51 else for (streams = xctx->stream_anchor->streams,
52 number = afw_stream_number_count;
53 number < xctx->stream_anchor->maximum_number_of_streams;
75 if (streamNumber >= 0 && streamNumber < afw_stream_number_count) {
83 if (xctx->stream_anchor &&
85 number == streamNumber &&
86 number < xctx->stream_anchor->maximum_number_of_streams)
88 stream = xctx->stream_anchor->streams[number];
105 &stream, &streamNumber, xctx);
122 if (xctx->stream_anchor) {
123 for (streams = (
const afw_stream_t **)xctx->stream_anchor->streams,
125 count < xctx->stream_anchor->maximum_number_of_streams;
134 else if (number == -1) {
139 streams[number] = stream;
157 if (n < 0 || n >= afw_stream_number_count) {
159 "afw_stream_standard_impl() n parameter out of range",
163 response_content_type = (xctx->request)
164 ? afw_request_prepare_response_content_type(xctx->request, xctx)
167 if (!stream_anchor->streams[n]) {
168 stream = (
const afw_stream_t **)&stream_anchor->streams[n];
171 case afw_stream_number_raw_response_body:
173 *stream = afw_request_response_body_raw_writer_create(
174 xctx->request, xctx);
178 &afw_s_raw_response_body,
false,
true,
true,
false,
183 case afw_stream_number_response_body:
188 &afw_s_response, NULL, xctx->p, xctx);
195 case afw_stream_number_console:
197 &afw_s_a_flag_response_console_stream, xctx))
203 &afw_s_console, NULL, xctx->p, xctx);
207 "flag response:console:stream requires content-type "
213 &afw_s_a_flag_response_console, xctx))
220 &afw_s_console,
false,
true,
true,
false, xctx->p, xctx);
224 case afw_stream_number_stderr:
226 &afw_s_a_flag_response_stderr_stream, xctx))
232 &afw_s_stderr, NULL, xctx->p, xctx);
236 "flag response:stderr:stream requires content-type "
242 &afw_s_a_flag_response_stderr, xctx))
249 &afw_s_stderr,
false,
true,
true,
false, xctx->p, xctx);
253 case afw_stream_number_stdout:
255 &afw_s_a_flag_response_stdout_stream, xctx))
261 &afw_s_stdout, NULL, xctx->p, xctx);
265 "flag response:stdout:stream requires content-type "
271 &afw_s_a_flag_response_stdout, xctx))
278 &afw_s_stdout,
false,
true,
true,
false, xctx->p, xctx);
287 return stream_anchor->streams[n];
297 afw_stream_internal_stream_anchor_create(
afw_xctx_t *xctx)
303 stream_anchor->maximum_number_of_streams = afw_stream_number_count + 20;
305 stream_anchor->maximum_number_of_streams *
sizeof(
afw_stream_t *));
307 return stream_anchor;
313 afw_stream_internal_release_all_streams(
afw_xctx_t *xctx)
318 for (i = 0; i < afw_stream_number_count; i++) {
319 if (xctx->stream_anchor->streams[i] &&
320 i != afw_stream_number_raw_response_body)
323 *(
afw_stream_t **)&xctx->stream_anchor->streams[i] = NULL;
332 &xctx->stream_anchor->streams[afw_stream_number_raw_response_body]
AFW_DEFINE(const afw_object_t *)
#define AFW_DEFINE_INTERNAL(type)
Define an internal function for /src/afw/ source*.c files.
Adaptive Framework Core Internal.
#define AFW_SIZE_T_MAX_BUFFER
this is the maximum number of digits that can be produced by afw_size_t plus null terminator.
#define AFW_INTEGER_FMT
Format string specifier used for afw_integer_t.
apr_size_t afw_size_t
size_t.
#define AFW_SIZE_T_FMT
Format string specifier used for afw_size_t.
#define AFW_INTEGER_MAX_BUFFER
this is the maximum number of digits that can be produced by afw_integer_t plus negative sign plus nu...
apr_int64_t afw_integer_t
typedef for big signed int.
#define afw_content_type_is_application_afw(instance)
Determine if content type it application/x-afw.
const afw_stream_t * afw_content_type_application_afw_stream_create(const afw_stream_t *response_stream, const afw_utf8_t *streamId, const afw_utf8_t *info, const afw_pool_t *p, afw_xctx_t *xctx)
Create a stream for content type application/afw.
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
afw_boolean_t afw_flag_by_id_is_active(const afw_utf8_t *flag_id, afw_xctx_t *xctx)
Determine if flag for flag id is set in xctx.
#define afw_pool_get_apr_pool(instance)
Call method get_apr_pool of interface afw_pool.
#define afw_stream_release(instance, xctx)
Call method release of interface afw_stream.
afw_stream_standard_impl(afw_stream_number_t n, afw_xctx_t *xctx)
Implementation for get xctx standard stream instance.
afw_stream_get_by_streamNumber(const afw_integer_t streamNumber, afw_xctx_t *xctx)
Get stream by streamNumber.
afw_stream_set(const afw_stream_t *stream, afw_xctx_t *xctx)
Set an opening stream and get its streamNumber.
#define afw_stream_write_z(writer, s_z, xctx)
Call afw_stream_write() with zero terminated string.
afw_stream_get_streamNumber_for_streamId(const afw_utf8_t *streamId, afw_xctx_t *xctx)
Get streamNumber for streamId.
const afw_stream_t * afw_stream_fd_create(FILE *fd, const afw_utf8_t *streamId, afw_boolean_t allow_read, afw_boolean_t allow_write, afw_boolean_t auto_flush, afw_boolean_t close_on_release, const afw_pool_t *p, afw_xctx_t *xctx)
Create a stream to a file descriptor.
#define afw_stream_standard(enum_suffix, xctx)
Get xctx stream instance.
afw_stream_get_by_streamId(const afw_utf8_t *streamId, const afw_stream_t **stream, afw_size_t *streamNumber, afw_xctx_t *xctx)
Get stream by streamId and streamNumber.
afw_stream_number_t
enum for common xctx streams
afw_stream_write_integer(const afw_stream_t *writer, afw_integer_t integer, afw_xctx_t *xctx)
Call afw_stream_write() with an integer.
afw_stream_write_size(const afw_stream_t *writer, afw_size_t size, afw_xctx_t *xctx)
Call afw_stream_write() with an size.
afw_boolean_t afw_utf8_equal(const afw_utf8_t *s1, const afw_utf8_t *s2)
Check to see if a string equals another string.
const afw_stream_t * afw_utf8_stream_create(const afw_utf8_t *streamId, const afw_pool_t *p, afw_xctx_t *xctx)
Create UTF-8 stream.
Interface afw_content_type public struct.
struct for common xctx streams
Interface afw_stream public struct.
NFC normalized UTF-8 string.
Interface afw_xctx public struct.