rename fn_session_event_callback to plugin_event_callback and update API parameters

* plugin_event_callback delete 'struct stellar_packet *p'
    * plugin_event_callback rename 'uint16_t len' to 'size_t len'
    * plugin_event_callback rename 'void **pme' to 'void **ctx'
This commit is contained in:
luwenpeng
2022-08-16 10:37:00 +08:00
parent 4005e8d716
commit b9d93e042b
13 changed files with 190 additions and 188 deletions

View File

@@ -77,7 +77,7 @@ session_unlock(session, plug_id);
```
Plugin Example
```
plugin_entry(session, pme)
plugin_entry(session, ctx)
{
session_get_metadata(session, "fw_action", value);
if(value==INTERCEPT)

View File

@@ -9,72 +9,72 @@
static char *g_handler = NULL;
static void *custom_decode(const char *payload, uint16_t len, void **pme)
static void *custom_decode(const char *payload, size_t len, void **ctx)
{
return NULL;
}
struct tcp_session_pme
struct tcp_session_ctx
{
char data[16];
/* data */
};
struct custom_session_pme
struct custom_session_ctx
{
char data[16];
/* data */
};
static struct tcp_session_pme *tcp_session_pme_create()
static struct tcp_session_ctx *tcp_session_ctx_create()
{
struct tcp_session_pme *pme = (struct tcp_session_pme *)calloc(1, sizeof(struct tcp_session_pme));
return pme;
struct tcp_session_ctx *ctx = (struct tcp_session_ctx *)calloc(1, sizeof(struct tcp_session_ctx));
return ctx;
}
static void tcp_session_pme_destory(struct tcp_session_pme *pme)
static void tcp_session_ctx_destory(struct tcp_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
static struct custom_session_pme *custom_session_pme_create()
static struct custom_session_ctx *custom_session_ctx_create()
{
struct custom_session_pme *pme = (struct custom_session_pme *)calloc(1, sizeof(struct custom_session_pme));
return pme;
struct custom_session_ctx *ctx = (struct custom_session_ctx *)calloc(1, sizeof(struct custom_session_ctx));
return ctx;
}
static void custom_session_pme_destory(struct custom_session_pme *pme)
static void custom_session_ctx_destory(struct custom_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct tcp_session_pme **per_tcp_session_pme = (struct tcp_session_pme **)pme;
struct tcp_session_ctx **per_tcp_session_ctx = (struct tcp_session_ctx **)ctx;
printf("RUN custom_event_plugin_tcp_entry, event: %d\n", event);
if (event & SESSION_EVENT_OPENING)
{
if (*per_tcp_session_pme == NULL)
if (*per_tcp_session_ctx == NULL)
{
struct tcp_session_pme *cur_ctx = tcp_session_pme_create();
struct tcp_session_ctx *cur_ctx = tcp_session_ctx_create();
memcpy(cur_ctx->data, "custom_event_plugin_tcp_entry", strlen("custom_event_plugin_tcp_entry"));
*per_tcp_session_pme = *&cur_ctx;
*per_tcp_session_ctx = *&cur_ctx;
}
}
if (event & SESSION_EVENT_ORDPKT)
{
struct stellar_session_event_extras *info = (struct stellar_session_event_extras *)custom_decode(payload, len, pme);
struct stellar_session_event_extras *info = (struct stellar_session_event_extras *)custom_decode(payload, len, ctx);
struct stellar_session *new_session = session_manager_session_derive(session, "CUSTOM");
session_manager_trigger_event(new_session, SESSION_EVENT_OPENING, info);
@@ -83,29 +83,29 @@ extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *sess
if (event & SESSION_EVENT_CLOSING)
{
tcp_session_pme_destory(*per_tcp_session_pme);
tcp_session_ctx_destory(*per_tcp_session_ctx);
}
}
extern "C" void custom_event_plugin_custom_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void custom_event_plugin_custom_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct custom_session_pme **per_custom_session_pme = (struct custom_session_pme **)pme;
struct custom_session_ctx **per_custom_session_ctx = (struct custom_session_ctx **)ctx;
printf("RUN custom_event_plugin_custom_entry, event: %d\n", event);
if (event & SESSION_EVENT_OPENING)
{
if (*per_custom_session_pme == NULL)
if (*per_custom_session_ctx == NULL)
{
struct custom_session_pme *cur_ctx = custom_session_pme_create();
struct custom_session_ctx *cur_ctx = custom_session_ctx_create();
memcpy(cur_ctx->data, "custom_event_plugin_custom_entry", strlen("custom_event_plugin_custom_entry"));
*per_custom_session_pme = *&cur_ctx;
*per_custom_session_ctx = *&cur_ctx;
}
}
if (event & SESSION_EVENT_CLOSING)
{
custom_session_pme_destory(*per_custom_session_pme);
custom_session_ctx_destory(*per_custom_session_ctx);
}
}

View File

@@ -8,40 +8,40 @@
static char *g_handler = NULL;
struct http_session_pme
struct http_session_ctx
{
char data[16];
/* data */;
};
static struct http_session_pme *http_session_pme_create()
static struct http_session_ctx *http_session_ctx_create()
{
struct http_session_pme *pme = (struct http_session_pme *)calloc(1, sizeof(struct http_session_pme));
return pme;
struct http_session_ctx *ctx = (struct http_session_ctx *)calloc(1, sizeof(struct http_session_ctx));
return ctx;
}
static void http_session_pme_destory(struct http_session_pme *pme)
static void http_session_ctx_destory(struct http_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
extern "C" void http_event_plugin_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void http_event_plugin_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct http_session_pme **per_http_session_pme = (struct http_session_pme **)pme;
struct http_session_ctx **per_http_session_ctx = (struct http_session_ctx **)ctx;
printf("RUN http_event_plugin_entry, event: %d\n", event);
if (event & SESSION_EVENT_OPENING)
{
if (*per_http_session_pme == NULL)
if (*per_http_session_ctx == NULL)
{
struct http_session_pme *cur_ctx = http_session_pme_create();
struct http_session_ctx *cur_ctx = http_session_ctx_create();
memcpy(cur_ctx->data, "http_event_plugin_entry", strlen("http_event_plugin_entry"));
*per_http_session_pme = *&cur_ctx;
*per_http_session_ctx = *&cur_ctx;
}
}
@@ -64,7 +64,7 @@ extern "C" void http_event_plugin_entry(const struct stellar_session *session, e
if (event & SESSION_EVENT_CLOSING)
{
http_session_pme_destory(*per_http_session_pme);
http_session_ctx_destory(*per_http_session_ctx);
}
}

View File

@@ -7,7 +7,7 @@ extern "C"
#include "session.h"
void http_decoder(const struct stellar_session *s, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme);
void http_decoder(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx);
#ifdef __cpluscplus
}

View File

@@ -6,10 +6,13 @@ extern "C"
{
#endif
#include <stddef.h>
#include "session.h"
typedef int plugin_init_callback(void);
typedef void plugin_exit_callback(void);
typedef void plugin_event_callback(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx);
/******************************************************************************
* Public API For Plugin
@@ -31,7 +34,7 @@ void pm_session_dettach_me(const struct stellar_session *session);
* /|\
* |
* plugin cb2 run pm_session_take_over
*
*
* A plugin(cb1/cb3/cb4) that is taken over, if the plugin was called before being taken over and has a registered SESSION_EVENT_CLOSING event,
* it will be called again when the SESSION_EVENT_CLOSING event comes. Otherwise, the plugin will not be called.
*/

View File

@@ -42,8 +42,6 @@ enum session_event_type
struct stellar_session_event_extras;
typedef void(fn_session_event_callback)(const struct stellar_session *s, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme);
void session_manager_trigger_event(struct stellar_session *s, enum session_event_type type, struct stellar_session_event_extras *info);
struct stellar_session *session_manager_session_derive(const struct stellar_session *this_session, const char *session_name);

View File

@@ -3,6 +3,7 @@
#include "uthash/uthash.h"
#include "sdk/include/plugin.h"
#include "session_manager.h"
#include "plugin_manager_module.h"
@@ -20,7 +21,7 @@ enum plugin_status
struct callback_runtime
{
void *cb_args;
fn_session_event_callback *event_cb;
plugin_event_callback *event_cb;
enum session_event_type event;
enum plugin_status status;
@@ -41,7 +42,7 @@ struct session_plugin_ctx
struct callback_static
{
enum session_event_type event;
fn_session_event_callback *event_cb;
plugin_event_callback *event_cb;
};
struct plugin_manager_eventcb
@@ -342,7 +343,7 @@ void plugin_manager_destory(struct plugin_manager *plug_mgr)
}
}
int plugin_manager_register(struct plugin_manager *plug_mgr, const char *session_name, enum session_event_type event, fn_session_event_callback *event_cb)
int plugin_manager_register(struct plugin_manager *plug_mgr, const char *session_name, enum session_event_type event, plugin_event_callback *event_cb)
{
if (strlen(session_name) <= 0)
{
@@ -399,7 +400,6 @@ void plugin_manager_dispatch(struct plugin_manager *plug_mgr, struct stellar_eve
struct session_plugin_ctx *plug_ctx = stellar_event_get_plugin_ctx(event);
enum session_event_type event_type = stellar_event_get_type(event);
const char *session_name = stellar_event_get_session_name(event);
struct stellar_packet *packet = stellar_event_get_packet(event);
uint16_t payload_len = stellar_event_get_payload_length(event);
const char *payload = stellar_event_get_payload(event);
@@ -441,7 +441,7 @@ void plugin_manager_dispatch(struct plugin_manager *plug_mgr, struct stellar_eve
{
plug_ctx->callback_index = i;
plugin_manager_log(DEBUG, "dispatch, run event_cb: %p, plugin status: 'taken over', session: %s, event: (%d, %s)", runtime->event_cb, session_name, event_type, event_str_buffer);
runtime->event_cb(seesion, SESSION_EVENT_CLOSING, packet, payload, payload_len, &runtime->cb_args);
runtime->event_cb(seesion, SESSION_EVENT_CLOSING, payload, payload_len, &runtime->cb_args);
continue;
}
else
@@ -455,7 +455,7 @@ void plugin_manager_dispatch(struct plugin_manager *plug_mgr, struct stellar_eve
{
plug_ctx->callback_index = i;
plugin_manager_log(DEBUG, "dispatch, run event_cb: %p, plugin status: 'normal', session: %s, event: (%d, %s)", runtime->event_cb, session_name, event_type, event_str_buffer);
runtime->event_cb(seesion, event_type, packet, payload, payload_len, &runtime->cb_args);
runtime->event_cb(seesion, event_type, payload, payload_len, &runtime->cb_args);
runtime->is_be_called = 1;
}
else
@@ -506,7 +506,7 @@ void pm_session_dettach_me(const struct stellar_session *session)
* /|\
* |
* plugin cb2 run pm_session_take_over
*
*
* A plugin(cb1/cb3/cb4) that is taken over, if the plugin was called before being taken over and has a registered SESSION_EVENT_CLOSING event,
* it will be called again when the SESSION_EVENT_CLOSING event comes. Otherwise, the plugin will not be called.
*/
@@ -531,7 +531,7 @@ void pm_session_take_over(const struct stellar_session *session)
* Util For Gtest
******************************************************************************/
void *pm_session_get_plugin_pme(const struct stellar_session *session)
void *pm_session_get_plugin_ctx(const struct stellar_session *session)
{
struct session_plugin_ctx *plugin_ctx = stellar_session_get_plugin_ctx(session);
assert(plugin_ctx);

View File

@@ -7,6 +7,7 @@ extern "C"
#endif
#include "sdk/include/session.h"
#include "sdk/include/plugin.h"
struct plugin_manager;
@@ -16,11 +17,11 @@ void plugin_manager_destory(struct plugin_manager *plug_mgr);
int plugin_manager_load(struct plugin_manager *plug_mgr, const char *file);
void plugin_manager_unload(struct plugin_manager *plug_mgr);
int plugin_manager_register(struct plugin_manager *plug_mgr, const char *session_name, enum session_event_type event, fn_session_event_callback *event_cb);
int plugin_manager_register(struct plugin_manager *plug_mgr, const char *session_name, enum session_event_type event, plugin_event_callback *event_cb);
void plugin_manager_dispatch(struct plugin_manager *plug_mgr, struct stellar_event *event);
// only use for gtest
void *pm_session_get_plugin_pme(const struct stellar_session *session);
void *pm_session_get_plugin_ctx(const struct stellar_session *session);
#ifdef __cpluscplus
}

View File

@@ -9,7 +9,7 @@
struct plugin_manager_module_evcb
{
char session_name[MAX_SESSION_NAME_LENGTH];
fn_session_event_callback *event_cb_ptr;
plugin_event_callback *event_cb_ptr;
enum session_event_type event;
};
@@ -96,7 +96,7 @@ struct plugin_manager_module *plugin_manager_module_open(struct plugin_manager_c
strncpy(event_cb->session_name, session_config->session_name, strlen(session_config->session_name));
event_cb->event = session_config->event;
event_cb->event_cb_ptr = (fn_session_event_callback *)(dlsym(module->dl_handle, session_config->cb_func_name));
event_cb->event_cb_ptr = (plugin_event_callback *)(dlsym(module->dl_handle, session_config->cb_func_name));
if (event_cb->event_cb_ptr == NULL)
{
plugin_manager_log(ERROR, "can't find symbol name of '%s' in dynamic library %s, %s",

View File

@@ -261,14 +261,14 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_CUSTOM)
* SESSION_EVENT_CALLBACK="custom_event_plugin_custom_entry"
*/
struct custom_session_pme
struct custom_session_ctx
{
char data[64];
int flags;
/* data */
};
struct custom_session_pme *pme;
struct custom_session_ctx *ctx;
char file_path[] = "./plugins_config/plugins.inf";
const char *session_name = "CUSTOM";
@@ -292,30 +292,30 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_CUSTOM)
// run evencb
event_data.type = SESSION_EVENT_OPENING;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct custom_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(pme->data, "custom_event_plugin_custom_entry");
ctx = (struct custom_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(ctx->data, "custom_event_plugin_custom_entry");
// unrun evencb
event_data.type = SESSION_EVENT_RAWPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct custom_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(pme->data, "custom_event_plugin_custom_entry");
ctx = (struct custom_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(ctx->data, "custom_event_plugin_custom_entry");
// run evencb
event_data.type = SESSION_EVENT_ORDPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct custom_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(pme->data, "custom_event_plugin_custom_entry");
ctx = (struct custom_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(ctx->data, "custom_event_plugin_custom_entry");
// unrun evencb
event_data.type = SESSION_EVENT_META;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct custom_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(pme->data, "custom_event_plugin_custom_entry");
ctx = (struct custom_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(ctx->data, "custom_event_plugin_custom_entry");
// run evencb
event_data.type = SESSION_EVENT_CLOSING;
@@ -342,13 +342,13 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_TCP)
* SESSION_EVENT_CALLBACK="custom_event_plugin_tcp_entry"
*/
struct tcp_session_pme
struct tcp_session_ctx
{
char data[64];
int flags;
/* data */
};
struct tcp_session_pme *pme;
struct tcp_session_ctx *ctx;
char file_path[] = "./plugins_config/plugins.inf";
@@ -373,30 +373,30 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_TCP)
// run evencb
event_data.type = SESSION_EVENT_OPENING;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct tcp_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(pme->data, "custom_event_plugin_tcp_entry");
ctx = (struct tcp_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(ctx->data, "custom_event_plugin_tcp_entry");
// run evencb
event_data.type = SESSION_EVENT_RAWPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct tcp_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_RAWPKT);
EXPECT_STREQ(pme->data, "custom_event_plugin_tcp_entry");
ctx = (struct tcp_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_RAWPKT);
EXPECT_STREQ(ctx->data, "custom_event_plugin_tcp_entry");
// run evencb
event_data.type = SESSION_EVENT_ORDPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct tcp_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(pme->data, "custom_event_plugin_tcp_entry");
ctx = (struct tcp_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(ctx->data, "custom_event_plugin_tcp_entry");
// run evencb
event_data.type = SESSION_EVENT_META;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct tcp_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_META);
EXPECT_STREQ(pme->data, "custom_event_plugin_tcp_entry");
ctx = (struct tcp_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_META);
EXPECT_STREQ(ctx->data, "custom_event_plugin_tcp_entry");
// run evencb
event_data.type = SESSION_EVENT_CLOSING;
@@ -427,14 +427,14 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_HTTP_dettach_me)
* SESSION_EVENT_CALLBACK="custom_event_plugin_http_entry"
*/
struct http_session_pme
struct http_session_ctx
{
char data[64];
int flags;
/* data */;
};
struct http_session_pme *pme = NULL;
struct http_session_ctx *ctx = NULL;
char file_path[] = "./plugins_config/plugins.inf";
const char *session_name = "HTTP";
@@ -458,23 +458,23 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_HTTP_dettach_me)
// run evencb
event_data.type = SESSION_EVENT_OPENING;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(pme->data, "custom_event_plugin_http_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(ctx->data, "custom_event_plugin_http_entry");
// http_event_plugin_entry + SESSION_EVENT_RAWPKT ==> pm_session_dettach_me
event_data.type = SESSION_EVENT_RAWPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_RAWPKT);
EXPECT_STREQ(pme->data, "custom_event_plugin_http_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_RAWPKT);
EXPECT_STREQ(ctx->data, "custom_event_plugin_http_entry");
// run evencb
event_data.type = SESSION_EVENT_META;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_META);
EXPECT_STREQ(pme->data, "custom_event_plugin_http_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_META);
EXPECT_STREQ(ctx->data, "custom_event_plugin_http_entry");
// run evencb
event_data.type = SESSION_EVENT_CLOSING;
@@ -505,14 +505,14 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_HTTP_take_over)
* SESSION_EVENT_CALLBACK="custom_event_plugin_http_entry"
*/
struct http_session_pme
struct http_session_ctx
{
char data[64];
int flags;
/* data */;
};
struct http_session_pme *pme = NULL;
struct http_session_ctx *ctx = NULL;
char file_path[] = "./plugins_config/plugins.inf";
const char *session_name = "HTTP";
@@ -536,23 +536,23 @@ TEST(PLUGIN_MANAGER_TEST, plugin_manager_dispatch_HTTP_take_over)
// run evencb
event_data.type = SESSION_EVENT_OPENING;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(pme->data, "custom_event_plugin_http_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_OPENING);
EXPECT_STREQ(ctx->data, "custom_event_plugin_http_entry");
// http_event_plugin_entry + SESSION_EVENT_ORDPKT ==> pm_session_take_over
event_data.type = SESSION_EVENT_ORDPKT;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(pme->data, "http_event_plugin_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_ORDPKT);
EXPECT_STREQ(ctx->data, "http_event_plugin_entry");
// run evencb
event_data.type = SESSION_EVENT_META;
plugin_manager_dispatch(plug_mgr, &event);
pme = (struct http_session_pme *)pm_session_get_plugin_pme(&session);
EXPECT_TRUE(pme->flags == SESSION_EVENT_META);
EXPECT_STREQ(pme->data, "http_event_plugin_entry");
ctx = (struct http_session_ctx *)pm_session_get_plugin_ctx(&session);
EXPECT_TRUE(ctx->flags == SESSION_EVENT_META);
EXPECT_STREQ(ctx->data, "http_event_plugin_entry");
// run evencb
event_data.type = SESSION_EVENT_CLOSING;

View File

@@ -8,102 +8,102 @@
static char *g_handler = NULL;
static void *custom_decode(const char *payload, uint16_t len, void **pme)
static void *custom_decode(const char *payload, size_t len, void **ctx)
{
return NULL;
}
struct tcp_session_pme
struct tcp_session_ctx
{
char data[64];
int flags;
/* data */
};
struct custom_session_pme
struct custom_session_ctx
{
char data[64];
int flags;
/* data */
};
struct http_session_pme
struct http_session_ctx
{
char data[64];
int flags;
/* data */;
};
static struct tcp_session_pme *tcp_session_pme_create()
static struct tcp_session_ctx *tcp_session_ctx_create()
{
struct tcp_session_pme *pme = (struct tcp_session_pme *)calloc(1, sizeof(struct tcp_session_pme));
return pme;
struct tcp_session_ctx *ctx = (struct tcp_session_ctx *)calloc(1, sizeof(struct tcp_session_ctx));
return ctx;
}
static void tcp_session_pme_destory(struct tcp_session_pme *pme)
static void tcp_session_ctx_destory(struct tcp_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
static struct custom_session_pme *custom_session_pme_create()
static struct custom_session_ctx *custom_session_ctx_create()
{
struct custom_session_pme *pme = (struct custom_session_pme *)calloc(1, sizeof(struct custom_session_pme));
return pme;
struct custom_session_ctx *ctx = (struct custom_session_ctx *)calloc(1, sizeof(struct custom_session_ctx));
return ctx;
}
static void custom_session_pme_destory(struct custom_session_pme *pme)
static void custom_session_ctx_destory(struct custom_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
static struct http_session_pme *http_session_pme_create()
static struct http_session_ctx *http_session_ctx_create()
{
struct http_session_pme *pme = (struct http_session_pme *)calloc(1, sizeof(struct http_session_pme));
return pme;
struct http_session_ctx *ctx = (struct http_session_ctx *)calloc(1, sizeof(struct http_session_ctx));
return ctx;
}
static void http_session_pme_destory(struct http_session_pme *pme)
static void http_session_ctx_destory(struct http_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct tcp_session_pme **per_tcp_session_pme = (struct tcp_session_pme **)pme;
struct tcp_session_ctx **per_tcp_session_ctx = (struct tcp_session_ctx **)ctx;
if (event & SESSION_EVENT_OPENING)
{
if (*per_tcp_session_pme == NULL)
if (*per_tcp_session_ctx == NULL)
{
struct tcp_session_pme *cur_ctx = tcp_session_pme_create();
struct tcp_session_ctx *cur_ctx = tcp_session_ctx_create();
memcpy(cur_ctx->data, "custom_event_plugin_tcp_entry", strlen("custom_event_plugin_tcp_entry"));
cur_ctx->flags = SESSION_EVENT_OPENING;
*per_tcp_session_pme = *&cur_ctx;
*per_tcp_session_ctx = *&cur_ctx;
}
}
if (event & SESSION_EVENT_RAWPKT)
{
(*per_tcp_session_pme)->flags = SESSION_EVENT_RAWPKT;
(*per_tcp_session_ctx)->flags = SESSION_EVENT_RAWPKT;
}
if (event & SESSION_EVENT_ORDPKT)
{
(*per_tcp_session_pme)->flags = SESSION_EVENT_ORDPKT;
(*per_tcp_session_ctx)->flags = SESSION_EVENT_ORDPKT;
struct stellar_session_event_extras *info = (struct stellar_session_event_extras *)custom_decode(payload, len, pme);
struct stellar_session_event_extras *info = (struct stellar_session_event_extras *)custom_decode(payload, len, ctx);
struct stellar_session *new_session = session_manager_session_derive(session, "CUSTOM");
session_manager_trigger_event(new_session, SESSION_EVENT_OPENING, info);
@@ -112,86 +112,86 @@ extern "C" void custom_event_plugin_tcp_entry(const struct stellar_session *sess
if (event & SESSION_EVENT_META)
{
(*per_tcp_session_pme)->flags = SESSION_EVENT_META;
(*per_tcp_session_ctx)->flags = SESSION_EVENT_META;
}
if (event & SESSION_EVENT_CLOSING)
{
tcp_session_pme_destory(*per_tcp_session_pme);
*per_tcp_session_pme = NULL;
tcp_session_ctx_destory(*per_tcp_session_ctx);
*per_tcp_session_ctx = NULL;
}
}
extern "C" void custom_event_plugin_custom_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void custom_event_plugin_custom_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct custom_session_pme **per_custom_session_pme = (struct custom_session_pme **)pme;
struct custom_session_ctx **per_custom_session_ctx = (struct custom_session_ctx **)ctx;
if (event & SESSION_EVENT_OPENING)
{
if (*per_custom_session_pme == NULL)
if (*per_custom_session_ctx == NULL)
{
struct custom_session_pme *cur_ctx = custom_session_pme_create();
struct custom_session_ctx *cur_ctx = custom_session_ctx_create();
memcpy(cur_ctx->data, "custom_event_plugin_custom_entry", strlen("custom_event_plugin_custom_entry"));
cur_ctx->flags = SESSION_EVENT_OPENING;
*per_custom_session_pme = *&cur_ctx;
*per_custom_session_ctx = *&cur_ctx;
}
}
if (event & SESSION_EVENT_RAWPKT)
{
(*per_custom_session_pme)->flags = SESSION_EVENT_RAWPKT;
(*per_custom_session_ctx)->flags = SESSION_EVENT_RAWPKT;
}
if (event & SESSION_EVENT_ORDPKT)
{
(*per_custom_session_pme)->flags = SESSION_EVENT_ORDPKT;
(*per_custom_session_ctx)->flags = SESSION_EVENT_ORDPKT;
}
if (event & SESSION_EVENT_META)
{
(*per_custom_session_pme)->flags = SESSION_EVENT_META;
(*per_custom_session_ctx)->flags = SESSION_EVENT_META;
}
if (event & SESSION_EVENT_CLOSING)
{
custom_session_pme_destory(*per_custom_session_pme);
*per_custom_session_pme = NULL;
custom_session_ctx_destory(*per_custom_session_ctx);
*per_custom_session_ctx = NULL;
}
}
extern "C" void custom_event_plugin_http_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void custom_event_plugin_http_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct http_session_pme **per_http_session_pme = (struct http_session_pme **)pme;
struct http_session_ctx **per_http_session_ctx = (struct http_session_ctx **)ctx;
if (event & SESSION_EVENT_OPENING)
{
if (*per_http_session_pme == NULL)
if (*per_http_session_ctx == NULL)
{
struct http_session_pme *cur_ctx = http_session_pme_create();
struct http_session_ctx *cur_ctx = http_session_ctx_create();
memcpy(cur_ctx->data, "custom_event_plugin_http_entry", strlen("custom_event_plugin_http_entry"));
cur_ctx->flags = SESSION_EVENT_OPENING;
*per_http_session_pme = *&cur_ctx;
*per_http_session_ctx = *&cur_ctx;
}
}
if (event & SESSION_EVENT_RAWPKT)
{
(*per_http_session_pme)->flags = SESSION_EVENT_RAWPKT;
(*per_http_session_ctx)->flags = SESSION_EVENT_RAWPKT;
}
if (event & SESSION_EVENT_ORDPKT)
{
(*per_http_session_pme)->flags = SESSION_EVENT_ORDPKT;
(*per_http_session_ctx)->flags = SESSION_EVENT_ORDPKT;
}
if (event & SESSION_EVENT_META)
{
(*per_http_session_pme)->flags = SESSION_EVENT_META;
(*per_http_session_ctx)->flags = SESSION_EVENT_META;
}
if (event & SESSION_EVENT_CLOSING)
{
http_session_pme_destory(*per_http_session_pme);
*per_http_session_pme = NULL;
http_session_ctx_destory(*per_http_session_ctx);
*per_http_session_ctx = NULL;
}
}

View File

@@ -8,40 +8,40 @@
static char *g_handler = NULL;
struct http_session_pme
struct http_session_ctx
{
char data[64];
int flags;
/* data */;
};
static struct http_session_pme *http_session_pme_create()
static struct http_session_ctx *http_session_ctx_create()
{
struct http_session_pme *pme = (struct http_session_pme *)calloc(1, sizeof(struct http_session_pme));
return pme;
struct http_session_ctx *ctx = (struct http_session_ctx *)calloc(1, sizeof(struct http_session_ctx));
return ctx;
}
static void http_session_pme_destory(struct http_session_pme *pme)
static void http_session_ctx_destory(struct http_session_ctx *ctx)
{
if (pme)
if (ctx)
{
free(pme);
pme = NULL;
free(ctx);
ctx = NULL;
}
}
extern "C" void http_event_plugin_entry(const struct stellar_session *session, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
extern "C" void http_event_plugin_entry(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct http_session_pme **per_http_session_pme = (struct http_session_pme **)pme;
struct http_session_ctx **per_http_session_ctx = (struct http_session_ctx **)ctx;
if (event & SESSION_EVENT_OPENING)
{
if (*per_http_session_pme == NULL)
if (*per_http_session_ctx == NULL)
{
struct http_session_pme *cur_ctx = http_session_pme_create();
struct http_session_ctx *cur_ctx = http_session_ctx_create();
memcpy(cur_ctx->data, "http_event_plugin_entry", strlen("http_event_plugin_entry"));
cur_ctx->flags = SESSION_EVENT_OPENING;
*per_http_session_pme = *&cur_ctx;
*per_http_session_ctx = *&cur_ctx;
}
}
@@ -52,8 +52,8 @@ extern "C" void http_event_plugin_entry(const struct stellar_session *session, e
* The plugin manager just set the skip flag and don't call this event callback next.
* Before calling pm_session_dettach_me, the current plugin must release related resources for the current session.
*/
http_session_pme_destory(*per_http_session_pme);
*per_http_session_pme = NULL;
http_session_ctx_destory(*per_http_session_ctx);
*per_http_session_ctx = NULL;
pm_session_dettach_me(session);
return;
}
@@ -61,20 +61,20 @@ extern "C" void http_event_plugin_entry(const struct stellar_session *session, e
if (event & SESSION_EVENT_ORDPKT)
{
// TODO
(*per_http_session_pme)->flags = SESSION_EVENT_ORDPKT;
(*per_http_session_ctx)->flags = SESSION_EVENT_ORDPKT;
pm_session_take_over(session);
}
if (event & SESSION_EVENT_META)
{
// TODO
(*per_http_session_pme)->flags = SESSION_EVENT_META;
(*per_http_session_ctx)->flags = SESSION_EVENT_META;
}
if (event & SESSION_EVENT_CLOSING)
{
http_session_pme_destory(*per_http_session_pme);
*per_http_session_pme = NULL;
http_session_ctx_destory(*per_http_session_ctx);
*per_http_session_ctx = NULL;
}
}

View File

@@ -2,10 +2,10 @@
#include "sdk/include/session.h"
void http_decoder(const struct stellar_session *s, enum session_event_type event, struct stellar_packet *p, const char *payload, uint16_t len, void **pme)
void http_decoder(const struct stellar_session *session, enum session_event_type event, const char *payload, size_t len, void **ctx)
{
struct stellar_session_event_extras *info = NULL;
struct stellar_session *new_session = session_manager_session_derive(s, "HTTP");
struct stellar_session *new_session = session_manager_session_derive(session, "HTTP");
session_manager_trigger_event(new_session, SESSION_EVENT_OPENING, info);
session_manager_trigger_event(new_session, SESSION_EVENT_META, info);