phpgroupware-cvs
[Top][All Lists]
Advanced

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

[Phpgroupware-cvs] phpgwapi/inc/class.network.inc.php, 1.15


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

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

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

Log Message:
new HEAD
=====================================================================
<?php
        /**
        * Handles opening network socket connections, taking proxy into account
        * @author Mark Peters <address@hidden>
        * @copyright Copyright (C) 2000-2002 Mark Peters
        * @copyright Portions Copyright (C) 2003,2004 Free Software Foundation, 
Inc. http://www.fsf.org/
        * @license http://www.fsf.org/licenses/lgpl.html GNU Lesser General 
Public License
        * @package phpgwapi
        * @subpackage network
        * @version $Id: class.network.inc.php,v 1.15 2004/12/30 06:47:31 
skwashd Exp $
        */

        /**
        * Handles opening network socket connections, taking proxy into account
        * 
        * @package phpgwapi
        * @subpackage network
        */
        class network
        {
                var $socket;
                var $addcrlf = TRUE;
                var $error;
                var $errorset = 0;

                function network($addcrlf=true)
                {
                        $this->errorset = 0;
                        $this->set_addcrlf($addcrlf);
                }

                function set_addcrlf($value)
                {
                        $this->addcrlf = $value;
                }

                function add_crlf($str)
                {
                        if($this->addcrlf)
                        {
                                $str .= "\r\n";
                        }
                        return $str;
                }

                function set_error($code,$msg,$desc)
                {
                        $this->error = array('code','msg','desc');
                        $this->error['code'] = $code;
                        $this->error['msg'] = $msg;
                        $this->error['desc'] = $desc;
        //              $this->close_port();
                        $this->errorset = 1;
                        return 0;
                }

                function open_port($server,$port,$timeout=15)
                {
                        switch($port)
                        {
                                case 80:
                                case 443:
                                        
if((isset($GLOBALS['phpgw_info']['server']['httpproxy_server']) && 
$GLOBALS['phpgw_info']['server']['httpproxy_server']) &&
                                                
(isset($GLOBALS['phpgw_info']['server']['httpproxy_port']) && 
$GLOBALS['phpgw_info']['server']['httpproxy_port']))
                                        {
                                                $server = 
$GLOBALS['phpgw_info']['server']['httpproxy_server'];
                                                $port   = 
(int)$GLOBALS['phpgw_info']['server']['httpproxy_port'];
                                        }
                                        break;
                        }
                        $this->socket = 
@fsockopen($server,$port,$errcode,$errmsg,$timeout);
                        if($this->socket)
                        {
                                socket_set_timeout($this->socket,$timeout,0);
                        }
                        if (!$this->socket)
                        {
                                return 
$this->set_error('Error',$errcode.':'.$errmsg,'Connection to 
'.$server.':'.$port.' failed - could not open socket.');
                        }
                        else
                        {
                                return 1;
                        }
                }

                function close_port()
                {
                        return fclose($this->socket);
                }

                function read_port()
                {
                        return fgets($this->socket, 1024);
                }

                function bs_read_port($bytes)
                {
                        return fread($this->socket, $bytes);
                }

                function write_port($str)
                {
                        $ok = fputs($this->socket,$this->add_crlf($str));
                        if (!$ok)
                        {
                                return $this->set_error('Error','Connection 
Lost','lost connection to server');
                        }
                        else
                        {
                                return 1;
                        }
                }

                function bs_write_port($str,$bytes=0)
                {
                        if ($bytes)
                        {
                                $ok = 
fwrite($this->socket,$this->add_crlf($str),$bytes);
                        }
                        else
                        {
                                $ok = 
fwrite($this->socket,$this->add_crlf($str));
                        }
                        if (!$ok)
                        {
                                return $this->set_error('Error','Connection 
Lost','lost connection to server');
                        }
                        else
                        {
                                return 1;
                        }
                }

                function msg2socket($str,$expected_response,&$response)
                {
                        if(!$this->socket)
                        {
                                return $this->set_error('521','socket does not 
exist',
                                        'The required socked does not exist.  
The settings for your mail server may be wrong.');
                        }
                        if (!$this->write_port($str))
                        {
                                if(substr($expected_response,1,1) == '+')
                                {
                                        return $this->set_error('420','lost 
connection','Lost connection to pop server.');
                                }
                                else
                                {
                                        return 0;
                                }
                        }
                        $response = $this->read_port();
                        if 
(!ereg(strtoupper($expected_response),strtoupper($response)))
                        {
                                if(substr($expected_response,1,1) == '+')
                                {
                                        return $this->set_error('550','','');
                                }       
                                $pos = strpos(' ',$response);
                                return 
$this->set_error(substr($response,0,$pos),
                                        'invalid 
response('.$expected_response.')',
                                        substr($response,($pos + 
1),(strlen($response)-$pos)));
                        }
                        else
                        {
                                return 1;
                        }
                }

                // return contents of a web url as an array or false if timeout
                function gethttpsocketfile($file,$user='',$passwd='')
                {
                        $server = str_replace('http://','',$file);
                        $file = strstr($server,'/');
                        $server = str_replace($file,'',$server);

                        //allows for access to http-auth pages - added by Dave 
Hall <address@hidden>
                        if(!((empty($user))&&(empty($passwd))))
                        {
                                $auth = 'Authorization: Basic 
'.base64_encode("$user:$passwd")."\n";
                        }
                        else
                        {
                                $auth = '';
                        }

                        if 
($GLOBALS['phpgw_info']['server']['httpproxy_server'])
                        {
                                if ($this->open_port($server,80, 15))
                                {
                                        if (! $this->write_port('GET http://' . 
$server . $file . ' HTTP/1.0'."\n".$auth."\r\n\r\n"))
                                        {
                                                return False;
                                        }
                                        $i = 0;
                                        while ($line = $this->read_port())
                                        {
                                                if (feof($this->socket))
                                                {
                                                        break;
                                                }
                                                $lines[] = $line;
                                                $i++;
                                        }
                                        $this->close_port();
                                        return $lines;
                                }
                                else
                                {
                                        return False;
                                }
                        }
                        else
                        {
                                if ($this->open_port($server, 80, 15))
                                {
                                        if (!$this->write_port('GET '.$file.' 
HTTP/1.0'."\n".'Host: '.$server."\n".$auth."\r\n\r\n"))
                                        {
                                                return 0;
                                        }
                                        while ($line = $this->read_port())
                                        {
                                                $lines[] = $line;
                                        }
                                        $this->close_port();
                                        return $lines;
                                }
                                else
                                {
                                        return 0;
                                }
                        }
                }
        }
?>




reply via email to

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