int lws_extension_callback_deflate_stream(
- struct libwebsocket_context *context, struct libwebsocket *wsi,
+ struct libwebsocket_context *context,
+ struct libwebsocket_extension *ext,
+ struct libwebsocket *wsi,
enum libwebsocket_extension_callback_reasons reason,
void *user, void *in, size_t len)
{
};
extern int lws_extension_callback_deflate_stream(
- struct libwebsocket_context *context,
- struct libwebsocket *wsi,
- enum libwebsocket_extension_callback_reasons reason,
+ struct libwebsocket_context *context,
+ struct libwebsocket_extension *ext,
+ struct libwebsocket *wsi,
+ enum libwebsocket_extension_callback_reasons reason,
void *user, void *in, size_t len);
/* allow him to construct his context */
ext->callback(wsi->protocol->owning_server,
- wsi, LWS_EXT_CALLBACK_CONSTRUCT,
+ ext, wsi,
+ LWS_EXT_CALLBACK_CONSTRUCT,
wsi->active_extensions_user[
wsi->count_active_extensions], NULL, 0);
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(
- wsi->protocol->owning_server, wsi,
+ wsi->protocol->owning_server,
+ wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_FLUSH_PENDING_TX,
wsi->active_extensions_user[n], &eff_buf, 0);
if (m < 0) {
if (!wsi->active_extensions[n]->callback)
continue;
- wsi->active_extensions[n]->callback(context, wsi,
- LWS_EXT_CALLBACK_DESTROY,
- wsi->active_extensions_user[n], NULL, 0);
+ wsi->active_extensions[n]->callback(context,
+ wsi->active_extensions[n], wsi,
+ LWS_EXT_CALLBACK_DESTROY,
+ wsi->active_extensions_user[n], NULL, 0);
free(wsi->active_extensions_user[n]);
}
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(
- wsi->protocol->owning_server, wsi,
+ wsi->protocol->owning_server,
+ wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_PACKET_TX_PRESEND,
wsi->active_extensions_user[n], &eff_buf, 0);
if (m < 0) {
/* allow him to construct his context */
ext->callback(wsi->protocol->owning_server,
- wsi, LWS_EXT_CALLBACK_CLIENT_CONSTRUCT,
+ ext, wsi,
+ LWS_EXT_CALLBACK_CLIENT_CONSTRUCT,
wsi->active_extensions_user[
- wsi->count_active_extensions], NULL, 0);
+ wsi->count_active_extensions],
+ NULL, 0);
wsi->count_active_extensions++;
more = 0;
for (n = 0; n < wsi->count_active_extensions; n++) {
- m = wsi->active_extensions[n]->callback(context, wsi,
+ m = wsi->active_extensions[n]->callback(context,
+ wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_PACKET_RX_PREPARSE,
- wsi->active_extensions_user[n], &eff_buf, 0);
+ wsi->active_extensions_user[n],
+ &eff_buf, 0);
if (m < 0) {
fprintf(stderr, "Extension reports fatal error\n");
libwebsocket_close_and_free_session(context, wsi,
struct libwebsocket;
struct libwebsocket_context;
+struct libwebsocket_extension;
/* document the generic callback (it's a fake prototype under this) */
/**
/**
* extension_callback() - Hooks to allow extensions to operate
* @context: Websockets context
+ * @ext: This extension
* @wsi: Opaque websocket instance pointer
* @reason: The reason for the call
* @user: Pointer to per-session user data allocated by library
*/
extern int extension_callback(struct libwebsocket_context * context,
+ struct libwebsocket_extension *ext,
struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason, void *user,
void *in, size_t len);
struct libwebsocket_extension {
const char *name;
int (*callback)(struct libwebsocket_context *context,
+ struct libwebsocket_extension *ext,
struct libwebsocket *wsi,
enum libwebsocket_extension_callback_reasons reason,
void *user, void *in, size_t len);
for (n = 0; n < wsi->count_active_extensions; n++) {
m = wsi->active_extensions[n]->callback(
- wsi->protocol->owning_server, wsi,
+ wsi->protocol->owning_server,
+ wsi->active_extensions[n], wsi,
LWS_EXT_CALLBACK_PACKET_TX_PRESEND,
wsi->active_extensions_user[n], &eff_buf, 0);
if (m < 0) {
struct libwebsocket {
const struct libwebsocket_protocols *protocol;
- const struct libwebsocket_extension *
+ struct libwebsocket_extension *
active_extensions[LWS_MAX_EXTENSIONS_ACTIVE];
void * active_extensions_user[LWS_MAX_EXTENSIONS_ACTIVE];
int count_active_extensions;
<i>int</i>
<b>extension_callback</b>
(<i>struct libwebsocket_context *</i> <b>context</b>,
+<i>struct libwebsocket_extension *</i> <b>ext</b>,
<i>struct libwebsocket *</i> <b>wsi</b>,
<i>enum libwebsocket_callback_reasons</i> <b>reason</b>,
<i>void *</i> <b>user</b>,
<dl>
<dt><b>context</b>
<dd>Websockets context
+<dt><b>ext</b>
+<dd>This extension
<dt><b>wsi</b>
<dd>Opaque websocket instance pointer
<dt><b>reason</b>
<h2>struct libwebsocket_extension - An extension we know how to cope with</h2>
<b>struct libwebsocket_extension</b> {<br>
<i>const char *</i> <b>name</b>;<br>
- <i>int (*</i><b>callback</b>) <i>(struct libwebsocket_context *context,struct libwebsocket *wsi,enum libwebsocket_extension_callback_reasons reason,void *user, void *in, size_t len)</i>;<br>
+ <i>int (*</i><b>callback</b>) <i>(struct libwebsocket_context *context,struct libwebsocket_extension *ext,struct libwebsocket *wsi,enum libwebsocket_extension_callback_reasons reason,void *user, void *in, size_t len)</i>;<br>
<i>size_t</i> <b>per_session_data_size</b>;<br>
};<br>
<h3>Members</h3>