X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_api.c;h=915469248187e0119070235d60d6956883545bea;hp=27f3d78228273ec502f2297387f60513e464043e;hb=b22d34f60b6694a8fed24cff66a28fd638309928;hpb=d5930114b227ce9c9ce71d3930291f333750c192 diff --git a/http_message_api.c b/http_message_api.c index 27f3d78..9154692 100644 --- a/http_message_api.c +++ b/http_message_api.c @@ -108,19 +108,20 @@ PHP_HTTP_API void _http_message_set_info(http_message *message, http_info *info) { message->http.version = info->http.version; - switch (info->type) + switch (message->type = info->type) { case IS_HTTP_REQUEST: - message->type = HTTP_MSG_REQUEST; HTTP_INFO(message).request.url = estrdup(HTTP_INFO(info).request.url); STR_SET(HTTP_INFO(message).request.method, estrdup(HTTP_INFO(info).request.method)); - break; + break; case IS_HTTP_RESPONSE: - message->type = HTTP_MSG_RESPONSE; HTTP_INFO(message).response.code = HTTP_INFO(info).response.code; STR_SET(HTTP_INFO(message).response.status, estrdup(HTTP_INFO(info).response.status)); - break; + break; + + default: + break; } } @@ -376,6 +377,57 @@ PHP_HTTP_API void _http_message_serialize(http_message *message, char **string, phpstr_dtor(&str); } +PHP_HTTP_API http_message *_http_message_reverse(http_message *msg) +{ + int i, c; + + http_message_count(c, msg); + + if (c > 1) { + http_message *tmp = msg, **arr = ecalloc(c, sizeof(http_message *)); + + for (i = 0; i < c; ++i) { + arr[i] = tmp; + tmp = tmp->parent; + } + arr[0]->parent = NULL; + for (i = 0; i < c-1; ++i) { + arr[i+1]->parent = arr[i]; + } + + msg = arr[c-1]; + efree(arr); + } + + return msg; +} + +PHP_HTTP_API http_message *_http_message_interconnect(http_message *m1, http_message *m2) +{ + if (m1 && m2) { + int i = 0, c1, c2; + http_message *t1 = m1, *t2 = m2, *p1, *p2; + + http_message_count(c1, m1); + http_message_count(c2, m2); + + while (i++ < (c1 - c2)) { + t1 = t1->parent; + } + while (i++ <= c1) { + p1 = t1->parent; + p2 = t2->parent; + t1->parent = t2; + t2->parent = p1; + t1 = p1; + t2 = p2; + } + } else if (!m1 && m2) { + m1 = m2; + } + return m1; +} + PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj TSRMLS_DC) { zval strct; @@ -490,7 +542,7 @@ PHP_HTTP_API STATUS _http_message_send(http_message *message TSRMLS_DC) parts.host = estrndup(Z_STRVAL_PP(zhost), Z_STRLEN_PP(zhost)); } - http_build_url(url, &parts, NULL, &uri, NULL); + http_build_url(HTTP_URL_REPLACE, url, &parts, NULL, &uri, NULL); php_url_free(url); efree(parts.host); } else {