> On Jul 2, 2021, at 9:07 PM, Dmitry Karpov via curl-library 
> <curl-library@cool.haxx.se> wrote:
> 
>> could libcurl wait for all the fragmented messages to arrive, then concat 
>> them and serve the completed message to the calling application?
> 
> I don't think it is possible in all the cases. WebSocket text/data messages 
> can have 64-bit length, so it is just not possible to assemble large messages.
> I implemented WebSocket protocol in some C++ curl-based client and I used the 
> following approach:
> 
> 1. Notify client that some WS not control message (i.e. text/data) has 
> arrived.
> 2. In the notification callback, Client either provides a buffer to store the 
> message (can be useful for short messages) or data writing callback to store 
> large messages (where data concatenation is not feasible).
>     - If provided buffer is too small to hold the message, then we need to 
> handle it as WebSocket protocol prescribes - close WS connection with 1009 
> 'Buffer too small' error code.
> 
> 3. I also provided a special callback for incoming control messages (i.e. 
> Ping) while large data messages are being received, so client can handle 
> multiple messages (one large data and multiple control messages at the same 
> time) at the same time.

Curl will have to allocate a buffer for each frame’s data anyway; maybe just 
give that buffer to the callback? Then allow the caller either to assume 
ownership of it, or free the buffer after the callback is done.

> WebSocket protocol is very specific about how and when WS connection should 
> handle certain errors, and which status codes should be used in different 
> connection closure cases, so sometimes some specific transport errors (like 
> Tls handshake errors) should be explicitly handled and reported as WS 
> connection closures with specific status codes (i.e. 1015 'TLS handshake 
> failure').

1015 is an interesting one … I guess it’s for a STARTTLS-type workflow where 
the TLS rides on WebSocket?

Regarding connection closures, WebSocket seems to follow SCTP’s model; that may 
be useful prior art to consult.

-F
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to