Skip to content

Commit 2ab66a3

Browse files
committed
Merge pull request #24 from zelgerj/master
added function appserver_stream_import_file_descriptor
2 parents 257774b + ef61398 commit 2ab66a3

File tree

6 files changed

+81
-6
lines changed

6 files changed

+81
-6
lines changed

build.default.properties

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010
# ---- General Settings ---------------------------------------------------------
1111
php.ext.name = appserver
1212

13-
release.version = 0.1.11
13+
release.version = 0.1.12
1414
release.stability = beta
15-
api.version = 0.1.11
15+
api.version = 0.1.12
1616
api.stability = beta
1717

18-
php.version = 5.6.0beta4
18+
php.version = 5.5.10
1919

2020
# for stable releases
2121
php.downloadurl = http://de1.php.net/get/php-${php.version}.tar.gz/from/this/mirror
2222
# for beta releases
23-
php.downloadurl = http://downloads.php.net/tyrael/php-${php.version}.tar.gz
23+
# php.downloadurl = http://downloads.php.net/tyrael/php-${php.version}.tar.gz
2424

2525
php.configure = --prefix=/opt/appserver \
2626
--enable-debug \
@@ -43,7 +43,7 @@ php.configure = --prefix=/opt/appserver \
4343
--with-openssl \
4444
--with-zlib \
4545
46-
pthreads.version = 2.0.4
46+
pthreads.version = 1.0.1
4747
memcached.version = 2.1.0
4848
redis.version = 2.2.3
4949
apcu.version = 4.0.2

build.xml

+15-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,11 @@
186186
<exec executable="git" dir="${c-build.dir}/php/ext">
187187
<arg line="clone https://github.com/krakjoe/pthreads.git"/>
188188
</exec>
189-
-->
189+
190+
<exec executable="git" dir="${c-build.dir}/php/ext">
191+
<arg line="clone https://github.com/krakjoe/uopz.git"/>
192+
</exec>
193+
-->
190194

191195
<antcall target="get-memcached-src"/>
192196
<untar src="/tmp/memcached-${memcached.version}.tgz" dest="/tmp" compression="gzip"/>
@@ -265,5 +269,15 @@
265269
<arg line="./run-tests.php ${c-php-tests.dir}"/>
266270
</exec>
267271
</target>
272+
273+
<!-- ==================================================================== -->
274+
<!-- Runs php tests in verbose mode to show all testing relevant info -->
275+
<!-- ==================================================================== -->
276+
<target name="run-tests-verbose" description="Runs the php tests">
277+
<exec dir="${c-build.dir}/php" executable="php">
278+
<env key="TEST_PHP_EXECUTABLE" value="${c-build.dir}/php/sapi/cli/php"/>
279+
<arg line="./run-tests.php --show-all ${c-php-tests.dir}"/>
280+
</exec>
281+
</target>
268282

269283
</project>

src/appserver.c

+24
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "php_ini.h"
2828
#include "ext/standard/info.h"
2929
#include "ext/session/php_session.h"
30+
#include "ext/sockets/php_sockets.h"
3031
#include "php_appserver.h"
3132
#include "TSRM.h"
3233
#include "SAPI.h"
@@ -59,6 +60,7 @@ const zend_function_entry appserver_functions[] = {
5960
PHP_FE(appserver_get_http_response_code, NULL)
6061
PHP_FE(appserver_get_envs, NULL)
6162
PHP_FE(appserver_session_init, NULL)
63+
PHP_FE(appserver_stream_import_file_descriptor, NULL)
6264
PHP_FE_END
6365
};
6466

@@ -485,6 +487,28 @@ PHP_FUNCTION(appserver_set_headers_sent)
485487
SG(headers_sent) = headers_sent_flag;
486488
}
487489

490+
/* {{{ proto array appserver_stream_import_file_descriptor(resource $socket)
491+
will return the file descriptor as int of a php stream resource ... /* }}} */
492+
PHP_FUNCTION(appserver_stream_import_file_descriptor)
493+
{
494+
zval *zstream;
495+
php_stream *stream;
496+
PHP_SOCKET socket; /* fd */
497+
498+
/* parse params and get stream resources passed to function */
499+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream) == FAILURE) {
500+
return;
501+
}
502+
/* get stream from given php userland zval */
503+
php_stream_from_zval(stream, &zstream);
504+
/* check if stream can be casted to a socket fd */
505+
if (php_stream_cast(stream, PHP_STREAM_AS_SOCKETD, (void**)&socket, 1)) {
506+
/* return a negative long to declair a non existent fd */
507+
RETURN_LONG(-1);
508+
}
509+
/* finally return the fd as long to userland*/
510+
RETURN_LONG(socket)
511+
}
488512

489513
// ---------------------------------------------------------------------------
490514
// Zend Extension Functions

src/appserver.php

+16
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,19 @@
6464
echo "CALL #$index move_uploaded_file: -> " .var_export(move_uploaded_file($temp_filename, '/tmp/move_uploaded_file_success'), true);
6565
echo PHP_EOL . "==========================================". PHP_EOL;
6666
}
67+
68+
$streamServer = stream_socket_server('tcp://127.0.0.1:31337');
69+
$streamClient = fsockopen('tcp://127.0.0.1:31337');
70+
if (!$streamClient) {
71+
die("Unable to create socket");
72+
}
73+
$streamConnection = stream_socket_accept($streamServer);
74+
echo 'CALL appserver_stream_import_file_descriptor($streamServer): -> ';
75+
echo var_export(appserver_stream_import_file_descriptor($streamServer), true);
76+
echo PHP_EOL . "==========================================". PHP_EOL;
77+
echo 'CALL appserver_stream_import_file_descriptor($streamClient): -> ';
78+
echo var_export(appserver_stream_import_file_descriptor($streamClient), true);
79+
echo PHP_EOL . "==========================================". PHP_EOL;
80+
echo 'CALL appserver_stream_import_file_descriptor($streamConnection): -> ';
81+
echo var_export(appserver_stream_import_file_descriptor($streamConnection), true);
82+
echo PHP_EOL . "==========================================". PHP_EOL;

src/php_appserver.h

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ PHP_FUNCTION(appserver_set_raw_post_data);
7575
PHP_FUNCTION(appserver_get_http_response_code);
7676
PHP_FUNCTION(appserver_get_envs);
7777
PHP_FUNCTION(appserver_session_init);
78+
PHP_FUNCTION(appserver_stream_import_file_descriptor);
7879

7980
ZEND_BEGIN_MODULE_GLOBALS(appserver)
8081
appserver_llist *headers;

src/tests/appserver_014.phpt

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
appserver: call appserver_stream_import_file_descriptor and check it's correct return values
3+
--CREDITS--
4+
Johann Zelger <jz [at] techdivision [dot] com>
5+
--FILE--
6+
<?php
7+
$streamServer = stream_socket_server('tcp://127.0.0.1:31337');
8+
$streamClient = fsockopen('tcp://127.0.0.1:31337');
9+
if (!$streamClient) {
10+
die("Unable to create socket");
11+
}
12+
$streamConnection = stream_socket_accept($streamServer);
13+
14+
var_dump(appserver_stream_import_file_descriptor($streamServer));
15+
var_dump(appserver_stream_import_file_descriptor($streamClient));
16+
var_dump(appserver_stream_import_file_descriptor($streamConnection));
17+
--EXPECT--
18+
int(3)
19+
int(4)
20+
int(5)

0 commit comments

Comments
 (0)