ogserver/src/rest.h

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