if (s)
Stream_SealLength(s);
+
return s;
}
rdg->ntlm = NULL;
if (status < 0)
- {
return FALSE;
- }
rdg->state = RDG_CLIENT_STATE_OUT_CHANNEL_AUTHORIZE;
rdg->ntlm = NULL;
if (status < 0)
- {
return FALSE;
- }
rdg->state = RDG_CLIENT_STATE_IN_CHANNEL_AUTHORIZE;
return FALSE;
status = tls_write_all(rdg->tlsIn, Stream_Buffer(s), Stream_Length(s));
- if (status <= 0)
- {
- return FALSE;
- }
+
Stream_Free(s, TRUE);
+ if (status <= 0)
+ return FALSE;
+
return TRUE;
}
BOOL rdg_process_close_packet(rdpRdg* rdg)
{
- int status;
- wStream* sChunk;
- int packetSize = 12;
- char chunkSize[11];
+ int status;
+ wStream* sChunk;
+ int packetSize = 12;
+ char chunkSize[11];
- sprintf_s(chunkSize, sizeof(chunkSize), "%X\r\n", packetSize);
+ sprintf_s(chunkSize, sizeof(chunkSize), "%X\r\n", packetSize);
- sChunk = Stream_New(NULL, strlen(chunkSize) + packetSize + 2);
+ sChunk = Stream_New(NULL, strlen(chunkSize) + packetSize + 2);
- if (!sChunk)
- return FALSE;
+ if (!sChunk)
+ return FALSE;
- Stream_Write(sChunk, chunkSize, strlen(chunkSize));
+ Stream_Write(sChunk, chunkSize, strlen(chunkSize));
- Stream_Write_UINT16(sChunk, PKT_TYPE_CLOSE_CHANNEL_RESPONSE); /* Type */
- Stream_Write_UINT16(sChunk, 0); /* Reserved */
- Stream_Write_UINT32(sChunk, packetSize); /* Packet length */
+ Stream_Write_UINT16(sChunk, PKT_TYPE_CLOSE_CHANNEL_RESPONSE); /* Type */
+ Stream_Write_UINT16(sChunk, 0); /* Reserved */
+ Stream_Write_UINT32(sChunk, packetSize); /* Packet length */
- Stream_Write_UINT32(sChunk, 0); /* Status code */
+ Stream_Write_UINT32(sChunk, 0); /* Status code */
- Stream_Write(sChunk, "\r\n", 2);
- Stream_SealLength(sChunk);
+ Stream_Write(sChunk, "\r\n", 2);
+ Stream_SealLength(sChunk);
- status = tls_write_all(rdg->tlsIn, Stream_Buffer(sChunk), Stream_Length(sChunk));
- Stream_Free(sChunk, TRUE);
+ status = tls_write_all(rdg->tlsIn, Stream_Buffer(sChunk), Stream_Length(sChunk));
+ Stream_Free(sChunk, TRUE);
- return (status < 0 ? FALSE : TRUE);
+ return (status < 0 ? FALSE : TRUE);
}
BOOL rdg_process_keep_alive_packet(rdpRdg* rdg)
{
- int status;
- wStream* sChunk;
- int packetSize = 8;
- char chunkSize[11];
+ int status;
+ wStream* sChunk;
+ int packetSize = 8;
+ char chunkSize[11];
- sprintf_s(chunkSize, sizeof(chunkSize), "%X\r\n", packetSize);
+ sprintf_s(chunkSize, sizeof(chunkSize), "%X\r\n", packetSize);
- sChunk = Stream_New(NULL, strlen(chunkSize) + packetSize + 2);
+ sChunk = Stream_New(NULL, strlen(chunkSize) + packetSize + 2);
- if (!sChunk)
- return FALSE;
+ if (!sChunk)
+ return FALSE;
- Stream_Write(sChunk, chunkSize, strlen(chunkSize));
+ Stream_Write(sChunk, chunkSize, strlen(chunkSize));
- Stream_Write_UINT16(sChunk, PKT_TYPE_KEEPALIVE); /* Type */
- Stream_Write_UINT16(sChunk, 0); /* Reserved */
- Stream_Write_UINT32(sChunk, packetSize); /* Packet length */
+ Stream_Write_UINT16(sChunk, PKT_TYPE_KEEPALIVE); /* Type */
+ Stream_Write_UINT16(sChunk, 0); /* Reserved */
+ Stream_Write_UINT32(sChunk, packetSize); /* Packet length */
- Stream_Write(sChunk, "\r\n", 2);
- Stream_SealLength(sChunk);
+ Stream_Write(sChunk, "\r\n", 2);
+ Stream_SealLength(sChunk);
- status = tls_write_all(rdg->tlsIn, Stream_Buffer(sChunk), Stream_Length(sChunk));
- Stream_Free(sChunk, TRUE);
+ status = tls_write_all(rdg->tlsIn, Stream_Buffer(sChunk), Stream_Length(sChunk));
+ Stream_Free(sChunk, TRUE);
- return (status < 0 ? FALSE : TRUE);
+ return (status < 0 ? FALSE : TRUE);
}
BOOL rdg_process_unknown_packet(rdpRdg* rdg, int type)
if (payloadSize)
{
s = Stream_New(NULL, payloadSize);
+
if (!s)
- {
return FALSE;
- }
while (readCount < payloadSize)
{
switch (type)
{
- case PKT_TYPE_CLOSE_CHANNEL:
- EnterCriticalSection(&rdg->writeSection);
- status = rdg_process_close_packet(rdg);
- LeaveCriticalSection(&rdg->writeSection);
- break;
-
- case PKT_TYPE_KEEPALIVE:
- EnterCriticalSection(&rdg->writeSection);
- status = rdg_process_keep_alive_packet(rdg);
- LeaveCriticalSection(&rdg->writeSection);
- break;
+ case PKT_TYPE_CLOSE_CHANNEL:
+ EnterCriticalSection(&rdg->writeSection);
+ status = rdg_process_close_packet(rdg);
+ LeaveCriticalSection(&rdg->writeSection);
+ break;
+
+ case PKT_TYPE_KEEPALIVE:
+ EnterCriticalSection(&rdg->writeSection);
+ status = rdg_process_keep_alive_packet(rdg);
+ LeaveCriticalSection(&rdg->writeSection);
+ break;
- default:
- status = rdg_process_unknown_packet(rdg, type);
- break;
+ default:
+ status = rdg_process_unknown_packet(rdg, type);
+ break;
}
Stream_Free(s, TRUE);
{
return -1;
}
- return 0;
+ return 0;
}
rdg->packetRemainingCount -= status;
BIO_clear_flags(bio, BIO_FLAGS_WRITE);
- EnterCriticalSection(&rdg->writeSection);
+ EnterCriticalSection(&rdg->writeSection);
status = rdg_write_data_packet(rdg, (BYTE*) buf, num);
- LeaveCriticalSection(&rdg->writeSection);
+ LeaveCriticalSection(&rdg->writeSection);
if (status < 0)
{
static int rdg_bio_read(BIO* bio, char* buf, int size)
{
int status;
- rdpRdg* rdg = (rdpRdg*)bio->ptr;
+ rdpRdg* rdg = (rdpRdg*) bio->ptr;
status = rdg_read_data_packet(rdg, (BYTE*) buf, size);
- if (!status)
- {
- BIO_set_retry_read(bio);
- return -1;
- }
+ if (!status)
+ {
+ BIO_set_retry_read(bio);
+ return -1;
+ }
else if (status < 0)
{
- BIO_clear_retry_flags(bio);
+ BIO_clear_retry_flags(bio);
return -1;
}
if (!rdg->readEvent)
goto rdg_alloc_error;
- InitializeCriticalSection(&rdg->writeSection);
+ InitializeCriticalSection(&rdg->writeSection);
}
return rdg;
rdg->readEvent = NULL;
}
- DeleteCriticalSection(&rdg->writeSection);
+ DeleteCriticalSection(&rdg->writeSection);
free(rdg);
}