/*************************************************************************** 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(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; }