[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pecl-cvs
Subject:    [PECL-CVS] =?utf-8?q?svn:_/pecl/http/branches/DEV=5F2/_config9.m4_php=5Fhttp=5Fenv.c_php=5Fhttp=5Fen
From:       Michael_Wallner <mike () php ! net>
Date:       2012-11-07 8:52:35
Message-ID: svn-mike-1352278355-328267-1482467818 () svn ! php ! net
[Download RAW message or body]

mike                                     Wed, 07 Nov 2012 08:52:35 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=328267

Log:
- add http\Env::getResponseStatusForAllCodes()
- merge message headers

Changed paths:
    U   pecl/http/branches/DEV_2/config9.m4
    U   pecl/http/branches/DEV_2/php_http_env.c
    U   pecl/http/branches/DEV_2/php_http_env.h
    U   pecl/http/branches/DEV_2/php_http_message.c
    U   pecl/http/branches/DEV_2/php_http_strlist.c
    A   pecl/http/branches/DEV_2/tests/envresponsecodes.phpt
    U   pecl/http/branches/DEV_2/tests/message005.phpt
    U   pecl/http/branches/DEV_2/tests/propertyproxy001.phpt


["svn-diffs-328267.txt" (text/x-diff)]

Modified: pecl/http/branches/DEV_2/config9.m4
===================================================================
--- pecl/http/branches/DEV_2/config9.m4	2012-11-06 21:10:11 UTC (rev 328266)
+++ pecl/http/branches/DEV_2/config9.m4	2012-11-07 08:52:35 UTC (rev 328267)
@@ -341,7 +341,7 @@
 					EVENT_VER="`$EGREP _EVENT_VERSION $EVENT_DIR/include/event2/event.h | $AWK \
'{print $3}'`"  AC_DEFINE([PHP_HTTP_HAVE_EVENT2], [1], [ ])
 				else
-					AC_DEFFINE([PHP_HTTP_HAVE_EVENT2], [0], [ ])
+					AC_DEFINE([PHP_HTTP_HAVE_EVENT2], [0], [ ])
 					if test -f "$EVENT_DIR/include/evhttp.h" && test -f \
"$EVENT_DIR/include/evdns.h"; then  if test -f "$EVENT_DIR/include/evrpc.h"; then
 							EVENT_VER="1.4 or greater"

Modified: pecl/http/branches/DEV_2/php_http_env.c
===================================================================
--- pecl/http/branches/DEV_2/php_http_env.c	2012-11-06 21:10:11 UTC (rev 328266)
+++ pecl/http/branches/DEV_2/php_http_env.c	2012-11-07 08:52:35 UTC (rev 328267)
@@ -663,6 +663,8 @@
 	PHP_HTTP_ARG_VAL(code, 0)
 PHP_HTTP_END_ARGS;

+PHP_HTTP_EMPTY_ARGS(getResponseStatusForAllCodes);
+
 PHP_HTTP_BEGIN_ARGS(getResponseHeader, 0)
 	PHP_HTTP_ARG_VAL(header_name, 0)
 PHP_HTTP_END_ARGS;
@@ -726,6 +728,7 @@
 	PHP_HTTP_ENV_ME(getRequestBody)

 	PHP_HTTP_ENV_ME(getResponseStatusForCode)
+	PHP_HTTP_ENV_ME(getResponseStatusForAllCodes)

 	PHP_HTTP_ENV_ME(getResponseHeader)
 	PHP_HTTP_ENV_ME(getResponseCode)
@@ -793,6 +796,25 @@
 	RETURN_FALSE;
 }

+PHP_METHOD(HttpEnv, getResponseStatusForAllCodes)
+{
+	const char *s;
+	unsigned c;
+	php_http_strlist_iterator_t i;
+
+	if (SUCCESS != zend_parse_parameters_none()) {
+		RETURN_FALSE;
+	}
+
+	array_init(return_value);
+	for (	php_http_strlist_iterator_init(&i, php_http_env_response_status, 100);
+			*(s = php_http_strlist_iterator_this(&i, &c));
+			php_http_strlist_iterator_next(&i)
+	) {
+		add_index_string(return_value, c, s, 1);
+	}
+}
+
 PHP_METHOD(HttpEnv, getResponseHeader)
 {
 	char *header_name_str = NULL;

Modified: pecl/http/branches/DEV_2/php_http_env.h
===================================================================
--- pecl/http/branches/DEV_2/php_http_env.h	2012-11-06 21:10:11 UTC (rev 328266)
+++ pecl/http/branches/DEV_2/php_http_env.h	2012-11-07 08:52:35 UTC (rev 328267)
@@ -75,6 +75,7 @@
 PHP_METHOD(HttpEnv, getRequestHeader);
 PHP_METHOD(HttpEnv, getRequestBody);
 PHP_METHOD(HttpEnv, getResponseStatusForCode);
+PHP_METHOD(HttpEnv, getResponseStatusForAllCodes);
 PHP_METHOD(HttpEnv, getResponseHeader);
 PHP_METHOD(HttpEnv, getResponseCode);
 PHP_METHOD(HttpEnv, setResponseHeader);

Modified: pecl/http/branches/DEV_2/php_http_message.c
===================================================================
--- pecl/http/branches/DEV_2/php_http_message.c	2012-11-06 21:10:11 UTC (rev 328266)
+++ pecl/http/branches/DEV_2/php_http_message.c	2012-11-07 08:52:35 UTC (rev 328267)
@@ -12,6 +12,9 @@

 #include "php_http_api.h"

+static zval *message_header_strval(zval **header TSRMLS_DC);
+static void message_headers(php_http_message_t *msg, php_http_buffer_t *str);
+
 PHP_HTTP_API zend_bool php_http_message_info_callback(php_http_message_t **message, \
HashTable **headers, php_http_info_t *info TSRMLS_DC)  {
 	php_http_message_t *old = *message;
@@ -147,21 +150,9 @@

 	if (SUCCESS == zend_symtable_find(&msg->hdrs, key, key_len + 1, (void *) &header)) \
{  if (join && Z_TYPE_PP(header) == IS_ARRAY) {
-			zval *header_str, **val;
-			HashPosition pos;
-			php_http_buffer_t str;
 			TSRMLS_FETCH_FROM_CTX(msg->ts);

-			php_http_buffer_init(&str);
-			MAKE_STD_ZVAL(header_str);
-			FOREACH_VAL(pos, *header, val) {
-				zval *strval = php_http_ztyp(IS_STRING, *val);
-				php_http_buffer_appendf(&str, PHP_HTTP_BUFFER_LEN(&str) ? ", %s":"%s", \
                Z_STRVAL_P(strval));
-				zval_ptr_dtor(&strval);
-			}
-			php_http_buffer_fix(&str);
-			ZVAL_STRINGL(header_str, PHP_HTTP_BUFFER_VAL(&str), PHP_HTTP_BUFFER_LEN(&str), \
                0);
-			ret = header_str;
+			ret = message_header_strval(header TSRMLS_CC);
 		} else {
 			Z_ADDREF_PP(header);
 			ret = *header;
@@ -307,8 +298,38 @@
 		}
 	}
 }
-static inline void message_headers(php_http_message_t *msg, php_http_buffer_t *str)
+
+static zval *message_header_strval(zval **header TSRMLS_DC)
 {
+	zval *ret;
+
+	if (Z_TYPE_PP(header) == IS_BOOL) {
+		MAKE_STD_ZVAL(ret);
+		ZVAL_STRING(ret, Z_BVAL_PP(header) ? "true" : "false", 1);
+	} else if (Z_TYPE_PP(header) == IS_ARRAY) {
+		zval **val;
+		HashPosition pos;
+		php_http_buffer_t str;
+
+		php_http_buffer_init(&str);
+		MAKE_STD_ZVAL(ret);
+		FOREACH_VAL(pos, *header, val) {
+			zval *strval = message_header_strval(val TSRMLS_CC);
+
+			php_http_buffer_appendf(&str, PHP_HTTP_BUFFER_LEN(&str) ? ", %s":"%s", \
Z_STRVAL_P(strval)); +			zval_ptr_dtor(&strval);
+		}
+		php_http_buffer_fix(&str);
+		ZVAL_STRINGL(ret, PHP_HTTP_BUFFER_VAL(&str), PHP_HTTP_BUFFER_LEN(&str), 0);
+	} else  {
+		ret = php_http_zsep(1, IS_STRING, *header);
+	}
+
+	return ret;
+}
+
+static void message_headers(php_http_message_t *msg, php_http_buffer_t *str)
+{
 	php_http_array_hashkey_t key = php_http_array_hashkey_init(0);
 	HashPosition pos1;
 	zval **header;
@@ -331,48 +352,35 @@

 	FOREACH_HASH_KEYVAL(pos1, &msg->hdrs, key, header) {
 		if (key.type == HASH_KEY_IS_STRING) {
-			HashPosition pos2;
-			zval **single_header;
+			if (key.len == sizeof("Set-Cookie") && !strcasecmp(key.str, "Set-Cookie") && \
Z_TYPE_PP(header) == IS_ARRAY) { +				HashPosition pos2;
+				zval **single_header;

-			switch (Z_TYPE_PP(header)) {
-				case IS_BOOL:
-					php_http_buffer_appendf(str, "%s: %s" PHP_HTTP_CRLF, key.str, \
                Z_BVAL_PP(header)?"true":"false");
-					break;
-
-				case IS_LONG:
-					php_http_buffer_appendf(str, "%s: %ld" PHP_HTTP_CRLF, key.str, \
                Z_LVAL_PP(header));
-					break;
-
-				case IS_DOUBLE:
-					php_http_buffer_appendf(str, "%s: %F" PHP_HTTP_CRLF, key.str, \
                Z_DVAL_PP(header));
-					break;
-
-				case IS_STRING:
-					if (Z_STRVAL_PP(header)[Z_STRLEN_PP(header)-1] == '\r') fprintf(stderr, \
                "DOH!\n");
-					php_http_buffer_appendf(str, "%s: %s" PHP_HTTP_CRLF, key.str, \
                Z_STRVAL_PP(header));
-					break;
+				FOREACH_VAL(pos2, *header, single_header) {
+					if (Z_TYPE_PP(single_header) == IS_ARRAY) {
+						php_http_cookie_list_t *cookie = php_http_cookie_list_from_struct(NULL, \
*single_header TSRMLS_CC);

-				case IS_ARRAY:
-					FOREACH_VAL(pos2, *header, single_header) {
-						switch (Z_TYPE_PP(single_header)) {
-							case IS_BOOL:
-								php_http_buffer_appendf(str, "%s: %s" PHP_HTTP_CRLF, key.str, \
                Z_BVAL_PP(single_header)?"true":"false");
-								break;
-
-							case IS_LONG:
-								php_http_buffer_appendf(str, "%s: %ld" PHP_HTTP_CRLF, key.str, \
                Z_LVAL_PP(single_header));
-								break;
-
-							case IS_DOUBLE:
-								php_http_buffer_appendf(str, "%s: %F" PHP_HTTP_CRLF, key.str, \
                Z_DVAL_PP(single_header));
-								break;
-
-							case IS_STRING:
-								php_http_buffer_appendf(str, "%s: %s" PHP_HTTP_CRLF, key.str, \
                Z_STRVAL_PP(single_header));
-								break;
+						if (cookie) {
+							char *buf;
+							size_t len;
+
+							php_http_cookie_list_to_string(cookie, &buf, &len);
+							php_http_buffer_appendf(str, "Set-Cookie: %s" PHP_HTTP_CRLF, buf);
+							php_http_cookie_list_free(&cookie);
+							efree(buf);
 						}
+					} else {
+						zval *strval = message_header_strval(single_header TSRMLS_CC);
+
+						php_http_buffer_appendf(str, "Set-Cookie: %s" PHP_HTTP_CRLF, \
Z_STRVAL_P(strval)); +						zval_ptr_dtor(&strval);
 					}
-					break;
+				}
+			} else {
+				zval *strval = message_header_strval(header TSRMLS_CC);
+
+				php_http_buffer_appendf(str, "%s: %s" PHP_HTTP_CRLF, key.str, \
Z_STRVAL_P(strval)); +				zval_ptr_dtor(&strval);
 			}
 		}
 	}

Modified: pecl/http/branches/DEV_2/php_http_strlist.c
===================================================================
--- pecl/http/branches/DEV_2/php_http_strlist.c	2012-11-06 21:10:11 UTC (rev 328266)
+++ pecl/http/branches/DEV_2/php_http_strlist.c	2012-11-07 08:52:35 UTC (rev 328267)
@@ -28,7 +28,7 @@
 PHP_HTTP_API const char *php_http_strlist_iterator_this(php_http_strlist_iterator_t \
*iter, unsigned *id)  {
 	if (id) {
-		*id = iter->major * iter->factor + iter->minor;
+		*id = (iter->major + 1) * iter->factor + iter->minor;
 	}

 	return iter->p;
@@ -46,6 +46,7 @@
 		if (!*iter->p) {
 			++iter->p;
 			++iter->major;
+			iter->minor = 0;
 		}
 	}


Added: pecl/http/branches/DEV_2/tests/envresponsecodes.phpt
===================================================================
--- pecl/http/branches/DEV_2/tests/envresponsecodes.phpt	                        (rev \
                0)
+++ pecl/http/branches/DEV_2/tests/envresponsecodes.phpt	2012-11-07 08:52:35 UTC (rev \
328267) @@ -0,0 +1,26 @@
+--TEST--
+http\Env response codes
+--SKIPIF--
+<?php include "skipif.inc"; ?>
+--FILE--
+<?php
+echo "Test\n";
+
+var_dump(
+	array_diff_assoc(
+		http\Env::getResponseStatusForAllCodes(),
+		array_filter(
+			array_map(
+				array("http\\Env", "getResponseStatusForCode"),
+				range(0, 600)
+			)
+		)
+	)
+);
+?>
+Done
+--EXPECT--
+Test
+array(0) {
+}
+Done

Modified: pecl/http/branches/DEV_2/tests/message005.phpt
===================================================================
--- pecl/http/branches/DEV_2/tests/message005.phpt	2012-11-06 21:10:11 UTC (rev \
                328266)
+++ pecl/http/branches/DEV_2/tests/message005.phpt	2012-11-07 08:52:35 UTC (rev \
328267) @@ -27,8 +27,5 @@

 ===
 UNKNOWN / HTTP/1.1
-Numbers: 1
-Numbers: 2
-Numbers: 3
-Numbers: 4.5%d
+Numbers: 1, 2, 3, 4.5
 DONE

Modified: pecl/http/branches/DEV_2/tests/propertyproxy001.phpt
===================================================================
--- pecl/http/branches/DEV_2/tests/propertyproxy001.phpt	2012-11-06 21:10:11 UTC (rev \
                328266)
+++ pecl/http/branches/DEV_2/tests/propertyproxy001.phpt	2012-11-07 08:52:35 UTC (rev \
328267) @@ -86,9 +86,7 @@
 by1ref: 2
 by2ref: 1
 byXref: 2
-bynext: 1
-bynext: 2
-bynext: 3
+bynext: 1, 2, 3

 DONE



-- 
PECL CVS Mailing List 
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic