Example #1
0
static int rdg_bio_write(BIO* bio, const char* buf, int num)
{
	int status;
	rdpRdg* rdg = (rdpRdg*)bio->ptr;

	BIO_clear_flags(bio, BIO_FLAGS_WRITE);

	status = rdg_write_data_packet(rdg, (BYTE*) buf, num);

	if (status < 0)
	{
		BIO_clear_flags(bio, BIO_FLAGS_SHOULD_RETRY);
		return -1;
	}
	else if (status < num)
	{
		BIO_set_flags(bio, BIO_FLAGS_WRITE);
		WSASetLastError(WSAEWOULDBLOCK);
	}
	else
	{
		BIO_clear_flags(bio, BIO_FLAGS_WRITE);
	}

	return status;
}
Example #2
0
static int rdg_bio_write(BIO* bio, const char* buf, int num)
{
	int status;
	rdpRdg* rdg = (rdpRdg*) BIO_get_data(bio);
	BIO_clear_flags(bio, BIO_FLAGS_WRITE);
	EnterCriticalSection(&rdg->writeSection);
	status = rdg_write_data_packet(rdg, (BYTE*) buf, num);
	LeaveCriticalSection(&rdg->writeSection);

	if (status < 0)
	{
		BIO_clear_flags(bio, BIO_FLAGS_SHOULD_RETRY);
		return -1;
	}
	else if (status < num)
	{
		BIO_set_flags(bio, BIO_FLAGS_WRITE);
		WSASetLastError(WSAEWOULDBLOCK);
	}
	else
	{
		BIO_set_flags(bio, BIO_FLAGS_WRITE);
	}

	return status;
}
Example #3
0
BOOL rdg_process_close_packet(rdpRdg* rdg)
{
	BYTE buffer[sizeof(RdgPacketHeader) + 4];
	RdgPacketHeader* header = (RdgPacketHeader*)buffer;

	memset(buffer, 0, sizeof(buffer));
	header->type = PKT_TYPE_CLOSE_CHANNEL_RESPONSE;
	header->packetLength = sizeof(buffer);

	WLog_DBG(TAG, "Channel Close requested");
	rdg->state = RDG_CLIENT_STATE_CLOSED;
	return (rdg_write_data_packet(rdg, buffer, sizeof(buffer)) > 0 ? TRUE : FALSE);
}