2 +--------------------------------------------------------------------+
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 +--------------------------------------------------------------------+
15 PHP_HTTP_API php_http_version_t
*php_http_version_init(php_http_version_t
*v
, unsigned major
, unsigned minor TSRMLS_DC
)
18 v
= emalloc(sizeof(*v
));
27 PHP_HTTP_API php_http_version_t
*php_http_version_parse(php_http_version_t
*v
, const char *str TSRMLS_DC
)
29 php_http_version_t tmp
;
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
);
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
);
42 return php_http_version_init(v
, tmp
.major
, tmp
.minor TSRMLS_CC
);
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
)
47 *len
= spprintf(str
, 0, "%s%u.%u%s", pre
? pre
: "", v
->major
, v
->minor
, post
? post
: "");
50 PHP_HTTP_API
void php_http_version_to_struct(php_http_version_t
*v
, HashTable
*strct TSRMLS_DC
)
54 INIT_PZVAL_ARRAY(&tmp
, strct
);
55 add_assoc_long(&tmp
, "major", v
->major
);
56 add_assoc_long(&tmp
, "minor", v
->minor
);
59 PHP_HTTP_API
void php_http_version_dtor(php_http_version_t
*v
)
64 PHP_HTTP_API
void php_http_version_free(php_http_version_t
**v
)
67 php_http_version_dtor(*v
);
78 * vim600: noet sw=4 ts=4 fdm=marker
79 * vim<600: noet sw=4 ts=4