+ zval **c;
+ http_message *nested;
+
+ if (SUCCESS == zend_hash_find(&msg->hdrs, "Content-Length", sizeof("Content-Length"), (void **) &c)) {
+ long len = atol(Z_STRVAL_PP(c));
+ phpstr_from_string_ex(PHPSTR(msg), body, len);
+ if (nested = http_message_parse_nested(msg, body + len, message + message_length - body - len)) {
+ return nested;
+ }
+ } else if (
+ SUCCESS == zend_hash_find(&msg->hdrs, "Transfer-Encoding", sizeof("Transfer-Encoding"), (void **) &c) &&
+ !strcasecmp("chunked", Z_STRVAL_PP(c))) {
+
+ char *decoded, *end;
+ size_t decoded_len;
+
+ if (end = http_chunked_decode(body, message_length - header_length, &decoded, &decoded_len)) {
+ phpstr_from_string_ex(PHPSTR(msg), decoded, decoded_len);
+ efree(decoded);
+ if (nested = http_message_parse_nested(msg, end, message + message_length - end)) {
+ return nested;
+ }
+ }
+ } else {
+ phpstr_from_string_ex(PHPSTR(msg), body, message_length - header_length);
+ }