refactor: TCPSocket::EJobResult => enum class TCPSocket::JobResult
This commit is contained in:
parent
32e6a84a6f
commit
94be5f7498
4 changed files with 39 additions and 36 deletions
|
|
@ -109,8 +109,9 @@ void SecureSocket::secureAccept()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
TCPSocket::EJobResult SecureSocket::doRead()
|
TCPSocket::JobResult SecureSocket::doRead()
|
||||||
{
|
{
|
||||||
|
using enum JobResult;
|
||||||
static uint8_t buffer[4096];
|
static uint8_t buffer[4096];
|
||||||
memset(buffer, 0, sizeof(buffer));
|
memset(buffer, 0, sizeof(buffer));
|
||||||
int bytesRead = 0;
|
int bytesRead = 0;
|
||||||
|
|
@ -119,12 +120,12 @@ TCPSocket::EJobResult SecureSocket::doRead()
|
||||||
if (isSecureReady()) {
|
if (isSecureReady()) {
|
||||||
status = secureRead(buffer, sizeof(buffer), bytesRead);
|
status = secureRead(buffer, sizeof(buffer), bytesRead);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
return kBreak;
|
return Break;
|
||||||
} else if (status == 0) {
|
} else if (status == 0) {
|
||||||
return kNew;
|
return New;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return kRetry;
|
return Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bytesRead > 0) {
|
if (bytesRead > 0) {
|
||||||
|
|
@ -140,7 +141,7 @@ TCPSocket::EJobResult SecureSocket::doRead()
|
||||||
|
|
||||||
status = secureRead(buffer, sizeof(buffer), bytesRead);
|
status = secureRead(buffer, sizeof(buffer), bytesRead);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
return kBreak;
|
return Break;
|
||||||
}
|
}
|
||||||
} while (bytesRead > 0 || status > 0);
|
} while (bytesRead > 0 || status > 0);
|
||||||
|
|
||||||
|
|
@ -158,14 +159,15 @@ TCPSocket::EJobResult SecureSocket::doRead()
|
||||||
m_connected = false;
|
m_connected = false;
|
||||||
}
|
}
|
||||||
m_readable = false;
|
m_readable = false;
|
||||||
return kNew;
|
return New;
|
||||||
}
|
}
|
||||||
|
|
||||||
return kRetry;
|
return Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCPSocket::EJobResult SecureSocket::doWrite()
|
TCPSocket::JobResult SecureSocket::doWrite()
|
||||||
{
|
{
|
||||||
|
using enum JobResult;
|
||||||
static bool s_retry = false;
|
static bool s_retry = false;
|
||||||
static int s_retrySize = 0;
|
static int s_retrySize = 0;
|
||||||
static int s_staticBufferSize = 0;
|
static int s_staticBufferSize = 0;
|
||||||
|
|
@ -190,7 +192,7 @@ TCPSocket::EJobResult SecureSocket::doWrite()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bufferSize == 0) {
|
if (bufferSize == 0) {
|
||||||
return kRetry;
|
return Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSecureReady()) {
|
if (isSecureReady()) {
|
||||||
|
|
@ -199,22 +201,22 @@ TCPSocket::EJobResult SecureSocket::doWrite()
|
||||||
s_retry = false;
|
s_retry = false;
|
||||||
bufferSize = 0;
|
bufferSize = 0;
|
||||||
} else if (status < 0) {
|
} else if (status < 0) {
|
||||||
return kBreak;
|
return Break;
|
||||||
} else if (status == 0) {
|
} else if (status == 0) {
|
||||||
s_retry = true;
|
s_retry = true;
|
||||||
s_retrySize = bufferSize;
|
s_retrySize = bufferSize;
|
||||||
return kNew;
|
return New;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return kRetry;
|
return Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bytesWrote > 0) {
|
if (bytesWrote > 0) {
|
||||||
discardWrittenData(bytesWrote);
|
discardWrittenData(bytesWrote);
|
||||||
return kNew;
|
return New;
|
||||||
}
|
}
|
||||||
|
|
||||||
return kRetry;
|
return Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SecureSocket::secureRead(void *buffer, int size, int &read)
|
int SecureSocket::secureRead(void *buffer, int size, int &read)
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,8 @@ public:
|
||||||
void secureAccept();
|
void secureAccept();
|
||||||
int secureRead(void *buffer, int size, int &read);
|
int secureRead(void *buffer, int size, int &read);
|
||||||
int secureWrite(const void *buffer, int size, int &wrote);
|
int secureWrite(const void *buffer, int size, int &wrote);
|
||||||
EJobResult doRead() override;
|
JobResult doRead() override;
|
||||||
EJobResult doWrite() override;
|
JobResult doWrite() override;
|
||||||
void initSsl(bool server);
|
void initSsl(bool server);
|
||||||
bool loadCertificates(const std::string &CertFile);
|
bool loadCertificates(const std::string &CertFile);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,7 @@ void TCPSocket::init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TCPSocket::EJobResult TCPSocket::doRead()
|
TCPSocket::JobResult TCPSocket::doRead()
|
||||||
{
|
{
|
||||||
uint8_t buffer[4096];
|
uint8_t buffer[4096];
|
||||||
memset(buffer, 0, sizeof(buffer));
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
|
@ -332,13 +332,13 @@ TCPSocket::EJobResult TCPSocket::doRead()
|
||||||
m_connected = false;
|
m_connected = false;
|
||||||
}
|
}
|
||||||
m_readable = false;
|
m_readable = false;
|
||||||
return kNew;
|
return JobResult::New;
|
||||||
}
|
}
|
||||||
|
|
||||||
return kRetry;
|
return JobResult::Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCPSocket::EJobResult TCPSocket::doWrite()
|
TCPSocket::JobResult TCPSocket::doWrite()
|
||||||
{
|
{
|
||||||
// write data
|
// write data
|
||||||
uint32_t bufferSize = 0;
|
uint32_t bufferSize = 0;
|
||||||
|
|
@ -350,10 +350,10 @@ TCPSocket::EJobResult TCPSocket::doWrite()
|
||||||
|
|
||||||
if (bytesWrote > 0) {
|
if (bytesWrote > 0) {
|
||||||
discardWrittenData(bytesWrote);
|
discardWrittenData(bytesWrote);
|
||||||
return kNew;
|
return JobResult::New;
|
||||||
}
|
}
|
||||||
|
|
||||||
return kRetry;
|
return JobResult::Retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPSocket::setJob(ISocketMultiplexerJob *job)
|
void TCPSocket::setJob(ISocketMultiplexerJob *job)
|
||||||
|
|
@ -488,6 +488,7 @@ ISocketMultiplexerJob *TCPSocket::serviceConnecting(ISocketMultiplexerJob *job,
|
||||||
ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, bool read, bool write, bool error)
|
ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, bool read, bool write, bool error)
|
||||||
{
|
{
|
||||||
using enum EventTypes;
|
using enum EventTypes;
|
||||||
|
using enum JobResult;
|
||||||
Lock lock(&m_mutex);
|
Lock lock(&m_mutex);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
|
|
@ -496,8 +497,8 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b
|
||||||
return newJob();
|
return newJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
EJobResult readResult = kRetry;
|
JobResult readResult = Retry;
|
||||||
EJobResult writeResult = kRetry;
|
JobResult writeResult = Retry;
|
||||||
|
|
||||||
if (write) {
|
if (write) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -511,19 +512,19 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b
|
||||||
sendEvent(SocketDisconnected);
|
sendEvent(SocketDisconnected);
|
||||||
m_connected = false;
|
m_connected = false;
|
||||||
}
|
}
|
||||||
writeResult = kNew;
|
writeResult = New;
|
||||||
} catch (XArchNetworkDisconnected &) {
|
} catch (XArchNetworkDisconnected &) {
|
||||||
// stream hungup
|
// stream hungup
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
sendEvent(SocketDisconnected);
|
sendEvent(SocketDisconnected);
|
||||||
writeResult = kNew;
|
writeResult = New;
|
||||||
} catch (XArchNetwork &e) {
|
} catch (XArchNetwork &e) {
|
||||||
// other write error
|
// other write error
|
||||||
LOG((CLOG_WARN "error writing socket: %s", e.what()));
|
LOG((CLOG_WARN "error writing socket: %s", e.what()));
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
sendEvent(StreamOutputError);
|
sendEvent(StreamOutputError);
|
||||||
sendEvent(SocketDisconnected);
|
sendEvent(SocketDisconnected);
|
||||||
writeResult = kNew;
|
writeResult = New;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -534,17 +535,17 @@ ISocketMultiplexerJob *TCPSocket::serviceConnected(ISocketMultiplexerJob *job, b
|
||||||
// stream hungup
|
// stream hungup
|
||||||
sendEvent(SocketDisconnected);
|
sendEvent(SocketDisconnected);
|
||||||
onDisconnected();
|
onDisconnected();
|
||||||
readResult = kNew;
|
readResult = New;
|
||||||
} catch (XArchNetwork &e) {
|
} catch (XArchNetwork &e) {
|
||||||
// ignore other read error
|
// ignore other read error
|
||||||
LOG((CLOG_WARN "error reading socket: %s", e.what()));
|
LOG((CLOG_WARN "error reading socket: %s", e.what()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readResult == kBreak || writeResult == kBreak)
|
if (readResult == Break || writeResult == Break)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
if (writeResult == kNew || readResult == kNew)
|
if (writeResult == New || readResult == New)
|
||||||
return newJob();
|
return newJob();
|
||||||
|
|
||||||
return job;
|
return job;
|
||||||
|
|
|
||||||
|
|
@ -59,11 +59,11 @@ public:
|
||||||
virtual ISocketMultiplexerJob *newJob();
|
virtual ISocketMultiplexerJob *newJob();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum EJobResult
|
enum class JobResult
|
||||||
{
|
{
|
||||||
kBreak = -1, //!< Break the Job chain
|
Break = -1, //!< Break the Job chain
|
||||||
kRetry, //!< Retry the same job
|
Retry, //!< Retry the same job
|
||||||
kNew //!< Require a new job
|
New //!< Require a new job
|
||||||
};
|
};
|
||||||
|
|
||||||
ArchSocket getSocket()
|
ArchSocket getSocket()
|
||||||
|
|
@ -74,8 +74,8 @@ protected:
|
||||||
{
|
{
|
||||||
return m_events;
|
return m_events;
|
||||||
}
|
}
|
||||||
virtual EJobResult doRead();
|
virtual JobResult doRead();
|
||||||
virtual EJobResult doWrite();
|
virtual JobResult doWrite();
|
||||||
|
|
||||||
void setJob(ISocketMultiplexerJob *);
|
void setJob(ISocketMultiplexerJob *);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue