2022-07-27 18:32:22 +08:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
|
#include "plugin_manager_util.h"
|
|
|
|
|
|
2022-08-03 19:46:43 +08:00
|
|
|
/******************************************************************************
|
|
|
|
|
* Malloc
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
2022-07-27 18:32:22 +08:00
|
|
|
char *safe_dup(const char *str)
|
|
|
|
|
{
|
|
|
|
|
if (str == NULL)
|
|
|
|
|
{
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char *dup = safe_alloc(char, strlen(str) + 1);
|
|
|
|
|
memcpy(dup, str, strlen(str));
|
|
|
|
|
|
|
|
|
|
return dup;
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-03 19:46:43 +08:00
|
|
|
/******************************************************************************
|
2022-08-26 17:33:03 +08:00
|
|
|
* Session State
|
2022-08-03 19:46:43 +08:00
|
|
|
******************************************************************************/
|
|
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
struct session_state_map
|
2022-07-27 18:32:22 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
const char *state_str;
|
|
|
|
|
enum session_state state_int;
|
2022-08-03 19:46:43 +08:00
|
|
|
};
|
2022-07-27 18:32:22 +08:00
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
static struct session_state_map state_map[] = {
|
|
|
|
|
{"SESSION_STATE_INVALID", SESSION_STATE_INVALID},
|
|
|
|
|
{"SESSION_STATE_OPENING", SESSION_STATE_OPENING},
|
|
|
|
|
{"SESSION_STATE_ACTIVE", SESSION_STATE_ACTIVE},
|
|
|
|
|
{"SESSION_STATE_CLOSING", SESSION_STATE_CLOSING},
|
|
|
|
|
{"SESSION_STATE_ALL", SESSION_STATE_ALL},
|
2022-08-03 19:46:43 +08:00
|
|
|
};
|
|
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
enum session_state session_state_str2int(const char *state_str)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
enum session_state state_int = SESSION_STATE_INVALID;
|
|
|
|
|
int num = sizeof(state_map) / sizeof(state_map[0]);
|
2022-07-27 18:32:22 +08:00
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
char *buffer = safe_dup(state_str);
|
2022-08-03 19:46:43 +08:00
|
|
|
char *token = strtok(buffer, "|");
|
|
|
|
|
while (token)
|
2022-07-27 18:32:22 +08:00
|
|
|
{
|
2022-08-03 19:46:43 +08:00
|
|
|
for (int i = 0; i < num; i++)
|
|
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
if (strcmp(token, state_map[i].state_str) == 0)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
state_int = (enum session_state)(state_int | state_map[i].state_int);
|
2022-08-03 19:46:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
token = strtok(NULL, "|");
|
2022-07-27 18:32:22 +08:00
|
|
|
}
|
2022-08-03 19:46:43 +08:00
|
|
|
safe_free(buffer);
|
2022-07-27 18:32:22 +08:00
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
return state_int;
|
2022-08-03 19:46:43 +08:00
|
|
|
}
|
|
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
void session_state_int2str(enum session_state state_int, char *buffer, int size)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
|
|
|
|
int used = 0;
|
2022-08-26 17:33:03 +08:00
|
|
|
int num = sizeof(state_map) / sizeof(state_map[0]);
|
2022-08-03 19:46:43 +08:00
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
if (state_int == SESSION_STATE_INVALID)
|
2022-07-27 18:32:22 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
snprintf(buffer, size, "%s", "SESSION_STATE_INVALID");
|
2022-08-03 19:46:43 +08:00
|
|
|
return;
|
2022-07-27 18:32:22 +08:00
|
|
|
}
|
2022-08-03 19:46:43 +08:00
|
|
|
|
2022-08-26 17:33:03 +08:00
|
|
|
if (state_int == SESSION_STATE_ALL)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
snprintf(buffer, size, "%s", "SESSION_STATE_ALL");
|
2022-08-03 19:46:43 +08:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < num; i++)
|
|
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
if (state_map[i].state_int & state_int)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
2022-08-26 17:33:03 +08:00
|
|
|
if (state_map[i].state_int == SESSION_STATE_ALL && state_int != SESSION_STATE_ALL)
|
2022-08-03 19:46:43 +08:00
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2022-08-26 17:33:03 +08:00
|
|
|
used += snprintf(buffer + used, size - used, "%s|", state_map[i].state_str);
|
2022-08-03 19:46:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (used)
|
|
|
|
|
{
|
|
|
|
|
buffer[used - 1] = '\0';
|
|
|
|
|
}
|
|
|
|
|
}
|