fix libevent version
[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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #include "php_http_api.h"
14
15 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_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, *stop = NULL;
31 register const char *ptr = str;
32
33 switch (*ptr) {
34 case 'h':
35 case 'H':
36 ++ptr; if (*ptr != 't' && *ptr != 'T') break;
37 ++ptr; if (*ptr != 't' && *ptr != 'T') break;
38 ++ptr; if (*ptr != 'p' && *ptr != 'P') break;
39 ++ptr; if (*ptr != '/') break;
40 ++ptr;
41 /* no break */
42 default:
43 tmp.major = strtol(ptr, &stop, 10);
44 if (stop && stop != ptr && tmp.major != LONG_MIN && tmp.major != LONG_MAX) {
45 separator = *stop;
46 if (separator) {
47 if (separator != '.' && separator != ',') {
48 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Non-standard version separator '%c' in HTTP protocol version '%s'", separator, ptr);
49 }
50 ptr = stop + 1;
51 tmp.minor = strtol(ptr, &stop, 10);
52 if (tmp.minor != LONG_MIN && tmp.minor != LONG_MAX) {
53 return php_http_version_init(v, tmp.major, tmp.minor TSRMLS_CC);
54 }
55 }
56 }
57 }
58
59 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP protocol version '%s'", str);
60 return NULL;
61 }
62
63 void php_http_version_to_string(php_http_version_t *v, char **str, size_t *len, const char *pre, const char *post TSRMLS_DC)
64 {
65 *len = spprintf(str, 0, "%s%u.%u%s", pre ? pre : "", v->major, v->minor, post ? post : "");
66 }
67
68 void php_http_version_dtor(php_http_version_t *v)
69 {
70 (void) v;
71 }
72
73 void php_http_version_free(php_http_version_t **v)
74 {
75 if (*v) {
76 php_http_version_dtor(*v);
77 efree(*v);
78 *v = NULL;
79 }
80 }
81
82 /*
83 * Local variables:
84 * tab-width: 4
85 * c-basic-offset: 4
86 * End:
87 * vim600: noet sw=4 ts=4 fdm=marker
88 * vim<600: noet sw=4 ts=4
89 */
90