Files
interactive/gts/cc_statd/src/Work.cpp
T
2026-08-07 17:38:18 +09:00

182 lines
3.8 KiB
C++

/***************************************************************************
Work Class (Work.cpp)
-----------------------------------------
begin : 2013/07/04
copyright : (C) 2013 Solbox Inc.
author : Development 1 Team
- 2013/07/04 - 1st dadamin
email : dev1@solbox.com
version : 3.2.0
CopyRight(C) 2005 Solbox Inc. All Rights reserved.
Redistribution and use in source and binary forms, with or with out
modification, are not permitted in outside of Solbox Inc.
***************************************************************************/
#include "cc_statd.h"
#include "Work.h"
#include "Configs.h"
#include "Logger.h"
#define SOCKET_TIMEOUT 5
// class CWorkFile
CWorkFile::CWorkFile()
{
}
CWorkFile::CWorkFile(string & path)
: m_path(path)
{
}
CWorkFile::~CWorkFile()
{
DeleteWorkFile();
}
void CWorkFile::DeleteWorkFile()
{
::unlink(m_path.c_str());
}
bool CWorkFile::ReadWorkFile(string & data)
{
ifstream ifs;
ifs.open(m_path.c_str());
if (ifs.is_open())
{
string t;
while(!ifs.eof())
{
getline(ifs, t);
data.append(t);
t.clear();
}
ifs.close();
ostringstream msg;
msg << "Read File : Data";
LOGACONSOLE(LDBG, msg);
msg << "################ Data Start ################";
LOGACONSOLE(LDBG, msg);
msg << "################ Text ################" << endl;
msg << data;
LOGACONSOLE(LDBG, msg);
msg << "################ Binary ################";
LOGACONSOLE(LDEV, msg);
_LOG_HEX_(LDEV, data.c_str(), data.size());
msg << "################ Data End ################";
LOGACONSOLE(LDBG, msg);
}
else
{
// show message:
LOG(LERR,"Error opening file %s", m_path.c_str());
return false;
}
return true;
}
// class CWorkSocket
CWorkSocket::CWorkSocket()
: CBaseSocket( SOCKET_NOT_VALID )
{
}
CWorkSocket::CWorkSocket(const int & sfd)
: CBaseSocket( sfd )
{
}
CWorkSocket::~CWorkSocket()
{
Close();
}
int CWorkSocket::SetOption()
{
if( m_sock == SOCKET_NOT_VALID )
return -1;
int result = 0;
/* Time wait ¹æÁö */
struct linger ling;
ling.l_onoff = 1;
ling.l_linger = 10; /* 0 for abortive disconnect */
result = setsockopt(m_sock, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
if( result != 0 )
{
int errorNum = errno;
LOG( LERR, "SO_LINGER set error.[%d][%s]", errorNum, strerror(errorNum));
return -1;
}
struct timeval tv_timeo = { SOCKET_TIMEOUT, 0 };
/* Recv Timeout ¼³Á¤. */
result = setsockopt( m_sock, SOL_SOCKET, SO_RCVTIMEO, &tv_timeo, sizeof(tv_timeo));
if( result != 0 )
{
int errorNum = errno;
LOG( LERR, "SO_RCVTIMEO set error.[%d][%s]", errorNum, strerror(errorNum));
return -1;
}
/* Send Timeout ¼³Á¤. */
result = setsockopt( m_sock, SOL_SOCKET, SO_SNDTIMEO, &tv_timeo, sizeof(tv_timeo));
if( result != 0 )
{
int errorNum = errno;
LOG( LERR, "SO_SNDTIMEO set error.[%d][%s]", errorNum, strerror(errorNum));
return -1;
}
return 0;
}
ssize_t CWorkSocket::ReadHead(int & bodysize)
{
ssize_t r = 0;
r = ReadNTimeout(&bodysize, sizeof(bodysize));
if(r > 0)
bodysize = ntohl(bodysize);
ostringstream msg;
msg << "Read Socket : Header Data [" << bodysize << "]";
LOGACONSOLE(LDBG, msg);
return r;
}
ssize_t CWorkSocket::ReadBody(string & data)
{
ssize_t r = 0;
r = ReadNTimeout( const_cast<char*>(data.c_str()), data.size());
ostringstream msg;
msg << "Read Socket : Body Data";
LOGACONSOLE(LDBG, msg);
msg << "################ Data Start ################";
LOGACONSOLE(LDBG, msg);
msg << "################ Text ################" << endl;
msg << data;
LOGACONSOLE(LDBG, msg);
msg << "################ Binary ################";
LOGACONSOLE(LDEV, msg);
_LOG_HEX_(LDEV, data.c_str(), data.size());
msg << "################ Data End ################";
LOGACONSOLE(LDBG, msg);
return r;
}