]> git.sesse.net Git - rdpsrv/blobdiff - mcs.c
Check return value of mcs_recv_connect_initial().
[rdpsrv] / mcs.c
diff --git a/mcs.c b/mcs.c
index ac8148b43e16690ede259522354f9bc398c557d6..9e6740f950022ab63751722393ebf82f16f4efee 100644 (file)
--- a/mcs.c
+++ b/mcs.c
@@ -116,80 +116,75 @@ mcs_parse_domain_params(STREAM s)
        return s_check(s);
 }
 
-/* Send an MCS_CONNECT_INITIAL message (ASN.1 BER) */
-static void
-mcs_send_connect_initial(STREAM mcs_data)
-{
-       int datalen = mcs_data->end - mcs_data->data;
-       int length = 9 + 3 * 34 + 4 + datalen;
-       STREAM s;
-
-       s = iso_init(length + 5);
-
-       ber_out_header(s, MCS_CONNECT_INITIAL, length);
-       ber_out_header(s, BER_TAG_OCTET_STRING, 1);     /* calling domain */
-       out_uint8(s, 1);
-       ber_out_header(s, BER_TAG_OCTET_STRING, 1);     /* called domain */
-       out_uint8(s, 1);
-
-       ber_out_header(s, BER_TAG_BOOLEAN, 1);
-       out_uint8(s, 0xff);     /* upward flag */
-
-       mcs_out_domain_params(s, 34, 2, 0, 0xffff);     /* target params */
-       mcs_out_domain_params(s, 1, 1, 1, 0x420);       /* min params */
-       mcs_out_domain_params(s, 0xffff, 0xfc17, 0xffff, 0xffff);       /* max params */
-
-       ber_out_header(s, BER_TAG_OCTET_STRING, datalen);
-       out_uint8p(s, mcs_data->data, datalen);
-
-       s_mark_end(s);
-       iso_send(s);
-}
-
 /* Expect a MCS_CONNECT_RESPONSE message (ASN.1 BER) */
-static BOOL
-mcs_recv_connect_response(STREAM mcs_data)
+BOOL
+mcs_recv_connect_initial()
 {
        uint8 result;
        int length;
        STREAM s;
+       char *buf;
 
        s = iso_recv();
        if (s == NULL)
                return False;
 
-       ber_parse_header(s, MCS_CONNECT_RESPONSE, &length);
-
-       ber_parse_header(s, BER_TAG_RESULT, &length);
+       ber_parse_header(s, MCS_CONNECT_INITIAL, &length);
+       printf("parsing MCS_CONNECT_INITIAL (len=%u)\n", length);
+       ber_parse_header(s, BER_TAG_OCTET_STRING, &length);   /* calling domain */
+       in_uint8(s, result);
+       ber_parse_header(s, BER_TAG_OCTET_STRING, &length);   /* called domain */
+       in_uint8(s, result);
+       
+       ber_parse_header(s, BER_TAG_BOOLEAN, &length);
        in_uint8(s, result);
-       if (result != 0)
-       {
-               error("MCS connect: %d\n", result);
-               return False;
-       }
 
-       ber_parse_header(s, BER_TAG_INTEGER, &length);
-       in_uint8s(s, length);   /* connect id */
+       mcs_parse_domain_params(s);
+       mcs_parse_domain_params(s);
        mcs_parse_domain_params(s);
 
        ber_parse_header(s, BER_TAG_OCTET_STRING, &length);
+       in_uint8p(s, buf, length);
 
-       sec_process_mcs_data(s);
-       /*
-          if (length > mcs_data->size)
-          {
-          error("MCS data length %d, expected %d\n", length,
-          mcs_data->size);
-          length = mcs_data->size;
-          }
-
-          in_uint8a(s, mcs_data->data, length);
-          mcs_data->p = mcs_data->data;
-          mcs_data->end = mcs_data->data + length;
-        */
+       printf("Data from MCS connect: '%*s'\n", length, buf);
+       
        return s_check_end(s);
 }
 
+void
+mcs_send_connect_response()
+{
+       STREAM s;
+
+       s = iso_init(80);  // FIXME
+
+       ber_out_header(s, MCS_CONNECT_RESPONSE, 80);
+       ber_out_header(s, BER_TAG_RESULT, 1);
+       out_uint8(s, 0);
+
+       ber_out_header(s, BER_TAG_INTEGER, 1);
+       out_uint8(s, 1);  // connect id
+       
+       mcs_out_domain_params(s, 34, 2, 0, 0xffff);  // dumdidum?
+
+       ber_out_header(s, BER_TAG_OCTET_STRING, 28);
+
+       out_uint8s(s, 21);   // ick
+       out_uint8(s, 0);
+
+       // server info -- we claim to support RDP5
+       out_uint16_le(s, SEC_TAG_SRV_INFO);
+       out_uint16_le(s, 6);  // length
+       out_uint16_le(s, 5);
+
+       // aiee, no crypto info yet! :-)
+       
+       s_mark_end(s);
+       printf("LEN: %u\n", s->p - s->data);
+       iso_send(s);
+
+}
+
 /* Send an EDrq message (ASN.1 PER) */
 static void
 mcs_send_edrq(void)