libfreerdp-core: MCS Connect-Initial triggers server response
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 8 Jul 2011 19:32:06 +0000 (15:32 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 8 Jul 2011 19:32:06 +0000 (15:32 -0400)
freerdp-ui/test/freerdp.c
libfreerdp-core/ber.c
libfreerdp-core/gcc.c
libfreerdp-core/mcs.c
libfreerdp-core/mcs.h
libfreerdp-core/settings.c

index 911577e..368e701 100644 (file)
@@ -80,5 +80,7 @@ int main(int argc, char* argv[])
        mcs = mcs_new(transport);
        mcs_send_connect_initial(mcs);
 
+       mcs_recv(mcs);
+
        return 0;
 }
index b804fd0..934faa0 100644 (file)
@@ -119,20 +119,6 @@ void ber_write_boolean(STREAM* s, boolean value)
 void ber_write_integer(STREAM* s, uint32 value)
 {
        ber_write_universal_tag(s, BER_TAG_INTEGER);
-
-       if (value <= 0xFF)
-       {
-               ber_write_length(s, 1);
-               stream_write_uint8(s, value);
-       }
-       else if (value <= 0xFFFF)
-       {
-               ber_write_length(s, 2);
-               stream_write_uint16_be(s, value);
-       }
-       else if (value <= 0xFFFFFFFF)
-       {
-               ber_write_length(s, 4);
-               stream_write_uint32_be(s, value);
-       }
+       ber_write_length(s, 2);
+       stream_write_uint16_be(s, value);
 }
index 9d7f4fb..57b078f 100644 (file)
@@ -202,7 +202,12 @@ void gcc_write_client_core_data(STREAM* s, rdpSettings *settings)
        stream_write_uint32(s, 0); /* serialNumber (should be initialized to 0) */
 
        highColorDepth = MIN(settings->color_depth, 24);
-       supportedColorDepths = RNS_UD_24BPP_SUPPORT | RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT;
+
+       supportedColorDepths =
+                       RNS_UD_32BPP_SUPPORT |
+                       RNS_UD_24BPP_SUPPORT |
+                       RNS_UD_16BPP_SUPPORT |
+                       RNS_UD_15BPP_SUPPORT;
 
        connectionType = 0;
        earlyCapabilityFlags = RNS_UD_CS_SUPPORT_ERRINFO_PDU;
@@ -254,11 +259,7 @@ void gcc_write_client_security_data(STREAM* s, rdpSettings *settings)
 
        gcc_write_user_data_header(s, CS_SECURITY, 12);
 
-       encryptionMethods =
-                       ENCRYPTION_40BIT_FLAG |
-                       ENCRYPTION_56BIT_FLAG |
-                       ENCRYPTION_128BIT_FLAG |
-                       ENCRYPTION_FIPS_FLAG;
+       encryptionMethods = ENCRYPTION_40BIT_FLAG | ENCRYPTION_128BIT_FLAG;
 
        if (settings->encryption > 0)
        {
index 347dfb4..3a845ef 100644 (file)
@@ -88,12 +88,7 @@ static void mcs_init_domain_parameters(DOMAIN_PARAMETERS* domainParameters,
 
 static void mcs_write_domain_parameters(STREAM* s, DOMAIN_PARAMETERS* domainParameters)
 {
-       int length;
-       uint8 *bm, *em;
-
-       stream_get_mark(s, bm);
-       stream_seek(s, 2);
-
+       ber_write_sequence_of_tag(s, 32);
        ber_write_integer(s, domainParameters->maxChannelIds);
        ber_write_integer(s, domainParameters->maxUserIds);
        ber_write_integer(s, domainParameters->maxTokenIds);
@@ -102,13 +97,6 @@ static void mcs_write_domain_parameters(STREAM* s, DOMAIN_PARAMETERS* domainPara
        ber_write_integer(s, domainParameters->maxHeight);
        ber_write_integer(s, domainParameters->maxMCSPDUsize);
        ber_write_integer(s, domainParameters->protocolVersion);
-
-       stream_get_mark(s, em);
-       length = (em - bm) - 2;
-       stream_set_mark(s, bm);
-
-       ber_write_sequence_of_tag(s, length);
-       stream_set_mark(s, em);
 }
 
 /**
@@ -123,7 +111,7 @@ void mcs_write_connect_initial(STREAM* s, rdpMcs* mcs, STREAM* user_data)
        int length;
        int gcc_CCrq_length = stream_get_length(user_data);
 
-       length = gcc_CCrq_length + 97;
+       length = gcc_CCrq_length + (3* 34) + 13;
 
        /* Connect-Initial (APPLICATION 101, IMPLICIT SEQUENCE) */
        ber_write_application_tag(s, MCS_TYPE_CONNECT_INITIAL, length);
@@ -150,6 +138,18 @@ void mcs_write_connect_initial(STREAM* s, rdpMcs* mcs, STREAM* user_data)
        ber_write_octet_string(s, user_data->data, gcc_CCrq_length);
 }
 
+int mcs_recv(rdpMcs* mcs)
+{
+       int bytes_read;
+       int size = 2048;
+       char *recv_buffer;
+
+       recv_buffer = xmalloc(size);
+       bytes_read = tls_read(mcs->transport->tls, recv_buffer, size);
+
+       return 0;
+}
+
 void mcs_send_connect_initial(rdpMcs* mcs)
 {
        STREAM* s;
index 16b19d3..8144055 100644 (file)
 
 typedef struct
 {
-       uint32 maxChannelIds;
-       uint32 maxUserIds;
-       uint32 maxTokenIds;
-       uint32 numPriorities;
-       uint32 minThroughput;
-       uint32 maxHeight;
-       uint32 maxMCSPDUsize;
-       uint32 protocolVersion;
+       uint16 maxChannelIds;
+       uint16 maxUserIds;
+       uint16 maxTokenIds;
+       uint16 numPriorities;
+       uint16 minThroughput;
+       uint16 maxHeight;
+       uint16 maxMCSPDUsize;
+       uint16 protocolVersion;
 } DOMAIN_PARAMETERS;
 
 struct rdp_mcs
@@ -54,6 +54,8 @@ void mcs_write_connect_initial(STREAM* s, rdpMcs* mcs, STREAM* user_data);
 
 void mcs_send_connect_initial(rdpMcs* mcs);
 
+int mcs_recv(rdpMcs* mcs);
+
 rdpMcs* mcs_new(rdpTransport* transport);
 void mcs_free(rdpMcs* mcs);
 
index 6d6ca4e..1c6404e 100644 (file)
@@ -37,9 +37,9 @@ rdpSettings* settings_new()
                settings->tls_security = 1;
                settings->rdp_security = 1;
                settings->client_build = 2600;
-               settings->kbd_type = 4;
+               settings->kbd_type = 0;
                settings->kbd_subtype = 0;
-               settings->kbd_fn_keys = 12;
+               settings->kbd_fn_keys = 0;
                settings->kbd_layout = 0x409;
                settings->encryption = 1;
 
@@ -49,7 +49,6 @@ rdpSettings* settings_new()
                                PERF_DISABLE_WALLPAPER;
 
                settings->uniconv = freerdp_uniconv_new();
-               strcpy(settings->client_product_id, "69712-783-0357974-42714");
                gethostname(settings->client_hostname, sizeof(settings->client_hostname) - 1);
        }