- more fixes for empty message info
authorMichael Wallner <mike@php.net>
Wed, 24 Jan 2007 11:07:55 +0000 (11:07 +0000)
committerMichael Wallner <mike@php.net>
Wed, 24 Jan 2007 11:07:55 +0000 (11:07 +0000)
http_info_api.c
http_message_api.c
php_http_info_api.h

index 369bf69c77c57d2a5b0d9430689f249b35b9e326..d300ed275873d102136b2973d422538dac29bb50 100644 (file)
@@ -107,7 +107,7 @@ PHP_HTTP_API STATUS _http_info_parse_ex(const char *pre_header, http_info *info,
                        while (' ' == *status) ++status;
                        HTTP_INFO(info).response.status = estrndup(status, end - status);
                } else {
-                       HTTP_INFO(info).response.status = ecalloc(1, 1);
+                       HTTP_INFO(info).response.status = NULL;
                }
                
                return SUCCESS;
@@ -129,8 +129,8 @@ PHP_HTTP_API STATUS _http_info_parse_ex(const char *pre_header, http_info *info,
                                return FAILURE;
                        }
                } else {
-                       HTTP_INFO(info).request.method = ecalloc(1, 1);
-                       HTTP_INFO(info).request.url = ecalloc(1, 1);
+                       HTTP_INFO(info).request.method = NULL;
+                       HTTP_INFO(info).request.url = NULL;
                }
                
                return SUCCESS;
index 5a64cc7e878e56ce42dd4984c2be2723a7045c34..4f1ac7fb3641b61d53db8339cca84d37b4c826f3 100644 (file)
@@ -104,17 +104,17 @@ PHP_HTTP_API void _http_message_set_type(http_message *message, http_message_typ
 
 PHP_HTTP_API void _http_message_set_info(http_message *message, http_info *info)
 {
-       message->http.version = info->http.version;
        http_message_set_type(message, info->type);
+       message->http.version = info->http.version;
        switch (message->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));
+                       STR_SET(HTTP_INFO(message).request.url, HTTP_INFO(info).request.url ? estrdup(HTTP_INFO(info).request.url) : NULL);
+                       STR_SET(HTTP_INFO(message).request.method, HTTP_INFO(info).request.method ? estrdup(HTTP_INFO(info).request.method) : NULL);
                        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));
+                       STR_SET(HTTP_INFO(message).response.status, HTTP_INFO(info).response.status ? estrdup(HTTP_INFO(info).response.status) : NULL);
                        break;
                
                default:
@@ -317,18 +317,11 @@ PHP_HTTP_API void _http_message_tostring(http_message *msg, char **string, size_
 
        switch (msg->type) {
                case HTTP_MSG_REQUEST:
-                       phpstr_appendf(&str, "%s %s HTTP/%1.1f" HTTP_CRLF,
-                               msg->http.info.request.method?msg->http.info.request.method:"UNKNOWN",
-                               msg->http.info.request.url?msg->http.info.request.url:"/",
-                               msg->http.version);
+                       phpstr_appendf(&str, HTTP_INFO_REQUEST_FMT_ARGS(&msg->http, HTTP_CRLF));
                        break;
 
                case HTTP_MSG_RESPONSE:
-                       phpstr_appendf(&str, "HTTP/%1.1f %d%s%s" HTTP_CRLF,
-                               msg->http.version,
-                               msg->http.info.response.code,
-                               msg->http.info.response.status&&*msg->http.info.response.status ? " ":"",
-                               STR_PTR(msg->http.info.response.status));
+                       phpstr_appendf(&str, HTTP_INFO_RESPONSE_FMT_ARGS(&msg->http, HTTP_CRLF));
                        break;
 
                case HTTP_MSG_NONE:
@@ -455,12 +448,12 @@ PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj
        {
                case HTTP_MSG_RESPONSE:
                        add_assoc_long(&strct, "responseCode", msg->http.info.response.code);
-                       add_assoc_string(&strct, "responseStatus", msg->http.info.response.status, 1);
+                       add_assoc_string(&strct, "responseStatus", STR_PTR(msg->http.info.response.status), 1);
                break;
                
                case HTTP_MSG_REQUEST:
-                       add_assoc_string(&strct, "requestMethod", msg->http.info.request.method, 1);
-                       add_assoc_string(&strct, "requestUrl", msg->http.info.request.url, 1);
+                       add_assoc_string(&strct, "requestMethod", STR_PTR(msg->http.info.request.method), 1);
+                       add_assoc_string(&strct, "requestUrl", STR_PTR(msg->http.info.request.url), 1);
                break;
                
                case HTTP_MSG_NONE:
index 94a8d31a90eccfc3ac69755fcb54d67a5dd95c4f..4b6868ef4b053347370f51699c5125a5abf254f0 100644 (file)
 
 #define HTTP_INFO(ptr) (ptr)->http.info
 
+#define HTTP_INFO_REQUEST_FMT_ARGS(_http_ptr, _EOL) "%s %s HTTP/%1.1f" _EOL, \
+                               (_http_ptr)->info.request.method?(_http_ptr)->info.request.method:"UNKNOWN", \
+                               (_http_ptr)->info.request.url?(_http_ptr)->info.request.url:"/", \
+                               (_http_ptr)->version>0.0?(_http_ptr)->version:1.1
+
+#define HTTP_INFO_RESPONSE_FMT_ARGS(_http_ptr, _EOL) "HTTP/%1.1f %d%s%s" _EOL, \
+                               (_http_ptr)->version>0.0?(_http_ptr)->version:1.1, \
+                               (_http_ptr)->info.response.code?(_http_ptr)->info.response.code:200, \
+                               (_http_ptr)->info.response.status&&*(_http_ptr)->info.response.status ? " ":"", \
+                               STR_PTR((_http_ptr)->info.response.status)
+
 typedef struct _http_request_info_t {
        char *method;
        char *url;