libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] Using MHD_UpgradeResponseHandle without including in


From: John Duncan
Subject: Re: [libmicrohttpd] Using MHD_UpgradeResponseHandle without including internal.h
Date: Fri, 31 Mar 2017 13:26:17 -1000

I was trying to pass custom non-global scoped data to my upgrade_cb for websockets (upgrade_cb is the name of the routine in test_upgrade.c).  I noticed that the opaque MHD_UpgradeResponseHandle structure was passed as a pointer parameter to the callback, so I was trying to investigate its members to get some insight.  That's when I realized that the members were not exported.  Your answer provides the insight I needed regarding opacity, however I still need to pass in custom data to the upgrade callback.

The callback has the following parameters, and I'm guessing I'm supposed to be using extra_in to pass data into the callback:

static void upgrade_cb
(
void *cls,
struct MHD_Connection *connection,
void *con_cls,
const char *extra_in,
size_t extra_in_size,
MHD_socket sock,
struct MHD_UpgradeResponseHandle *urh
);

However, the only time I see upgrade_cb referenced in test_upgrade.c is when it's used as follows:

resp = MHD_create_response_for_upgrade (&upgrade_cb, NULL);

Do I pass data in through the second parameter? 

Basically, my question boils down to:

How do I attach my own data so that when the callback is triggered I can pass through my own pointers/structures to the callback without utilizing globally scoped variables?

Thanks;
~JD




On Thu, Mar 30, 2017 at 8:32 PM, Evgeny Grin <address@hidden> wrote:
Hi John,

MHD_UpgradeResponseHandle is intentionally opaque. It's not designed for
direct usage of internal members.
If you define it locally, you'll almost likely to break compatibility
with future version.
MHD uses a lot of opaque structures which are internally changed from
version to version. But as long as application uses only public official
API, those changes don't break compatibility.

Usually MHD has specific API to get information about opaque handle.
What do you want to get from internal members?

--
Best Wishes,
Evgeny Grin

On 31.03.2017 0:58, John Duncan wrote:
> I noticed that microhttpd.h only contains only forward defintions of the
> MHD_UpgradeResponseHandle structure.  The file internal.h contains the
> actual structure definition with all members.
>
>  When I try to include the internal.h file directly, I get tons of
> compilation errors leading me to believe that I'm not supposed to be
> including it.
>
> My question is, when building my own applications, how am I supposed to
> access member portions of the MHD_UpgradeResponseHandle structure
> without including internal.h.  Am I expected to define the structure
> within my own project headers and use the provided
> MHD_UpgradeResponseHandle pointer as somewhat of an opaque type?
>
> I don't mind doing this, I just want to make sure this is the correct
> approach.
>
> Thanks;
> ~JD



reply via email to

[Prev in Thread] Current Thread [Next in Thread]