#ifndef OG_REST_H #define OG_REST_H #include #include 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_PROBE, 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_SETUP, OG_CMD_RUN_SCHEDULE, OG_CMD_IMAGES, OG_CMD_MAX }; enum og_cmd_result { OG_UNKNOWN = 0, OG_FAILURE = 1, OG_SUCCESS = 2, }; #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; enum og_cmd_type last_cmd; unsigned int last_cmd_id; enum og_cmd_result last_cmd_result; bool autorun; uint32_t speed; uint32_t seq; const char *shell_output; }; 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_WOL, OG_URI_SHELL_RUN, OG_URI_SHELL_OUTPUT, 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_PART_SETUP, OG_URI_RUN_SCHEDULE, OG_URI_TASK_RUN, OG_URI_SCHEDULE_CREATE, OG_URI_SCHEDULE_DELETE, OG_URI_SCHEDULE_UPDATE, OG_URI_SCHEDULE_GET, OG_URI_OGLIVE_LIST, OG_URI_OGLIVE_SET, OG_URI_CENTER_ADD, OG_URI_CENTER_DELETE, OG_URI_ROOM_ADD, OG_URI_ROOM_DELETE, OG_URI_ROOM_INFO, OG_URI_PROC_ADD, OG_URI_PROC_UPDATE, OG_URI_PROC_RUN, OG_URI_SCHEDULE_RUN, OG_URI_PROC_DEL, OG_URI_TASK_ADD, OG_URI_SERVER, OG_URI_STATS, OG_URI_FOLDER_ADD, OG_URI_FOLDER_DELETE, 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); struct og_cmd { uint32_t id; struct list_head list; uint32_t client_id; const char *ip; const char *mac; enum og_cmd_type type; enum og_rest_method method; struct og_msg_params params; json_t *json; struct timeval tv; }; const struct og_cmd *og_cmd_find(const char *client_ip); void og_cmd_free(const struct og_cmd *cmd); #endif