-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.c
More file actions
121 lines (99 loc) · 3.38 KB
/
Copy pathmain.c
File metadata and controls
121 lines (99 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// Created by Anton on 07.07.2021.
//
#include <fcntl.h>
#include <unistd.h>
#include <httpd.h>
#include <tty.h>
#include <editor.h>
#include <errno.h>
static struct tty pt;
int main(int c, char** v) {
struct tty_settings settings;
settings.terminal = "xterm-256color";
settings.rows = 43;
settings.cols = 132;
pt = start_terminal(settings);
if (pt.master < 0) return -1;
int term_fd = open("terminal_out.txt", O_WRONLY | O_CREAT | O_TRUNC);
if (term_fd < 0) {
printf("term_fd, errno %d\n", errno);
exit(1);
}
pt.term_log_fd = term_fd;
//dup2(fd, STDERR_FILENO);
serve_forever(3018, &pt);
return 0;
}
//1 - ok
//-1 - close connection
int route(struct request req) {
ROUTE_START()
GET("/") {
int len = 0;
char *html = get_html(&pt.ed, &len);
if (html == NULL) {
fprintf(stderr, "html is null\n");
http_code(req.fd, 500);
return KEEP_CONN;
} else {
// fprintf(stderr, "got html\n");
char lenstr[16];
int i = sprintf(lenstr, "%d", len);
lenstr[i] = 0;
http_code(req.fd, 200);
write_header(req.fd, "Content-Length", lenstr);
write_header(req.fd, "Content-Type", "text/html; charset=utf-8");
}
if (header_is_present("Origin")) {
write_header(req.fd, "Access-Control-Allow-Origin", "*"); //TODO: change it to one domain
}
write_conn(req.fd, "\r\n");
write_conn(req.fd, html);
free(html);
}
POST("/") {
if (req.dump_editor) {
printf("dump editor\n");
dump_editor(&pt.ed);
}
if (req.payload != NULL) {
if (strcmp("newline", req.payload) == 0) {
write_terminal("\r", 1, pt);
} else {
write_terminal(req.payload, req.payload_size, pt);
}
http_code(req.fd, 200);
if (header_is_present("Origin")) {
write_header(req.fd, "Access-Control-Allow-Origin", "*"); //TODO: change it to one domain
}
write_header(req.fd, "Content-Length", "2");
write_conn(req.fd, "\r\n");
write_conn(req.fd, "ok");
} else {
// http_code(req.fd, 400);
http_code(req.fd, 200);
write_header(req.fd, "Content-Length", "0");
if (header_is_present("Origin")) {
write_header(req.fd, "Access-Control-Allow-Origin", "*"); //TODO: change it to one domain
}
if (req.dump_editor) {
printf("dump editor ok\n");
}
write_conn(req.fd, "\r\n");
// write_conn(req.fd, "invalid data");
}
}
OPTIONS("/") {
http_code(req.fd, 200);
write_header(req.fd, "Access-Control-Allow-Origin", "*"); //TODO: change it to one domain and add methods, headers
write_header(req.fd, "Access-Control-Allow-Methods", "POST, GET, OPTIONS");
write_header(req.fd, "Access-Control-Allow-Headers", "Content-Type, x-dump-editor");
write_header(req.fd, "Access-Control-Max-Age", "86400");
write_header(req.fd, "Connection", "keep-alive");
write_header(req.fd, "Content-Length", "0");
write_conn(req.fd, "\r\n");
}
ROUTE_END()
return KEEP_CONN;
}