/* $Id$ */
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
+#define HTTP_WANT_SAPI
#define HTTP_WANT_CURL
#define HTTP_WANT_ZLIB
#include "php_http.h"
-#include "SAPI.h"
-
#include "php_http_api.h"
#include "php_http_encoding_api.h"
#include "php_http_headers_api.h"
(*headers) = &((*message)->hdrs);
}
- (*message)->http.version = info->http.version;
-
- switch (info->type)
- {
- case IS_HTTP_REQUEST:
- (*message)->type = HTTP_MSG_REQUEST;
- HTTP_INFO(*message).request.url = estrdup(HTTP_INFO(info).request.url);
- HTTP_INFO(*message).request.method = estrdup(HTTP_INFO(info).request.method);
- break;
-
- case IS_HTTP_RESPONSE:
- (*message)->type = HTTP_MSG_RESPONSE;
- HTTP_INFO(*message).response.code = HTTP_INFO(info).response.code;
- HTTP_INFO(*message).response.status = estrdup(HTTP_INFO(info).response.status);
- break;
- }
+ http_message_set_info(*message, info);
}
#define http_message_init_type _http_message_init_type
}
}
+PHP_HTTP_API void _http_message_set_info(http_message *message, http_info *info)
+{
+ message->http.version = info->http.version;
+
+ switch (message->type = info->type)
+ {
+ case IS_HTTP_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;
+
+ case IS_HTTP_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;
+
+ default:
+ break;
+ }
+}
+
PHP_HTTP_API http_message *_http_message_parse_ex(http_message *msg, const char *message, size_t message_length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC TSRMLS_DC)
{
const char *body = NULL;
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;
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 {