Hello,
Here are my 2 öre based on my implementation of a websocket library.
Le 2022-06-17 à 07 h 39, Daniel Stenberg via curl-library a écrit :
I would like to provide websockets data with the CURLOPT_WRITEFUNCTION
callback as well. But how would libcurl provide the additional necessary
metadata?
I assume when you talk about the CURLOPT_WRITEFUNCTION, it's related to
an incoming websocket message from the server to libcurl.
based on the write_callback definition, it's difficult to provide the
metadata in it.
For example, one could say that "for a websocket incoming message, the
first write_callback call, the *ptr value will contain the message
datestamp, the second call will contain the opcode, etc." Which would be
hard for users to work with, at least.
My initial thought was to provide a special websocket function that only
can be used from within the callback that would provide the extra
information (type of data, opcode, and if the FIN bit is set or not
etc). Like maybe
'curl_ws_metadata()'.
My best guess is to use a new curl option, something like
CURLOPT_WS_WRITEFUNCTION with a specific write_callback callback.
In this callback function libcurl would pass a pointer to a structure
that will contain the message metadata. Those metadata would be
accessible via the curl_ws_metadata() for example.
Another advantage of a specific websocket callback function would be
that this function will allow to manage the websocket entire communication.
For example, a received message can be ignored by the app, or the app
can disconnect the websocket if required, or send a message in answer to
a received one, etc.
/Nicolas
--
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html