- add_assoc_stringl(&array, "Request Method", http_line, sep - http_line, 1);
- add_assoc_stringl(&array, "Request Uri", sep + 1, strstr(sep, "HTTP/1.") - sep + 1 + 1, 1);
- }
-}
-
-/* {{{ */
-PHP_HTTP_API STATUS _http_parse_cookie(const char *cookie, HashTable *values TSRMLS_DC)
-{
- const char *key = cookie, *val = NULL;
- int vallen = 0, keylen = 0, done = 0;
- zval array;
-
- Z_ARRVAL(array) = values;
-
- if (!(val = strchr(cookie, '='))) {
- return FAILURE;
- }
-
-#define HTTP_COOKIE_VAL(array, k, str, len) \
- { \
- const char *encoded = str; \
- char *decoded = NULL; \
- int decoded_len = 0, encoded_len = len; \
- decoded = estrndup(encoded, encoded_len); \
- decoded_len = php_url_decode(decoded, encoded_len); \
- add_assoc_stringl(array, k, decoded, decoded_len, 0); \
- }
-#define HTTP_COOKIE_FIXKEY() \
- { \
- while (isspace(*key)) ++key; \
- keylen = val - key; \
- while (isspace(key[keylen - 1])) --keylen; \
- }
-#define HTTP_COOKIE_FIXVAL() \
- { \
- ++val; \
- while (isspace(*val)) ++val; \
- vallen = key - val; \
- while (isspace(val[vallen - 1])) --vallen; \
- }
-
- HTTP_COOKIE_FIXKEY();
- HTTP_COOKIE_VAL(&array, "name", key, keylen);
-
- /* just a name=value cookie */
- if (!(key = strchr(val, ';'))) {
- key = val + strlen(val);
- HTTP_COOKIE_FIXVAL();
- HTTP_COOKIE_VAL(&array, "value", val, vallen);
- }
- /* additional info appended */
- else {
- char *keydup = NULL;
-
- HTTP_COOKIE_FIXVAL();
- HTTP_COOKIE_VAL(&array, "value", val, vallen);
-
- do {
- if (!(val = strchr(key, '='))) {
- break;
- }
- ++key;
- HTTP_COOKIE_FIXKEY();
- keydup = estrndup(key, keylen);
- if (!(key = strchr(val, ';'))) {
- done = 1;
- key = val + strlen(val);
+#ifdef ZEND_ENGINE_2
+ zend_is_auto_global("_SERVER", lenof("_SERVER") TSRMLS_CC);
+#endif
+
+ if (SUCCESS == zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void *) &hsv) && Z_TYPE_PP(hsv) == IS_ARRAY) {
+ FOREACH_KEYLEN(pos, *hsv, key, keylen, idx) {
+ if (key && keylen > 6 && !strncmp(key, "HTTP_", 5)) {
+ keylen -= 6;
+ key = pretty_key(estrndup(key + 5, keylen), keylen, 1, 1);
+
+ zend_hash_get_current_data_ex(Z_ARRVAL_PP(hsv), (void *) &header, &pos);
+ ZVAL_ADDREF(*header);
+ zend_hash_add(HTTP_G->request.headers, key, keylen + 1, (void *) header, sizeof(zval *), NULL);
+
+ STR_SET(key, NULL)
+ keylen = 0;
+ }