readCount += status;
}
+
return TRUE;
}
{
wStream* s;
size_t packetLength;
-
s = Stream_New(NULL, 1024);
if (!s)
}
if (!rdg_read_all(rdg->tlsOut, Stream_Buffer(s) + sizeof(RdgPacketHeader),
- packetLength - sizeof(RdgPacketHeader)))
+ packetLength - sizeof(RdgPacketHeader)))
{
Stream_Free(s, TRUE);
return NULL;
}
Stream_SetLength(s, packetLength);
-
return s;
}
Stream_Write_UINT16(s, PKT_TYPE_TUNNEL_CREATE); /* Type (2 bytes) */
Stream_Write_UINT16(s, 0); /* Reserved (2 bytes) */
Stream_Write_UINT32(s, packetSize); /* PacketLength (4 bytes) */
-
Stream_Write_UINT32(s, HTTP_CAPABILITY_TYPE_QUAR_SOH); /* CapabilityFlags (4 bytes) */
Stream_Write_UINT16(s, fieldsPresent); /* FieldsPresent (2 bytes) */
Stream_Write_UINT16(s, 0); /* Reserved (2 bytes), must be 0 */
}
static wStream* rdg_build_http_request(rdpRdg* rdg, const char* method,
- const char* transferEncoding)
+ const char* transferEncoding)
{
wStream* s;
HttpRequest* request = NULL;
-
assert(method != NULL);
request = http_request_new();
if (response->StatusCode != HTTP_STATUS_DENIED)
{
WLog_DBG(TAG, "Unexpected NTLM challenge HTTP status: %d",
- response->StatusCode);
+ response->StatusCode);
return FALSE;
}
}
ntlm_authenticate(ntlm);
-
return TRUE;
}
if (lastResponseLength < sizeof(seed_payload))
{
if (!rdg_read_all(tls, seed_payload,
- sizeof(seed_payload) - lastResponseLength))
+ sizeof(seed_payload) - lastResponseLength))
{
return FALSE;
}
{
rdpContext* context = rdg->context;
rdpSettings* settings = context->settings;
-
rdg->ntlm = ntlm_new();
if (!rdg->ntlm)
}
static BOOL rdg_send_http_request(rdpRdg* rdg, rdpTls* tls, const char* method,
- const char* transferEncoding)
+ const char* transferEncoding)
{
wStream* s = NULL;
int status;
-
s = rdg_build_http_request(rdg, method, transferEncoding);
if (!s)
return FALSE;
status = tls_write_all(tls, Stream_Buffer(s), Stream_Length(s));
-
Stream_Free(s, TRUE);
-
return (status >= 0);
}
rdpSettings* settings = rdg->settings;
const char* peerHostname = settings->GatewayHostname;
UINT16 peerPort = settings->GatewayPort;
- const char *proxyUsername, *proxyPassword;
- BOOL isProxyConnection = proxy_prepare(settings, &peerHostname, &peerPort, &proxyUsername, &proxyPassword);
-
+ const char* proxyUsername, *proxyPassword;
+ BOOL isProxyConnection = proxy_prepare(settings, &peerHostname, &peerPort, &proxyUsername,
+ &proxyPassword);
sockfd = freerdp_tcp_connect(rdg->context, settings,
peerAddress ? peerAddress : peerHostname,
peerPort, timeout);
if (isProxyConnection)
{
- if (!proxy_connect(settings, bufferedBio, proxyUsername, proxyPassword, settings->GatewayHostname, settings->GatewayPort))
+ if (!proxy_connect(settings, bufferedBio, proxyUsername, proxyPassword, settings->GatewayHostname,
+ settings->GatewayPort))
return FALSE;
}
tls->port = settings->GatewayPort;
tls->isGatewayTransport = TRUE;
status = tls_connect(tls, bufferedBio);
-
return (status >= 1);
}
static BOOL rdg_establish_data_connection(rdpRdg* rdg, rdpTls* tls,
- const char* method, const char* peerAddress, int timeout, BOOL* rpcFallback)
+ const char* method, const char* peerAddress, int timeout, BOOL* rpcFallback)
{
HttpResponse* response = NULL;
int statusCode;
return FALSE;
response = http_response_recv(tls);
+
if (!response)
return FALSE;
if (response->StatusCode == HTTP_STATUS_NOT_FOUND)
{
WLog_INFO(TAG, "RD Gateway does not support HTTP transport.");
+
if (rpcFallback) *rpcFallback = TRUE;
+
http_response_free(response);
return FALSE;
}
ntlm_free(rdg->ntlm);
rdg->ntlm = NULL;
-
response = http_response_recv(tls);
+
if (!response)
return FALSE;
statusCode = response->StatusCode;
bodyLength = response->BodyLength;
http_response_free(response);
-
WLog_DBG(TAG, "%s authorization result: %d", method, statusCode);
if (statusCode != HTTP_STATUS_OK)
{
BOOL status;
wStream* s;
-
rdg_send_handshake(rdg);
while (rdg->state < RDG_CLIENT_STATE_OPENED)
SOCKET outConnSocket = 0;
char* peerAddress = NULL;
assert(rdg != NULL);
-
status = rdg_establish_data_connection(
- rdg, rdg->tlsOut, "RDG_OUT_DATA", NULL, timeout, rpcFallback);
+ rdg, rdg->tlsOut, "RDG_OUT_DATA", NULL, timeout, rpcFallback);
if (status)
{
*/
BIO_get_socket(rdg->tlsOut->underlying, &outConnSocket);
peerAddress = freerdp_tcp_get_peer_address(outConnSocket);
-
status = rdg_establish_data_connection(
- rdg, rdg->tlsIn, "RDG_IN_DATA", peerAddress, timeout, NULL);
-
+ rdg, rdg->tlsIn, "RDG_IN_DATA", peerAddress, timeout, NULL);
free(peerAddress);
}
}
rdg->packetRemainingCount -= status;
-
return status;
}
goto rdg_alloc_error;
BIO_set_data(rdg->frontBio, rdg);
-
InitializeCriticalSection(&rdg->writeSection);
}