[Libwebsockets] How to set the "user" callback parameter for adopted sockets?
andy at warmcat.com
Wed Nov 23 01:50:44 CET 2016
On Tue, 2016-11-22 at 19:02 -0500, Alan Conway wrote:
> I'm making progress! I can crash my router from a web brower :)
> I can't figure out how to set the "user" parameter for lws callbacks
> for a socket adopted with lws_adopt_socket(). I can access the
That's not what *user_space is for.
It's for protocol-specific local data, per-connection. When the
protocol changes, which it may often do with a http/1.1 keepalive
connection visiting urls that map on to different plugins, the user
data allocation is destroyed by lws and a new one sized appropriately
for the new protocol allocated.
> allocated space *after* the adopt call with lws_wsi_user(), but
> lws_adopt_socket() itself is firing my callbacks so that's too late.
> The docs mention setting up your session data on the
> LWS_CALLBACK_ESTABLISHED event, but at that point I have nothing I
> use to find data from my application.
LWS doesn't have this concept of external shadowed data per-connection
You have two ways to do it
- add a new opaque void * in struct lws and set it at adopt-time,
provide an accessor to get it from the wsi. This is a bit of a burden
for everyone who doesn't care about this then.
- Set the context user pointer at context creation time. You can get
this from a wsi in the callback. You can then use this context-wide
pointer to dereference the wsi pointer to your private connection
pointer on your side, entirely outside of lws.
> Libwebsockets mailing list
> Libwebsockets at ml.libwebsockets.org
More information about the Libwebsockets