mirror of https://git.48k.eu/ogserver
184 lines
3.4 KiB
C
184 lines
3.4 KiB
C
#ifndef OG_REST_H
|
|
#define OG_REST_H
|
|
|
|
#include <ev.h>
|
|
#include <sys/time.h>
|
|
#include <netinet/in.h>
|
|
|
|
extern struct ev_loop *og_loop;
|
|
|
|
enum og_client_state {
|
|
OG_CLIENT_RECEIVING_HEADER = 0,
|
|
OG_CLIENT_RECEIVING_PAYLOAD,
|
|
OG_CLIENT_PROCESSING_REQUEST,
|
|
};
|
|
|
|
enum og_client_status {
|
|
OG_CLIENT_STATUS_OGLIVE,
|
|
OG_CLIENT_STATUS_BUSY,
|
|
OG_CLIENT_STATUS_VIRTUAL,
|
|
OG_CLIENT_STATUS_LINUX,
|
|
OG_CLIENT_STATUS_LINUX_SESSION,
|
|
OG_CLIENT_STATUS_WIN,
|
|
OG_CLIENT_STATUS_WIN_SESSION,
|
|
};
|
|
|
|
enum og_cmd_type {
|
|
OG_CMD_UNSPEC,
|
|
OG_CMD_WOL,
|
|
OG_CMD_SHELL_RUN,
|
|
OG_CMD_SESSION,
|
|
OG_CMD_POWEROFF,
|
|
OG_CMD_REFRESH,
|
|
OG_CMD_REBOOT,
|
|
OG_CMD_STOP,
|
|
OG_CMD_HARDWARE,
|
|
OG_CMD_SOFTWARE,
|
|
OG_CMD_IMAGE_CREATE,
|
|
OG_CMD_IMAGE_UPDATE,
|
|
OG_CMD_IMAGE_RESTORE,
|
|
OG_CMD_IMAGE_RESTRICT,
|
|
OG_CMD_SETUP,
|
|
OG_CMD_IMAGES,
|
|
OG_CMD_CACHE_DELETE,
|
|
OG_CMD_CACHE_FETCH,
|
|
OG_CMD_MAX
|
|
};
|
|
|
|
enum og_cmd_result {
|
|
OG_UNKNOWN = 0,
|
|
OG_FAILURE = 1,
|
|
OG_SUCCESS = 2,
|
|
};
|
|
|
|
struct og_cmd_ctx {
|
|
union {
|
|
struct {
|
|
uint32_t id;
|
|
} image;
|
|
struct {
|
|
uint32_t id;
|
|
uint32_t disk;
|
|
uint32_t part;
|
|
} image_restore;
|
|
};
|
|
};
|
|
|
|
#define OG_MSG_REQUEST_MAXLEN 131072
|
|
|
|
struct og_client {
|
|
struct list_head list;
|
|
struct ev_io io;
|
|
struct ev_timer timer;
|
|
struct sockaddr_in addr;
|
|
enum og_client_state state;
|
|
char buf[OG_MSG_REQUEST_MAXLEN];
|
|
unsigned int buf_len;
|
|
unsigned int msg_len;
|
|
bool agent;
|
|
int content_length;
|
|
char auth_token[64];
|
|
enum og_client_status status;
|
|
struct {
|
|
enum og_cmd_type type;
|
|
unsigned int id;
|
|
enum og_cmd_result result;
|
|
struct og_cmd_ctx ctx;
|
|
} last_cmd;
|
|
uint32_t speed;
|
|
uint32_t seq;
|
|
struct {
|
|
const char *cmd;
|
|
const char *output;
|
|
uint32_t retcode;
|
|
time_t tstamp;
|
|
} shell;
|
|
};
|
|
|
|
void og_client_add(struct og_client *cli);
|
|
struct og_client *__og_client_find(const struct in_addr *addr);
|
|
|
|
static inline int og_client_socket(const struct og_client *cli)
|
|
{
|
|
return cli->io.fd;
|
|
}
|
|
|
|
#include "json.h"
|
|
|
|
int og_client_state_process_payload_rest(struct og_client *cli);
|
|
|
|
enum og_rest_uri {
|
|
OG_URI_UNKNOWN = 0,
|
|
OG_URI_CLIENTS,
|
|
OG_URI_CLIENT_REPO,
|
|
OG_URI_CLIENT_SETUP,
|
|
OG_URI_CLIENT_SERVER,
|
|
OG_URI_CLIENT_INFO,
|
|
OG_URI_CLIENT_ADD,
|
|
OG_URI_CLIENT_UPDATE,
|
|
OG_URI_CLIENT_DELETE,
|
|
OG_URI_CLIENT_MOVE,
|
|
OG_URI_WOL,
|
|
OG_URI_SHELL_RUN,
|
|
OG_URI_SHELL_OUTPUT,
|
|
OG_URI_SHELL_LIST,
|
|
OG_URI_SESSION,
|
|
OG_URI_SCOPES,
|
|
OG_URI_POWEROFF,
|
|
OG_URI_REBOOT,
|
|
OG_URI_BOOT_MODE,
|
|
OG_URI_STOP,
|
|
OG_URI_REFRESH,
|
|
OG_URI_HARDWARE,
|
|
OG_URI_SOFTWARE,
|
|
OG_URI_REPO,
|
|
OG_URI_REPO_ADD,
|
|
OG_URI_REPO_UPDATE,
|
|
OG_URI_REPO_DELETE,
|
|
OG_URI_IMAGES,
|
|
OG_URI_IMAGE_CREATE,
|
|
OG_URI_IMAGE_UPDATE,
|
|
OG_URI_IMAGE_RESTORE,
|
|
OG_URI_IMAGE_DELETE,
|
|
OG_URI_IMAGE_RESTRICT,
|
|
OG_URI_CACHE_LIST,
|
|
OG_URI_EFI,
|
|
OG_URI_CACHE_DELETE,
|
|
OG_URI_CACHE_FETCH,
|
|
OG_URI_PART_SETUP,
|
|
OG_URI_OGLIVE_LIST,
|
|
OG_URI_OGLIVE_ADD,
|
|
OG_URI_OGLIVE_DELETE,
|
|
OG_URI_OGLIVE_SET,
|
|
OG_URI_OGLIVE_DEFAULT,
|
|
OG_URI_CENTER_ADD,
|
|
OG_URI_CENTER_UPDATE,
|
|
OG_URI_CENTER_DELETE,
|
|
OG_URI_CENTER_INFO,
|
|
OG_URI_ROOM_ADD,
|
|
OG_URI_ROOM_UPDATE,
|
|
OG_URI_ROOM_DELETE,
|
|
OG_URI_ROOM_INFO,
|
|
OG_URI_SERVER,
|
|
OG_URI_STATS,
|
|
OG_URI_FOLDER_ADD,
|
|
OG_URI_FOLDER_DELETE,
|
|
OG_URI_FOLDER_UPDATE,
|
|
OG_URI_MAX
|
|
};
|
|
|
|
enum og_rest_method {
|
|
OG_METHOD_GET = 0,
|
|
OG_METHOD_POST,
|
|
OG_METHOD_DELETE,
|
|
OG_METHOD_NO_HTTP
|
|
};
|
|
|
|
int og_send_request(enum og_rest_method method, enum og_cmd_type type,
|
|
const struct og_msg_params *params,
|
|
const json_t *data, const struct og_cmd_ctx *ctx);
|
|
|
|
int og_dbi_scope_get(struct og_dbi *dbi, json_t *array);
|
|
|
|
#endif
|