mirror of
https://github.com/osnr/TabFS.git
synced 2024-05-13 11:06:34 +02:00
Groundwork for response parsing.
This commit is contained in:
parent
4ca75894c1
commit
5c2b15068e
|
@ -3,9 +3,13 @@ const ws = new WebSocket("ws://localhost:8888");
|
|||
ws.onmessage = function(event) {
|
||||
const req = JSON.parse(event.data);
|
||||
|
||||
const response = {
|
||||
names: [".", "..", "hi.txt"]
|
||||
};
|
||||
let response;
|
||||
if (req.op === "readdir") {
|
||||
response = {
|
||||
op: "readdir",
|
||||
names: [".", "..", "hi.txt"]
|
||||
};
|
||||
}
|
||||
|
||||
ws.send(JSON.stringify(response));
|
||||
};
|
||||
|
|
41
fs/hello.c
41
fs/hello.c
|
@ -25,8 +25,8 @@ struct wby_server server;
|
|||
struct wby_con *con;
|
||||
|
||||
typedef struct response_readdir_t {
|
||||
char **names;
|
||||
size_t num_names;
|
||||
char **entries;
|
||||
size_t num_entries;
|
||||
} response_readdir_t;
|
||||
|
||||
response_readdir_t *response;
|
||||
|
@ -74,30 +74,33 @@ hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
|
|||
|
||||
// send [READDIR, path] to the websocket handler
|
||||
{
|
||||
char *msg;
|
||||
char *data;
|
||||
{
|
||||
cJSON *req = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(req, "op", "readdir");
|
||||
cJSON_AddStringToObject(req, "path", path);
|
||||
|
||||
msg = cJSON_Print(req);
|
||||
printf("%s\n", msg);
|
||||
data = cJSON_Print(req);
|
||||
printf("%s\n", data);
|
||||
|
||||
cJSON_Delete(req);
|
||||
}
|
||||
|
||||
wby_frame_begin(con, WBY_WSOP_TEXT_FRAME);
|
||||
wby_write(con, msg, strlen(msg));
|
||||
wby_write(con, data, strlen(data));
|
||||
wby_frame_end(con);
|
||||
|
||||
free(msg);
|
||||
free(data);
|
||||
}
|
||||
|
||||
if (response) free(response);
|
||||
response = NULL;
|
||||
do {
|
||||
wby_update(&server);
|
||||
} while (response == NULL);
|
||||
|
||||
printf("response: %d files\n", response->num_entries);
|
||||
|
||||
filler(buf, ".", NULL, 0); /* Current directory (.) */
|
||||
filler(buf, "..", NULL, 0); /* Parent directory (..) */
|
||||
filler(buf, file_path + 1, NULL, 0); /* The only file we have. */
|
||||
|
@ -159,12 +162,19 @@ websocket_connected(struct wby_con *connection, void *userdata)
|
|||
static int
|
||||
websocket_frame(struct wby_con *connection, const struct wby_frame *frame, void *userdata)
|
||||
{
|
||||
unsigned char data[1024] = {0};
|
||||
|
||||
int i = 0;
|
||||
printf("WebSocket frame incoming\n");
|
||||
printf(" Frame OpCode: %d\n", frame->opcode);
|
||||
printf(" Final frame?: %s\n", (frame->flags & WBY_WSF_FIN) ? "yes" : "no");
|
||||
printf(" Masked? : %s\n", (frame->flags & WBY_WSF_MASKED) ? "yes" : "no");
|
||||
printf(" Data Length : %d\n", (int) frame->payload_length);
|
||||
|
||||
if ((unsigned long) frame->payload_length > sizeof(data)) {
|
||||
printf("Data too long!\n");
|
||||
}
|
||||
|
||||
while (i < frame->payload_length) {
|
||||
unsigned char buffer[16];
|
||||
int remain = frame->payload_length - i;
|
||||
|
@ -182,8 +192,25 @@ websocket_frame(struct wby_con *connection, const struct wby_frame *frame, void
|
|||
for (k = 0; k < read_size; ++k)
|
||||
printf("%c", isprint(buffer[k]) ? buffer[k] : '?');
|
||||
printf("\n");
|
||||
for (k = 0; k < read_size; ++k)
|
||||
data[i + k] = buffer[k];
|
||||
i += (int)read_size;
|
||||
}
|
||||
|
||||
if ((int) strlen((const char *) data) != frame->payload_length) {
|
||||
printf("Null in data! [%s]\n", data);
|
||||
}
|
||||
|
||||
cJSON *ret = cJSON_Parse((const char *) data);
|
||||
cJSON *op = cJSON_GetObjectItemCaseSensitive(ret, "op");
|
||||
if (strcmp(op->valuestring, "readdir") == 0) {
|
||||
response = malloc(sizeof(response));
|
||||
response->entries = malloc(sizeof(char *) * 10);
|
||||
response->entries[0] = "a";
|
||||
response->entries[1] = "b";
|
||||
response->num_entries = 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue