Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/11/2018, 07:16
Avatar de asdmaster
asdmaster
 
Fecha de Ingreso: marzo-2010
Mensajes: 98
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: websocket caracteres corruptos

Luego de revisar mucho código y leer la documentación de websocket entendí que mas que un error me faltaba implementar la parte del enmascaramiento.

https://developer.mozilla.org/es/doc...do_Data_Frames

Así que solo me falta comprobar en el servidor si los datos vienen enmascarados y proceder a "decodificarlos"

Código PHP:
Ver original
  1. private function seal($socketData) {
  2.         $b1 = 0x80 | (0x1 & 0x0f);
  3.         $length = strlen($socketData);
  4.  
  5.         if ($length <= 125)
  6.             $header = pack('CC', $b1, $length);
  7.         elseif ($length > 125 && $length < 65536)
  8.             $header = pack('CCn', $b1, 126, $length);
  9.         elseif ($length >= 65536)
  10.             $header = pack('CCNN', $b1, 127, $length);
  11.         return $header . $socketData;
  12.     }
  13.  
  14.     private function unseal($socketData) {
  15.         $length = ord($socketData[1]) & 127;
  16.         if ($length == 126) {
  17.             $masks = substr($socketData, 4, 4);
  18.             $data = substr($socketData, 8);
  19.         } elseif ($length == 127) {
  20.             $masks = substr($socketData, 10, 4);
  21.             $data = substr($socketData, 14);
  22.         } else {
  23.             $masks = substr($socketData, 2, 4);
  24.             $data = substr($socketData, 6);
  25.         }
  26.         $socketData = "";
  27.         for ($i = 0; $i < strlen($data); ++$i) {
  28.             $socketData .= $data[$i] ^ $masks[$i % 4];
  29.         }
  30.         return $socketData;
  31.     }