Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
CentralNic
php-epp
Commits
81b354bd
Unverified
Commit
81b354bd
authored
Jan 01, 2020
by
Nathan Van Overloop
Browse files
centralnic/issues#3769: fix syntax
parent
b3d8431e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Net/EPP/Client.php
View file @
81b354bd
<?php
/* EPP Client class for PHP, Copyright 2005 CentralNic Ltd
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* A simple client class for the Extensible Provisioning Protocol (EPP)
* @package Net_EPP
* @version 0.0.4
* @author Gavin Brown <gavin.brown@nospam.centralnic.com>
* @revision $Id: Client.php,v 1.13 2010/10/21 11:55:07 gavin Exp $
*/
require_once
(
'Protocol.php'
);
$GLOBALS
[
'Net_EPP_Client_Version'
]
=
'0.0.5'
;
/**
* A simple client class for the Extensible Provisioning Protocol (EPP)
* @package Net_EPP
*/
class
Net_EPP_Client
{
/**
* @var resource the socket resource, once connected
*/
var
$socket
;
/**
* @var bool do output more debug messages
*/
var
$debug
;
/**
* @var integer timeout to wait on commands
*/
var
$timeout
;
/**
* constructor set initialize various objects
* @param boolean set debugging on
*/
public
function
__construct
(
$debug
=
false
)
{
$this
->
debug
=
$debug
;
$GLOBALS
[
'debug'
]
=
$debug
;
$this
->
socket
=
NULL
;
}
/**
* Establishes a connect to the server
* This method establishes the connection to the server. If the connection was
* established, then this method will call getFrame() and return the EPP <greeting>
* frame which is sent by the server upon connection. If connection fails, then
* an exception with a message explaining the error will be thrown and handled
* in the calling code.
* @param string $host the hostname
* @param integer $port the TCP port
* @param integer $timeout the timeout in seconds
* @param boolean $ssl whether to connect using SSL
* @param resource $context a stream resource to use when setting up the socket connection
* @throws Exception on connection errors
* @return a string containing the server <greeting>
*/
function
connect
(
$host
,
$port
=
700
,
$timeout
=
1
,
$ssl
=
true
,
$context
=
NULL
)
{
if
(
$this
->
debug
)
debug_log
(
"in connect"
);
$target
=
sprintf
(
'%s://%s:%d'
,
(
$ssl
===
true
?
'tls'
:
'tcp'
),
$host
,
$port
);
if
(
$this
->
debug
)
debug_log
(
"connecting to
{
$target
}
"
);
if
(
is_resource
(
$context
))
{
if
(
$this
->
debug
)
debug_log
(
"using your provided context resource"
);
$result
=
stream_socket_client
(
$target
,
$errno
,
$errstr
,
$timeout
,
STREAM_CLIENT_CONNECT
,
$context
);
}
else
{
$result
=
stream_socket_client
(
$target
,
$errno
,
$errstr
,
$timeout
,
STREAM_CLIENT_CONNECT
);
}
if
(
is_resource
(
$result
))
{
if
(
$errno
==
0
)
{
if
(
$this
->
debug
){
$socketmeta
=
stream_get_meta_data
(
$result
);
if
(
isset
(
$socketmeta
[
'crypto'
]))
{
debug_log
(
"socket opened with protocol "
.
$socketmeta
[
'crypto'
][
'protocol'
]
.
", cipher "
.
$socketmeta
[
'crypto'
][
'cipher_name'
]
.
", "
.
$socketmeta
[
'crypto'
][
'cipher_bits'
]
.
" bits "
.
$socketmeta
[
'crypto'
][
'cipher_version'
],
"Connection made"
);
}
else
{
debug_log
(
"socket opened without crypt"
);
}
}
// Set our socket
$this
->
socket
=
$result
;
}
else
{
throw
new
Exception
(
"non errono 0 retrieved from socket connection:
{
$errno
}
"
);
}
}
else
{
if
(
$result
===
FALSE
&&
$errno
==
0
){
throw
new
Exception
(
"Connection could not be opened due to socket problem. Reasons can be unmatched peer name, tls not supported..."
);
}
else
{
throw
new
Exception
(
"Connection could not be opened:
$errno
$errstr
"
);
}
}
// Set stream timeout
if
(
!
stream_set_timeout
(
$this
->
socket
,
$timeout
))
{
throw
new
Exception
(
"Failed to set timeout on socket:
$errstr
(code
$errno
)"
);
}
$this
->
timeout
=
$timeout
;
$GLOBALS
[
'timeout'
]
=
$timeout
;
// Set blocking
if
(
!
stream_set_blocking
(
$this
->
socket
,
0
))
{
throw
new
Exception
(
"Failed to set blocking on socket:
$errstr
(code
$errno
)"
);
}
if
(
$this
->
debug
)
debug_log
(
"trying to get frame from server"
);
return
$this
->
getFrame
();
}
/**
* Get an EPP frame from the server.
* This retrieves a frame from the server. Since the connection is blocking, this
* method will wait until one becomes available. If the connection has been broken,
* this method will return a string containing the XML from the server
* @throws Exception on frame errors
* @return a string containing the frame
*/
function
getFrame
()
{
return
Net_EPP_Protocol
::
getFrame
(
$this
->
socket
);
}
/**
* Send an XML frame to the server.
* This method sends an EPP frame to the server.
* @param string the XML data to send
* @throws Exception when it doesn't complete the write to the socket
* @return boolean the result of the fwrite() operation
*/
function
sendFrame
(
$xml
)
{
return
Net_EPP_Protocol
::
sendFrame
(
$this
->
socket
,
$xml
);
}
/**
* a wrapper around sendFrame() and getFrame()
* @param string $xml the frame to send to the server
* @throws Exception when it doesn't complete the write to the socket
* @return string the frame returned by the server, or an error object
*/
function
request
(
$xml
)
{
$res
=
$this
->
sendFrame
(
$xml
);
return
$this
->
getFrame
();
}
/**
* Close the connection.
* This method closes the connection to the server. Note that the
* EPP specification indicates that clients should send a <logout>
* command before ending the session.
* @return boolean the result of the fclose() operation
*/
function
disconnect
()
{
return
@
fclose
(
$this
->
socket
);
}
/**
* ping the connection to check that it's up
* @return boolean
*/
function
ping
()
{
return
(
!
is_resource
(
$this
->
socket
)
||
feof
(
$this
->
socket
)
?
false
:
true
);
}
}
?>
/* EPP Client class for PHP, Copyright 2005 CentralNic Ltd
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* A simple client class for the Extensible Provisioning Protocol (EPP)
* @package Net_EPP
* @version 0.0.4
* @author Gavin Brown <gavin.brown@nospam.centralnic.com>
* @revision $Id: Client.php,v 1.13 2010/10/21 11:55:07 gavin Exp $
*/
require_once
(
'Protocol.php'
);
$GLOBALS
[
'Net_EPP_Client_Version'
]
=
'0.0.5'
;
/**
* A simple client class for the Extensible Provisioning Protocol (EPP)
* @package Net_EPP
*/
class
Net_EPP_Client
{
/**
* @var resource the socket resource, once connected
*/
public
$socket
;
/**
* @var bool do output more debug messages
*/
public
$debug
;
/**
* @var integer timeout to wait on commands
*/
public
$timeout
;
/**
* constructor set initialize various objects
* @param boolean set debugging on
*/
public
function
__construct
(
$debug
=
false
)
{
$this
->
debug
=
$debug
;
$GLOBALS
[
'debug'
]
=
$debug
;
$this
->
socket
=
null
;
}
/**
* Establishes a connect to the server
* This method establishes the connection to the server. If the connection was
* established, then this method will call getFrame() and return the EPP <greeting>
* frame which is sent by the server upon connection. If connection fails, then
* an exception with a message explaining the error will be thrown and handled
* in the calling code.
* @param string $host the hostname
* @param integer $port the TCP port
* @param integer $timeout the timeout in seconds
* @param boolean $ssl whether to connect using SSL
* @param resource $context a stream resource to use when setting up the socket connection
* @throws Exception on connection errors
* @return a string containing the server <greeting>
*/
public
function
connect
(
$host
,
$port
=
700
,
$timeout
=
1
,
$ssl
=
true
,
$context
=
null
)
{
if
(
$this
->
debug
)
{
syslog
(
LOG_INFO
,
"in connect"
);
}
$target
=
sprintf
(
'%s://%s:%d'
,
(
$ssl
===
true
?
'tls'
:
'tcp'
),
$host
,
$port
);
if
(
$this
->
debug
)
{
syslog
(
LOG_INFO
,
"connecting to
{
$target
}
"
);
}
if
(
is_resource
(
$context
))
{
if
(
$this
->
debug
)
{
syslog
(
LOG_INFO
,
"using your provided context resource"
);
}
$result
=
stream_socket_client
(
$target
,
$errno
,
$errstr
,
$timeout
,
STREAM_CLIENT_CONNECT
,
$context
);
}
else
{
$result
=
stream_socket_client
(
$target
,
$errno
,
$errstr
,
$timeout
,
STREAM_CLIENT_CONNECT
);
}
if
(
is_resource
(
$result
))
{
if
(
$errno
==
0
)
{
if
(
$this
->
debug
)
{
$socketmeta
=
stream_get_meta_data
(
$result
);
if
(
isset
(
$socketmeta
[
'crypto'
]))
{
syslog
(
LOG_NOTICE
,
"socket opened with protocol "
.
$socketmeta
[
'crypto'
][
'protocol'
]
.
", cipher "
.
$socketmeta
[
'crypto'
][
'cipher_name'
]
.
", "
.
$socketmeta
[
'crypto'
][
'cipher_bits'
]
.
" bits "
.
$socketmeta
[
'crypto'
][
'cipher_version'
],
"Connection made"
);
}
else
{
syslog
(
LOG_INFO
,
"socket opened without crypt"
);
}
}
// Set our socket
$this
->
socket
=
$result
;
}
else
{
throw
new
Exception
(
"non errono 0 retrieved from socket connection:
{
$errno
}
"
);
}
}
else
{
if
(
$result
===
false
&&
$errno
==
0
)
{
throw
new
Exception
(
"Connection could not be opened due to socket problem. Reasons can be unmatched peer name, tls not supported..."
);
}
else
{
throw
new
Exception
(
"Connection could not be opened:
$errno
$errstr
"
);
}
}
// Set stream timeout
if
(
!
stream_set_timeout
(
$this
->
socket
,
$timeout
))
{
throw
new
Exception
(
"Failed to set timeout on socket:
$errstr
(code
$errno
)"
);
}
$this
->
timeout
=
$timeout
;
$GLOBALS
[
'timeout'
]
=
$timeout
;
// Set blocking
if
(
!
stream_set_blocking
(
$this
->
socket
,
0
))
{
throw
new
Exception
(
"Failed to set blocking on socket:
$errstr
(code
$errno
)"
);
}
if
(
$this
->
debug
)
{
syslog
(
LOG_INFO
,
"trying to get frame from server"
);
}
return
$this
->
getFrame
();
}
/**
* Get an EPP frame from the server.
* This retrieves a frame from the server. Since the connection is blocking, this
* method will wait until one becomes available. If the connection has been broken,
* this method will return a string containing the XML from the server
* @throws Exception on frame errors
* @return a string containing the frame
*/
public
function
getFrame
()
{
return
Net_EPP_Protocol
::
getFrame
(
$this
->
socket
);
}
/**
* Send an XML frame to the server.
* This method sends an EPP frame to the server.
* @param string the XML data to send
* @throws Exception when it doesn't complete the write to the socket
* @return boolean the result of the fwrite() operation
*/
public
function
sendFrame
(
$xml
)
{
return
Net_EPP_Protocol
::
sendFrame
(
$this
->
socket
,
$xml
);
}
/**
* a wrapper around sendFrame() and getFrame()
* @param string $xml the frame to send to the server
* @throws Exception when it doesn't complete the write to the socket
* @return string the frame returned by the server, or an error object
*/
public
function
request
(
$xml
)
{
$res
=
$this
->
sendFrame
(
$xml
);
return
$this
->
getFrame
();
}
/**
* Close the connection.
* This method closes the connection to the server. Note that the
* EPP specification indicates that clients should send a <logout>
* command before ending the session.
* @return boolean the result of the fclose() operation
*/
public
function
disconnect
()
{
return
@
fclose
(
$this
->
socket
);
}
/**
* ping the connection to check that it's up
* @return boolean
*/
public
function
ping
()
{
return
(
!
is_resource
(
$this
->
socket
)
||
feof
(
$this
->
socket
)
?
false
:
true
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment