Continued restructing.

This commit is contained in:
barant committed 2019-09-13 09:16:55 -07:00
1 parent 5e5e626d28
commit a46db126e9
294 files changed
+2455 -2189

No files matched your search

+33 -23
View File
@@ -6,8 +6,8 @@
namespace core {
Socket::Socket(EPoll &ePoll) : ePoll(ePoll) {
Log(LOG_DEBUG_2) << "BMASocket object created.";
Log(LOG_DEBUG_3) << "Buffer size set to default (4096).";
coreutils::Log(coreutils::LOG_DEBUG_2) << "BMASocket object created.";
coreutils::Log(coreutils::LOG_DEBUG_3) << "Buffer size set to default (4096).";
buffer = (char *)malloc(4096);
length = 4096;
}
@@ -19,9 +19,9 @@ namespace core {
}
void Socket::setDescriptor(int descriptor) {
Log(LOG_DEBUG_3) << "Descriptor set to " << descriptor << " for Socket.";
coreutils::Log(coreutils::LOG_DEBUG_3) << "Descriptor set to " << descriptor << " for Socket.";
if(descriptor < 3)
throw Exception("Descriptor out of range", __FILE__, __LINE__);
throw coreutils::Exception("Descriptor out of range", __FILE__, __LINE__);
this->descriptor = descriptor;
onTLSInit();
}
@@ -46,44 +46,54 @@ namespace core {
}
void Socket::eventReceived(struct epoll_event event) {
if(event.events & EPOLLRDHUP) {
Log(LOG_DEBUG_2) << "Socket " << descriptor << " received disconnect from client.";
readHangup = true;
enable(false);
shutdown();
return;
}
if(event.events & EPOLLIN)
receiveData(buffer, length);
receiveData(buffer, length);
if(event.events & EPOLLOUT)
writeSocket();
if(event.events & EPOLLHUP) {
shutdown();
return;
}
enable(true);
}
void Socket::enable(bool mode) {
if(mode) {
if(fifo.empty())
active ? resetRead(): setRead();
else
active ? resetReadWrite(5): setReadWrite();
active = true;
if(fifo.empty()) {
if(!readHangup) {
active ? resetRead(): setRead();
}
}
else {
active ? resetReadWrite(): setReadWrite();
}
active = true;
}
else
clear();
clear();
}
void Socket::receiveData(char *buffer, int bufferLength) {
if(bufferLength <= 0)
throw Exception("Request to receive data with a zero buffer length.", __FILE__, __LINE__, -1);
throw coreutils::Exception("Request to receive data with a zero buffer length.", __FILE__, __LINE__, -1);
int len;
int error = -1;
if((len = ::read(getDescriptor(), buffer, bufferLength)) >= 0)
onDataReceived(std::string(buffer, len));
onDataReceived(std::string(buffer, len));
else {
error = errno;
@@ -101,7 +111,7 @@ namespace core {
break;
default:
throw Exception("Error in read of data from socket.", __FILE__, __LINE__, error);
throw coreutils::Exception("Error in read of data from socket.", __FILE__, __LINE__, error);
}
}
}
@@ -112,9 +122,9 @@ namespace core {
void Socket::writeSocket() {
lock.lock();
if(fifo.size() > 0) {
::write(descriptor, fifo.front().c_str(), fifo.front().length());
fifo.pop();
enable(true);
::write(descriptor, fifo.front().c_str(), fifo.front().length());
fifo.pop();
enable(true);
}
lock.unlock();
}
@@ -163,7 +173,7 @@ namespace core {
epoll_ctl(ePoll.getDescriptor(), EPOLL_CTL_MOD, descriptor, &event);
}
void Socket::resetReadWrite(int x) {
void Socket::resetReadWrite() {
event.data.fd = descriptor;
event.events = EPOLLIN | EPOLLOUT | EPOLLONESHOT | EPOLLRDHUP | EPOLLET;
epoll_ctl(ePoll.getDescriptor(), EPOLL_CTL_MOD, descriptor, &event);
@@ -174,7 +184,7 @@ namespace core {
}
void Socket::shutdown() {
Log (LOG_DEBUG_2) << "Shutdown requested on socket " << descriptor << ".";
coreutils::Log(coreutils::LOG_DEBUG_2) << "Shutdown requested on socket " << descriptor << ".";
shutDown = true;
enable(false);
delete this;