Готов заплатить 20WMZ тому, кто поможет составить ответ сервера по протоколу Websocket(подробнее есть на
Википедии).
Протокол вполне простой.
Клиент присылает запрос(похоже на HTTP):
Код:
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5
Host: example.com
Sec-WebSocket-Key1: 12998 5 Y3 1 .P00
Origin: http://example.com
WebSocket-Protocol: sample
^n:ds[4U
Север должен дать ответ:
Код:
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample
8jKS'y:G*Co,Wxa-
То, что выделено красным цветом есть 16-байтное тело ответа, вычисляемое следующим образом:
1. из строки со значением заголовка запроса Sec-WebSocket-Key1 исключить все символы, не являющиеся цифрами (не попадающие в диапазон '0'..'9');
2. полученную строку превратить в 64-битное целое число (для примера выше получим 1299853100);
3. полученное число разделить целочисленным делением на количество пробелов в исходной строке со значением заголовка;
4. полученное число представить в виде 4-х байтового 32-битного числа в формате big endian: старший байт хранится по нулевому смещению;
5. проделать то же самое с заголовком Sec-WebSocket-Key2;
6. интерпретируя числа из пунктов 4) и 5) как 4-х байтовые строки, конкатенировать их (сложить в одну строку) и добавить как строку тело запроса;
7. вычислить от полученной 16-байтной строки значение MD5 и записать это значение в тело ответа "как есть", без преобразования в какое-либо представление;
Всё по пунктам понятно, но как отправить md5-хеш в виде этих кракозябр при помощи функции ServerSocket1.Socket.Connections[0].SendBuf???