Fix error: redefinition of typedef 'php_http_message_t' during RHEL build
[m6w6/ext-http] / php_http_version.c
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-2011, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #include "php_http_api.h"
14
15 PHP_HTTP_API php_http_version_t *php_http_version_init(php_http_version_t *v, unsigned major, unsigned minor TSRMLS_DC)
16 {
17 if (!v) {
18 v = emalloc(sizeof(*v));
19 }
20
21 v->major = major;
22 v->minor = minor;
23
24 return v;
25 }
26
27 PHP_HTTP_API php_http_version_t *php_http_version_parse(php_http_version_t *v, const char *str TSRMLS_DC)
28 {
29 php_http_version_t tmp;
30 char separator = 0;
31
32 if (3 != sscanf(str, "HTTP/%u%c%u", &tmp.major, &separator, &tmp.minor)
33 && 3 != sscanf(str, "%u%c%u", &tmp.major, &separator, &tmp.minor)) {
34 php_http_error(HE_WARNING, PHP_HTTP_E_MALFORMED_HEADERS, "Could not parse HTTP protocol version '%s'", str);
35 return NULL;
36 }
37
38 if (separator && separator != '.' && separator != ',') {
39 php_http_error(HE_NOTICE, PHP_HTTP_E_MALFORMED_HEADERS, "Non-standard version separator '%c' in HTTP protocol version '%s'", separator, str);
40 }
41
42 return php_http_version_init(v, tmp.major, tmp.minor TSRMLS_CC);
43 }
44
45 PHP_HTTP_API void php_http_version_to_string(php_http_version_t *v, char **str, size_t *len, const char *pre, const char *post TSRMLS_DC)
46 {
47 *len = spprintf(str, 0, "%s%u.%u%s", pre ? pre : "", v->major, v->minor, post ? post : "");
48 }
49
50 PHP_HTTP_API void php_http_version_to_struct(php_http_version_t *v, HashTable *strct TSRMLS_DC)
51 {
52 zval tmp;
53
54 INIT_PZVAL_ARRAY(&tmp, strct);
55 add_assoc_long(&tmp, "major", v->major);
56 add_assoc_long(&tmp, "minor", v->minor);
57 }
58
59 PHP_HTTP_API void php_http_version_dtor(php_http_version_t *v)
60 {
61 (void) v;
62 }
63
64 PHP_HTTP_API void php_http_version_free(php_http_version_t **v)
65 {
66 if (*v) {
67 php_http_version_dtor(*v);
68 efree(*v);
69 *v = NULL;
70 }
71 }
72
73 /*
74 * Local variables:
75 * tab-width: 4
76 * c-basic-offset: 4
77 * End:
78 * vim600: noet sw=4 ts=4 fdm=marker
79 * vim<600: noet sw=4 ts=4
80 */
81