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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
13 #include "php_http_api.h"
15 php_http_version_t
*php_http_version_init(php_http_version_t
*v
, unsigned major
, unsigned minor
)
18 v
= emalloc(sizeof(*v
));
27 php_http_version_t
*php_http_version_parse(php_http_version_t
*v
, const char *str
)
30 char separator
= 0, *stop
= NULL
;
31 register const char *ptr
= str
;
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;
43 major
= strtol(ptr
, &stop
, 10);
44 if (stop
&& stop
!= ptr
&& major
!= LONG_MIN
&& major
!= LONG_MAX
) {
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
);
51 minor
= strtol(ptr
, &stop
, 10);
52 if (minor
!= LONG_MIN
&& minor
!= LONG_MAX
) {
53 return php_http_version_init(v
, major
, minor TSRMLS_CC
);
59 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "Could not parse HTTP protocol version '%s'", str
);
63 void php_http_version_to_string(php_http_version_t
*v
, char **str
, size_t *len
, const char *pre
, const char *post
)
65 *len
= spprintf(str
, 0, "%s%u.%u%s", pre
? pre
: "", v
->major
, v
->minor
, post
? post
: "");
68 void php_http_version_dtor(php_http_version_t
*v
)
73 void php_http_version_free(php_http_version_t
**v
)
76 php_http_version_dtor(*v
);
87 * vim600: noet sw=4 ts=4 fdm=marker
88 * vim<600: noet sw=4 ts=4