Improving RTTYS

This commit is contained in:
stephb9959
2022-04-20 21:22:21 -07:00
parent caf53ef6ba
commit ecf28c596b

View File

@@ -28,45 +28,53 @@ namespace OpenWifi {
socket().setNoDelay(true); socket().setNoDelay(true);
socket().setReceiveBufferSize(64000); socket().setReceiveBufferSize(64000);
Poco::Timespan timeOut(10,0);
while(running_) { while(running_) {
int received = socket().receiveBytes(inBuf_); if(socket().poll(timeOut,Poco::Net::Socket::SELECT_READ) == false) {
while(!inBuf_.isEmpty()) {
std::size_t msg_len;
if (waiting_for_bytes_ == 0) {
u_char header[3]{0};
inBuf_.read((char *)&header[0], 3);
last_command_ = header[0];
msg_len = header[1] * 256 + header[2];
} else {
msg_len = received;
}
switch (last_command_) { } else {
case msgTypeRegister: int received = socket().receiveBytes(inBuf_);
return do_msgTypeRegister(msg_len); std::cout << "Received " << received << " bytes." << std::endl;
case msgTypeLogin: while (!inBuf_.isEmpty()) {
return do_msgTypeLogin(msg_len); std::size_t msg_len;
case msgTypeLogout: if (waiting_for_bytes_ == 0) {
return do_msgTypeLogout(msg_len); u_char header[3]{0};
case msgTypeTermData: inBuf_.read((char *)&header[0], 3);
return do_msgTypeTermData(msg_len); last_command_ = header[0];
case msgTypeWinsize: msg_len = header[1] * 256 + header[2];
return do_msgTypeWinsize(msg_len); } else {
case msgTypeCmd: msg_len = received;
return do_msgTypeCmd(msg_len); }
case msgTypeHeartbeat:
return do_msgTypeHeartbeat(msg_len); switch (last_command_) {
case msgTypeFile: case msgTypeRegister:
return do_msgTypeFile(msg_len); return do_msgTypeRegister(msg_len);
case msgTypeHttp: case msgTypeLogin:
return do_msgTypeHttp(msg_len); return do_msgTypeLogin(msg_len);
case msgTypeAck: case msgTypeLogout:
return do_msgTypeAck(msg_len); return do_msgTypeLogout(msg_len);
case msgTypeMax: case msgTypeTermData:
return do_msgTypeMax(msg_len); return do_msgTypeTermData(msg_len);
default: case msgTypeWinsize:
std::cout << conn_id_ << ": Unknown command: " << (int)last_command_ << std::endl; return do_msgTypeWinsize(msg_len);
case msgTypeCmd:
return do_msgTypeCmd(msg_len);
case msgTypeHeartbeat:
return do_msgTypeHeartbeat(msg_len);
case msgTypeFile:
return do_msgTypeFile(msg_len);
case msgTypeHttp:
return do_msgTypeHttp(msg_len);
case msgTypeAck:
return do_msgTypeAck(msg_len);
case msgTypeMax:
return do_msgTypeMax(msg_len);
default:
std::cout << conn_id_ << ": Unknown command: " << (int)last_command_
<< std::endl;
}
} }
} }
} }