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 <k...@yandex.ru> 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