LTP GCOV extension - code coverage report
Current view: directory - ext/standard - fsock.c
Test: PHP Code Coverage
Date: 2007-04-10 Instrumented lines: 52
Code covered: 55.8 % Executed lines: 29
Legend: not executed executed

       1                 : /*
       2                 :    +----------------------------------------------------------------------+
       3                 :    | PHP Version 5                                                        |
       4                 :    +----------------------------------------------------------------------+
       5                 :    | Copyright (c) 1997-2007 The PHP Group                                |
       6                 :    +----------------------------------------------------------------------+
       7                 :    | This source file is subject to version 3.01 of the PHP license,      |
       8                 :    | that is bundled with this package in the file LICENSE, and is        |
       9                 :    | available through the world-wide-web at the following url:           |
      10                 :    | http://www.php.net/license/3_01.txt                                  |
      11                 :    | If you did not receive a copy of the PHP license and are unable to   |
      12                 :    | obtain it through the world-wide-web, please send a note to          |
      13                 :    | license@php.net so we can mail you a copy immediately.               |
      14                 :    +----------------------------------------------------------------------+
      15                 :    | Authors: Paul Panotzki - Bunyip Information Systems                  |
      16                 :    |          Jim Winstead <jimw@php.net>                                 |
      17                 :    |          Sascha Schumann <sascha@schumann.cx>                        |
      18                 :    +----------------------------------------------------------------------+
      19                 : */
      20                 : 
      21                 : /* $Id: fsock.c,v 1.121.2.1.2.1 2007/01/01 09:36:08 sebastian Exp $ */
      22                 : 
      23                 : #include "php.h"
      24                 : #include "php_globals.h"
      25                 : #include <stdlib.h>
      26                 : #include <stddef.h>
      27                 : #include "php_network.h"
      28                 : #include "file.h"
      29                 : 
      30                 : /* {{{ php_fsockopen() */
      31                 : 
      32                 : static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
      33              14 : {
      34                 :         char *host;
      35                 :         int host_len;
      36              14 :         long port = -1;
      37              14 :         zval *zerrno = NULL, *zerrstr = NULL;
      38              14 :         double timeout = FG(default_socket_timeout);
      39                 :         unsigned long conv;
      40                 :         struct timeval tv;
      41              14 :         char *hashkey = NULL;
      42              14 :         php_stream *stream = NULL;
      43                 :         int err;
      44              14 :         char *hostname = NULL;
      45                 :         long hostname_len;
      46              14 :         char *errstr = NULL;
      47                 : 
      48              14 :         RETVAL_FALSE;
      49                 :         
      50              14 :         if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lzzd", &host, &host_len, &port, &zerrno, &zerrstr, &timeout) == FAILURE) {
      51               0 :                 RETURN_FALSE;
      52                 :         }
      53                 : 
      54              14 :         if (persistent) {
      55               0 :                 spprintf(&hashkey, 0, "pfsockopen__%s:%ld", host, port);
      56                 :         }
      57                 : 
      58              14 :         if (port > 0) {
      59              14 :                 hostname_len = spprintf(&hostname, 0, "%s:%ld", host, port);
      60                 :         } else {
      61               0 :                 hostname_len = host_len;
      62               0 :                 hostname = host;
      63                 :         }
      64                 :         
      65                 :         /* prepare the timeout value for use */
      66              14 :         conv = (unsigned long) (timeout * 1000000.0);
      67              14 :         tv.tv_sec = conv / 1000000;
      68              14 :         tv.tv_usec = conv % 1000000;
      69                 : 
      70              14 :         if (zerrno)     {
      71               0 :                 zval_dtor(zerrno);
      72               0 :                 ZVAL_LONG(zerrno, 0);
      73                 :         }
      74              14 :         if (zerrstr) {
      75               0 :                 zval_dtor(zerrstr);
      76               0 :                 ZVAL_STRING(zerrstr, "", 1);
      77                 :         }
      78                 : 
      79              14 :         stream = php_stream_xport_create(hostname, hostname_len, ENFORCE_SAFE_MODE | REPORT_ERRORS,
      80                 :                         STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT, hashkey, &tv, NULL, &errstr, &err);
      81                 : 
      82              14 :         if (port > 0) {
      83              14 :                 efree(hostname);
      84                 :         }
      85              14 :         if (stream == NULL) {
      86               0 :                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s:%ld (%s)", host, port, errstr == NULL ? "Unknown error" : errstr);
      87                 :         }
      88                 : 
      89              14 :         if (hashkey) {
      90               0 :                 efree(hashkey);
      91                 :         }
      92                 :         
      93              14 :         if (stream == NULL)     {
      94               0 :                 if (zerrno) {
      95               0 :                         zval_dtor(zerrno);
      96               0 :                         ZVAL_LONG(zerrno, err);
      97                 :                 }
      98               0 :                 if (zerrstr && errstr) {
      99                 :                         /* no need to dup; we need to efree buf anyway */
     100               0 :                         zval_dtor(zerrstr);
     101               0 :                         ZVAL_STRING(zerrstr, errstr, 0);
     102                 :                 }
     103               0 :                 else if (!zerrstr && errstr) {
     104               0 :                         efree(errstr);
     105                 :                 } 
     106                 : 
     107               0 :                 RETURN_FALSE;
     108                 :         }
     109                 : 
     110              14 :         if (errstr) {
     111               0 :                 efree(errstr);
     112                 :         }
     113                 :                 
     114              14 :         php_stream_to_zval(stream, return_value);
     115                 : }
     116                 : 
     117                 : /* }}} */
     118                 : 
     119                 : /* {{{ proto resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
     120                 :    Open Internet or Unix domain socket connection */
     121                 : PHP_FUNCTION(fsockopen)
     122              14 : {
     123              14 :         php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
     124              14 : }
     125                 : /* }}} */
     126                 : /* {{{ proto resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
     127                 :    Open persistent Internet or Unix domain socket connection */
     128                 : PHP_FUNCTION(pfsockopen)
     129               0 : {
     130               0 :         php_fsockopen_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
     131               0 : }
     132                 : /* }}} */
     133                 : 
     134                 : /*
     135                 :  * Local variables:
     136                 :  * tab-width: 4
     137                 :  * c-basic-offset: 4
     138                 :  * End:
     139                 :  * vim600: sw=4 ts=4 fdm=marker
     140                 :  * vim<600: sw=4 ts=4
     141                 :  */

Generated by: LTP GCOV extension version 1.5