ILIAS  Release_3_10_x_branch Revision 61812
 All Data Structures Namespaces Files Functions Variables Groups Pages
soap_transport_http Class Reference

transport class for sending/receiving data via HTTP and HTTPS NOTE: PHP must be compiled with the CURL extension for HTTPS support More...

+ Inheritance diagram for soap_transport_http:
+ Collaboration diagram for soap_transport_http:

Public Member Functions

 soap_transport_http ($url)
 constructor
 connect ($connection_timeout=0, $response_timeout=30)
 send ($data, $timeout=0, $response_timeout=30)
 send the SOAP message via HTTP
 sendHTTPS ($data, $timeout=0, $response_timeout=30)
 send the SOAP message via HTTPS 1.0 using CURL
 setCredentials ($username, $password, $authtype= 'basic', $digestRequest=array())
 if authenticating, set user credentials here
 setSOAPAction ($soapaction)
 set the soapaction value
 setEncoding ($enc='gzip, deflate')
 use http encoding
 setProxy ($proxyhost, $proxyport, $proxyusername= '', $proxypassword= '')
 set proxy info here
 decodeChunked ($buffer, $lb)
 decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6
 buildPayload ($data)
 sendRequest ($data)
 getResponse ()
 setContentType ($type, $charset=false)
 usePersistentConnection ()
 soap_transport_http ($url)
 constructor
 setURL ($url)
 connect ($connection_timeout=0, $response_timeout=30)
 send ($data, $timeout=0, $response_timeout=30, $cookies=NULL)
 send the SOAP message via HTTP
 sendHTTPS ($data, $timeout=0, $response_timeout=30, $cookies)
 send the SOAP message via HTTPS 1.0 using CURL
 setCredentials ($username, $password, $authtype= 'basic', $digestRequest=array(), $certRequest=array())
 if authenticating, set user credentials here
 setSOAPAction ($soapaction)
 set the soapaction value
 setEncoding ($enc='gzip, deflate')
 use http encoding
 setProxy ($proxyhost, $proxyport, $proxyusername= '', $proxypassword= '')
 set proxy info here
 decodeChunked ($buffer, $lb)
 decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6
 buildPayload ($data, $cookie_str= '')
 sendRequest ($data, $cookies=NULL)
 getResponse ()
 setContentType ($type, $charset=false)
 usePersistentConnection ()
 parseCookie ($cookie_str)
 parse an incoming Cookie into it's parts
 getCookiesForRequest ($cookies, $secure=false)
 sort out cookies for the current request
 soap_transport_http ($url)
 constructor
 setURL ($url)
 connect ($connection_timeout=0, $response_timeout=30)
 send ($data, $timeout=0, $response_timeout=30, $cookies=NULL)
 send the SOAP message via HTTP
 sendHTTPS ($data, $timeout=0, $response_timeout=30, $cookies)
 send the SOAP message via HTTPS 1.0 using CURL
 setCredentials ($username, $password, $authtype= 'basic', $digestRequest=array(), $certRequest=array())
 if authenticating, set user credentials here
 setSOAPAction ($soapaction)
 set the soapaction value
 setEncoding ($enc='gzip, deflate')
 use http encoding
 setProxy ($proxyhost, $proxyport, $proxyusername= '', $proxypassword= '')
 set proxy info here
 decodeChunked ($buffer, $lb)
 decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6
 buildPayload ($data, $cookie_str= '')
 sendRequest ($data, $cookies=NULL)
 getResponse ()
 setContentType ($type, $charset=false)
 usePersistentConnection ()
 parseCookie ($cookie_str)
 parse an incoming Cookie into it's parts
 getCookiesForRequest ($cookies, $secure=false)
 sort out cookies for the current request
- Public Member Functions inherited from nusoap_base
 debug ($string)
 adds debug data to the class level debug string
 expandEntities ($val)
 expands entities, e.g.
 getError ()
 returns error string if present
 setError ($str)
 sets error string
 isArraySimpleOrStruct ($val)
 detect if array is a simple array or a struct (associative array)
 serialize_val ($val, $name=false, $type=false, $name_ns=false, $type_ns=false, $attributes=false, $use='encoded')
 serializes PHP values in accordance w/ section 5.
 serializeEnvelope ($body, $headers=false, $namespaces=array(), $style='rpc', $use='encoded')
 serialize message
 formatDump ($str)
 contractQname ($qname)
 contracts a qualified name
 expandQname ($qname)
 expands a qualified name
 getLocalPart ($str)
 returns the local part of a prefixed string returns the original string, if not prefixed
 getPrefix ($str)
 returns the prefix part of a prefixed string returns false, if not prefixed
 getNamespaceFromPrefix ($prefix)
 pass it a prefix, it returns a namespace returns false if no namespace registered with the given prefix
 getPrefixFromNamespace ($ns)
 returns the prefix for a given namespace (or prefix) or false if no prefixes registered for the given namespace
 varDump ($data)
 nusoap_base ()
 constructor
 getGlobalDebugLevel ()
 gets the global debug level, which applies to future instances
 setGlobalDebugLevel ($level)
 sets the global debug level, which applies to future instances
 getDebugLevel ()
 gets the debug level for this instance
 setDebugLevel ($level)
 sets the debug level for this instance
 debug ($string)
 adds debug data to the instance debug string with formatting
 appendDebug ($string)
 adds debug data to the instance debug string without formatting
 clearDebug ()
 clears the current debug data for this instance
getDebug ()
 gets the current debug data for this instance
getDebugAsXMLComment ()
 gets the current debug data for this instance as an XML comment this may change the contents of the debug data
 expandEntities ($val)
 expands entities, e.g.
 getError ()
 returns error string if present
 setError ($str)
 sets error string
 isArraySimpleOrStruct ($val)
 detect if array is a simple array or a struct (associative array)
 serialize_val ($val, $name=false, $type=false, $name_ns=false, $type_ns=false, $attributes=false, $use='encoded')
 serializes PHP values in accordance w/ section 5.
 serializeEnvelope ($body, $headers=false, $namespaces=array(), $style='rpc', $use='encoded', $encodingStyle='http://schemas.xmlsoap.org/soap/encoding/')
 serializes a message
 formatDump ($str)
 formats a string to be inserted into an HTML stream
 contractQname ($qname)
 contracts (changes namespace to prefix) a qualified name
 expandQname ($qname)
 expands (changes prefix to namespace) a qualified name
 getLocalPart ($str)
 returns the local part of a prefixed string returns the original string, if not prefixed
 getPrefix ($str)
 returns the prefix part of a prefixed string returns false, if not prefixed
 getNamespaceFromPrefix ($prefix)
 pass it a prefix, it returns a namespace
 getPrefixFromNamespace ($ns)
 returns the prefix for a given namespace (or prefix) or false if no prefixes registered for the given namespace
 getmicrotime ()
 returns the time in ODBC canonical form with microseconds
 varDump ($data)
 Returns a string with the output of var_dump.
 nusoap_base ()
 constructor
 getGlobalDebugLevel ()
 gets the global debug level, which applies to future instances
 setGlobalDebugLevel ($level)
 sets the global debug level, which applies to future instances
 getDebugLevel ()
 gets the debug level for this instance
 setDebugLevel ($level)
 sets the debug level for this instance
 debug ($string)
 adds debug data to the instance debug string with formatting
 appendDebug ($string)
 adds debug data to the instance debug string without formatting
 clearDebug ()
 clears the current debug data for this instance
getDebug ()
 gets the current debug data for this instance
getDebugAsXMLComment ()
 gets the current debug data for this instance as an XML comment this may change the contents of the debug data
 expandEntities ($val)
 expands entities, e.g.
 getError ()
 returns error string if present
 setError ($str)
 sets error string
 isArraySimpleOrStruct ($val)
 detect if array is a simple array or a struct (associative array)
 serialize_val ($val, $name=false, $type=false, $name_ns=false, $type_ns=false, $attributes=false, $use='encoded')
 serializes PHP values in accordance w/ section 5.
 serializeEnvelope ($body, $headers=false, $namespaces=array(), $style='rpc', $use='encoded', $encodingStyle='http://schemas.xmlsoap.org/soap/encoding/')
 serializes a message
 formatDump ($str)
 formats a string to be inserted into an HTML stream
 contractQname ($qname)
 contracts (changes namespace to prefix) a qualified name
 expandQname ($qname)
 expands (changes prefix to namespace) a qualified name
 getLocalPart ($str)
 returns the local part of a prefixed string returns the original string, if not prefixed
 getPrefix ($str)
 returns the prefix part of a prefixed string returns false, if not prefixed
 getNamespaceFromPrefix ($prefix)
 pass it a prefix, it returns a namespace
 getPrefixFromNamespace ($ns)
 returns the prefix for a given namespace (or prefix) or false if no prefixes registered for the given namespace
 getmicrotime ()
 returns the time in ODBC canonical form with microseconds
 varDump ($data)
 Returns a string with the output of var_dump.

Data Fields

 $url = ''
 $uri = ''
 $scheme = ''
 $host = ''
 $port = ''
 $path = ''
 $request_method = 'POST'
 $protocol_version = '1.0'
 $encoding = ''
 $outgoing_headers = array()
 $incoming_headers = array()
 $outgoing_payload = ''
 $incoming_payload = ''
 $useSOAPAction = true
 $persistentConnection = false
 $ch = false
 $username = ''
 $password = ''
 $digest_uri = ''
 $incoming_cookies = array()
 $authtype = ''
 $digestRequest = array()
 $certRequest = array()
- Data Fields inherited from nusoap_base
 $title = 'NuSOAP'
 $version = '0.6.7'
 $revision = '$Revision: 11808 $'
 $error_str = false
 $debug_str = ''
 $charencoding = true
 $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema'
 $soap_defencoding = 'UTF-8'
 $namespaces
 $usedNamespaces = array()
 $typemap
 $xmlEntities
 $debugLevel

Detailed Description

transport class for sending/receiving data via HTTP and HTTPS NOTE: PHP must be compiled with the CURL extension for HTTPS support

Author
Dietrich Ayala dietr.nosp@m.ich@.nosp@m.ganx4.nosp@m..com
Version
Id:
nusoap.php 11808 2006-08-08 09:57:04Z akill

public

Author
Dietrich Ayala dietr.nosp@m.ich@.nosp@m.ganx4.nosp@m..com
Version
Id:
class.soap_transport_http.php 14918 2007-10-07 17:02:40Z rkuester

public

Author
Dietrich Ayala dietr.nosp@m.ich@.nosp@m.ganx4.nosp@m..com
Version
Id:
nusoap.php 16669 2008-05-20 18:28:36Z rkuester

public

Definition at line 1552 of file nusoap.php.

Member Function Documentation

soap_transport_http::buildPayload (   $data,
  $cookie_str = '' 
)

Definition at line 481 of file class.soap_transport_http.php.

References $data, and nusoap_base\debug().

{
// add content-length header
$this->outgoing_headers['Content-Length'] = strlen($data);
$this->debug('set Content-Length: ' . $this->outgoing_headers['Content-Length']);
// start building outgoing payload:
$req = "$this->request_method $this->uri HTTP/$this->protocol_version";
$this->debug("HTTP request: $req");
$this->outgoing_payload = "$req\r\n";
// loop thru headers, serializing
foreach($this->outgoing_headers as $k => $v){
$hdr = $k.': '.$v;
$this->debug("HTTP header: $hdr");
$this->outgoing_payload .= "$hdr\r\n";
}
// add any cookies
if ($cookie_str != '') {
$hdr = 'Cookie: '.$cookie_str;
$this->debug("HTTP header: $hdr");
$this->outgoing_payload .= "$hdr\r\n";
}
// header/body separator
$this->outgoing_payload .= "\r\n";
// add data
$this->outgoing_payload .= $data;
}

+ Here is the call graph for this function:

soap_transport_http::buildPayload (   $data)

Definition at line 1960 of file nusoap.php.

References $data.

Referenced by sendRequest().

{
// add content-length header
$this->outgoing_headers['Content-Length'] = strlen($data);
// start building outgoing payload:
$this->outgoing_payload = "$this->request_method $this->uri HTTP/$this->protocol_version\r\n";
// loop thru headers, serializing
foreach($this->outgoing_headers as $k => $v){
$this->outgoing_payload .= $k.': '.$v."\r\n";
}
// header/body separator
$this->outgoing_payload .= "\r\n";
// add data
$this->outgoing_payload .= $data;
}

+ Here is the caller graph for this function:

soap_transport_http::buildPayload (   $data,
  $cookie_str = '' 
)

Definition at line 2477 of file nusoap.php.

References $data, and nusoap_base\debug().

{
// add content-length header
$this->outgoing_headers['Content-Length'] = strlen($data);
$this->debug('set Content-Length: ' . $this->outgoing_headers['Content-Length']);
// start building outgoing payload:
$req = "$this->request_method $this->uri HTTP/$this->protocol_version";
$this->debug("HTTP request: $req");
$this->outgoing_payload = "$req\r\n";
// loop thru headers, serializing
foreach($this->outgoing_headers as $k => $v){
$hdr = $k.': '.$v;
$this->debug("HTTP header: $hdr");
$this->outgoing_payload .= "$hdr\r\n";
}
// add any cookies
if ($cookie_str != '') {
$hdr = 'Cookie: '.$cookie_str;
$this->debug("HTTP header: $hdr");
$this->outgoing_payload .= "$hdr\r\n";
}
// header/body separator
$this->outgoing_payload .= "\r\n";
// add data
$this->outgoing_payload .= $data;
}

+ Here is the call graph for this function:

soap_transport_http::connect (   $connection_timeout = 0,
  $response_timeout = 30 
)

Definition at line 96 of file class.soap_transport_http.php.

References nusoap_base\$error_str, $host, $path, $url, nusoap_base\debug(), and nusoap_base\setError().

{
// For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat like
// "regular" socket.
// TODO: disabled for now because OpenSSL must be *compiled* in (not just
// loaded), and until PHP5 stream_get_wrappers is not available.
// if ($this->scheme == 'https') {
// if (version_compare(phpversion(), '4.3.0') >= 0) {
// if (extension_loaded('openssl')) {
// $this->scheme = 'ssl';
// $this->debug('Using SSL over OpenSSL');
// }
// }
// }
$this->debug("connect connection_timeout $connection_timeout, response_timeout $response_timeout, scheme $this->scheme, host $this->host, port $this->port");
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// use persistent connection
if($this->persistentConnection && isset($this->fp) && is_resource($this->fp)){
if (!feof($this->fp)) {
$this->debug('Re-use persistent connection');
return true;
}
fclose($this->fp);
$this->debug('Closed persistent connection at EOF');
}
// munge host if using OpenSSL
if ($this->scheme == 'ssl') {
$host = 'ssl://' . $this->host;
} else {
}
$this->debug('calling fsockopen with host ' . $host . ' connection_timeout ' . $connection_timeout);
// open socket
if($connection_timeout > 0){
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout);
} else {
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str);
}
// test pointer
if(!$this->fp) {
$msg = 'Couldn\'t open socket connection to server ' . $this->url;
if ($this->errno) {
$msg .= ', Error ('.$this->errno.'): '.$this->error_str;
} else {
$msg .= ' prior to connect(). This is often a problem looking up the host name.';
}
$this->debug($msg);
$this->setError($msg);
return false;
}
// set response timeout
$this->debug('set response timeout to ' . $response_timeout);
socket_set_timeout( $this->fp, $response_timeout);
$this->debug('socket connected');
return true;
} else if ($this->scheme == 'https') {
if (!extension_loaded('curl')) {
$this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
return false;
}
$this->debug('connect using https');
// init CURL
$this->ch = curl_init();
// set url
$hostURL = ($this->port != '') ? "https://$this->host:$this->port" : "https://$this->host";
// add path
$hostURL .= $this->path;
curl_setopt($this->ch, CURLOPT_URL, $hostURL);
// follow location headers (re-directs)
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1);
// ask for headers in the response output
curl_setopt($this->ch, CURLOPT_HEADER, 1);
// ask for the response output as the return value
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
// encode
// We manage this ourselves through headers and encoding
// if(function_exists('gzuncompress')){
// curl_setopt($this->ch, CURLOPT_ENCODING, 'deflate');
// }
// persistent connection
if ($this->persistentConnection) {
// The way we send data, we cannot use persistent connections, since
// there will be some "junk" at the end of our request.
//curl_setopt($this->ch, CURL_HTTP_VERSION_1_1, true);
$this->persistentConnection = false;
$this->outgoing_headers['Connection'] = 'close';
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
}
// set timeout
if ($connection_timeout != 0) {
curl_setopt($this->ch, CURLOPT_TIMEOUT, $connection_timeout);
}
// TODO: cURL has added a connection timeout separate from the response timeout
//if ($connection_timeout != 0) {
// curl_setopt($this->ch, CURLOPT_CONNECTIONTIMEOUT, $connection_timeout);
//}
//if ($response_timeout != 0) {
// curl_setopt($this->ch, CURLOPT_TIMEOUT, $response_timeout);
//}
// recent versions of cURL turn on peer/host checking by default,
// while PHP binaries are not compiled with a default location for the
// CA cert bundle, so disable peer/host checking.
//curl_setopt($this->ch, CURLOPT_CAINFO, 'f:\php-4.3.2-win32\extensions\curl-ca-bundle.crt');
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
// support client certificates (thanks Tobias Boes, Doug Anarino, Eryan Ariobowo)
if ($this->authtype == 'certificate') {
if (isset($this->certRequest['cainfofile'])) {
curl_setopt($this->ch, CURLOPT_CAINFO, $this->certRequest['cainfofile']);
}
if (isset($this->certRequest['verifypeer'])) {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, $this->certRequest['verifypeer']);
} else {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
}
if (isset($this->certRequest['verifyhost'])) {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, $this->certRequest['verifyhost']);
} else {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
}
if (isset($this->certRequest['sslcertfile'])) {
curl_setopt($this->ch, CURLOPT_SSLCERT, $this->certRequest['sslcertfile']);
}
if (isset($this->certRequest['sslkeyfile'])) {
curl_setopt($this->ch, CURLOPT_SSLKEY, $this->certRequest['sslkeyfile']);
}
if (isset($this->certRequest['passphrase'])) {
curl_setopt($this->ch, CURLOPT_SSLKEYPASSWD , $this->certRequest['passphrase']);
}
}
$this->debug('cURL connection set up');
return true;
} else {
$this->setError('Unknown scheme ' . $this->scheme);
$this->debug('Unknown scheme ' . $this->scheme);
return false;
}
}

+ Here is the call graph for this function:

soap_transport_http::connect (   $connection_timeout = 0,
  $response_timeout = 30 
)

Definition at line 1615 of file nusoap.php.

References nusoap_base\$error_str, $host, $path, $url, nusoap_base\debug(), and nusoap_base\setError().

Referenced by send().

{
// For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat like
// "regular" socket.
// TODO: disabled for now because OpenSSL must be *compiled* in (not just
// loaded), and until PHP5 stream_get_wrappers is not available.
// if ($this->scheme == 'https') {
// if (version_compare(phpversion(), '4.3.0') >= 0) {
// if (extension_loaded('openssl')) {
// $this->scheme = 'ssl';
// $this->debug('Using SSL over OpenSSL');
// }
// }
// }
$this->debug("connect connection_timeout $connection_timeout, response_timeout $response_timeout, scheme $this->scheme, host $this->host, port $this->port");
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// use persistent connection
if($this->persistentConnection && isset($this->fp) && is_resource($this->fp)){
if (!feof($this->fp)) {
$this->debug('Re-use persistent connection');
return true;
}
fclose($this->fp);
$this->debug('Closed persistent connection at EOF');
}
// munge host if using OpenSSL
if ($this->scheme == 'ssl') {
$host = 'ssl://' . $this->host;
} else {
}
$this->debug('calling fsockopen with host ' . $host);
// open socket
if($connection_timeout > 0){
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout);
} else {
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str);
}
// test pointer
if(!$this->fp) {
$msg = 'Couldn\'t open socket connection to server ' . $this->url;
if ($this->errno) {
$msg .= ', Error ('.$this->errno.'): '.$this->error_str;
} else {
$msg .= ' prior to connect(). This is often a problem looking up the host name.';
}
$this->debug($msg);
$this->setError($msg);
return false;
}
// set response timeout
socket_set_timeout( $this->fp, $response_timeout);
$this->debug('socket connected');
return true;
} else if ($this->scheme == 'https') {
if (!extension_loaded('curl')) {
$this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
return false;
}
$this->debug('connect using https');
// init CURL
$this->ch = curl_init();
// set url
$hostURL = ($this->port != '') ? "https://$this->host:$this->port" : "https://$this->host";
// add path
$hostURL .= $this->path;
curl_setopt($this->ch, CURLOPT_URL, $hostURL);
// ask for headers in the response output
curl_setopt($this->ch, CURLOPT_HEADER, 1);
// ask for the response output as the return value
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
// encode
// We manage this ourselves through headers and encoding
// if(function_exists('gzuncompress')){
// curl_setopt($this->ch, CURLOPT_ENCODING, 'deflate');
// }
// persistent connection
if ($this->persistentConnection) {
// The way we send data, we cannot use persistent connections, since
// there will be some "junk" at the end of our request.
//curl_setopt($this->ch, CURL_HTTP_VERSION_1_1, true);
$this->persistentConnection = false;
$this->outgoing_headers['Connection'] = 'close';
}
// set timeout (NOTE: cURL does not have separate connection and response timeouts)
if ($connection_timeout != 0) {
curl_setopt($this->ch, CURLOPT_TIMEOUT, $connection_timeout);
}
// recent versions of cURL turn on peer/host checking by default,
// while PHP binaries are not compiled with a default location for the
// CA cert bundle, so disable peer/host checking.
//curl_setopt($this->ch, CURLOPT_CAINFO, 'f:\php-4.3.2-win32\extensions\curl-ca-bundle.crt');
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
/*
TODO: support client certificates (thanks Tobias Boes)
curl_setopt($this->ch, CURLOPT_CAINFO, '$pathToPemFiles/rootca.pem');
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($this->ch, CURLOPT_SSLCERT, '$pathToPemFiles/mycert.pem');
curl_setopt($this->ch, CURLOPT_SSLKEY, '$pathToPemFiles/mykey.pem');
*/
$this->debug('cURL connection set up');
return true;
} else {
$this->setError('Unknown scheme ' . $this->scheme);
$this->debug('Unknown scheme ' . $this->scheme);
return false;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::connect (   $connection_timeout = 0,
  $response_timeout = 30 
)

Definition at line 2092 of file nusoap.php.

References nusoap_base\$error_str, $host, $path, $url, nusoap_base\debug(), and nusoap_base\setError().

{
// For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat like
// "regular" socket.
// TODO: disabled for now because OpenSSL must be *compiled* in (not just
// loaded), and until PHP5 stream_get_wrappers is not available.
// if ($this->scheme == 'https') {
// if (version_compare(phpversion(), '4.3.0') >= 0) {
// if (extension_loaded('openssl')) {
// $this->scheme = 'ssl';
// $this->debug('Using SSL over OpenSSL');
// }
// }
// }
$this->debug("connect connection_timeout $connection_timeout, response_timeout $response_timeout, scheme $this->scheme, host $this->host, port $this->port");
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// use persistent connection
if($this->persistentConnection && isset($this->fp) && is_resource($this->fp)){
if (!feof($this->fp)) {
$this->debug('Re-use persistent connection');
return true;
}
fclose($this->fp);
$this->debug('Closed persistent connection at EOF');
}
// munge host if using OpenSSL
if ($this->scheme == 'ssl') {
$host = 'ssl://' . $this->host;
} else {
}
$this->debug('calling fsockopen with host ' . $host . ' connection_timeout ' . $connection_timeout);
// open socket
if($connection_timeout > 0){
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str, $connection_timeout);
} else {
$this->fp = @fsockopen( $host, $this->port, $this->errno, $this->error_str);
}
// test pointer
if(!$this->fp) {
$msg = 'Couldn\'t open socket connection to server ' . $this->url;
if ($this->errno) {
$msg .= ', Error ('.$this->errno.'): '.$this->error_str;
} else {
$msg .= ' prior to connect(). This is often a problem looking up the host name.';
}
$this->debug($msg);
$this->setError($msg);
return false;
}
// set response timeout
$this->debug('set response timeout to ' . $response_timeout);
socket_set_timeout( $this->fp, $response_timeout);
$this->debug('socket connected');
return true;
} else if ($this->scheme == 'https') {
if (!extension_loaded('curl')) {
$this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
return false;
}
$this->debug('connect using https');
// init CURL
$this->ch = curl_init();
// set url
$hostURL = ($this->port != '') ? "https://$this->host:$this->port" : "https://$this->host";
// add path
$hostURL .= $this->path;
curl_setopt($this->ch, CURLOPT_URL, $hostURL);
// follow location headers (re-directs)
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1);
// ask for headers in the response output
curl_setopt($this->ch, CURLOPT_HEADER, 1);
// ask for the response output as the return value
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
// encode
// We manage this ourselves through headers and encoding
// if(function_exists('gzuncompress')){
// curl_setopt($this->ch, CURLOPT_ENCODING, 'deflate');
// }
// persistent connection
if ($this->persistentConnection) {
// The way we send data, we cannot use persistent connections, since
// there will be some "junk" at the end of our request.
//curl_setopt($this->ch, CURL_HTTP_VERSION_1_1, true);
$this->persistentConnection = false;
$this->outgoing_headers['Connection'] = 'close';
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
}
// set timeout
if ($connection_timeout != 0) {
curl_setopt($this->ch, CURLOPT_TIMEOUT, $connection_timeout);
}
// TODO: cURL has added a connection timeout separate from the response timeout
//if ($connection_timeout != 0) {
// curl_setopt($this->ch, CURLOPT_CONNECTIONTIMEOUT, $connection_timeout);
//}
//if ($response_timeout != 0) {
// curl_setopt($this->ch, CURLOPT_TIMEOUT, $response_timeout);
//}
// recent versions of cURL turn on peer/host checking by default,
// while PHP binaries are not compiled with a default location for the
// CA cert bundle, so disable peer/host checking.
//curl_setopt($this->ch, CURLOPT_CAINFO, 'f:\php-4.3.2-win32\extensions\curl-ca-bundle.crt');
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
// support client certificates (thanks Tobias Boes, Doug Anarino, Eryan Ariobowo)
if ($this->authtype == 'certificate') {
if (isset($this->certRequest['cainfofile'])) {
curl_setopt($this->ch, CURLOPT_CAINFO, $this->certRequest['cainfofile']);
}
if (isset($this->certRequest['verifypeer'])) {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, $this->certRequest['verifypeer']);
} else {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
}
if (isset($this->certRequest['verifyhost'])) {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, $this->certRequest['verifyhost']);
} else {
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
}
if (isset($this->certRequest['sslcertfile'])) {
curl_setopt($this->ch, CURLOPT_SSLCERT, $this->certRequest['sslcertfile']);
}
if (isset($this->certRequest['sslkeyfile'])) {
curl_setopt($this->ch, CURLOPT_SSLKEY, $this->certRequest['sslkeyfile']);
}
if (isset($this->certRequest['passphrase'])) {
curl_setopt($this->ch, CURLOPT_SSLKEYPASSWD , $this->certRequest['passphrase']);
}
}
$this->debug('cURL connection set up');
return true;
} else {
$this->setError('Unknown scheme ' . $this->scheme);
$this->debug('Unknown scheme ' . $this->scheme);
return false;
}
}

+ Here is the call graph for this function:

soap_transport_http::decodeChunked (   $buffer,
  $lb 
)

decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6

Parameters
string$buffer
string$lb
Returns
string public
Deprecated:

Definition at line 429 of file class.soap_transport_http.php.

References nusoap_base\debug().

{
// length := 0
$length = 0;
$new = '';
// read chunk-size, chunk-extension (if any) and CRLF
// get the position of the linebreak
$chunkend = strpos($buffer, $lb);
if ($chunkend == FALSE) {
$this->debug('no linebreak found in decodeChunked');
return $new;
}
$temp = substr($buffer,0,$chunkend);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend + strlen($lb);
// while (chunk-size > 0) {
while ($chunk_size > 0) {
$this->debug("chunkstart: $chunkstart chunk_size: $chunk_size");
$chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);
// Just in case we got a broken connection
if ($chunkend == FALSE) {
$chunk = substr($buffer,$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
$length += strlen($chunk);
break;
}
// read chunk-data and CRLF
$chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
// length := length + chunk-size
$length += strlen($chunk);
// read chunk-size and CRLF
$chunkstart = $chunkend + strlen($lb);
$chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);
if ($chunkend == FALSE) {
break; //Just in case we got a broken connection
}
$temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend;
}
return $new;
}

+ Here is the call graph for this function:

soap_transport_http::decodeChunked (   $buffer,
  $lb 
)

decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6

Parameters
string$buffer
string$lb
Returns
string public

Definition at line 1908 of file nusoap.php.

References nusoap_base\debug().

{
// length := 0
$length = 0;
$new = '';
// read chunk-size, chunk-extension (if any) and CRLF
// get the position of the linebreak
$chunkend = strpos($buffer, $lb);
if ($chunkend == FALSE) {
$this->debug('no linebreak found in decodeChunked');
return $new;
}
$temp = substr($buffer,0,$chunkend);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend + strlen($lb);
// while (chunk-size > 0) {
while ($chunk_size > 0) {
$this->debug("chunkstart: $chunkstart chunk_size: $chunk_size");
$chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);
// Just in case we got a broken connection
if ($chunkend == FALSE) {
$chunk = substr($buffer,$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
$length += strlen($chunk);
break;
}
// read chunk-data and CRLF
$chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
// length := length + chunk-size
$length += strlen($chunk);
// read chunk-size and CRLF
$chunkstart = $chunkend + strlen($lb);
$chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);
if ($chunkend == FALSE) {
break; //Just in case we got a broken connection
}
$temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend;
}
return $new;
}

+ Here is the call graph for this function:

soap_transport_http::decodeChunked (   $buffer,
  $lb 
)

decode a string that is encoded w/ "chunked' transfer encoding as defined in RFC2068 19.4.6

Parameters
string$buffer
string$lb
Returns
string public
Deprecated:

Definition at line 2425 of file nusoap.php.

References nusoap_base\debug().

{
// length := 0
$length = 0;
$new = '';
// read chunk-size, chunk-extension (if any) and CRLF
// get the position of the linebreak
$chunkend = strpos($buffer, $lb);
if ($chunkend == FALSE) {
$this->debug('no linebreak found in decodeChunked');
return $new;
}
$temp = substr($buffer,0,$chunkend);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend + strlen($lb);
// while (chunk-size > 0) {
while ($chunk_size > 0) {
$this->debug("chunkstart: $chunkstart chunk_size: $chunk_size");
$chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);
// Just in case we got a broken connection
if ($chunkend == FALSE) {
$chunk = substr($buffer,$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
$length += strlen($chunk);
break;
}
// read chunk-data and CRLF
$chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
// length := length + chunk-size
$length += strlen($chunk);
// read chunk-size and CRLF
$chunkstart = $chunkend + strlen($lb);
$chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);
if ($chunkend == FALSE) {
break; //Just in case we got a broken connection
}
$temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
$chunk_size = hexdec( trim($temp) );
$chunkstart = $chunkend;
}
return $new;
}

+ Here is the call graph for this function:

soap_transport_http::getCookiesForRequest (   $cookies,
  $secure = false 
)

sort out cookies for the current request

Parameters
array$cookiesarray with all cookies
boolean$secureis the send-content secure or not?
Returns
string for Cookie-HTTP-Header private

Definition at line 997 of file class.soap_transport_http.php.

References $path, and nusoap_base\debug().

Referenced by sendRequest().

{
$cookie_str = '';
if ((! is_null($cookies)) && (is_array($cookies))) {
foreach ($cookies as $cookie) {
if (! is_array($cookie)) {
continue;
}
$this->debug("check cookie for validity: ".$cookie['name'].'='.$cookie['value']);
if ((isset($cookie['expires'])) && (! empty($cookie['expires']))) {
if (strtotime($cookie['expires']) <= time()) {
$this->debug('cookie has expired');
continue;
}
}
if ((isset($cookie['domain'])) && (! empty($cookie['domain']))) {
$domain = preg_quote($cookie['domain']);
if (! preg_match("'.*$domain$'i", $this->host)) {
$this->debug('cookie has different domain');
continue;
}
}
if ((isset($cookie['path'])) && (! empty($cookie['path']))) {
$path = preg_quote($cookie['path']);
if (! preg_match("'^$path.*'i", $this->path)) {
$this->debug('cookie is for a different path');
continue;
}
}
if ((! $secure) && (isset($cookie['secure'])) && ($cookie['secure'])) {
$this->debug('cookie is secure, transport is not');
continue;
}
$cookie_str .= $cookie['name'] . '=' . $cookie['value'] . '; ';
$this->debug('add cookie to Cookie-String: ' . $cookie['name'] . '=' . $cookie['value']);
}
}
return $cookie_str;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::getCookiesForRequest (   $cookies,
  $secure = false 
)

sort out cookies for the current request

Parameters
array$cookiesarray with all cookies
boolean$secureis the send-content secure or not?
Returns
string for Cookie-HTTP-Header private

Definition at line 2993 of file nusoap.php.

References $path, and nusoap_base\debug().

{
$cookie_str = '';
if ((! is_null($cookies)) && (is_array($cookies))) {
foreach ($cookies as $cookie) {
if (! is_array($cookie)) {
continue;
}
$this->debug("check cookie for validity: ".$cookie['name'].'='.$cookie['value']);
if ((isset($cookie['expires'])) && (! empty($cookie['expires']))) {
if (strtotime($cookie['expires']) <= time()) {
$this->debug('cookie has expired');
continue;
}
}
if ((isset($cookie['domain'])) && (! empty($cookie['domain']))) {
$domain = preg_quote($cookie['domain']);
if (! preg_match("'.*$domain$'i", $this->host)) {
$this->debug('cookie has different domain');
continue;
}
}
if ((isset($cookie['path'])) && (! empty($cookie['path']))) {
$path = preg_quote($cookie['path']);
if (! preg_match("'^$path.*'i", $this->path)) {
$this->debug('cookie is for a different path');
continue;
}
}
if ((! $secure) && (isset($cookie['secure'])) && ($cookie['secure'])) {
$this->debug('cookie is secure, transport is not');
continue;
}
$cookie_str .= $cookie['name'] . '=' . $cookie['value'] . '; ';
$this->debug('add cookie to Cookie-String: ' . $cookie['name'] . '=' . $cookie['value']);
}
}
return $cookie_str;
}

+ Here is the call graph for this function:

soap_transport_http::getResponse ( )

Definition at line 551 of file class.soap_transport_http.php.

References $data, $digestRequest, $incoming_payload, nusoap_base\debug(), parseCookie(), setCredentials(), nusoap_base\setError(), and setURL().

{
$this->incoming_payload = '';
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// loop until headers have been retrieved
$data = '';
while (!isset($lb)){
// We might EOF during header read.
if(feof($this->fp)) {
$this->incoming_payload = $data;
$this->debug('found no headers before EOF after length ' . strlen($data));
$this->debug("received before EOF:\n" . $data);
$this->setError('server failed to send headers');
return false;
}
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read line of $tmplen bytes: " . trim($tmp));
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of headers timed out after length ' . strlen($data));
$this->debug("read before timeout: " . $data);
$this->setError('socket read of headers timed out');
return false;
}
$data .= $tmp;
$pos = strpos($data,"\r\n\r\n");
if($pos > 1){
$lb = "\r\n";
} else {
$pos = strpos($data,"\n\n");
if($pos > 1){
$lb = "\n";
}
}
// remove 100 header
if(isset($lb) && ereg('^HTTP/1.1 100',$data)){
unset($lb);
$data = '';
}//
}
// store header data
$this->incoming_payload .= $data;
$this->debug('found end of headers after length ' . strlen($data));
// process headers
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$this->incoming_headers = array();
$this->incoming_cookies = array();
foreach($header_array as $header_line){
$arr = explode(':',$header_line, 2);
if(count($arr) > 1){
$header_name = strtolower(trim($arr[0]));
$this->incoming_headers[$header_name] = trim($arr[1]);
if ($header_name == 'set-cookie') {
// TODO: allow multiple cookies from parseCookie
$cookie = $this->parseCookie(trim($arr[1]));
if ($cookie) {
$this->incoming_cookies[] = $cookie;
$this->debug('found cookie: ' . $cookie['name'] . ' = ' . $cookie['value']);
} else {
$this->debug('did not find cookie in ' . trim($arr[1]));
}
}
} else if (isset($header_name)) {
// append continuation line to previous header
$this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
}
}
// loop until msg has been received
if (isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {
$content_length = 2147483647; // ignore any content-length header
$chunked = true;
$this->debug("want to read chunked content");
} elseif (isset($this->incoming_headers['content-length'])) {
$content_length = $this->incoming_headers['content-length'];
$chunked = false;
$this->debug("want to read content of length $content_length");
} else {
$content_length = 2147483647;
$chunked = false;
$this->debug("want to read content to EOF");
}
$data = '';
do {
if ($chunked) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk line of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk length timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk length timed out');
return false;
}
$content_length = hexdec(trim($tmp));
$this->debug("chunk length $content_length");
}
$strlen = 0;
while (($strlen < $content_length) && (!feof($this->fp))) {
$readlen = min(8192, $content_length - $strlen);
$tmp = fread($this->fp, $readlen);
$tmplen = strlen($tmp);
$this->debug("read buffer of $tmplen bytes");
if (($tmplen == 0) && (!feof($this->fp))) {
$this->incoming_payload = $data;
$this->debug('socket read of body timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of body timed out');
return false;
}
$strlen += $tmplen;
$data .= $tmp;
}
if ($chunked && ($content_length > 0)) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk terminator of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk terminator timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk terminator timed out');
return false;
}
}
} while ($chunked && ($content_length > 0) && (!feof($this->fp)));
if (feof($this->fp)) {
$this->debug('read to EOF');
}
$this->debug('read body of length ' . strlen($data));
$this->incoming_payload .= $data;
$this->debug('received a total of '.strlen($this->incoming_payload).' bytes of data from server');
// close filepointer
if(
(isset($this->incoming_headers['connection']) && strtolower($this->incoming_headers['connection']) == 'close') ||
(! $this->persistentConnection) || feof($this->fp)){
fclose($this->fp);
$this->fp = false;
$this->debug('closed socket');
}
// connection was closed unexpectedly
if($this->incoming_payload == ''){
$this->setError('no response from server');
return false;
}
// decode transfer-encoding
// if(isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){
// if(!$data = $this->decodeChunked($data, $lb)){
// $this->setError('Decoding of chunked data failed');
// return false;
// }
//print "<pre>\nde-chunked:\n---------------\n$data\n\n---------------\n</pre>";
// set decoded payload
// $this->incoming_payload = $header_data.$lb.$lb.$data;
// }
} else if ($this->scheme == 'https') {
// send and receive
$this->debug('send and receive with cURL');
$this->incoming_payload = curl_exec($this->ch);
$cErr = curl_error($this->ch);
if ($cErr != '') {
$err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';
// TODO: there is a PHP bug that can cause this to SEGV for CURLINFO_CONTENT_TYPE
foreach(curl_getinfo($this->ch) as $k => $v){
$err .= "$k: $v<br>";
}
$this->debug($err);
$this->setError($err);
curl_close($this->ch);
return false;
} else {
//echo '<pre>';
//var_dump(curl_getinfo($this->ch));
//echo '</pre>';
}
// close curl
$this->debug('No cURL error, closing cURL');
curl_close($this->ch);
// remove 100 header(s)
while (ereg('^HTTP/1.1 100',$data)) {
if ($pos = strpos($data,"\r\n\r\n")) {
$data = ltrim(substr($data,$pos));
} elseif($pos = strpos($data,"\n\n") ) {
$data = ltrim(substr($data,$pos));
}
}
// separate content from HTTP headers
if ($pos = strpos($data,"\r\n\r\n")) {
$lb = "\r\n";
} elseif( $pos = strpos($data,"\n\n")) {
$lb = "\n";
} else {
$this->debug('no proper separation of headers and document');
$this->setError('no proper separation of headers and document');
return false;
}
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$data = ltrim(substr($data,$pos));
$this->debug('found proper separation of headers and document');
$this->debug('cleaned data, stringlen: '.strlen($data));
// clean headers
foreach ($header_array as $header_line) {
$arr = explode(':',$header_line,2);
if(count($arr) > 1){
$header_name = strtolower(trim($arr[0]));
$this->incoming_headers[$header_name] = trim($arr[1]);
if ($header_name == 'set-cookie') {
// TODO: allow multiple cookies from parseCookie
$cookie = $this->parseCookie(trim($arr[1]));
if ($cookie) {
$this->incoming_cookies[] = $cookie;
$this->debug('found cookie: ' . $cookie['name'] . ' = ' . $cookie['value']);
} else {
$this->debug('did not find cookie in ' . trim($arr[1]));
}
}
} else if (isset($header_name)) {
// append continuation line to previous header
$this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
}
}
}
$arr = explode(' ', $header_array[0], 3);
$http_version = $arr[0];
$http_status = intval($arr[1]);
$http_reason = count($arr) > 2 ? $arr[2] : '';
// see if we need to resend the request with http digest authentication
if (isset($this->incoming_headers['location']) && $http_status == 301) {
$this->debug("Got 301 $http_reason with Location: " . $this->incoming_headers['location']);
$this->setURL($this->incoming_headers['location']);
$this->tryagain = true;
return false;
}
// see if we need to resend the request with http digest authentication
if (isset($this->incoming_headers['www-authenticate']) && $http_status == 401) {
$this->debug("Got 401 $http_reason with WWW-Authenticate: " . $this->incoming_headers['www-authenticate']);
if (strstr($this->incoming_headers['www-authenticate'], "Digest ")) {
$this->debug('Server wants digest authentication');
// remove "Digest " from our elements
$digestString = str_replace('Digest ', '', $this->incoming_headers['www-authenticate']);
// parse elements into array
$digestElements = explode(',', $digestString);
foreach ($digestElements as $val) {
$tempElement = explode('=', trim($val), 2);
$digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]);
}
// should have (at least) qop, realm, nonce
if (isset($digestRequest['nonce'])) {
$this->setCredentials($this->username, $this->password, 'digest', $digestRequest);
$this->tryagain = true;
return false;
}
}
$this->debug('HTTP authentication failed');
$this->setError('HTTP authentication failed');
return false;
}
if (
($http_status >= 300 && $http_status <= 307) ||
($http_status >= 400 && $http_status <= 417) ||
($http_status >= 501 && $http_status <= 505)
) {
$this->setError("Unsupported HTTP response status $http_status $http_reason (soap_client->response has contents of the response)");
return false;
}
// decode content-encoding
if(isset($this->incoming_headers['content-encoding']) && $this->incoming_headers['content-encoding'] != ''){
if(strtolower($this->incoming_headers['content-encoding']) == 'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){
// if decoding works, use it. else assume data wasn't gzencoded
if(function_exists('gzinflate')){
//$timer->setMarker('starting decoding of gzip/deflated content');
// IIS 5 requires gzinflate instead of gzuncompress (similar to IE 5 and gzdeflate v. gzcompress)
// this means there are no Zlib headers, although there should be
$this->debug('The gzinflate function exists');
$datalen = strlen($data);
if ($this->incoming_headers['content-encoding'] == 'deflate') {
if ($degzdata = @gzinflate($data)) {
$data = $degzdata;
$this->debug('The payload has been inflated to ' . strlen($data) . ' bytes');
if (strlen($data) < $datalen) {
// test for the case that the payload has been compressed twice
$this->debug('The inflated payload is smaller than the gzipped one; try again');
if ($degzdata = @gzinflate($data)) {
$data = $degzdata;
$this->debug('The payload has been inflated again to ' . strlen($data) . ' bytes');
}
}
} else {
$this->debug('Error using gzinflate to inflate the payload');
$this->setError('Error using gzinflate to inflate the payload');
}
} elseif ($this->incoming_headers['content-encoding'] == 'gzip') {
if ($degzdata = @gzinflate(substr($data, 10))) { // do our best
$data = $degzdata;
$this->debug('The payload has been un-gzipped to ' . strlen($data) . ' bytes');
if (strlen($data) < $datalen) {
// test for the case that the payload has been compressed twice
$this->debug('The un-gzipped payload is smaller than the gzipped one; try again');
if ($degzdata = @gzinflate(substr($data, 10))) {
$data = $degzdata;
$this->debug('The payload has been un-gzipped again to ' . strlen($data) . ' bytes');
}
}
} else {
$this->debug('Error using gzinflate to un-gzip the payload');
$this->setError('Error using gzinflate to un-gzip the payload');
}
}
//$timer->setMarker('finished decoding of gzip/deflated content');
//print "<xmp>\nde-inflated:\n---------------\n$data\n-------------\n</xmp>";
// set decoded payload
$this->incoming_payload = $header_data.$lb.$lb.$data;
} else {
$this->debug('The server sent compressed data. Your php install must have the Zlib extension compiled in to support this.');
$this->setError('The server sent compressed data. Your php install must have the Zlib extension compiled in to support this.');
}
} else {
$this->debug('Unsupported Content-Encoding ' . $this->incoming_headers['content-encoding']);
$this->setError('Unsupported Content-Encoding ' . $this->incoming_headers['content-encoding']);
}
} else {
$this->debug('No Content-Encoding header');
}
if(strlen($data) == 0){
$this->debug('no data after headers!');
$this->setError('no data present after HTTP headers');
return false;
}
return $data;
}

+ Here is the call graph for this function:

soap_transport_http::getResponse ( )

Definition at line 2012 of file nusoap.php.

References $data, $digestRequest, $incoming_payload, nusoap_base\debug(), setCredentials(), and nusoap_base\setError().

Referenced by send().

{
$this->incoming_payload = '';
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// loop until headers have been retrieved
$data = '';
while (!isset($lb)){
// We might EOF during header read.
if(feof($this->fp)) {
$this->incoming_payload = $data;
$this->debug('found no headers before EOF after length ' . strlen($data));
$this->debug("received before EOF:\n" . $data);
$this->setError('server failed to send headers');
return false;
}
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read line of $tmplen bytes: " . trim($tmp));
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of headers timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of headers timed out');
return false;
}
$data .= $tmp;
$pos = strpos($data,"\r\n\r\n");
if($pos > 1){
$lb = "\r\n";
} else {
$pos = strpos($data,"\n\n");
if($pos > 1){
$lb = "\n";
}
}
// remove 100 header
if(isset($lb) && ereg('^HTTP/1.1 100',$data)){
unset($lb);
$data = '';
}//
}
// store header data
$this->incoming_payload .= $data;
$this->debug('found end of headers after length ' . strlen($data));
// process headers
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$this->incoming_headers = array();
foreach($header_array as $header_line){
$arr = explode(':',$header_line, 2);
if(count($arr) > 1){
$header_name = strtolower(trim($arr[0]));
$this->incoming_headers[$header_name] = trim($arr[1]);
} else if (isset($header_name)) {
$this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
}
}
// loop until msg has been received
if (isset($this->incoming_headers['content-length'])) {
$content_length = $this->incoming_headers['content-length'];
$chunked = false;
$this->debug("want to read content of length $content_length");
} else {
$content_length = 2147483647;
if (isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {
$chunked = true;
$this->debug("want to read chunked content");
} else {
$chunked = false;
$this->debug("want to read content to EOF");
}
}
$data = '';
do {
if ($chunked) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk line of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk length timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk length timed out');
return false;
}
$content_length = hexdec(trim($tmp));
$this->debug("chunk length $content_length");
}
$strlen = 0;
while (($strlen < $content_length) && (!feof($this->fp))) {
$readlen = min(8192, $content_length - $strlen);
$tmp = fread($this->fp, $readlen);
$tmplen = strlen($tmp);
$this->debug("read buffer of $tmplen bytes");
if (($tmplen == 0) && (!feof($this->fp))) {
$this->incoming_payload = $data;
$this->debug('socket read of body timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of body timed out');
return false;
}
$strlen += $tmplen;
$data .= $tmp;
}
if ($chunked && ($content_length > 0)) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk terminator of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk terminator timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk terminator timed out');
return false;
}
}
} while ($chunked && ($content_length > 0) && (!feof($this->fp)));
if (feof($this->fp)) {
$this->debug('read to EOF');
}
$this->debug('read body of length ' . strlen($data));
$this->incoming_payload .= $data;
$this->debug('received a total of '.strlen($this->incoming_payload).' bytes of data from server');
// close filepointer
if(
(isset($this->incoming_headers['connection']) && strtolower($this->incoming_headers['connection']) == 'close') ||
(! $this->persistentConnection) || feof($this->fp)){
fclose($this->fp);
$this->fp = false;
$this->debug('closed socket');
}
// connection was closed unexpectedly
if($this->incoming_payload == ''){
$this->setError('no response from server');
return false;
}
// decode transfer-encoding
// if(isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){
// if(!$data = $this->decodeChunked($data, $lb)){
// $this->setError('Decoding of chunked data failed');
// return false;
// }
//print "<pre>\nde-chunked:\n---------------\n$data\n\n---------------\n</pre>";
// set decoded payload
// $this->incoming_payload = $header_data.$lb.$lb.$data;
// }
} else if ($this->scheme == 'https') {
// send and receive
$this->debug('send and receive with cURL');
$this->incoming_payload = curl_exec($this->ch);
$cErr = curl_error($this->ch);
if ($cErr != '') {
$err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';
foreach(curl_getinfo($this->ch) as $k => $v){
$err .= "$k: $v<br>";
}
$this->debug($err);
$this->setError($err);
curl_close($this->ch);
return false;
} else {
//echo '<pre>';
//var_dump(curl_getinfo($this->ch));
//echo '</pre>';
}
// close curl
$this->debug('No cURL error, closing cURL');
curl_close($this->ch);
// remove 100 header
if (ereg('^HTTP/1.1 100',$data)) {
if ($pos = strpos($data,"\r\n\r\n")) {
$data = ltrim(substr($data,$pos));
} elseif($pos = strpos($data,"\n\n") ) {
$data = ltrim(substr($data,$pos));
}
}
// separate content from HTTP headers
if ($pos = strpos($data,"\r\n\r\n")) {
$lb = "\r\n";
} elseif( $pos = strpos($data,"\n\n")) {
$lb = "\n";
} else {
$this->debug('no proper separation of headers and document');
$this->setError('no proper separation of headers and document');
return false;
}
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$data = ltrim(substr($data,$pos));
$this->debug('found proper separation of headers and document');
$this->debug('cleaned data, stringlen: '.strlen($data));
// clean headers
foreach ($header_array as $header_line) {
$arr = explode(':',$header_line,2);
if (count($arr) > 1) {
$this->incoming_headers[strtolower(trim($arr[0]))] = trim($arr[1]);
}
}
}
// see if we need to resend the request with http digest authentication
if (isset($this->incoming_headers['www-authenticate']) && strstr($header_array[0], '401 Unauthorized')) {
$this->debug('Got 401 Unauthorized with WWW-Authenticate: ' . $this->incoming_headers['www-authenticate']);
if (substr("Digest ", $this->incoming_headers['www-authenticate'])) {
$this->debug('Server wants digest authentication');
// remove "Digest " from our elements
$digestString = str_replace('Digest ', '', $this->incoming_headers['www-authenticate']);
// parse elements into array
$digestElements = explode(',', $digestString);
foreach ($digestElements as $val) {
$tempElement = explode('=', trim($val));
$digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]);
}
// should have (at least) qop, realm, nonce
if (isset($digestRequest['nonce'])) {
$this->setCredentials($this->username, $this->password, 'digest', $digestRequest);
$this->tryagain = true;
return false;
}
}
$this->debug('HTTP authentication failed');
$this->setError('HTTP authentication failed');
return false;
}
// decode content-encoding
if(isset($this->incoming_headers['content-encoding']) && $this->incoming_headers['content-encoding'] != ''){
if(strtolower($this->incoming_headers['content-encoding']) == 'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){
// if decoding works, use it. else assume data wasn't gzencoded
if(function_exists('gzuncompress')){
//$timer->setMarker('starting decoding of gzip/deflated content');
if($this->incoming_headers['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data)){
$data = $degzdata;
} elseif($this->incoming_headers['content-encoding'] == 'gzip' && $degzdata = gzinflate(substr($data, 10))){ // do our best
$data = $degzdata;
} else {
$this->setError('Errors occurred when trying to decode the data');
}
//$timer->setMarker('finished decoding of gzip/deflated content');
//print "<xmp>\nde-inflated:\n---------------\n$data\n-------------\n</xmp>";
// set decoded payload
$this->incoming_payload = $header_data.$lb.$lb.$data;
} else {
$this->setError('The server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
}
}
}
if(strlen($data) == 0){
$this->debug('no data after headers!');
$this->setError('no data present after HTTP headers');
return false;
}
return $data;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::getResponse ( )

Definition at line 2547 of file nusoap.php.

References $data, $digestRequest, $incoming_payload, nusoap_base\debug(), parseCookie(), setCredentials(), nusoap_base\setError(), and setURL().

{
$this->incoming_payload = '';
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// loop until headers have been retrieved
$data = '';
while (!isset($lb)){
// We might EOF during header read.
if(feof($this->fp)) {
$this->incoming_payload = $data;
$this->debug('found no headers before EOF after length ' . strlen($data));
$this->debug("received before EOF:\n" . $data);
$this->setError('server failed to send headers');
return false;
}
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read line of $tmplen bytes: " . trim($tmp));
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of headers timed out after length ' . strlen($data));
$this->debug("read before timeout: " . $data);
$this->setError('socket read of headers timed out');
return false;
}
$data .= $tmp;
$pos = strpos($data,"\r\n\r\n");
if($pos > 1){
$lb = "\r\n";
} else {
$pos = strpos($data,"\n\n");
if($pos > 1){
$lb = "\n";
}
}
// remove 100 header
if(isset($lb) && ereg('^HTTP/1.1 100',$data)){
unset($lb);
$data = '';
}//
}
// store header data
$this->incoming_payload .= $data;
$this->debug('found end of headers after length ' . strlen($data));
// process headers
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$this->incoming_headers = array();
$this->incoming_cookies = array();
foreach($header_array as $header_line){
$arr = explode(':',$header_line, 2);
if(count($arr) > 1){
$header_name = strtolower(trim($arr[0]));
$this->incoming_headers[$header_name] = trim($arr[1]);
if ($header_name == 'set-cookie') {
// TODO: allow multiple cookies from parseCookie
$cookie = $this->parseCookie(trim($arr[1]));
if ($cookie) {
$this->incoming_cookies[] = $cookie;
$this->debug('found cookie: ' . $cookie['name'] . ' = ' . $cookie['value']);
} else {
$this->debug('did not find cookie in ' . trim($arr[1]));
}
}
} else if (isset($header_name)) {
// append continuation line to previous header
$this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
}
}
// loop until msg has been received
if (isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {
$content_length = 2147483647; // ignore any content-length header
$chunked = true;
$this->debug("want to read chunked content");
} elseif (isset($this->incoming_headers['content-length'])) {
$content_length = $this->incoming_headers['content-length'];
$chunked = false;
$this->debug("want to read content of length $content_length");
} else {
$content_length = 2147483647;
$chunked = false;
$this->debug("want to read content to EOF");
}
$data = '';
do {
if ($chunked) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk line of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk length timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk length timed out');
return false;
}
$content_length = hexdec(trim($tmp));
$this->debug("chunk length $content_length");
}
$strlen = 0;
while (($strlen < $content_length) && (!feof($this->fp))) {
$readlen = min(8192, $content_length - $strlen);
$tmp = fread($this->fp, $readlen);
$tmplen = strlen($tmp);
$this->debug("read buffer of $tmplen bytes");
if (($tmplen == 0) && (!feof($this->fp))) {
$this->incoming_payload = $data;
$this->debug('socket read of body timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of body timed out');
return false;
}
$strlen += $tmplen;
$data .= $tmp;
}
if ($chunked && ($content_length > 0)) {
$tmp = fgets($this->fp, 256);
$tmplen = strlen($tmp);
$this->debug("read chunk terminator of $tmplen bytes");
if ($tmplen == 0) {
$this->incoming_payload = $data;
$this->debug('socket read of chunk terminator timed out after length ' . strlen($data));
$this->debug("read before timeout:\n" . $data);
$this->setError('socket read of chunk terminator timed out');
return false;
}
}
} while ($chunked && ($content_length > 0) && (!feof($this->fp)));
if (feof($this->fp)) {
$this->debug('read to EOF');
}
$this->debug('read body of length ' . strlen($data));
$this->incoming_payload .= $data;
$this->debug('received a total of '.strlen($this->incoming_payload).' bytes of data from server');
// close filepointer
if(
(isset($this->incoming_headers['connection']) && strtolower($this->incoming_headers['connection']) == 'close') ||
(! $this->persistentConnection) || feof($this->fp)){
fclose($this->fp);
$this->fp = false;
$this->debug('closed socket');
}
// connection was closed unexpectedly
if($this->incoming_payload == ''){
$this->setError('no response from server');
return false;
}
// decode transfer-encoding
// if(isset($this->incoming_headers['transfer-encoding']) && strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){
// if(!$data = $this->decodeChunked($data, $lb)){
// $this->setError('Decoding of chunked data failed');
// return false;
// }
//print "<pre>\nde-chunked:\n---------------\n$data\n\n---------------\n</pre>";
// set decoded payload
// $this->incoming_payload = $header_data.$lb.$lb.$data;
// }
} else if ($this->scheme == 'https') {
// send and receive
$this->debug('send and receive with cURL');
$this->incoming_payload = curl_exec($this->ch);
$cErr = curl_error($this->ch);
if ($cErr != '') {
$err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';
// TODO: there is a PHP bug that can cause this to SEGV for CURLINFO_CONTENT_TYPE
foreach(curl_getinfo($this->ch) as $k => $v){
$err .= "$k: $v<br>";
}
$this->debug($err);
$this->setError($err);
curl_close($this->ch);
return false;
} else {
//echo '<pre>';
//var_dump(curl_getinfo($this->ch));
//echo '</pre>';
}
// close curl
$this->debug('No cURL error, closing cURL');
curl_close($this->ch);
// remove 100 header(s)
while (ereg('^HTTP/1.1 100',$data)) {
if ($pos = strpos($data,"\r\n\r\n")) {
$data = ltrim(substr($data,$pos));
} elseif($pos = strpos($data,"\n\n") ) {
$data = ltrim(substr($data,$pos));
}
}
// separate content from HTTP headers
if ($pos = strpos($data,"\r\n\r\n")) {
$lb = "\r\n";
} elseif( $pos = strpos($data,"\n\n")) {
$lb = "\n";
} else {
$this->debug('no proper separation of headers and document');
$this->setError('no proper separation of headers and document');
return false;
}
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$data = ltrim(substr($data,$pos));
$this->debug('found proper separation of headers and document');
$this->debug('cleaned data, stringlen: '.strlen($data));
// clean headers
foreach ($header_array as $header_line) {
$arr = explode(':',$header_line,2);
if(count($arr) > 1){
$header_name = strtolower(trim($arr[0]));
$this->incoming_headers[$header_name] = trim($arr[1]);
if ($header_name == 'set-cookie') {
// TODO: allow multiple cookies from parseCookie
$cookie = $this->parseCookie(trim($arr[1]));
if ($cookie) {
$this->incoming_cookies[] = $cookie;
$this->debug('found cookie: ' . $cookie['name'] . ' = ' . $cookie['value']);
} else {
$this->debug('did not find cookie in ' . trim($arr[1]));
}
}
} else if (isset($header_name)) {
// append continuation line to previous header
$this->incoming_headers[$header_name] .= $lb . ' ' . $header_line;
}
}
}
$arr = explode(' ', $header_array[0], 3);
$http_version = $arr[0];
$http_status = intval($arr[1]);
$http_reason = count($arr) > 2 ? $arr[2] : '';
// see if we need to resend the request with http digest authentication
if (isset($this->incoming_headers['location']) && $http_status == 301) {
$this->debug("Got 301 $http_reason with Location: " . $this->incoming_headers['location']);
$this->setURL($this->incoming_headers['location']);
$this->tryagain = true;
return false;
}
// see if we need to resend the request with http digest authentication
if (isset($this->incoming_headers['www-authenticate']) && $http_status == 401) {
$this->debug("Got 401 $http_reason with WWW-Authenticate: " . $this->incoming_headers['www-authenticate']);
if (strstr($this->incoming_headers['www-authenticate'], "Digest ")) {
$this->debug('Server wants digest authentication');
// remove "Digest " from our elements
$digestString = str_replace('Digest ', '', $this->incoming_headers['www-authenticate']);
// parse elements into array
$digestElements = explode(',', $digestString);
foreach ($digestElements as $val) {
$tempElement = explode('=', trim($val), 2);
$digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]);
}
// should have (at least) qop, realm, nonce
if (isset($digestRequest['nonce'])) {
$this->setCredentials($this->username, $this->password, 'digest', $digestRequest);
$this->tryagain = true;
return false;
}
}
$this->debug('HTTP authentication failed');
$this->setError('HTTP authentication failed');
return false;
}
if (
($http_status >= 300 && $http_status <= 307) ||
($http_status >= 400 && $http_status <= 417) ||
($http_status >= 501 && $http_status <= 505)
) {
$this->setError("Unsupported HTTP response status $http_status $http_reason (soap_client->response has contents of the response)");
return false;
}
// decode content-encoding
if(isset($this->incoming_headers['content-encoding']) && $this->incoming_headers['content-encoding'] != ''){
if(strtolower($this->incoming_headers['content-encoding']) == 'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){
// if decoding works, use it. else assume data wasn't gzencoded
if(function_exists('gzinflate')){
//$timer->setMarker('starting decoding of gzip/deflated content');
// IIS 5 requires gzinflate instead of gzuncompress (similar to IE 5 and gzdeflate v. gzcompress)
// this means there are no Zlib headers, although there should be
$this->debug('The gzinflate function exists');
$datalen = strlen($data);
if ($this->incoming_headers['content-encoding'] == 'deflate') {
if ($degzdata = @gzinflate($data)) {
$data = $degzdata;
$this->debug('The payload has been inflated to ' . strlen($data) . ' bytes');
if (strlen($data) < $datalen) {
// test for the case that the payload has been compressed twice
$this->debug('The inflated payload is smaller than the gzipped one; try again');
if ($degzdata = @gzinflate($data)) {
$data = $degzdata;
$this->debug('The payload has been inflated again to ' . strlen($data) . ' bytes');
}
}
} else {
$this->debug('Error using gzinflate to inflate the payload');
$this->setError('Error using gzinflate to inflate the payload');
}
} elseif ($this->incoming_headers['content-encoding'] == 'gzip') {
if ($degzdata = @gzinflate(substr($data, 10))) { // do our best
$data = $degzdata;
$this->debug('The payload has been un-gzipped to ' . strlen($data) . ' bytes');
if (strlen($data) < $datalen) {
// test for the case that the payload has been compressed twice
$this->debug('The un-gzipped payload is smaller than the gzipped one; try again');
if ($degzdata = @gzinflate(substr($data, 10))) {
$data = $degzdata;
$this->debug('The payload has been un-gzipped again to ' . strlen($data) . ' bytes');
}
}
} else {
$this->debug('Error using gzinflate to un-gzip the payload');
$this->setError('Error using gzinflate to un-gzip the payload');
}
}
//$timer->setMarker('finished decoding of gzip/deflated content');
//print "<xmp>\nde-inflated:\n---------------\n$data\n-------------\n</xmp>";
// set decoded payload
$this->incoming_payload = $header_data.$lb.$lb.$data;
} else {
$this->debug('The server sent compressed data. Your php install must have the Zlib extension compiled in to support this.');
$this->setError('The server sent compressed data. Your php install must have the Zlib extension compiled in to support this.');
}
} else {
$this->debug('Unsupported Content-Encoding ' . $this->incoming_headers['content-encoding']);
$this->setError('Unsupported Content-Encoding ' . $this->incoming_headers['content-encoding']);
}
} else {
$this->debug('No Content-Encoding header');
}
if(strlen($data) == 0){
$this->debug('no data after headers!');
$this->setError('no data present after HTTP headers');
return false;
}
return $data;
}

+ Here is the call graph for this function:

soap_transport_http::parseCookie (   $cookie_str)

parse an incoming Cookie into it's parts

Parameters
string$cookie_strcontent of cookie
Returns
array with data of that cookie private

Definition at line 933 of file class.soap_transport_http.php.

References $data, and $path.

Referenced by getResponse().

{
$cookie_str = str_replace('; ', ';', $cookie_str) . ';';
$data = split(';', $cookie_str);
$value_str = $data[0];
$cookie_param = 'domain=';
$start = strpos($cookie_str, $cookie_param);
if ($start > 0) {
$domain = substr($cookie_str, $start + strlen($cookie_param));
$domain = substr($domain, 0, strpos($domain, ';'));
} else {
$domain = '';
}
$cookie_param = 'expires=';
$start = strpos($cookie_str, $cookie_param);
if ($start > 0) {
$expires = substr($cookie_str, $start + strlen($cookie_param));
$expires = substr($expires, 0, strpos($expires, ';'));
} else {
$expires = '';
}
$cookie_param = 'path=';
$start = strpos($cookie_str, $cookie_param);
if ( $start > 0 ) {
$path = substr($cookie_str, $start + strlen($cookie_param));
$path = substr($path, 0, strpos($path, ';'));
} else {
$path = '/';
}
$cookie_param = ';secure;';
if (strpos($cookie_str, $cookie_param) !== FALSE) {
$secure = true;
} else {
$secure = false;
}
$sep_pos = strpos($value_str, '=');
if ($sep_pos) {
$name = substr($value_str, 0, $sep_pos);
$value = substr($value_str, $sep_pos + 1);
$cookie= array( 'name' => $name,
'value' => $value,
'domain' => $domain,
'path' => $path,
'expires' => $expires,
'secure' => $secure
);
return $cookie;
}
return false;
}

+ Here is the caller graph for this function:

soap_transport_http::parseCookie (   $cookie_str)

parse an incoming Cookie into it's parts

Parameters
string$cookie_strcontent of cookie
Returns
array with data of that cookie private

Definition at line 2929 of file nusoap.php.

References $data, and $path.

{
$cookie_str = str_replace('; ', ';', $cookie_str) . ';';
$data = split(';', $cookie_str);
$value_str = $data[0];
$cookie_param = 'domain=';
$start = strpos($cookie_str, $cookie_param);
if ($start > 0) {
$domain = substr($cookie_str, $start + strlen($cookie_param));
$domain = substr($domain, 0, strpos($domain, ';'));
} else {
$domain = '';
}
$cookie_param = 'expires=';
$start = strpos($cookie_str, $cookie_param);
if ($start > 0) {
$expires = substr($cookie_str, $start + strlen($cookie_param));
$expires = substr($expires, 0, strpos($expires, ';'));
} else {
$expires = '';
}
$cookie_param = 'path=';
$start = strpos($cookie_str, $cookie_param);
if ( $start > 0 ) {
$path = substr($cookie_str, $start + strlen($cookie_param));
$path = substr($path, 0, strpos($path, ';'));
} else {
$path = '/';
}
$cookie_param = ';secure;';
if (strpos($cookie_str, $cookie_param) !== FALSE) {
$secure = true;
} else {
$secure = false;
}
$sep_pos = strpos($value_str, '=');
if ($sep_pos) {
$name = substr($value_str, 0, $sep_pos);
$value = substr($value_str, $sep_pos + 1);
$cookie= array( 'name' => $name,
'value' => $value,
'domain' => $domain,
'path' => $path,
'expires' => $expires,
'secure' => $secure
);
return $cookie;
}
return false;
}
soap_transport_http::send (   $data,
  $timeout = 0,
  $response_timeout = 30,
  $cookies = NULL 
)

send the SOAP message via HTTP

Parameters
string$datamessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
array$cookiescookies to send
Returns
string data public

Definition at line 251 of file class.soap_transport_http.php.

References $data, connect(), nusoap_base\debug(), getResponse(), sendRequest(), and nusoap_base\setError().

{
$this->debug('entered send() with data of length: '.strlen($data));
$this->tryagain = true;
$tries = 0;
while ($this->tryagain) {
$this->tryagain = false;
if ($tries++ < 2) {
// make connnection
if (!$this->connect($timeout, $response_timeout)){
return false;
}
// send request
if (!$this->sendRequest($data, $cookies)){
return false;
}
// get response
$respdata = $this->getResponse();
} else {
$this->setError('Too many tries to get an OK response');
}
}
$this->debug('end of send()');
return $respdata;
}

+ Here is the call graph for this function:

soap_transport_http::send (   $data,
  $timeout = 0,
  $response_timeout = 30 
)

send the SOAP message via HTTP

Parameters
string$datamessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
Returns
string data public

Definition at line 1741 of file nusoap.php.

References $data, connect(), nusoap_base\debug(), getResponse(), sendRequest(), and nusoap_base\setError().

Referenced by sendHTTPS().

{
$this->debug('entered send() with data of length: '.strlen($data));
$this->tryagain = true;
$tries = 0;
while ($this->tryagain) {
$this->tryagain = false;
if ($tries++ < 2) {
// make connnection
if (!$this->connect($timeout, $response_timeout)){
return false;
}
// send request
if (!$this->sendRequest($data)){
return false;
}
// get response
$respdata = $this->getResponse();
} else {
$this->setError('Too many tries to get an OK response');
}
}
$this->debug('end of send()');
return $respdata;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::send (   $data,
  $timeout = 0,
  $response_timeout = 30,
  $cookies = NULL 
)

send the SOAP message via HTTP

Parameters
string$datamessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
array$cookiescookies to send
Returns
string data public

Definition at line 2247 of file nusoap.php.

References $data, connect(), nusoap_base\debug(), getResponse(), sendRequest(), and nusoap_base\setError().

{
$this->debug('entered send() with data of length: '.strlen($data));
$this->tryagain = true;
$tries = 0;
while ($this->tryagain) {
$this->tryagain = false;
if ($tries++ < 2) {
// make connnection
if (!$this->connect($timeout, $response_timeout)){
return false;
}
// send request
if (!$this->sendRequest($data, $cookies)){
return false;
}
// get response
$respdata = $this->getResponse();
} else {
$this->setError('Too many tries to get an OK response');
}
}
$this->debug('end of send()');
return $respdata;
}

+ Here is the call graph for this function:

soap_transport_http::sendHTTPS (   $data,
  $timeout = 0,
  $response_timeout = 30,
  $cookies 
)

send the SOAP message via HTTPS 1.0 using CURL

Parameters
string$msgmessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
array$cookiescookies to send
Returns
string data public

Definition at line 291 of file class.soap_transport_http.php.

References $data, and send().

{
return $this->send($data, $timeout, $response_timeout, $cookies);
}

+ Here is the call graph for this function:

soap_transport_http::sendHTTPS (   $data,
  $timeout = 0,
  $response_timeout = 30 
)

send the SOAP message via HTTPS 1.0 using CURL

Parameters
string$msgmessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
Returns
string data public

Definition at line 1780 of file nusoap.php.

References $data, and send().

{
return $this->send($data, $timeout, $response_timeout);
}

+ Here is the call graph for this function:

soap_transport_http::sendHTTPS (   $data,
  $timeout = 0,
  $response_timeout = 30,
  $cookies 
)

send the SOAP message via HTTPS 1.0 using CURL

Parameters
string$msgmessage data
integer$timeoutset connection timeout in seconds
integer$response_timeoutset response timeout in seconds
array$cookiescookies to send
Returns
string data public

Definition at line 2287 of file nusoap.php.

References $data, and send().

{
return $this->send($data, $timeout, $response_timeout, $cookies);
}

+ Here is the call graph for this function:

soap_transport_http::sendRequest (   $data,
  $cookies = NULL 
)

Definition at line 512 of file class.soap_transport_http.php.

References $data, buildPayload(), nusoap_base\debug(), getCookiesForRequest(), and nusoap_base\setError().

{
// build cookie string
$cookie_str = $this->getCookiesForRequest($cookies, (($this->scheme == 'ssl') || ($this->scheme == 'https')));
// build payload
$this->buildPayload($data, $cookie_str);
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// send payload
if(!fputs($this->fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
$this->setError('couldn\'t write message data to socket');
$this->debug('couldn\'t write message data to socket');
return false;
}
$this->debug('wrote data to socket, length = ' . strlen($this->outgoing_payload));
return true;
} else if ($this->scheme == 'https') {
// set payload
// TODO: cURL does say this should only be the verb, and in fact it
// turns out that the URI and HTTP version are appended to this, which
// some servers refuse to work with
//curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
foreach($this->outgoing_headers as $k => $v){
$curl_headers[] = "$k: $v";
}
if ($cookie_str != '') {
$curl_headers[] = 'Cookie: ' . $cookie_str;
}
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $curl_headers);
if ($this->request_method == "POST") {
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
} else {
}
$this->debug('set cURL payload');
return true;
}
}

+ Here is the call graph for this function:

soap_transport_http::sendRequest (   $data)

Definition at line 1979 of file nusoap.php.

References $data, buildPayload(), nusoap_base\debug(), and nusoap_base\setError().

Referenced by send().

{
// build payload
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// send payload
if(!fputs($this->fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
$this->setError('couldn\'t write message data to socket');
$this->debug('couldn\'t write message data to socket');
return false;
}
$this->debug('wrote data to socket, length = ' . strlen($this->outgoing_payload));
return true;
} else if ($this->scheme == 'https') {
// set payload
// TODO: cURL does say this should only be the verb, and in fact it
// turns out that the URI and HTTP version are appended to this, which
// some servers refuse to work with
//curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
foreach($this->outgoing_headers as $k => $v){
$curl_headers[] = "$k: $v";
}
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $curl_headers);
if ($this->request_method == "POST") {
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
} else {
}
$this->debug('set cURL payload');
return true;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::sendRequest (   $data,
  $cookies = NULL 
)

Definition at line 2508 of file nusoap.php.

References $data, buildPayload(), nusoap_base\debug(), getCookiesForRequest(), and nusoap_base\setError().

{
// build cookie string
$cookie_str = $this->getCookiesForRequest($cookies, (($this->scheme == 'ssl') || ($this->scheme == 'https')));
// build payload
$this->buildPayload($data, $cookie_str);
if ($this->scheme == 'http' || $this->scheme == 'ssl') {
// send payload
if(!fputs($this->fp, $this->outgoing_payload, strlen($this->outgoing_payload))) {
$this->setError('couldn\'t write message data to socket');
$this->debug('couldn\'t write message data to socket');
return false;
}
$this->debug('wrote data to socket, length = ' . strlen($this->outgoing_payload));
return true;
} else if ($this->scheme == 'https') {
// set payload
// TODO: cURL does say this should only be the verb, and in fact it
// turns out that the URI and HTTP version are appended to this, which
// some servers refuse to work with
//curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
foreach($this->outgoing_headers as $k => $v){
$curl_headers[] = "$k: $v";
}
if ($cookie_str != '') {
$curl_headers[] = 'Cookie: ' . $cookie_str;
}
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $curl_headers);
if ($this->request_method == "POST") {
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
} else {
}
$this->debug('set cURL payload');
return true;
}
}

+ Here is the call graph for this function:

soap_transport_http::setContentType (   $type,
  $charset = false 
)

Definition at line 907 of file class.soap_transport_http.php.

References nusoap_base\debug().

{
$this->outgoing_headers['Content-Type'] = $type . ($charset ? '; charset=' . $charset : '');
$this->debug('set Content-Type: ' . $this->outgoing_headers['Content-Type']);
}

+ Here is the call graph for this function:

soap_transport_http::setContentType (   $type,
  $charset = false 
)

Definition at line 2284 of file nusoap.php.

{
$this->outgoing_headers['Content-Type'] = $type . ($charset ? '; charset=' . $charset : '');
}
soap_transport_http::setContentType (   $type,
  $charset = false 
)

Definition at line 2903 of file nusoap.php.

References nusoap_base\debug().

{
$this->outgoing_headers['Content-Type'] = $type . ($charset ? '; charset=' . $charset : '');
$this->debug('set Content-Type: ' . $this->outgoing_headers['Content-Type']);
}

+ Here is the call graph for this function:

soap_transport_http::setCredentials (   $username,
  $password,
  $authtype = 'basic',
  $digestRequest = array(),
  $certRequest = array() 
)

if authenticating, set user credentials here

Parameters
string$username
string$password
string$authtype(basic, digest, certificate)
array$digestRequest(keys must be nonce, nc, realm, qop)
array$certRequest(keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see corresponding options in cURL docs) public

Definition at line 305 of file class.soap_transport_http.php.

References $authtype, $certRequest, $digest_uri, $digestRequest, $password, $username, and nusoap_base\debug().

{
$this->debug("Set credentials for authtype $authtype");
// cf. RFC 2617
if ($authtype == 'basic') {
$this->outgoing_headers['Authorization'] = 'Basic '.base64_encode(str_replace(':','',$username).':'.$password);
} elseif ($authtype == 'digest') {
if (isset($digestRequest['nonce'])) {
$digestRequest['nc'] = isset($digestRequest['nc']) ? $digestRequest['nc']++ : 1;
// calculate the Digest hashes (calculate code based on digest implementation found at: http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDigestAuthenticationWithoutActiveDirectory.html)
// A1 = unq(username-value) ":" unq(realm-value) ":" passwd
$A1 = $username. ':' . (isset($digestRequest['realm']) ? $digestRequest['realm'] : '') . ':' . $password;
// H(A1) = MD5(A1)
$HA1 = md5($A1);
// A2 = Method ":" digest-uri-value
$A2 = 'POST:' . $this->digest_uri;
// H(A2)
$HA2 = md5($A2);
// KD(secret, data) = H(concat(secret, ":", data))
// if qop == auth:
// request-digest = <"> < KD ( H(A1), unq(nonce-value)
// ":" nc-value
// ":" unq(cnonce-value)
// ":" unq(qop-value)
// ":" H(A2)
// ) <">
// if qop is missing,
// request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
$unhashedDigest = '';
$nonce = isset($digestRequest['nonce']) ? $digestRequest['nonce'] : '';
$cnonce = $nonce;
if ($digestRequest['qop'] != '') {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' . $HA2;
} else {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . $HA2;
}
$hashedDigest = md5($unhashedDigest);
$this->outgoing_headers['Authorization'] = 'Digest username="' . $username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' . $this->digest_uri . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x", $digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' . $hashedDigest . '"';
}
} elseif ($authtype == 'certificate') {
$this->certRequest = $certRequest;
}
$this->username = $username;
$this->password = $password;
$this->authtype = $authtype;
$this->digestRequest = $digestRequest;
if (isset($this->outgoing_headers['Authorization'])) {
$this->debug('set Authorization: ' . substr($this->outgoing_headers['Authorization'], 0, 12) . '...');
} else {
$this->debug('Authorization header not set');
}
}

+ Here is the call graph for this function:

soap_transport_http::setCredentials (   $username,
  $password,
  $authtype = 'basic',
  $digestRequest = array() 
)

if authenticating, set user credentials here

Parameters
string$username
string$password
string$authtype
array$digestRequestpublic

Definition at line 1793 of file nusoap.php.

References $authtype, $digestRequest, $password, $uri, $username, and nusoap_base\debug().

Referenced by getResponse(), setURL(), and soap_transport_http().

{
global $_SERVER;
$this->debug("Set credentials for authtype $authtype");
// cf. RFC 2617
if ($authtype == 'basic') {
$this->outgoing_headers['Authorization'] = 'Basic '.base64_encode($username.':'.$password);
} elseif ($authtype == 'digest') {
if (isset($digestRequest['nonce'])) {
$digestRequest['nc'] = isset($digestRequest['nc']) ? $digestRequest['nc']++ : 1;
// calculate the Digest hashes (calculate code based on digest implementation found at: http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDigestAuthenticationWithoutActiveDirectory.html)
// A1 = unq(username-value) ":" unq(realm-value) ":" passwd
$A1 = $username. ':' . $digestRequest['realm'] . ':' . $password;
// H(A1) = MD5(A1)
$HA1 = md5($A1);
// A2 = Method ":" digest-uri-value
$A2 = 'POST:' . $this->uri;
// H(A2)
$HA2 = md5($A2);
// KD(secret, data) = H(concat(secret, ":", data))
// if qop == auth:
// request-digest = <"> < KD ( H(A1), unq(nonce-value)
// ":" nc-value
// ":" unq(cnonce-value)
// ":" unq(qop-value)
// ":" H(A2)
// ) <">
// if qop is missing,
// request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
$unhashedDigest = '';
$nonce = isset($digestRequest['nonce']) ? $digestRequest['nonce'] : '';
$cnonce = $nonce;
if ($digestRequest['qop'] != '') {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' . $HA2;
} else {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . $HA2;
}
$hashedDigest = md5($unhashedDigest);
$this->outgoing_headers['Authorization'] = 'Digest username="' . $username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' . $this->uri . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x", $digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' . $hashedDigest . '"';
}
}
$this->username = $username;
$this->password = $password;
$this->authtype = $authtype;
$this->digestRequest = $digestRequest;
if (isset($this->outgoing_headers['Authorization'])) {
$this->debug('Authorization header set: ' . substr($this->outgoing_headers['Authorization'], 0, 12) . '...');
} else {
$this->debug('Authorization header not set');
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::setCredentials (   $username,
  $password,
  $authtype = 'basic',
  $digestRequest = array(),
  $certRequest = array() 
)

if authenticating, set user credentials here

Parameters
string$username
string$password
string$authtype(basic, digest, certificate)
array$digestRequest(keys must be nonce, nc, realm, qop)
array$certRequest(keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see corresponding options in cURL docs) public

Definition at line 2301 of file nusoap.php.

References $authtype, $certRequest, $digest_uri, $digestRequest, $password, $username, and nusoap_base\debug().

{
$this->debug("Set credentials for authtype $authtype");
// cf. RFC 2617
if ($authtype == 'basic') {
$this->outgoing_headers['Authorization'] = 'Basic '.base64_encode(str_replace(':','',$username).':'.$password);
} elseif ($authtype == 'digest') {
if (isset($digestRequest['nonce'])) {
$digestRequest['nc'] = isset($digestRequest['nc']) ? $digestRequest['nc']++ : 1;
// calculate the Digest hashes (calculate code based on digest implementation found at: http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDigestAuthenticationWithoutActiveDirectory.html)
// A1 = unq(username-value) ":" unq(realm-value) ":" passwd
$A1 = $username. ':' . (isset($digestRequest['realm']) ? $digestRequest['realm'] : '') . ':' . $password;
// H(A1) = MD5(A1)
$HA1 = md5($A1);
// A2 = Method ":" digest-uri-value
$A2 = 'POST:' . $this->digest_uri;
// H(A2)
$HA2 = md5($A2);
// KD(secret, data) = H(concat(secret, ":", data))
// if qop == auth:
// request-digest = <"> < KD ( H(A1), unq(nonce-value)
// ":" nc-value
// ":" unq(cnonce-value)
// ":" unq(qop-value)
// ":" H(A2)
// ) <">
// if qop is missing,
// request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
$unhashedDigest = '';
$nonce = isset($digestRequest['nonce']) ? $digestRequest['nonce'] : '';
$cnonce = $nonce;
if ($digestRequest['qop'] != '') {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' . $HA2;
} else {
$unhashedDigest = $HA1 . ':' . $nonce . ':' . $HA2;
}
$hashedDigest = md5($unhashedDigest);
$this->outgoing_headers['Authorization'] = 'Digest username="' . $username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' . $this->digest_uri . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x", $digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' . $hashedDigest . '"';
}
} elseif ($authtype == 'certificate') {
$this->certRequest = $certRequest;
}
$this->username = $username;
$this->password = $password;
$this->authtype = $authtype;
$this->digestRequest = $digestRequest;
if (isset($this->outgoing_headers['Authorization'])) {
$this->debug('set Authorization: ' . substr($this->outgoing_headers['Authorization'], 0, 12) . '...');
} else {
$this->debug('Authorization header not set');
}
}

+ Here is the call graph for this function:

soap_transport_http::setEncoding (   $enc = 'gzip,
deflate'   
)

use http encoding

Parameters
string$encencoding style. supported values: gzip, deflate, or both public

Definition at line 384 of file class.soap_transport_http.php.

References nusoap_base\debug().

{
if (function_exists('gzdeflate')) {
$this->protocol_version = '1.1';
$this->outgoing_headers['Accept-Encoding'] = $enc;
$this->debug('set Accept-Encoding: ' . $this->outgoing_headers['Accept-Encoding']);
if (!isset($this->outgoing_headers['Connection'])) {
$this->outgoing_headers['Connection'] = 'close';
$this->persistentConnection = false;
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
}
set_magic_quotes_runtime(0);
// deprecated
$this->encoding = $enc;
}
}

+ Here is the call graph for this function:

soap_transport_http::setEncoding (   $enc = 'gzip,
deflate'   
)

use http encoding

Parameters
string$encencoding style. supported values: gzip, deflate, or both public

Definition at line 1871 of file nusoap.php.

{
$this->protocol_version = '1.1';
$this->outgoing_headers['Accept-Encoding'] = $enc;
$this->outgoing_headers['Connection'] = 'close';
$this->persistentConnection = false;
set_magic_quotes_runtime(0);
// deprecated
$this->encoding = $enc;
}
soap_transport_http::setEncoding (   $enc = 'gzip,
deflate'   
)

use http encoding

Parameters
string$encencoding style. supported values: gzip, deflate, or both public

Definition at line 2380 of file nusoap.php.

References nusoap_base\debug().

{
if (function_exists('gzdeflate')) {
$this->protocol_version = '1.1';
$this->outgoing_headers['Accept-Encoding'] = $enc;
$this->debug('set Accept-Encoding: ' . $this->outgoing_headers['Accept-Encoding']);
if (!isset($this->outgoing_headers['Connection'])) {
$this->outgoing_headers['Connection'] = 'close';
$this->persistentConnection = false;
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
}
set_magic_quotes_runtime(0);
// deprecated
$this->encoding = $enc;
}
}

+ Here is the call graph for this function:

soap_transport_http::setProxy (   $proxyhost,
  $proxyport,
  $proxyusername = '',
  $proxypassword = '' 
)

set proxy info here

Parameters
string$proxyhost
string$proxyport
string$proxyusername
string$proxypasswordpublic

Definition at line 409 of file class.soap_transport_http.php.

References $url, and nusoap_base\debug().

{
$this->uri = $this->url;
$this->host = $proxyhost;
$this->port = $proxyport;
if ($proxyusername != '' && $proxypassword != '') {
$this->outgoing_headers['Proxy-Authorization'] = ' Basic '.base64_encode($proxyusername.':'.$proxypassword);
$this->debug('set Proxy-Authorization: ' . $this->outgoing_headers['Proxy-Authorization']);
}
}

+ Here is the call graph for this function:

soap_transport_http::setProxy (   $proxyhost,
  $proxyport,
  $proxyusername = '',
  $proxypassword = '' 
)

set proxy info here

Parameters
string$proxyhost
string$proxyport
string$proxyusername
string$proxypasswordpublic

Definition at line 1890 of file nusoap.php.

References $url.

{
$this->uri = $this->url;
$this->host = $proxyhost;
$this->port = $proxyport;
if ($proxyusername != '' && $proxypassword != '') {
$this->outgoing_headers['Proxy-Authorization'] = ' Basic '.base64_encode($proxyusername.':'.$proxypassword);
}
}
soap_transport_http::setProxy (   $proxyhost,
  $proxyport,
  $proxyusername = '',
  $proxypassword = '' 
)

set proxy info here

Parameters
string$proxyhost
string$proxyport
string$proxyusername
string$proxypasswordpublic

Definition at line 2405 of file nusoap.php.

References $url, and nusoap_base\debug().

{
$this->uri = $this->url;
$this->host = $proxyhost;
$this->port = $proxyport;
if ($proxyusername != '' && $proxypassword != '') {
$this->outgoing_headers['Proxy-Authorization'] = ' Basic '.base64_encode($proxyusername.':'.$proxypassword);
$this->debug('set Proxy-Authorization: ' . $this->outgoing_headers['Proxy-Authorization']);
}
}

+ Here is the call graph for this function:

soap_transport_http::setSOAPAction (   $soapaction)

set the soapaction value

Parameters
string$soapactionpublic

Definition at line 373 of file class.soap_transport_http.php.

References nusoap_base\debug().

{
$this->outgoing_headers['SOAPAction'] = '"' . $soapaction . '"';
$this->debug('set SOAPAction: ' . $this->outgoing_headers['SOAPAction']);
}

+ Here is the call graph for this function:

soap_transport_http::setSOAPAction (   $soapaction)

set the soapaction value

Parameters
string$soapactionpublic

Definition at line 1861 of file nusoap.php.

{
$this->outgoing_headers['SOAPAction'] = '"' . $soapaction . '"';
}
soap_transport_http::setSOAPAction (   $soapaction)

set the soapaction value

Parameters
string$soapactionpublic

Definition at line 2369 of file nusoap.php.

References nusoap_base\debug().

{
$this->outgoing_headers['SOAPAction'] = '"' . $soapaction . '"';
$this->debug('set SOAPAction: ' . $this->outgoing_headers['SOAPAction']);
}

+ Here is the call graph for this function:

soap_transport_http::setURL (   $url)

Definition at line 57 of file class.soap_transport_http.php.

References $host, $path, $port, $uri, $url, nusoap_base\debug(), and setCredentials().

Referenced by getResponse(), and soap_transport_http().

{
$this->url = $url;
$u = parse_url($url);
foreach($u as $k => $v){
$this->debug("$k = $v");
$this->$k = $v;
}
// add any GET params to path
if(isset($u['query']) && $u['query'] != ''){
$this->path .= '?' . $u['query'];
}
// set default port
if(!isset($u['port'])){
if($u['scheme'] == 'https'){
$this->port = 443;
} else {
$this->port = 80;
}
}
$this->uri = $this->path;
$this->digest_uri = $this->uri;
// build headers
if (!isset($u['port'])) {
$this->outgoing_headers['Host'] = $this->host;
} else {
$this->outgoing_headers['Host'] = $this->host.':'.$this->port;
}
$this->debug('set Host: ' . $this->outgoing_headers['Host']);
if (isset($u['user']) && $u['user'] != '') {
$this->setCredentials(urldecode($u['user']), isset($u['pass']) ? urldecode($u['pass']) : '');
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

soap_transport_http::setURL (   $url)

Definition at line 2053 of file nusoap.php.

References $host, $path, $port, $uri, $url, nusoap_base\debug(), and setCredentials().

{
$this->url = $url;
$u = parse_url($url);
foreach($u as $k => $v){
$this->debug("$k = $v");
$this->$k = $v;
}
// add any GET params to path
if(isset($u['query']) && $u['query'] != ''){
$this->path .= '?' . $u['query'];
}
// set default port
if(!isset($u['port'])){
if($u['scheme'] == 'https'){
$this->port = 443;
} else {
$this->port = 80;
}
}
$this->uri = $this->path;
$this->digest_uri = $this->uri;
// build headers
if (!isset($u['port'])) {
$this->outgoing_headers['Host'] = $this->host;
} else {
$this->outgoing_headers['Host'] = $this->host.':'.$this->port;
}
$this->debug('set Host: ' . $this->outgoing_headers['Host']);
if (isset($u['user']) && $u['user'] != '') {
$this->setCredentials(urldecode($u['user']), isset($u['pass']) ? urldecode($u['pass']) : '');
}
}

+ Here is the call graph for this function:

soap_transport_http::soap_transport_http (   $url)

constructor

Definition at line 49 of file class.soap_transport_http.php.

References $url, nusoap_base\debug(), nusoap_base\nusoap_base(), and setURL().

{
$this->setURL($url);
ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
$this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')';
$this->debug('set User-Agent: ' . $this->outgoing_headers['User-Agent']);
}

+ Here is the call graph for this function:

soap_transport_http::soap_transport_http (   $url)

constructor

Definition at line 1576 of file nusoap.php.

References $host, $path, $port, $url, nusoap_base\debug(), and setCredentials().

{
$this->url = $url;
$u = parse_url($url);
foreach($u as $k => $v){
$this->debug("$k = $v");
$this->$k = $v;
}
// add any GET params to path
if(isset($u['query']) && $u['query'] != ''){
$this->path .= '?' . $u['query'];
}
// set default port
if(!isset($u['port'])){
if($u['scheme'] == 'https'){
$this->port = 443;
} else {
$this->port = 80;
}
}
$this->uri = $this->path;
// build headers
ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
$this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')';
if (!isset($u['port'])) {
$this->outgoing_headers['Host'] = $this->host;
} else {
$this->outgoing_headers['Host'] = $this->host.':'.$this->port;
}
if (isset($u['user']) && $u['user'] != '') {
$this->setCredentials($u['user'], isset($u['pass']) ? $u['pass'] : '');
}
}

+ Here is the call graph for this function:

soap_transport_http::soap_transport_http (   $url)

constructor

Definition at line 2045 of file nusoap.php.

References $url, nusoap_base\debug(), nusoap_base\nusoap_base(), and setURL().

{
$this->setURL($url);
ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev);
$this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')';
$this->debug('set User-Agent: ' . $this->outgoing_headers['User-Agent']);
}

+ Here is the call graph for this function:

soap_transport_http::usePersistentConnection ( )

Definition at line 912 of file class.soap_transport_http.php.

References nusoap_base\debug().

{
if (isset($this->outgoing_headers['Accept-Encoding'])) {
return false;
}
$this->protocol_version = '1.1';
$this->persistentConnection = true;
$this->outgoing_headers['Connection'] = 'Keep-Alive';
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
return true;
}

+ Here is the call graph for this function:

soap_transport_http::usePersistentConnection ( )

Definition at line 2288 of file nusoap.php.

{
if (isset($this->outgoing_headers['Accept-Encoding'])) {
return false;
}
$this->protocol_version = '1.1';
$this->persistentConnection = true;
$this->outgoing_headers['Connection'] = 'Keep-Alive';
return true;
}
soap_transport_http::usePersistentConnection ( )

Definition at line 2908 of file nusoap.php.

References nusoap_base\debug().

{
if (isset($this->outgoing_headers['Accept-Encoding'])) {
return false;
}
$this->protocol_version = '1.1';
$this->persistentConnection = true;
$this->outgoing_headers['Connection'] = 'Keep-Alive';
$this->debug('set Connection: ' . $this->outgoing_headers['Connection']);
return true;
}

+ Here is the call graph for this function:

Field Documentation

soap_transport_http::$authtype = ''

Definition at line 36 of file class.soap_transport_http.php.

Referenced by setCredentials().

soap_transport_http::$certRequest = array()

Definition at line 38 of file class.soap_transport_http.php.

Referenced by setCredentials().

soap_transport_http::$ch = false

Definition at line 1569 of file nusoap.php.

soap_transport_http::$digest_uri = ''

Definition at line 18 of file class.soap_transport_http.php.

Referenced by setCredentials().

soap_transport_http::$digestRequest = array()

Definition at line 37 of file class.soap_transport_http.php.

Referenced by getResponse(), and setCredentials().

soap_transport_http::$encoding = ''

Definition at line 1562 of file nusoap.php.

soap_transport_http::$host = ''

Definition at line 1557 of file nusoap.php.

Referenced by connect(), setURL(), and soap_transport_http().

soap_transport_http::$incoming_cookies = array()

Definition at line 28 of file class.soap_transport_http.php.

soap_transport_http::$incoming_headers = array()

Definition at line 1564 of file nusoap.php.

soap_transport_http::$incoming_payload = ''

Definition at line 1566 of file nusoap.php.

Referenced by getResponse().

soap_transport_http::$outgoing_headers = array()

Definition at line 1563 of file nusoap.php.

soap_transport_http::$outgoing_payload = ''

Definition at line 1565 of file nusoap.php.

soap_transport_http::$password = ''

Definition at line 1571 of file nusoap.php.

Referenced by setCredentials().

soap_transport_http::$path = ''

Definition at line 1559 of file nusoap.php.

Referenced by connect(), getCookiesForRequest(), parseCookie(), setURL(), and soap_transport_http().

soap_transport_http::$persistentConnection = false

Definition at line 1568 of file nusoap.php.

soap_transport_http::$port = ''

Definition at line 1558 of file nusoap.php.

Referenced by setURL(), and soap_transport_http().

soap_transport_http::$protocol_version = '1.0'

Definition at line 1561 of file nusoap.php.

soap_transport_http::$request_method = 'POST'

Definition at line 1560 of file nusoap.php.

soap_transport_http::$scheme = ''

Definition at line 1556 of file nusoap.php.

soap_transport_http::$uri = ''

Definition at line 1555 of file nusoap.php.

Referenced by setCredentials(), and setURL().

soap_transport_http::$url = ''

Definition at line 1554 of file nusoap.php.

Referenced by connect(), setProxy(), setURL(), and soap_transport_http().

soap_transport_http::$username = ''

Definition at line 1570 of file nusoap.php.

Referenced by setCredentials().

soap_transport_http::$useSOAPAction = true

Definition at line 1567 of file nusoap.php.


The documentation for this class was generated from the following files: