- removed unused stuff
[m6w6/ext-http] / http_methods.c
index 1b2d80b786dc9c1a701fbcb66f33338e4b522d3e..23631c5c6c4a04823c7e3b02dedfac195dd37034 100644 (file)
 #include "php_http_send_api.h"
 #include "php_http_url_api.h"
 
+#include "php_http_message_object.h"
+#include "php_http_response_object.h"
+#include "php_http_request_object.h"
+#include "php_http_exception_object.h"
+
 #ifdef ZEND_ENGINE_2
 
 /* {{{ HttpResponse */
@@ -47,13 +52,12 @@ PHP_METHOD(HttpResponse, __construct)
        zend_bool do_cache = 0, do_gzip = 0;
        getObject(http_response_object, obj);
 
-       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|bb", &do_cache, &do_gzip)) {
-               // throw exception
-               return;
+       SET_EH_THROW_HTTP();
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|bb", &do_cache, &do_gzip)) {
+               UPD_PROP(obj, long, cache, do_cache);
+               UPD_PROP(obj, long, gzip, do_gzip);
        }
-
-       UPD_PROP(obj, long, cache, do_cache);
-       UPD_PROP(obj, long, gzip, do_gzip);
+       SET_EH_NORMAL();
 }
 /* }}} */
 
@@ -517,6 +521,221 @@ PHP_METHOD(HttpResponse, send)
 /* }}} */
 /* }}} */
 
+/* {{{ HttpMessage */
+
+/* {{{ static HttpMessage HttpMessage::fromString(string raw_message)
+ *
+ * Create an HttpMessage object from a string.
+ */
+PHP_METHOD(HttpMessage, fromString)
+{
+       char *string = NULL;
+       int length = 0;
+       http_message *msg = NULL;
+
+       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &string, &length)) {
+               RETURN_NULL();
+       }
+
+       if (!(msg = http_message_parse(string, length))) {
+               RETURN_NULL();
+       }
+
+       Z_TYPE_P(return_value) = IS_OBJECT;
+       return_value->value.obj = http_message_object_from_msg(msg);
+}
+/* }}} */
+
+/* {{{ void HttpMessage::__construct([string raw_message])
+ *
+ * Instantiate a new HttpMessage object based on the optionally provided
+ * raw message.  An HTTP Message can be either a response or a request.
+ */
+PHP_METHOD(HttpMessage, __construct)
+{
+       zval *message = NULL;
+       getObject(http_message_object, obj);
+
+       SET_EH_THROW_HTTP();
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z/", &message)) {
+               if (message) {
+                       convert_to_string(message);
+                       SET_PROP(obj, raw, message);
+               }
+       }
+       SET_EH_NORMAL();
+}
+/* }}} */
+
+/* {{{ void HttpMessage::setRaw(string raw_message)
+ *
+ * Parse a new raw message.
+ */
+PHP_METHOD(HttpMessage, setRaw)
+{
+       zval *message;
+       getObject(http_message_object, obj);
+
+       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/", &message)) {
+               return;
+       }
+
+       convert_to_string(message);
+       SET_PROP(obj, raw, message);
+}
+/* }}} */
+
+/* {{{ string HttpMessage::getBody()
+ *
+ * Get the body of the parsed Message.
+ */
+PHP_METHOD(HttpMessage, getBody)
+{
+       zval *body;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       body = GET_PROP(obj, body);
+       RETURN_STRINGL(Z_STRVAL_P(body), Z_STRLEN_P(body), 1);
+}
+/* }}} */
+
+/* {{{ array HttpMessage::getHeaders()
+ *
+ * Get Message Headers.
+ */
+PHP_METHOD(HttpMessage, getHeaders)
+{
+       zval *headers;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       headers = GET_PROP(obj, headers);
+       array_init(return_value);
+       array_copy(headers, return_value);
+}
+/* }}} */
+
+/* {{{ long HttpMessage::getType()
+ *
+ * Get Message Type. (HTTP_MSG_NONE|HTTP_MSG_REQUEST|HTTP_MSG_RESPONSE)
+ */
+PHP_METHOD(HttpMessage, getType)
+{
+       zval *type;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       type = GET_PROP(obj, type);
+       RETURN_LONG(Z_LVAL_P(type));
+}
+/* }}} */
+
+/* {{{ int HttpMessage::getResponseCode()
+ *
+ * Get the Response Code of the Message.
+ */
+PHP_METHOD(HttpMessage, getResponseCode)
+{
+       zval *status;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       if (obj->message->type != HTTP_MSG_RESPONSE) {
+               RETURN_NULL();
+       }
+
+       status = GET_PROP(obj, responseCode);
+       RETURN_LONG(Z_LVAL_P(status));
+}
+/* }}} */
+
+/* {{{ string HttpMessage::getRequestMethod()
+ *
+ * Get the Request Method of the Message.
+ */
+PHP_METHOD(HttpMessage, getRequestMethod)
+{
+       zval *method;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       if (obj->message->type != HTTP_MSG_REQUEST) {
+               RETURN_NULL();
+       }
+
+       method = GET_PROP(obj, requestMethod);
+       RETURN_STRINGL(Z_STRVAL_P(method), Z_STRLEN_P(method), 1);
+}
+/* }}} */
+
+/* {{{ string HttpMessage::getRequestUri()
+ *
+ * Get the Request URI of the Message.
+ */
+PHP_METHOD(HttpMessage, getRequestUri)
+{
+       zval *uri;
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       if (obj->message->type != HTTP_MSG_REQUEST) {
+               RETURN_NULL();
+       }
+
+       uri = GET_PROP(obj, requestUri);
+       RETURN_STRINGL(Z_STRVAL_P(uri), Z_STRLEN_P(uri), 1);
+}
+/* }}} */
+
+/* {{{ string HttpMessage::getHttpVersion()
+ *
+ * Get the HTTP Protocol Version of the Message.
+ */
+PHP_METHOD(HttpMessage, getHttpVersion)
+{
+       zval *version;
+       char ver[4] = {0};
+       getObject(http_message_object, obj);
+
+       NO_ARGS;
+
+       version = GET_PROP(obj, httpVersion);
+
+       if (Z_TYPE_P(version) == IS_NULL) {
+               RETURN_NULL();
+       }
+       
+       sprintf(ver, "1.1f", Z_DVAL_P(version));
+       RETURN_STRINGL(ver, 3, 1);
+}
+/* }}} */
+
+/* {{{ string HttpMessage::toString()
+ *
+ * Get the string representation of the Message.
+ */
+PHP_METHOD(HttpMessage, toString)
+{
+       char *string;
+       size_t length;
+       getObject(http_message_object, obj);
+       
+       NO_ARGS;
+       
+       http_message_tostring(obj->message, &string, &length);
+       RETURN_STRINGL(string, length, 0);
+}
+/* }}} */
+
+/* }}} */
+
 #ifdef HTTP_HAVE_CURL
 /* {{{ HttpRequest */
 
@@ -532,22 +751,22 @@ PHP_METHOD(HttpRequest, __construct)
        long meth = -1;
        getObject(http_request_object, obj);
 
-       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sl", &URL, &URL_len, &meth)) {
-               return;
-       }
-
-       INIT_PARR(obj, options);
-       INIT_PARR(obj, responseInfo);
-       INIT_PARR(obj, responseData);
-       INIT_PARR(obj, postData);
-       INIT_PARR(obj, postFiles);
+       SET_EH_THROW_HTTP();
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sl", &URL, &URL_len, &meth)) {
+               INIT_PARR(obj, options);
+               INIT_PARR(obj, responseInfo);
+               INIT_PARR(obj, responseData);
+               INIT_PARR(obj, postData);
+               INIT_PARR(obj, postFiles);
 
-       if (URL) {
-               UPD_PROP(obj, string, url, URL);
-       }
-       if (meth > -1) {
-               UPD_PROP(obj, long, method, meth);
+               if (URL) {
+                       UPD_PROP(obj, string, url, URL);
+               }
+               if (meth > -1) {
+                       UPD_PROP(obj, long, method, meth);
+               }
        }
+       SET_EH_NORMAL();
 }
 /* }}} */
 
@@ -1358,7 +1577,7 @@ PHP_METHOD(HttpRequest, getResponseCode)
 
        data = GET_PROP(obj, responseData);
        if (    (SUCCESS == zend_hash_find(Z_ARRVAL_P(data), "headers", sizeof("headers"), (void **) &hdrs)) &&
-                       (SUCCESS == zend_hash_find(Z_ARRVAL_PP(hdrs), "Status", sizeof("Status"), (void **) &code))) {
+                       (SUCCESS == zend_hash_find(Z_ARRVAL_PP(hdrs), "Response Status", sizeof("Response Status"), (void **) &code))) {
                RETVAL_STRINGL(Z_STRVAL_PP(code), Z_STRLEN_PP(code), 1);
                convert_to_long(return_value);
        } else {
@@ -1438,6 +1657,8 @@ PHP_METHOD(HttpRequest, send)
 
        NO_ARGS;
 
+       SET_EH_THROW_HTTP();
+
        if ((!obj->ch) && (!(obj->ch = curl_easy_init()))) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initilaize cURL");
                RETURN_FALSE;
@@ -1540,9 +1761,7 @@ PHP_METHOD(HttpRequest, send)
        efree(request_uri);
 
        /* final data handling */
-       if (status != SUCCESS) {
-               RETURN_FALSE;
-       } else {
+       if (status == SUCCESS) {
                char *body = NULL;
                size_t body_len = 0;
                zval *zheaders;
@@ -1564,7 +1783,9 @@ PHP_METHOD(HttpRequest, send)
 
                RETURN_TRUE;
        }
-       /* */
+
+       SET_EH_NORMAL();
+       RETURN_SUCCESS(status);
 }
 /* }}} */
 /* }}} */