Files
crm.twinpol.com/include/ECM/EcmNotifications/WebsocketClient.php
2025-05-12 15:44:39 +00:00

99 lines
2.5 KiB
PHP
Executable File

<?php
/**
* Very basic websocket client.
* Supporting handshake from drafts:
* draft-hixie-thewebsocketprotocol-76
* draft-ietf-hybi-thewebsocketprotocol-00
*
* @author Simon Samtleben <web@lemmingzshadow.net>
* @version 2011-09-15
*/
class WebsocketClient
{
private $_Socket = null;
private $errno=null;
private $errstr=null;
public function __construct($host, $port)
{
$this->_connect($host, $port);
}
public function __destruct()
{
$this->_disconnect();
}
public function sendData($data)
{
// send actual data:
fwrite($this->_Socket, "\x00" . $data . "\xff" ) or die('Error:' . $this->errno . ':' . $this->errstr);
$wsData = fread($this->_Socket, 2000);
$retData = trim($wsData,"\x00\xff");
return $retData;
}
private function _connect($host, $port)
{
$key1 = $this->_generateRandomString(32);
$key2 = $this->_generateRandomString(32);
$key3 = $this->_generateRandomString(8, false, true);
$header = "GET / HTTP/1.1\r\n";
$header.= "Upgrade: WebSocket\r\n";
$header.= "Connection: Upgrade\r\n";
$header.= "Host: ".$host.":".$port."\r\n";
$header.= "Origin: http://foobar.com\r\n";
$header.= "Sec-WebSocket-Key: " . $key1 . "\r\n";
//$header.= "Sec-WebSocket-Key2: " . $key2 . "\r\n";
$header.= "\r\n";
// $header.= $key3;
$this->_Socket = fsockopen($host, $port, $this->errno, $this->errstr, 2);
echo $header;
$er=fwrite($this->_Socket, $header);
$response = fread($this->_Socket, 2000);
/**
* @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated.
* See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake
*/
return true;
}
private function _disconnect()
{
fclose($this->_Socket);
}
private function _generateRandomString($length = 10, $addSpaces = true, $addNumbers = true)
{
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}';
$useChars = array();
// select some random chars:
for($i = 0; $i < $length; $i++)
{
$useChars[] = $characters[mt_rand(0, strlen($characters)-1)];
}
// add spaces and numbers:
if($addSpaces === true)
{
array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' ');
}
if($addNumbers === true)
{
array_push($useChars, rand(0,9), rand(0,9), rand(0,9));
}
shuffle($useChars);
$randomString = trim(implode('', $useChars));
$randomString = substr($randomString, 0, $length);
return $randomString;
}
}