Exemple #1
0
BOOL CTcpAgent::DoSendPackets(TSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount)
{
	ASSERT(pSocketObj && pBuffers && iCount > 0);

	int result = NO_ERROR;

	if(pBuffers && iCount > 0)
	{
		CCriSecLock locallock(pSocketObj->csSend);

		if(TSocketObj::IsValid(pSocketObj))
			result = SendInternal(pSocketObj, pBuffers, iCount);
		else
			result = ERROR_OBJECT_NOT_FOUND;
	}
	else
		result = ERROR_INVALID_PARAMETER;

	if(result != NO_ERROR)
	{
		if(m_enSendPolicy == SP_DIRECT && TSocketObj::IsValid(pSocketObj))
			CheckError(pSocketObj, SO_SEND, result);

		::SetLastError(result);
	}

	return (result == NO_ERROR);
}
Exemple #2
0
BOOL CTcpClient::DoSendPackets(const WSABUF pBuffers[], int iCount)
{
	ASSERT(pBuffers && iCount > 0);

	int result = NO_ERROR;

	if(pBuffers && iCount > 0)
	{
		if(IsConnected())
		{
			CCriSecLock locallock(m_csSend);

			if(IsConnected())
				result = SendInternal(pBuffers, iCount);
			else
				result = ERROR_INVALID_STATE;
		}
		else
			result = ERROR_INVALID_STATE;
	}
	else
		result = ERROR_INVALID_PARAMETER;

	if(result != NO_ERROR)
		::SetLastError(result);

	return (result == NO_ERROR);
}
BOOL CUdpClient::SendPackets(const WSABUF pBuffers[], int iCount)
{
	int result			 = NO_ERROR;
	EnSocketError enCode = SE_OK;

	ASSERT(pBuffers && iCount > 0);

	if(pBuffers && iCount > 0)
	{
		int iLength = 0;
		int iMaxLen = (int)m_dwMaxDatagramSize;

		TItemPtr itPtr(m_itPool, m_itPool.PickFreeItem());

		for(int i = 0; i < iCount; i++)
		{
			int iBufLen = pBuffers[i].len;

			if(iBufLen > 0)
			{
				BYTE* pBuffer = (BYTE*)pBuffers[i].buf;
				ASSERT(pBuffer);

				iLength += iBufLen;

				if(iLength <= iMaxLen)
					itPtr->Cat(pBuffer, iBufLen);
				else
					break;
			}
		}

		if(iLength > 0 && iLength <= iMaxLen)
			result = SendInternal(itPtr->Ptr(), iLength, enCode);
		else
		{
			result = ERROR_INCORRECT_SIZE;
			enCode = SE_INVALID_PARAM;
		}
	}
	else
	{
		result = ERROR_INVALID_PARAMETER;
		enCode = SE_INVALID_PARAM;
	}

	if(result != NO_ERROR)
		SetLastError(enCode, __FUNCTION__, result);

	return (result == NO_ERROR);
}
Exemple #4
0
bool ProactorService::SendRequest(BasePacket* pPacket)
{
	IPacketProtocol* pProtocol = GetPacketProtocol();
	if (NULL == pProtocol)
		return false;

	char* pBuffer = NULL;
	int bufferSize = 0;
	if (false == pProtocol->Encode(pPacket, &pBuffer, bufferSize))
		return false;

	SendInternal(pBuffer, bufferSize);

	return true;
}
Exemple #5
0
BOOL CUdpCast::Send(const BYTE* pBuffer, int iLength, int iOffset)
{
	int result = NO_ERROR;

	ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize);

	if(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize)
	{
		if(iOffset != 0) pBuffer += iOffset;
		result = SendInternal(pBuffer, iLength);
	}
	else
		result = ERROR_INVALID_PARAMETER;

	if(result != NO_ERROR)
		::SetLastError(result);

	return (result == NO_ERROR);
}
BOOL CTcpClient::SendPackets(const WSABUF pBuffers[], int iCount)
{
	int result			 = NO_ERROR;
	EnSocketError enCode = SE_OK;

	ASSERT(pBuffers && iCount > 0);

	if(pBuffers && iCount > 0)
	{
		if(HasStarted())
		{
			CCriSecLock locallock(m_csSend);

			if(HasStarted())
				result = SendInternal(pBuffers, iCount, enCode);
			else
			{
				result = ERROR_INVALID_STATE;
				enCode = SE_ILLEGAL_STATE;
			}
		}
		else
		{
			result = ERROR_INVALID_STATE;
			enCode = SE_ILLEGAL_STATE;
		}
	}
	else
	{
		result = ERROR_INVALID_PARAMETER;
		enCode = SE_INVALID_PARAM;
	}

	if(result != NO_ERROR)
		SetLastError(enCode, __FUNCTION__, result);

	return (result == NO_ERROR);
}
BOOL CUdpClient::Send(const BYTE* pBuffer, int iLength, int iOffset)
{
	int result			 = NO_ERROR;
	EnSocketError enCode = SE_OK;

	ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize);

	if(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize)
	{
		if(iOffset != 0) pBuffer += iOffset;
		result = SendInternal(pBuffer, iLength, enCode);
	}
	else
	{
		result = ERROR_INVALID_PARAMETER;
		enCode = SE_INVALID_PARAM;
	}

	if(result != NO_ERROR)
		SetLastError(enCode, __FUNCTION__, result);

	return (result == NO_ERROR);
}
Exemple #8
0
BOOL CTcpServer::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount)
{
	int result				= NO_ERROR;
	TSocketObj* pSocketObj	= nullptr;

	ASSERT(pBuffers && iCount > 0);

	if(pBuffers && iCount > 0)
	{
		pSocketObj = FindSocketObj(dwConnID);

		if(TSocketObj::IsValid(pSocketObj))
		{
			CCriSecLock locallock(pSocketObj->csSend);

			if(TSocketObj::IsValid(pSocketObj))
				result = SendInternal(pSocketObj, pBuffers, iCount);
			else
				result = ERROR_OBJECT_NOT_FOUND;
		}
		else
			result = ERROR_OBJECT_NOT_FOUND;
	}
	else
		result = ERROR_INVALID_PARAMETER;

	if(result != NO_ERROR)
	{
		if(m_enSendPolicy == SP_DIRECT && TSocketObj::IsValid(pSocketObj))
			CheckError(pSocketObj, SO_SEND, result);

		::SetLastError(result);
	}

	return (result == NO_ERROR);
}
Exemple #9
0
void ProactorService::handle_read_stream( const ACE_Asynch_Read_Stream::Result& result )
{
	ACE_Message_Block& block = result.message_block();
	if (!result.success() || result.bytes_transferred() == 0)
	{
		block.release();
		ReserveClose();
	}
	else
	{
		if (false == ISession::OnReceive(block.rd_ptr(), (unsigned short)block.length(), m_sessionDesc))
		{
			block.release();
			ReserveClose();
			return;
		}
//20150322 memory leak fix
		SendInternal(block.rd_ptr(), (unsigned short)block.length());
		block.release();


		PostRecv();
	}
}