182 lines
3.8 KiB
C++
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;
|
|
}
|