phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpgwapi/inc/class.soap_client.inc.php, 1.8


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/class.soap_client.inc.php, 1.8
Date: Thu, 30 Dec 2004 07:47:31 +0100

Update of /phpgwapi/inc
Added Files:
        Branch: 
          class.soap_client.inc.php

date: 2004/12/30 06:47:31;  author: skwashd;  state: Exp;  lines: +216 -225

Log Message:
new HEAD
=====================================================================
<?php
        /**
        * SOAPx4 client
        * @author Edd Dumbill <address@hidden>
        * @author Victor Zou <address@hidden>
        * @author Dietrich Ayala <address@hidden>
        * @copyright Copyright (C) 1999-2000 Edd Dumbill
        * @copyright Copyright (C) 2000-2001 Victor Zou
        * @copyright Copyright (C) 2001 Dietrich Ayala
        * @copyright Portions Copyright (C) 2003,2004 Free Software Foundation, 
Inc. http://www.fsf.org/
        * @package phpgwapi
        * @subpackage communication
        * @version $Id: class.soap_client.inc.php,v 1.8 2004/12/30 06:47:31 
skwashd Exp $
        * @internal This project began based on code from the 2 projects below,
        * @internal and still contains some original code. The licenses of both 
must be respected.
        * @internal XML-RPC for PHP; SOAP for PHP
        */

        /**
        * SOAPx4 client
        *
        * @package phpgwapi
        * @subpackage communication
        * $path can be a complete endpoint url, with the other parameters left 
blank:
        * $soap_client = new soap_client("http://path/to/soap/server";);
        */
        class soap_client
        {
                 function soap_client($path,$server=False,$port=False)
                 {
                        $this->port = 80;
                        $this->path = $path;
                        $this->server = $server;
                        $this->errno;
                        $this->errstring;
                        $this->debug_flag = True;
                        $this->debug_str = '';
                        $this->username = '';
                        $this->password = '';
                        $this->action = '';
                        $this->incoming_payload = '';
                        $this->outgoing_payload = '';
                        $this->response = '';
                        $this->action = '';

                        // endpoint mangling
                        if(ereg("^http://",$path))
                        {
                                $path = str_replace('http://','',$path);
                                $this->path = strstr($path,'/');
                                $this->debug("path = $this->path");
                                if(ereg(':',$path))
                                {
                                        $this->server = 
substr($path,0,strpos($path,':'));
                                        $this->port = 
substr(strstr($path,':'),1);
                                        $this->port = 
substr($this->port,0,strpos($this->port,'/'));
                                }
                                else
                                {
                                        $this->server = 
substr($path,0,strpos($path,'/'));
                                }
                        }
                        if($port)
                        {
                                $this->port = $port;
                        }
                }

                function setCredentials($u, $p)
                {
                        $this->username = $u;
                        $this->password = $p;
                }

                function send($msg, $action, $timeout=0, $ssl=False)
                {
                        // where msg is an soapmsg
                        $msg->debug_flag = $this->debug_flag;
                        $this->action = $action;
                        if($ssl)
                        {
                                return $this->ssl_sendPayloadHTTP10(
                                        $msg,
                                        $this->server,
                                        $this->port,
                                        $timeout,
                                        $this->username,
                                        $this->password
                                );
                        }
                        else
                        {
                                return $this->sendPayloadHTTP10(
                                        $msg,
                                        $this->server,
                                        $this->port,
                                        $timeout,
                                        $this->username,
                                        $this->password
                                );
                        }
                }

                function sendPayloadHTTP10($msg, $server, $port, $timeout=0, 
$username='', $password='')
                {       
                        if($timeout > 0)
                        {
                                $fp = fsockopen($server, $port,&$this->errno, 
&$this->errstr, $timeout);
                        }
                        else
                        {
                                $fp = fsockopen($server, $port,&$this->errno, 
&$this->errstr);
                        }
                        if (!$fp)
                        {
                                $this->debug("Couldn't open socket connection 
to server!");
                                $this->debug("Server: $this->server"); 
                                return 0;
                        }

                        // thanks to Grant Rauscher <address@hidden> for this
                        $credentials = '';
                        if ($username != '')
                        {
                                $credentials = "Authorization: Basic " . 
base64_encode($username . ":" . $password) . "\r\n";
                        }

                        $soap_data = $msg->serialize();
                        $this->outgoing_payload = 'POST '
                                . $this->path
                                . " HTTP/1.0\r\n"
                                . 'User-Agent: phpGroupware/' . $cliversion . 
'(PHP) ' . "\r\n"
                                . 'X-PHPGW-Server: ' . $this->server . "\r\n"
                                . 'X-PHPGW-Version: ' . 
$GLOBALS['phpgw_info']['server']['versions']['phpgwapi'] . "\r\n"
                                . 'Host: '.$this->server . "\r\n"
                                . $credentials
                                . "Content-Type: text/xml\r\nContent-Length: " 
. strlen($soap_data) . "\r\n"
                                . 'SOAPAction: "' . $this->action . '"' . 
"\r\n\r\n"
                                . $soap_data;
                        // send
                        if(!fputs($fp, $this->outgoing_payload, 
strlen($this->outgoing_payload)))
                        {
                                $this->debug('Write error');
                        }

                        // get reponse
                        while($data = fread($fp, 32768))
                        {
                                $incoming_payload .= $data;
                        }

                        fclose($fp);
                        $this->incoming_payload = $incoming_payload;
                        // $response is a soapmsg object
                        $this->response = 
$msg->parseResponse($incoming_payload);
                        $this->debug($msg->debug_str);
                        return $this->response;
                }

                function ssl_sendPayloadHTTP10($msg, $server, $port, 
$timeout=0,$username='', $password='')
                {
                        if(!function_exists(curl_init))
                        {
                                $this->errstr = 'No curl functions available - 
use of ssl is invalid';
                                return False;
                        }
                        /* curl Method borrowed from:
                          
http://sourceforge.net/tracker/index.php?func=detail&aid=427359&group_id=23199&atid=377731
                        */

                        // thanks to Grant Rauscher <address@hidden>
                        // for this
                        $credentials = '';
                        if ($username!='')
                        {
                                $credentials = "Authorization: Basic " . 
base64_encode($username . ':' . $password) . "\r\n";
                        }

                        $soap_data = $msg->serialize();
                        $this->outgoing_payload = 'POST '
                                . $this->path
                                . " HTTP/1.0\r\n"
                                . 'User-Agent: phpGroupware/' . $cliversion . 
'(PHP) ' . "\r\n"
                                . 'X-PHPGW-Server: ' . $this->server . "\r\n"
                                . 'X-PHPGW-Version: ' . 
$GLOBALS['phpgw_info']['server']['versions']['phpgwapi'] . "\r\n"
                                . 'Host: ' . $this->server . "\r\n"
                                . $credentials
                                . "Content-Type: text/xml\r\nContent-Length: " 
. strlen($soap_data) . "\r\n"
                                . 'SOAPAction: "' . $this->action . '"' . 
"\r\n\r\n"
                                . $soap_data;

                        // send
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL,$this->server);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 
$this->outgoing_payload);
                        curl_setopt($ch, CURLOPT_HEADER, 0);
                        $incoming_payload = curl_exec($ch);
                        curl_close($ch);

                        $this->incoming_payload = $incoming_payload;
                        // $response is a soapmsg object
                        $this->response = 
$msg->parseResponse($incoming_payload);
                        $this->debug($msg->debug_str);
                        return $this->response;
                }

                function debug($string)
                {
                        if($this->debug_flag)
                        {
                                $this->debug_str .= "$string\n";
                        }
                }
        } // end class soap_client
?>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]