1 /* 2 +--------------------------------------------------------------------+ 3 | PECL :: http | 4 +--------------------------------------------------------------------+ 5 | Redistribution and use in source and binary forms, with or without | 6 | modification, are permitted provided that the conditions mentioned | 7 | in the accompanying LICENSE file are met. | 8 +--------------------------------------------------------------------+ 9 | Copyright (c) 2004-2014, Michael Wallner <mike@php.net> | 10 +--------------------------------------------------------------------+ 11 */ 12 13 #ifndef PHP_HTTP_HEADER_PARSER_H 14 #define PHP_HTTP_HEADER_PARSER_H 15 16 #include "php_http_info.h" 17 18 typedef enum php_http_header_parser_state { 19 PHP_HTTP_HEADER_PARSER_STATE_FAILURE = FAILURE, 20 PHP_HTTP_HEADER_PARSER_STATE_START = 0, 21 PHP_HTTP_HEADER_PARSER_STATE_KEY, 22 PHP_HTTP_HEADER_PARSER_STATE_VALUE, 23 PHP_HTTP_HEADER_PARSER_STATE_VALUE_EX, 24 PHP_HTTP_HEADER_PARSER_STATE_HEADER_DONE, 25 PHP_HTTP_HEADER_PARSER_STATE_DONE 26 } php_http_header_parser_state_t; 27 28 #define PHP_HTTP_HEADER_PARSER_CLEANUP 0x1 29 30 typedef struct php_http_header_parser { 31 zend_ptr_stack stack; 32 php_http_info_t info; 33 struct { 34 char *str; 35 size_t len; 36 } _key; 37 struct { 38 char *str; 39 size_t len; 40 } _val; 41 } php_http_header_parser_t; 42 43 PHP_HTTP_API php_http_header_parser_t *php_http_header_parser_init(php_http_header_parser_t *parser); 44 PHP_HTTP_API php_http_header_parser_state_t php_http_header_parser_state_is(php_http_header_parser_t *parser); 45 PHP_HTTP_API void php_http_header_parser_dtor(php_http_header_parser_t *parser); 46 PHP_HTTP_API void php_http_header_parser_free(php_http_header_parser_t **parser); 47 PHP_HTTP_API php_http_header_parser_state_t php_http_header_parser_parse(php_http_header_parser_t *parser, php_http_buffer_t *buffer, unsigned flags, HashTable *headers, php_http_info_callback_t callback_func, void *callback_arg); 48 PHP_HTTP_API php_http_header_parser_state_t php_http_headerparser_parse_stream(php_http_header_parser_t *parser, php_http_buffer_t *buffer, php_stream *s, unsigned flags, HashTable *headers, php_http_info_callback_t callback_func, void *callback_arg); 49 50 typedef struct php_http_header_parser_object { 51 php_http_buffer_t *buffer; 52 php_http_header_parser_t *parser; 53 zend_object zo; 54 } php_http_header_parser_object_t; 55 56 PHP_HTTP_API zend_class_entry *php_http_get_header_parser_class_entry(void); 57 58 PHP_MINIT_FUNCTION(http_header_parser); 59 60 zend_object *php_http_header_parser_object_new(zend_class_entry *ce); 61 php_http_header_parser_object_t *php_http_header_parser_object_new_ex(zend_class_entry *ce, php_http_header_parser_t *parser); 62 void php_http_header_parser_object_free(zend_object *object); 63 64 #endif /* PHP_HTTP_HEADER_PARSER_H */ 65 66 /* 67 * Local variables: 68 * tab-width: 4 69 * c-basic-offset: 4 70 * End: 71 * vim600: noet sw=4 ts=4 fdm=marker 72 * vim<600: noet sw=4 ts=4 73 */ 74 75