- $magicGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
-
- function Transport_websocket() {
- }
-
- protected function doHandshake($user, $buffer) {
- $magicGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
- $headers = array();
- $lines = explode("\n",$buffer);
- foreach ($lines as $line) {
- if (strpos($line,":") !== false) {
- $header = explode(":",$line,2);
- $headers[strtolower(trim($header[0]))] = trim($header[1]);
- } else if (stripos($line,"get ") !== false) {
- preg_match("/GET (.*) HTTP/i", $buffer, $reqResource);
- $headers['get'] = trim($reqResource[1]);
+ protected $magicGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+
+ function Transport_websocket($secure = FALSE) {
+ $this->type = ($secure == FALSE ? "websocket" : "websocketsec");
+ $this->headerOriginRequired = false;
+ $this->headerSecWebSocketProtocolRequired = false;
+ $this->headerSecWebSocketExtensionsRequired = false;
+
+ $this->sendingContinuous = false;
+
+ $this->handlingPartialPacket = false;
+ $this->partialMessage = "";
+
+ $this->hasSentClose = false;
+ }
+
+ protected function extractHeaders($message) {
+ $header = array('fin' => $message[0] & chr(128),
+ 'rsv1' => $message[0] & chr(64),
+ 'rsv2' => $message[0] & chr(32),
+ 'rsv3' => $message[0] & chr(16),
+ 'opcode' => ord($message[0]) & 15,
+ 'hasmask' => $message[1] & chr(128),
+ 'length' => 0,
+ 'mask' => "");
+ $header['length'] = (ord($message[1]) >= 128) ? ord($message[1]) - 128 : ord($message[1]);
+
+ if ($header['length'] == 126) {
+ if ($header['hasmask']) {
+ $header['mask'] = $message[4] . $message[5] . $message[6] . $message[7];
+ }
+ $header['length'] = ord($message[2]) * 256
+ + ord($message[3]);
+ } elseif ($header['length'] == 127) {
+ if ($header['hasmask']) {
+ $header['mask'] = $message[10] . $message[11] . $message[12] . $message[13];