-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.cpp
182 lines (139 loc) · 4.92 KB
/
test.cpp
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include "aex/net.hpp"
#include "aex/proc.hpp"
using namespace AEX;
struct blocc {
Net::Socket_SP socket;
};
void test_server_handle(blocc* b) {
auto sock2 = b->socket;
delete b;
char buffer[4];
sock2->receive(buffer, 4, 0);
sock2->send("HTTP/1.1 200 OK\r\nContent-Length: 16\r\n\r\n<h1>works</h1>\r\n", 56, 0);
Proc::Thread::sleep(1000);
sock2->shutdown(Net::SHUT_RDWR);
Proc::Thread::sleep(1000);
return;
}
extern "C" void context_test();
void test_client() {
auto sock_try = Net::Socket::create(Net::AF_INET, Net::SOCK_STREAM, Net::IPROTO_TCP);
auto sock = sock_try.value;
auto error = sock->connect(Net::ipv4_addr(127, 0, 0, 1), 7654);
if (error) {
printk("retrying client\n");
sock->connect(Net::ipv4_addr(127, 0, 0, 1), 7654);
}
else
printk("connected client\n");
int total = 0;
char buffer[64];
auto ret = sock->send(
"GET /login HTTP/1.1\r\nHost: 127.0.0.1\r\ncookie: "
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n\r\n",
745, 0);
if (!ret)
printk("socket send error: %s\n", strerror(ret));
while (true) {
auto ret = sock->receive(buffer, 63, 0);
if (!ret) {
printk("socket receive error: %s\n", strerror(ret));
break;
}
total += ret.value;
if (ret.value == 0) {
printk("\nnothing more to read\n");
break;
}
buffer[ret.value] = '\0';
printk("%s", buffer, ret.value);
if (total == 6165)
break;
}
sock->shutdown(Net::SHUT_RDWR);
Proc::Thread::sleep(5000);
sock->close();
}
void test_server() {
auto sock_try = Net::Socket::create(Net::AF_INET, Net::SOCK_STREAM, Net::IPROTO_TCP);
if (!sock_try) {
printk("failed to create() the socket: %s\n", strerror(sock_try));
return;
}
auto sock = sock_try.value;
auto error = sock->bind(Net::ipv4_addr(192, 168, 0, 23), 7654);
if (error) {
printk("failed to bind() the socket: %s\n", strerror(error));
return;
}
error = sock->listen(2);
if (error) {
printk("failed to listen() the socket: %s\n", strerror(error));
return;
}
for (size_t i = 0; i < 8; i++) {
auto sock2_try = sock->accept();
if (!sock2_try) {
printk("failed to accept() the socket: %s\n", strerror(sock2_try));
return;
}
auto sock2 = sock2_try.value;
auto b = new blocc();
b->socket = sock2;
printk("accepted\n");
auto thread = Proc::threaded_call(test_server_handle, b);
thread->detach();
}
Proc::Thread::sleep(1250);
}
void test_udp_client() {
auto sock_try = Net::Socket::create(Net::AF_INET, Net::SOCK_DGRAM, Net::IPROTO_UDP);
if (!sock_try) {
printk("failed to create udp socket: %s\n", strerror(sock_try));
return;
}
auto sock = sock_try.value;
auto error = sock->connect(Net::ipv4_addr(255, 255, 255, 255), 27015);
if (error) {
printk("failed to connect udp socket: %s\n", strerror(error));
return;
}
for (size_t i = 0; i < 5; i++) {
auto send_try = sock->send("\xFF\xFF\xFF\xFFTSource Engine Query", 25, 0);
if (!send_try) {
printk("failed to send via udp socket: %s\n", strerror(send_try));
return;
}
char buffer[64] = {};
auto receive_try = sock->receive(buffer, sizeof(buffer) - 1, 0);
if (!receive_try) {
printk("failed to receive via udp socket: %s\n", strerror(receive_try));
return;
}
printk("udp received: %s\n", buffer);
Proc::Thread::sleep(2500);
}
}
void apple() {
auto sock_try = Net::Socket::create(Net::AF_INET, Net::SOCK_STREAM, Net::IPROTO_TCP);
auto sock = sock_try.value;
auto error = sock->connect(Net::ipv4_addr(192, 168, 0, 20), 17267);
if (error) {
kpanic("aaa");
}
auto tty_wr = FS::File::open("/dev/tty0", FS::O_WR);
AEX_ASSERT(tty_wr);
char buffer[2048];
while (true) {
auto aaa = sock->receive(buffer, 2048, 0);
tty_wr.value->write(buffer, aaa.value);
}
}