Following on from my post about detecting the final frame of a fragmented WebSocket message there is also an issue sending fragmented messages.
I cannot figure out the flags that you are meant to set when calling curl_ws_send with each fragment and I suspect there is no correct combination. Looking at the code ws_enc_write_head makes a call to ws_frame_flags2op to convert the supplied flags to an opcode. Now if flags contains CURLWS_CONT (4) then ws_frame_flags2op will return zero regardless of any other flags that are ORed with it. This return value is assigned to opcode but the very next bit of code returns CURLE_SEND_ERROR if (!opcode). Adding to the confusion is the fact that the 4-bit opcode in the first byte of the WebSocket header is not a bit-field despite the CURLWS_* defines suggesting it is. I propose - changing the CURLWS_TEXT thru CURLWS_PING defines to be their actual numerical 4-bit values - rename the curl_ws_send's flags argument to opcode - add an argument to curl_ws_send to replace the CURLWS_OFFSET functionality - add libtest cases to cover csl_ws_send for non-control frames -- libtest 2303 claims to test curl_ws_send but the code is missing to actually send a (unfragmneted) text frame -- add a libtest for sending a fragmented text frame, not sure how to verify the data server-size though - add a libtest for sending a frame in pieces i.e. the CURLWS_OFFSET functionality Paul -- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html