IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[WebSocket] Probleme de decryptage de donnees


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut [WebSocket] Probleme de decryptage de donnees
    bonjour,

    j'ai un petit probleme que je ne parvient pas a résoudre sur mon serveur de socket. Les données recuperer sont bonnes des 10 ene de fois, mais au bout d'un moment sans savoir pourquoi, le décryptage ce fait pas.

    Voici ce que ça donne quand c'est pas décrypter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Resource id #8 :¦lat▒ng;╣ad7´;48¾062õ580õ235´26,Ý.06Ý364¯767´128ý59
    ¦lat▒ng;╣ad7´;48¾062õ580õ235´26,Ý.06Ý364¯767´128ý59
    len(51)
    Resource id #8 DISCONNECTED!
    et ce que ça donne quand c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unwrap dataLength = 50
    Resource id #8 :latlng;dad72;48.06282809235226,0.0603643767212815
    latlng;dad72;48.06282809235226,0.0603643767212815
    len(49)
    Pour info les données sont des coordonnée (altitude et longitudes) au cas ou vous vous poseriez la question.

    donc si vous avez besoin de la classe au complet, elle est ici (voir le fichier (websocket.class.php), sinon, je pense que cela vient de la fonction unwrap() ou de la fonction send() qui fait que ca decrypte mal aléatoirement.

    Je vous met les 2 fonction en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    function send($client,$data)
    	{		
    		$this->say($data);		
    		$header = " ";
    		$header[0] = chr(0x81);		
    		$header_length = 1;
     
    		//Payload length: 7 bits, 7+16 bits, or 7+64 bits
    		$dataLength = strlen(trim($data));
     
    		//The length of the payload data, in bytes: if 0-125, that is the payload length.
    		if($dataLength <= 125)
    		{
    			$header[1] = chr($dataLength);
    			$header_length = 2;
    		}
    		elseif ($dataLength <= 65535)
    		{
    			// If 126, the following 2 bytes interpreted as a 16
    			//bit unsigned integer are the payload length.
    			$header[1] = chr(126);
    			$header[2] = chr($dataLength >> 8);
    			$header[3] = chr($dataLength & 0xFF);
    			$header_length = 4;
    		}
    		else
    		{
    			// If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the
    			// most significant bit MUST be 0) are the payload length.			
    			$header[1] = chr(127);
    			$header[2] = chr(($dataLength & 0xFF00000000000000) >> 56);
    			$header[3] = chr(($dataLength & 0xFF000000000000) >> 48);
    			$header[4] = chr(($dataLength & 0xFF0000000000) >> 40);
    			$header[5] = chr(($dataLength & 0xFF00000000) >> 32);
    			$header[6] = chr(($dataLength & 0xFF000000) >> 24);
    			$header[7] = chr(($dataLength & 0xFF0000) >> 16);
    			$header[8] = chr(($dataLength & 0xFF00 ) >> 8);
    			$header[9] = chr( $dataLength & 0xFF );			
    			$header_length = 10;
    		}
     
    		$result = socket_write($client, $header . $data, strlen($data) + $header_length);
     
    		if (!$result)
    		{
    			$this->disconnect($client);
    			$client = false;
    		}
    		$this->say("len(".strlen($data).")");		
    	}
    //*******************************************
    function unwrap($data="")
    	{	
    		$bytes = $data;
    		$dataLength = '';
    		$mask = '';
    		$coded_data = '';
    		$decodedData = '';
    		$secondByte = sprintf('%08b', ord($bytes[1]));	
    		$masked = ($secondByte[0] == '1') ? true : false;	
    		$dataLength = ($masked === true) ? ord($bytes[1]) & 127 : ord($bytes[1]);
     
    		$this->say("unwrap dataLength = ".$dataLength);	
     
    			if($masked === true)
    			{
    				if($dataLength === 126)
    				{
    					$mask = substr($bytes, 4, 4);
    					$coded_data = substr($bytes, 8);
    				}
    				elseif($dataLength === 127)
    				{
    					$mask = substr($bytes, 10, 4);
    					$coded_data = substr($bytes, 14);
    				}
    				else
    				{
    					$mask = substr($bytes, 2, 4);	
    					$coded_data = substr($bytes, 6);	
    				}	
    				for($i = 0; $i < strlen($coded_data); $i++)
    				{	
    					$decodedData .= $coded_data[$i] ^ $mask[$i % 4];
    				}
    			}
    			else
    			{
    				if($dataLength === 126)
    				{	
    					$decodedData = substr($bytes, 4);
    				}
    				elseif($dataLength === 127)
    				{	
    					$decodedData = substr($bytes, 10);
    				}
    				else
    				{	
    					$decodedData = substr($bytes, 2);	
    				}	
    			} 
    			return $decodedData;				
    	}
    Est ce que quelqu’un d'un peut plus expérimenter serais de quoi ça peut venir ? En vous remerciant d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut
    Juste une petite précision en plus, je vient de remarquer que avec google crome, pas de probleme, c'est avec Firefox que ça décrypte pas une fois de temps en temps. donc ça donne une petite piste.

    alors du coup est ce que cela ne viendrais pas du Protocol ?

    dans ce code :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private function dohandshake($user,$buffer)
    	{
    		list($resource,$host,$origin,$key1,$key2,$l8b,$key0) = $this->getheaders($buffer);
    		$this->log("Handshaking...");
    		//$port = explode(":",$host);
    		//$port = $port[1];
    		//$this->log($origin."\r\n".$host);
    		$upgrade = "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" .
    		"Upgrade: WebSocket\r\n" .
    		"Connection: Upgrade\r\n" .
    		"Sec-WebSocket-Origin: " . $origin . "\r\n" .
    		"Sec-WebSocket-Accept: " . $this->calcKeyHybi10($key0) . "\r\n" . "\r\n" ;
    		socket_write($user->socket,$upgrade,strlen($upgrade));
    		$user->handshake=true;		
    		return true;
    	}

    Merci pour votre lumière

Discussions similaires

  1. Réponses: 35
    Dernier message: 10/11/2008, 20h14
  2. [C#] problème d'accès aux données d'un datagrid
    Par linux dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/07/2005, 15h30
  3. [CR] problemes d'affichage de donnees
    Par marceline dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/06/2005, 12h24
  4. Probleme avec type de donnees
    Par kevinss dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 15h42
  5. Réponses: 12
    Dernier message: 04/10/2004, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo