| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // SendSocket.cpp: implementation of the CSendSocket class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "cp_main.h"
- #include "SendSocket.h"
- #include "TextConvert.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CSendSocket::CSendSocket()
- {
- m_pEncryptor = new CEncryption;
- m_Connection = NULL;
- }
- CSendSocket::~CSendSocket()
- {
- delete m_pEncryptor;
- m_pEncryptor = NULL;
- }
- BOOL CSendSocket::SendCSendData(CSendInfo &data, MyEnums::eSendType type)
- {
- data.m_Type = type;
- return SendExactSize((char *)&data, sizeof(CSendInfo), true);
- }
- BOOL CSendSocket::SendExactSize(char *pData, long lLength, bool bEncrypt)
- {
- BOOL bRet = FALSE;
- if(!m_pEncryptor && bEncrypt)
- {
- ASSERT(!"Encryption not initialized");
- LogSendRecieveInfo("SendExactSize::Encryption not initialized");
- return bRet;
- }
- LogSendRecieveInfo(StrF(_T("START SendExactSize Total %d"), lLength));
- UCHAR* pOutput = (UCHAR*)pData;
- int nLenOutput = lLength;
- long lBytesRead = 0;
- if(bEncrypt == false || m_pEncryptor->Encrypt((UCHAR*)pData, lLength, g_Opt.m_csPassword, pOutput, nLenOutput))
- {
- long lExpected = nLenOutput;
- while(lBytesRead < lExpected)
- {
- long lSize = send(m_Connection, (char*)pOutput + lBytesRead, lExpected - lBytesRead, 0);
-
- if(lSize == SOCKET_ERROR || lSize == 0)
- {
- LogSendRecieveInfo(StrF(_T("lSize == SOCKET_ERROR, %d"), WSAGetLastError()));
- bRet = FALSE;
- break;
- }
- lBytesRead += lSize;
- }
- if(lBytesRead == lExpected)
- bRet = TRUE;
- if(pOutput != (UCHAR*)pData)
- m_pEncryptor->FreeBuffer(pOutput);
- }
- else
- {
- LogSendRecieveInfo("SendExactSize::Failed to encrypt data");
- }
- // LogSendRecieveInfo(StrF(_T("END SendExactSize Total %d"), lBytesRead));
- return bRet;
- }
|