00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef APT_TEXT_MESSAGE_H
00020 #define APT_TEXT_MESSAGE_H
00021
00022
00023
00024
00025
00026
00027 #include "apt_header_field.h"
00028 #include "apt_text_stream.h"
00029
00030 APT_BEGIN_EXTERN_C
00031
00032
00033 typedef enum {
00034 APT_MESSAGE_STATUS_COMPLETE,
00035 APT_MESSAGE_STATUS_INCOMPLETE,
00036 APT_MESSAGE_STATUS_INVALID
00037 } apt_message_status_e;
00038
00039
00040
00041 typedef struct apt_message_parser_t apt_message_parser_t;
00042
00043 typedef struct apt_message_parser_vtable_t apt_message_parser_vtable_t;
00044
00045
00046 typedef struct apt_message_generator_t apt_message_generator_t;
00047
00048 typedef struct apt_message_generator_vtable_t apt_message_generator_vtable_t;
00049
00050
00051 typedef struct apt_message_context_t apt_message_context_t;
00052
00053
00054 APT_DECLARE(apt_message_parser_t*) apt_message_parser_create(void *obj, const apt_message_parser_vtable_t *vtable, apr_pool_t *pool);
00055
00056
00057 APT_DECLARE(apt_message_status_e) apt_message_parser_run(apt_message_parser_t *parser, apt_text_stream_t *stream, void **message);
00058
00059
00060 APT_DECLARE(void*) apt_message_parser_object_get(apt_message_parser_t *parser);
00061
00062
00063 APT_DECLARE(void) apt_message_parser_verbose_set(apt_message_parser_t *parser, apt_bool_t verbose);
00064
00065
00066
00067 APT_DECLARE(apt_message_generator_t*) apt_message_generator_create(void *obj, const apt_message_generator_vtable_t *vtable, apr_pool_t *pool);
00068
00069
00070 APT_DECLARE(apt_message_status_e) apt_message_generator_run(apt_message_generator_t *generator, void *message, apt_text_stream_t *stream);
00071
00072
00073 APT_DECLARE(void*) apt_message_generator_object_get(apt_message_generator_t *generator);
00074
00075
00076 APT_DECLARE(void) apt_message_generator_verbose_set(apt_message_generator_t *generator, apt_bool_t verbose);
00077
00078
00079
00080 APT_DECLARE(apt_header_field_t*) apt_header_field_parse(apt_text_stream_t *stream, apr_pool_t *pool);
00081
00082
00083 APT_DECLARE(apt_bool_t) apt_header_field_generate(const apt_header_field_t *header_field, apt_text_stream_t *stream);
00084
00085
00086 APT_DECLARE(apt_bool_t) apt_header_section_parse(apt_header_section_t *header, apt_text_stream_t *stream, apr_pool_t *pool);
00087
00088
00089 APT_DECLARE(apt_bool_t) apt_header_section_generate(const apt_header_section_t *header, apt_text_stream_t *stream);
00090
00091
00092
00093 struct apt_message_context_t {
00094
00095 void *message;
00096
00097 apt_header_section_t *header;
00098
00099 apt_str_t *body;
00100 };
00101
00102
00103 struct apt_message_parser_vtable_t {
00104
00105 apt_bool_t (*on_start)(apt_message_parser_t *parser, apt_message_context_t *context, apt_text_stream_t *stream, apr_pool_t *pool);
00106
00107 apt_bool_t (*on_header_complete)(apt_message_parser_t *parser, apt_message_context_t *context);
00108
00109 apt_bool_t (*on_body_complete)(apt_message_parser_t *parser, apt_message_context_t *context);
00110 };
00111
00112
00113 struct apt_message_generator_vtable_t {
00114
00115 apt_bool_t (*on_start)(apt_message_generator_t *generator, apt_message_context_t *context, apt_text_stream_t *stream);
00116
00117 apt_bool_t (*on_header_complete)(apt_message_generator_t *generator, apt_message_context_t *context, apt_text_stream_t *stream);
00118
00119 apt_bool_t (*on_body_complete)(apt_message_generator_t *generator, apt_message_context_t *context, apt_text_stream_t *stream);
00120 };
00121
00122
00123 APT_END_EXTERN_C
00124
00125 #endif