<?xml version="1.0" encoding="US-ASCII"?>
<testcase>
<info>
<keywords>
WebSockets
</keywords>
</info>

<client>
<name>
ws: Peculiar frame sizes
</name>
<features>
Debug
ws
</features>
<server>
http
</server>
<tool>
lib2700
</tool>
<command>
ws://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
<setenv>
CURL_WS_FORCE_ZERO_MASK=1
</setenv>
</client>

<reply>
<servercmd>
upgrade
</servercmd>

# Full list of frames: see 'verify.stdout' below
# Frames with sizes around special cases of the frame encoding
#   see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2
#    - 0: empty frame
#    - 125: largest payload with 7-bit encoding
#    - 126: smallest payload with 16-bit encoding AND this value in first byte indicates 16-bit encoding
#    - 127: this value in first byte indicates 64-bit encoding
#    - 65535: largest payload with 16-bit length encoding
#    - 65536: smallest payload with 64-bit length encoding
<data nocheck="yes" nonewline="yes">
HTTP/1.1 101 Switching to WebSockets
Server: server/%TESTNUMBER
Upgrade: Websocket
Connection: Upgrade
Sec-WebSocket-Accept: HkPsVga7+8LuxM4RGQ5p9tZHeYs=

%hex[%81%00]hex%%hex[%81%7d]hex%%repeat[125 x _]%%hex[%81%7e%00%7e]hex%%repeat[126 x _]%%hex[%81%7e%00%7f]hex%%repeat[127 x _]%%hex[%81%7e%ff%ff]hex%%repeat[65535 x _]%%hex[%81%7f%00%00%00%00%00%01%00%00]hex%%repeat[65536 x _]%%hex[%88%00]hex%
</data>
</reply>

<verify>

# Exact echo of reply data with additional masking
<protocol nonewline="yes">
%hex[%81%80%00%00%00%00]hex%%hex[%81%fd%00%00%00%00]hex%%repeat[125 x _]%%hex[%81%fe%00%7e%00%00%00%00]hex%%repeat[126 x _]%%hex[%81%fe%00%7f%00%00%00%00]hex%%repeat[127 x _]%%hex[%81%fe%ff%ff%00%00%00%00]hex%%repeat[65535 x _]%%hex[%81%ff%00%00%00%00%00%01%00%00%00%00%00%00]hex%%repeat[65536 x _]%%hex[%88%80%00%00%00%00]hex%
</protocol>

<stdout>
txt fin [0]
txt fin [125] %repeat[125 x _]%
txt fin [126] %repeat[126 x _]%
txt fin [127] %repeat[127 x _]%
txt fin [65535] %repeat[65535 x _]%
txt fin [65536] %repeat[65536 x _]%
close [0]
</stdout>

# CURLE_OK
<errorcode>
0
</errorcode>

# Strip HTTP header from 'protocol'
<strip>
^GET /.*
^(Host|User-Agent|Accept|Upgrade|Connection|Sec-WebSocket-(Version|Key)): .*
^\s*$
</strip>
</verify>
</testcase>
