#include "session.h" #include "packet.h" #include "plugin.h" #include #include #include #include static char *g_handler = NULL; static void *custom_decode(const char *payload, uint16_t len, void **pme) { return NULL; } struct tcp_session_pme { char data[16]; /* data */ }; struct custom_session_pme { char data[16]; /* data */ }; static struct tcp_session_pme *tcp_session_pme_create() { struct tcp_session_pme *pme = (struct tcp_session_pme *)calloc(1, sizeof(struct tcp_session_pme)); return pme; } static void tcp_session_pme_destory(struct tcp_session_pme *pme) { if (pme) { free(pme); pme = NULL; } } static struct custom_session_pme *custom_session_pme_create() { struct custom_session_pme *pme = (struct custom_session_pme *)calloc(1, sizeof(struct custom_session_pme)); return pme; } static void custom_session_pme_destory(struct custom_session_pme *pme) { if (pme) { free(pme); pme = NULL; } } extern "C" void custom_event_plugin_error(const struct stellar_session *session, enum error_event_type event, void **pme) { if (strcmp(stellar_session_get_name(session), "TCP") == 0) { struct tcp_session_pme **per_tcp_session_pme = (struct tcp_session_pme **)pme; printf("RUN custom_event_plugin_error, session_name: 'TCP', error_event_type: %d, pme->data: %s\n", event, (*per_tcp_session_pme) == NULL ? "NULL" : (*per_tcp_session_pme)->data); tcp_session_pme_destory(*per_tcp_session_pme); } if (strcmp(stellar_session_get_name(session), "CUSTOM") == 0) { struct custom_session_pme **per_custom_session_pme = (struct custom_session_pme **)pme; printf("RUN custom_event_plugin_error, session_name: 'CUSTOM', error_event_type: %d, pme->data: %s\n", event, (*per_custom_session_pme) == NULL ? "NULL" : (*per_custom_session_pme)->data); custom_session_pme_destory(*per_custom_session_pme); } } 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) { struct tcp_session_pme **per_tcp_session_pme = (struct tcp_session_pme **)pme; printf("RUN custom_event_plugin_tcp_entry, event: %d\n", event); if (event & SESSION_EVENT_OPENING) { if (*per_tcp_session_pme == NULL) { struct tcp_session_pme *cur_ctx = tcp_session_pme_create(); memcpy(cur_ctx->data, "custom_event_plugin_tcp_entry", strlen("custom_event_plugin_tcp_entry")); *per_tcp_session_pme = *&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 *new_session = session_manager_session_derive(session, "CUSTOM"); session_manager_trigger_event(new_session, SESSION_EVENT_OPENING, info); session_manager_trigger_event(new_session, SESSION_EVENT_META, info); } if (event & SESSION_EVENT_CLOSING) { tcp_session_pme_destory(*per_tcp_session_pme); } } 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) { struct custom_session_pme **per_custom_session_pme = (struct custom_session_pme **)pme; printf("RUN custom_event_plugin_custom_entry, event: %d\n", event); if (event & SESSION_EVENT_OPENING) { if (*per_custom_session_pme == NULL) { struct custom_session_pme *cur_ctx = custom_session_pme_create(); memcpy(cur_ctx->data, "custom_event_plugin_custom_entry", strlen("custom_event_plugin_custom_entry")); *per_custom_session_pme = *&cur_ctx; } } if (event & SESSION_EVENT_CLOSING) { custom_session_pme_destory(*per_custom_session_pme); } } extern "C" int custom_event_plugin_init(void) { printf("RUN custom_event_plugin_init\n"); if (g_handler == NULL) { g_handler = (char *)malloc(1024); snprintf(g_handler, 1024, "222222"); } return 0; } extern "C" void custom_event_plugin_exit(void) { printf("RUN custom_event_plugin_exit\n"); if (g_handler) { free(g_handler); g_handler = NULL; } }