jani            Tue May  5 00:31:56 2009 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/curl   streams.c 
    /php-src/ext/standard       http_fopen_wrapper.c 
  Log:
  MFH: - Fixed Bug #45092header HTTP context option not being used 
(--with-curlwrappers)
  
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/streams.c?r1=1.14.2.2.2.11.2.4&r2=1.14.2.2.2.11.2.5&diff_format=u
Index: php-src/ext/curl/streams.c
diff -u php-src/ext/curl/streams.c:1.14.2.2.2.11.2.4 
php-src/ext/curl/streams.c:1.14.2.2.2.11.2.5
--- php-src/ext/curl/streams.c:1.14.2.2.2.11.2.4        Mon Feb 23 15:58:19 2009
+++ php-src/ext/curl/streams.c  Tue May  5 00:31:56 2009
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: streams.c,v 1.14.2.2.2.11.2.4 2009/02/23 15:58:19 iliaa Exp $ */
+/* $Id: streams.c,v 1.14.2.2.2.11.2.5 2009/05/05 00:31:56 jani Exp $ */
 
 /* This file implements cURL based wrappers.
  * NOTE: If you are implementing your own streams that are intended to
@@ -48,6 +48,7 @@
 #include "ext/standard/php_smart_str.h"
 #include "ext/standard/info.h"
 #include "ext/standard/file.h"
+#include "ext/standard/php_string.h"
 #include "php_curl.h"
 
 static size_t on_data_available(char *data, size_t size, size_t nmemb, void 
*ctx)
@@ -263,6 +264,7 @@
        php_stream *stream;
        php_curl_stream *curlstream;
        zval *tmp, **ctx_opt = NULL;
+       struct curl_slist *slist = NULL;
 
        curlstream = emalloc(sizeof(php_curl_stream));
        memset(curlstream, 0, sizeof(php_curl_stream));
@@ -311,6 +313,15 @@
        
        /* TODO: read cookies and options from context */
        if (context && !strncasecmp(filename, "http", sizeof("http")-1)) {
+               /* Protocol version */
+               if (SUCCESS == php_stream_context_get_option(context, "http", 
"protocol_version", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_DOUBLE) {
+                       if (Z_DVAL_PP(ctx_opt) == 1.1) {
+                               curl_easy_setopt(curlstream->curl, 
CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+                       } else {
+                               curl_easy_setopt(curlstream->curl, 
CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+                       }
+               }
+
                if (SUCCESS == php_stream_context_get_option(context, "http", 
"curl_verify_ssl_host", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && 
Z_LVAL_PP(ctx_opt) == 1) {
                        curl_easy_setopt(curlstream->curl, 
CURLOPT_SSL_VERIFYHOST, 1);
                } else {
@@ -326,20 +337,34 @@
                if (SUCCESS == php_stream_context_get_option(context, "http", 
"user_agent", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) {
                        curl_easy_setopt(curlstream->curl, CURLOPT_USERAGENT, 
Z_STRVAL_PP(ctx_opt));
                }
-               if (SUCCESS == php_stream_context_get_option(context, "http", 
"header", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_ARRAY) {
-                       HashPosition pos;
-                       zval **header = NULL;
-                       struct curl_slist *hl = NULL;
+               if (SUCCESS == php_stream_context_get_option(context, "http", 
"header", &ctx_opt)) {
+                       if (Z_TYPE_PP(ctx_opt) == IS_ARRAY) {
+                               HashPosition pos;
+                               zval **header = NULL;
                        
-                       for 
(zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(ctx_opt), &pos);
-                               SUCCESS == 
zend_hash_get_current_data_ex(Z_ARRVAL_PP(ctx_opt), (void *)&header, &pos);
-                               zend_hash_move_forward_ex(Z_ARRVAL_PP(ctx_opt), 
&pos)) {
-                               if (Z_TYPE_PP(header) == IS_STRING) {
-                                       hl = curl_slist_append(hl, 
Z_STRVAL_PP(header));
+                               for 
(zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(ctx_opt), &pos);
+                                       SUCCESS == 
zend_hash_get_current_data_ex(Z_ARRVAL_PP(ctx_opt), (void *)&header, &pos);
+                                       
zend_hash_move_forward_ex(Z_ARRVAL_PP(ctx_opt), &pos)
+                               ) {
+                                       if (Z_TYPE_PP(header) == IS_STRING) {
+                                               slist = 
curl_slist_append(slist, Z_STRVAL_PP(header));
+                                       }
                                }
+                       } else if (Z_TYPE_PP(ctx_opt) == IS_STRING && 
Z_STRLEN_PP(ctx_opt)) {
+                               char *p, *token, *trimmed, *copy_ctx_opt;
+
+                               copy_ctx_opt = php_trim(Z_STRVAL_PP(ctx_opt), 
Z_STRLEN_PP(ctx_opt), NULL, 0, NULL, 3 TSRMLS_CC);
+                               p = php_strtok_r(copy_ctx_opt, "\r\n", &token);
+                               while (p) {
+                                       trimmed = php_trim(p, strlen(p), NULL, 
0, NULL, 3 TSRMLS_CC);
+                                       slist = curl_slist_append(slist, 
trimmed);
+                                       efree(trimmed);
+                                       p = php_strtok_r(NULL, "\r\n", &token);
+                               }
+                               efree(copy_ctx_opt);
                        }
-                       if (hl) {
-                               curl_easy_setopt(curlstream->curl, 
CURLOPT_HTTPHEADER, hl);
+                       if (slist) {
+                               curl_easy_setopt(curlstream->curl, 
CURLOPT_HTTPHEADER, slist);
                        }
                }
                if (SUCCESS == php_stream_context_get_option(context, "http", 
"method", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) {
@@ -472,7 +497,9 @@
                        return NULL;
                }
        }
-       
+       if (slist) {
+               curl_slist_free_all(slist);
+       }
        return stream;
 }
 
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/http_fopen_wrapper.c?r1=1.99.2.12.2.9.2.14&r2=1.99.2.12.2.9.2.15&diff_format=u
Index: php-src/ext/standard/http_fopen_wrapper.c
diff -u php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.14 
php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.15
--- php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.14        Tue May 
 5 00:16:21 2009
+++ php-src/ext/standard/http_fopen_wrapper.c   Tue May  5 00:31:56 2009
@@ -19,7 +19,7 @@
    |          Sara Golemon <poll...@php.net>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.9.2.14 2009/05/05 00:16:21 jani Exp 
$ */ 
+/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.9.2.15 2009/05/05 00:31:56 jani Exp 
$ */ 
 
 #include "php.h"
 #include "php_globals.h"
@@ -330,13 +330,31 @@
        /* send it */
        php_stream_write(stream, scratch, strlen(scratch));
 
-       if (context &&
-               php_stream_context_get_option(context, "http", "header", 
&tmpzval) == SUCCESS &&
-               Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) {
-               /* Remove newlines and spaces from start and end,
-                  php_trim will estrndup() */
-               tmp = php_trim(Z_STRVAL_PP(tmpzval), Z_STRLEN_PP(tmpzval), 
NULL, 0, NULL, 3 TSRMLS_CC);
-               if (strlen(tmp) > 0) {
+       if (context && php_stream_context_get_option(context, "http", "header", 
&tmpzval) == SUCCESS) {
+               tmp = NULL;
+               
+               if (Z_TYPE_PP(tmpzval) == IS_ARRAY) {
+                       HashPosition pos;
+                       zval **tmpheader = NULL;
+                       smart_str tmpstr = {0};
+
+                       for 
(zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(tmpzval), &pos);
+                               SUCCESS == 
zend_hash_get_current_data_ex(Z_ARRVAL_PP(tmpzval), (void *)&tmpheader, &pos);
+                               zend_hash_move_forward_ex(Z_ARRVAL_PP(tmpzval), 
&pos)
+                       ) {
+                               if (Z_TYPE_PP(tmpheader) == IS_STRING) {
+                                       smart_str_appendl(&tmpstr, 
Z_STRVAL_PP(tmpheader), Z_STRLEN_PP(tmpheader));
+                                       smart_str_appendl(&tmpstr, "\r\n", 
sizeof("\r\n") - 1);
+                               }
+                       }
+                       smart_str_0(&tmpstr);
+                       tmp = tmpstr.c;
+               }
+               if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval)) {
+                       /* Remove newlines and spaces from start and end 
php_trim will estrndup() */
+                       tmp = php_trim(Z_STRVAL_PP(tmpzval), 
Z_STRLEN_PP(tmpzval), NULL, 0, NULL, 3 TSRMLS_CC);
+               }
+               if (tmp && strlen(tmp) > 0) {
                        if (!header_init) { /* Remove post headers for 
redirects */
                                int l = strlen(tmp);
                                char *s, *s2, *tmp_c = estrdup(tmp);



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

Reply via email to