On Mon, 20 Jan 2025, Gavin D. Howard via curl-library wrote:

After rereading RFC 6455, and looking at the Curl Websocket API, I think that the only API change would be to add something like `CURLWS_SERVER` to `CURLOPT_WS_OPTIONS`.

As the entire libcurl API is for client-side, I'm not following how you would make it act as a server just because you set CURLWS_SERVER ? The only way libcurl can setup a WebSocket connection is as a client. How would you make it act as a server?

I presume that you need a way to hook libcurl into a WebSocket connection in the server after it has been setup by the client, or something like that. How would that work?

If that is set in the options, libcurl would not do any masking, but it would unmask any frames it receives.

There have been discussions about making a "mask-less" version of WebSocket since it does not really add anything, so having an option that effectly switches off masking is not unthinkable to me.

As far as I can tell, the sole server-only API that libcurl might need
would be in handling the upgrade request. For that, there needs to be:

* Verify:
        * Request-URI
        * Host
        * Origin
* A way to select which of the extensions to send back.

But I think this can be done outside of libcurl, so if it is, the sole API change would be the addition of `CURLWS_SERVER`.

I don't think those features can be added to libcurl easily since they are essential features and tasks for a server and also probably interacts with the "normal" HTTP activities rather tightly.

But you would still need to "hook in" libcurl server-side into or onto the connection somehow. I think that is the larger complication, isn't it?

One benefit with supporting server-side WebSocket would be that we could probably write WebSocket test cases easier and let libcurl talk to itself in both ends.

--

 / daniel.haxx.se || https://rock-solid.curl.dev
--
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to