pollita Thu Sep 21 19:53:10 2006 UTC Modified files: /php-src/ext/standard/tests/file 002.phpt stream_rfc2397_002.phpt /php-src/ext/standard streamsfuncs.c Log: Update (most of) the functions in streamsfuncs.c This commit also includes a change to tests/file/stream_rfc2397_002.phpt which doesn't entirely pass in unicode mode yet, however that's a unicode issue in the data:// wrapper that needs fixing, not a problem with the streams layer itself.
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/002.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/standard/tests/file/002.phpt diff -u php-src/ext/standard/tests/file/002.phpt:1.3 php-src/ext/standard/tests/file/002.phpt:1.4 --- php-src/ext/standard/tests/file/002.phpt:1.3 Wed May 19 08:54:51 2004 +++ php-src/ext/standard/tests/file/002.phpt Thu Sep 21 19:53:10 2006 @@ -23,7 +23,7 @@ EOD; $name = tempnam("./ext/standard/tests/file/", "php"); -$fp = fopen($name, "w"); +$fp = fopen($name, "wt"); fwrite($fp, $data); fclose($fp); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/stream_rfc2397_002.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/standard/tests/file/stream_rfc2397_002.phpt diff -u php-src/ext/standard/tests/file/stream_rfc2397_002.phpt:1.3 php-src/ext/standard/tests/file/stream_rfc2397_002.phpt:1.4 --- php-src/ext/standard/tests/file/stream_rfc2397_002.phpt:1.3 Thu Jun 29 14:53:31 2006 +++ php-src/ext/standard/tests/file/stream_rfc2397_002.phpt Thu Sep 21 19:53:10 2006 @@ -193,11 +193,11 @@ --UEXPECTF-- array(8) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -205,7 +205,7 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(8) "data://," + unicode(8) "data://," [u"base64"]=> bool(false) } @@ -216,11 +216,11 @@ NULL array(8) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -228,7 +228,7 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(15) "data://;base64," + unicode(15) "data://;base64," [u"base64"]=> bool(true) } @@ -247,11 +247,11 @@ NULL array(9) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -259,9 +259,9 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(18) "data://text/plain," + unicode(18) "data://text/plain," [u"mediatype"]=> - string(10) "text/plain" + unicode(10) "text/plain" [u"base64"]=> bool(false) } @@ -272,11 +272,11 @@ NULL array(10) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -284,26 +284,26 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(26) "data://text/plain;foo=bar," + unicode(26) "data://text/plain;foo=bar," [u"mediatype"]=> - string(10) "text/plain" + unicode(10) "text/plain" [u"foo"]=> - string(3) "bar" + unicode(3) "bar" [u"base64"]=> bool(false) } -string(3) "bar" +unicode(3) "bar" Warning: fopen(data://text/plain;foo=bar;bla,): failed to open stream: rfc2397: illegal parameter in %sstream_rfc2397_002.php on line %d bool(false) NULL array(10) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -311,26 +311,26 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(33) "data://text/plain;foo=bar;base64," + unicode(33) "data://text/plain;foo=bar;base64," [u"mediatype"]=> - string(10) "text/plain" + unicode(10) "text/plain" [u"foo"]=> - string(3) "bar" + unicode(3) "bar" [u"base64"]=> bool(true) } -string(3) "bar" +unicode(3) "bar" Warning: fopen(data://text/plain;foo=bar;bar=baz): failed to open stream: rfc2397: no comma in URL in %sstream_rfc2397_002.php on line %d bool(false) NULL array(11) { [u"wrapper_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"stream_type"]=> - string(7) "RFC2397" + unicode(7) "RFC2397" [u"mode"]=> - string(1) "r" + unicode(1) "r" [u"unread_bytes"]=> int(0) [u"unread_chars"]=> @@ -338,15 +338,15 @@ [u"seekable"]=> bool(true) [u"uri"]=> - string(34) "data://text/plain;foo=bar;bar=baz," + unicode(34) "data://text/plain;foo=bar;bar=baz," [u"mediatype"]=> - string(10) "text/plain" + unicode(10) "text/plain" [u"foo"]=> - string(3) "bar" + unicode(3) "bar" [u"bar"]=> - string(3) "baz" + unicode(3) "baz" [u"base64"]=> bool(false) } -string(3) "bar" +unicode(3) "bar" ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/standard/streamsfuncs.c?r1=1.86&r2=1.87&diff_format=u Index: php-src/ext/standard/streamsfuncs.c diff -u php-src/ext/standard/streamsfuncs.c:1.86 php-src/ext/standard/streamsfuncs.c:1.87 --- php-src/ext/standard/streamsfuncs.c:1.86 Tue Sep 19 20:36:48 2006 +++ php-src/ext/standard/streamsfuncs.c Thu Sep 21 19:53:10 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streamsfuncs.c,v 1.86 2006/09/19 20:36:48 pollita Exp $ */ +/* $Id: streamsfuncs.c,v 1.87 2006/09/21 19:53:10 pollita Exp $ */ #include "php.h" #include "php_globals.h" @@ -44,7 +44,7 @@ /* Streams based network functions */ #if HAVE_SOCKETPAIR -/* {{{ proto array stream_socket_pair(int domain, int type, int protocol) +/* {{{ proto array stream_socket_pair(int domain, int type, int protocol) U Creates a pair of connected, indistinguishable socket streams */ PHP_FUNCTION(stream_socket_pair) { @@ -75,7 +75,7 @@ /* }}} */ #endif -/* {{{ proto resource stream_socket_client(string remoteaddress [, long &errcode, string &errstring, double timeout, long flags, resource context]) +/* {{{ proto resource stream_socket_client(string remoteaddress [, long &errcode, string &errstring, double timeout, long flags, resource context]) U Open a client connection to a remote address */ PHP_FUNCTION(stream_socket_client) { @@ -115,7 +115,7 @@ } if (zerrstr) { zval_dtor(zerrstr); - ZVAL_STRING(zerrstr, "", 1); + ZVAL_EMPTY_TEXT(zerrstr); } stream = php_stream_xport_create(host, host_len, REPORT_ERRORS, @@ -141,9 +141,10 @@ ZVAL_LONG(zerrno, err); } if (zerrstr && errstr) { - /* no need to dup; we need to efree buf anyway */ + /* errstr is emalloc'd, either assign it to STRVAL if !UG(unicode) + * Or free it post-conversion if UG(unicode) */ zval_dtor(zerrstr); - ZVAL_STRING(zerrstr, errstr, 0); + ZVAL_RT_STRING(zerrstr, errstr, ZSTR_AUTOFREE); } else if (errstr) { efree(errstr); } @@ -162,7 +163,7 @@ } /* }}} */ -/* {{{ proto resource stream_socket_server(string localaddress [, long &errcode, string &errstring, long flags, resource context]) +/* {{{ proto resource stream_socket_server(string localaddress [, long &errcode, string &errstring, long flags, resource context]) U Create a server socket bound to localaddress */ PHP_FUNCTION(stream_socket_server) { @@ -189,7 +190,7 @@ } if (zerrstr) { zval_dtor(zerrstr); - ZVAL_STRING(zerrstr, "", 1); + ZVAL_EMPTY_TEXT(zerrstr); } stream = php_stream_xport_create(host, host_len, REPORT_ERRORS, @@ -206,9 +207,10 @@ ZVAL_LONG(zerrno, err); } if (zerrstr && errstr) { - /* no need to dup; we need to efree buf anyway */ + /* errstr is emalloc'd, either assign it to STRVAL if !UG(unicode) + * Or free it post-conversion if UG(unicode) */ zval_dtor(zerrstr); - ZVAL_STRING(zerrstr, errstr, 0); + ZVAL_RT_STRING(zerrstr, errstr, ZSTR_AUTOFREE); } else if (errstr) { efree(errstr); } @@ -227,12 +229,14 @@ } /* }}} */ -/* {{{ proto resource stream_socket_accept(resource serverstream, [ double timeout, string &peername ]) +/* {{{ proto resource stream_socket_accept(resource serverstream, [ double timeout, string &peername ]) U Accept a client connection from a server socket */ PHP_FUNCTION(stream_socket_accept) { double timeout = FG(default_socket_timeout); - zval *peername = NULL; + zval *zpeername = NULL; + char *peername = NULL; + int peername_len; php_timeout_ull conv; struct timeval tv; php_stream *stream = NULL, *clistream = NULL; @@ -240,7 +244,7 @@ char *errstr = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|dz", &zstream, &timeout, &peername) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|dz", &zstream, &timeout, &zpeername) == FAILURE) { RETURN_FALSE; } @@ -251,20 +255,20 @@ tv.tv_sec = conv / 1000000; tv.tv_usec = conv % 1000000; - if (peername) { - zval_dtor(peername); - ZVAL_NULL(peername); + if (zpeername) { + zval_dtor(zpeername); + ZVAL_NULL(zpeername); } if (0 == php_stream_xport_accept(stream, &clistream, - peername ? &Z_STRVAL_P(peername) : NULL, - peername ? &Z_STRLEN_P(peername) : NULL, + zpeername ? &peername : NULL, + zpeername ? &peername_len : NULL, NULL, NULL, &tv, &errstr TSRMLS_CC) && clistream) { if (peername) { - Z_TYPE_P(peername) = IS_STRING; + ZVAL_RT_STRINGL(zpeername, peername, peername_len, ZSTR_AUTOFREE); } php_stream_to_zval(clistream, return_value); } else { @@ -278,13 +282,15 @@ } /* }}} */ -/* {{{ proto string stream_socket_get_name(resource stream, bool want_peer) +/* {{{ proto string stream_socket_get_name(resource stream, bool want_peer) U Returns either the locally bound or remote name for a socket stream */ PHP_FUNCTION(stream_socket_get_name) { php_stream *stream; zval *zstream; zend_bool want_peer; + char *name = NULL; + int name_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &zstream, &want_peer) == FAILURE) { RETURN_FALSE; @@ -292,19 +298,19 @@ php_stream_from_zval(stream, &zstream); - Z_TYPE_P(return_value) = IS_STRING; - if (0 != php_stream_xport_get_name(stream, want_peer, - &Z_STRVAL_P(return_value), - &Z_STRLEN_P(return_value), + &name, + &name_len, NULL, NULL TSRMLS_CC)) { RETURN_FALSE; } + + RETURN_RT_STRINGL(name, name_len, ZSTR_AUTOFREE); } /* }}} */ -/* {{{ proto long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]]) +/* {{{ proto long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]]) U Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format */ PHP_FUNCTION(stream_socket_sendto) { @@ -316,6 +322,7 @@ php_sockaddr_storage sa; socklen_t sl = 0; + /* Typically we'll be sending binary data, but implicit RT conversion from unicode is acceptable */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|ls", &zstream, &data, &datalen, &flags, &target_addr, &target_addr_len) == FAILURE) { RETURN_FALSE; } @@ -333,12 +340,14 @@ } /* }}} */ -/* {{{ proto string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]]) +/* {{{ proto string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]]) U Receives data from a socket stream */ PHP_FUNCTION(stream_socket_recvfrom) { php_stream *stream; zval *zstream, *zremote = NULL; + char *remote_addr = NULL; + int remote_addr_len; long to_read = 0; char *read_buf; long flags = 0; @@ -353,7 +362,6 @@ if (zremote) { zval_dtor(zremote); ZVAL_NULL(zremote); - Z_STRLEN_P(zremote) = 0; } if (to_read <= 0) { @@ -364,17 +372,17 @@ read_buf = emalloc(to_read + 1); recvd = php_stream_xport_recvfrom(stream, read_buf, to_read, flags, NULL, NULL, - zremote ? &Z_STRVAL_P(zremote) : NULL, - zremote ? &Z_STRLEN_P(zremote) : NULL + zremote ? &remote_addr : NULL, + zremote ? &remote_addr_len : NULL TSRMLS_CC); if (recvd >= 0) { - if (zremote && Z_STRLEN_P(zremote)) { - Z_TYPE_P(zremote) = IS_STRING; + if (zremote) { + ZVAL_RT_STRINGL(zremote, remote_addr, remote_addr_len, ZSTR_AUTOFREE); } read_buf[recvd] = '\0'; - RETURN_STRINGL(read_buf, recvd, 0); + RETURN_RT_STRINGL(read_buf, recvd, ZSTR_AUTOFREE); } efree(read_buf); @@ -382,7 +390,7 @@ } /* }}} */ -/* {{{ proto long stream_get_contents(resource source [, long maxlen [, long offset]]) +/* {{{ proto string stream_get_contents(resource source [, long maxlen [, long offset]]) Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string. */ PHP_FUNCTION(stream_get_contents) { @@ -437,7 +445,7 @@ } /* }}} */ -/* {{{ proto resource stream_get_meta_data(resource fp) +/* {{{ proto resource stream_get_meta_data(resource fp) U Retrieves header/meta data from streams/file pointers */ PHP_FUNCTION(stream_get_meta_data) { @@ -461,11 +469,11 @@ add_ascii_assoc_zval(return_value, "wrapper_data", newval); } if (stream->wrapper) { - add_ascii_assoc_string(return_value, "wrapper_type", (char *)stream->wrapper->wops->label, 1); + add_ascii_assoc_rt_string(return_value, "wrapper_type", (char *)stream->wrapper->wops->label, ZSTR_DUPLICATE); } - add_ascii_assoc_string(return_value, "stream_type", (char *)stream->ops->label, 1); + add_ascii_assoc_rt_string(return_value, "stream_type", (char *)stream->ops->label, ZSTR_DUPLICATE); - add_ascii_assoc_string(return_value, "mode", stream->mode, 1); + add_ascii_assoc_rt_string(return_value, "mode", stream->mode, ZSTR_DUPLICATE); if (stream->readfilters.head) { php_stream_filter *filter; @@ -474,7 +482,7 @@ array_init(newval); for (filter = stream->readfilters.head; filter != NULL; filter = filter->next) { - add_next_index_string(newval, filter->name, 1); + add_next_index_rt_string(newval, filter->name, ZSTR_DUPLICATE); } add_ascii_assoc_zval(return_value, "read_filters", newval); @@ -487,7 +495,7 @@ array_init(newval); for (filter = stream->writefilters.head; filter != NULL; filter = filter->next) { - add_next_index_string(newval, filter->name, 1); + add_next_index_rt_string(newval, filter->name, ZSTR_DUPLICATE); } add_ascii_assoc_zval(return_value, "write_filters", newval); @@ -504,7 +512,18 @@ add_ascii_assoc_bool(return_value, "seekable", (stream->ops->seek) && (stream->flags & PHP_STREAM_FLAG_NO_SEEK) == 0); if (stream->orig_path) { - add_ascii_assoc_string(return_value, "uri", stream->orig_path, 1); + if (UG(unicode)) { + UChar *decoded_path = NULL; + int decoded_path_len = 0; + + if (SUCCESS == php_stream_path_decode(stream->wrapper, &decoded_path, &decoded_path_len, stream->orig_path, strlen(stream->orig_path), REPORT_ERRORS, stream->context TSRMLS_CC)) { + add_ascii_assoc_unicodel(return_value, "uri", decoded_path, decoded_path_len, 0); + } else { + add_ascii_assoc_null(return_value, "uri"); + } + } else { + add_ascii_assoc_string(return_value, "uri", stream->orig_path, 1); + } } if (!php_stream_populate_meta_data(stream, return_value)) { @@ -516,7 +535,7 @@ } /* }}} */ -/* {{{ proto array stream_get_transports() +/* {{{ proto array stream_get_transports() U Retrieves list of registered socket transports */ PHP_FUNCTION(stream_get_transports) { @@ -535,7 +554,7 @@ while (zend_hash_get_current_key_ex(stream_xport_hash, &stream_xport, &stream_xport_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING) { - add_next_index_stringl(return_value, stream_xport.s, stream_xport_len, 1); + add_next_index_rt_stringl(return_value, stream_xport.s, stream_xport_len, ZSTR_DUPLICATE); zend_hash_move_forward(stream_xport_hash); } } else { @@ -544,7 +563,7 @@ } /* }}} */ -/* {{{ proto array stream_get_wrappers() +/* {{{ proto array stream_get_wrappers() U Retrieves list of registered stream wrappers */ PHP_FUNCTION(stream_get_wrappers) { @@ -563,7 +582,7 @@ (key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT; zend_hash_move_forward(url_stream_wrappers_hash)) { if (key_flags == HASH_KEY_IS_STRING) { - add_next_index_stringl(return_value, stream_protocol.s, stream_protocol_len, 1); + add_next_index_rt_stringl(return_value, stream_protocol.s, stream_protocol_len, ZSTR_DUPLICATE); } } } else { @@ -709,7 +728,7 @@ } /* }}} */ -/* {{{ proto int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec]) +/* {{{ proto int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec]) U Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec */ PHP_FUNCTION(stream_select) { @@ -828,7 +847,7 @@ ZVAL_LONG(ps[0], notifycode); ZVAL_LONG(ps[1], severity); if (xmsg) { - ZVAL_STRING(ps[2], xmsg, 0); + ZVAL_RT_STRING(ps[2], xmsg, ZSTR_AUTOFREE); } else { ZVAL_NULL(ps[2]); } @@ -1006,7 +1025,7 @@ } /* }}} */ -/* {{{ proto array stream_context_get_options(resource context|resource stream) +/* {{{ proto array stream_context_get_options(resource context|resource stream) U Retrieve options for a stream/wrapper/context */ PHP_FUNCTION(stream_context_get_options) { @@ -1026,8 +1045,9 @@ } /* }}} */ -/* {{{ proto bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value) - Set an option for a wrapper */ +/* {{{ proto bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value) U + * Overloaded form: stream_context_set_option(resource context|resource stream, array options) + * Set an option (or several options) for a wrapper */ PHP_FUNCTION(stream_context_set_option) { zval *options = NULL, *zcontext = NULL, *zvalue = NULL; @@ -1062,7 +1082,7 @@ } /* }}} */ -/* {{{ proto bool stream_context_set_params(resource context|resource stream, array options) +/* {{{ proto bool stream_context_set_params(resource context|resource stream, array options) U Set parameters for a file context */ PHP_FUNCTION(stream_context_set_params) { @@ -1083,7 +1103,7 @@ } /* }}} */ -/* {{{ proto resource stream_context_get_default([array options]) +/* {{{ proto resource stream_context_get_default([array options]) U Get a handle on the default file/stream context and optionally set parameters */ PHP_FUNCTION(stream_context_get_default) { @@ -1107,7 +1127,7 @@ } /* }}} */ -/* {{{ proto resource stream_context_create([array options[, array params]]) +/* {{{ proto resource stream_context_create([array options[, array params]]) U Create a file context and optionally set parameters */ PHP_FUNCTION(stream_context_create) { @@ -1204,7 +1224,7 @@ } /* }}} */ -/* {{{ proto resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]]) +/* {{{ proto resource stream_filter_prepend(resource stream, string filtername[, int read_write[, mixed filterparams]]) U Prepend a filter to a stream */ PHP_FUNCTION(stream_filter_prepend) { @@ -1212,7 +1232,7 @@ } /* }}} */ -/* {{{ proto resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]]) +/* {{{ proto resource stream_filter_append(resource stream, string filtername[, int read_write[, mixed filterparams]]) U Append a filter to a stream */ PHP_FUNCTION(stream_filter_append) { @@ -1220,7 +1240,7 @@ } /* }}} */ -/* {{{ proto bool stream_filter_remove(resource stream_filter) +/* {{{ proto bool stream_filter_remove(resource stream_filter) U Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource */ PHP_FUNCTION(stream_filter_remove) { @@ -1321,7 +1341,7 @@ /* }}} */ -/* {{{ proto bool stream_set_blocking(resource socket, int mode) +/* {{{ proto bool stream_set_blocking(resource socket, int mode) U Set blocking/non-blocking mode on a socket or stream */ PHP_FUNCTION(stream_set_blocking) { @@ -1345,7 +1365,7 @@ /* }}} */ -/* {{{ proto bool stream_set_timeout(resource stream, int seconds, int microseconds) +/* {{{ proto bool stream_set_timeout(resource stream, int seconds, int microseconds) U Set timeout on stream read to seconds + microseonds */ #if HAVE_SYS_TIME_H || defined(PHP_WIN32) PHP_FUNCTION(stream_set_timeout) @@ -1381,7 +1401,7 @@ #endif /* HAVE_SYS_TIME_H || defined(PHP_WIN32) */ /* }}} */ -/* {{{ proto int stream_set_write_buffer(resource fp, int buffer) +/* {{{ proto int stream_set_write_buffer(resource fp, int buffer) U Set file write buffer */ PHP_FUNCTION(stream_set_write_buffer) { @@ -1418,7 +1438,7 @@ } /* }}} */ -/* {{{ proto int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind, resource sessionstream]) +/* {{{ proto int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind, resource sessionstream]) U Enable or disable a specific kind of crypto on the stream */ PHP_FUNCTION(stream_socket_enable_crypto) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php