libfreerdp-core: get server response for new license request
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Tue, 12 Jul 2011 05:57:09 +0000 (01:57 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Tue, 12 Jul 2011 05:57:09 +0000 (01:57 -0400)
libfreerdp-core/connection.c
libfreerdp-core/license.c
libfreerdp-core/license.h
libfreerdp-core/rdp.c

index ca1df26..89a9edc 100644 (file)
@@ -70,8 +70,11 @@ void rdp_client_connect(rdpRdp* rdp)
        mcs_connect(rdp->mcs);
 
        rdp_send_client_info(rdp);
-       rdp_recv(rdp);
 
        rdp_recv(rdp);
+       rdp_recv(rdp);
+       rdp_recv(rdp);
+       rdp_recv(rdp);
+       rdp_recv(rdp);
 }
 
index 4777b66..e7eb3ea 100644 (file)
@@ -107,12 +107,8 @@ void license_recv(rdpLicense* license, STREAM* s)
        uint8 bMsgType;
        uint16 wMsgSize;
 
-       printf("SEC_LICENSE_PKT\n");
-
        license_read_preamble(s, &bMsgType, &flags, &wMsgSize); /* preamble (4 bytes) */
 
-       printf("bMsgType:%X, flags:%X, wMsgSize:%02x\n", bMsgType, flags, wMsgSize);
-
        switch (bMsgType)
        {
                case LICENSE_REQUEST:
@@ -122,6 +118,7 @@ void license_recv(rdpLicense* license, STREAM* s)
 
                case PLATFORM_CHALLENGE:
                        license_read_platform_challenge_packet(license, s);
+                       license_send_platform_challenge_response_packet(license);
                        break;
 
                case NEW_LICENSE:
@@ -143,6 +140,21 @@ void license_recv(rdpLicense* license, STREAM* s)
 }
 
 /**
+ * Generate License Cryptographic Keys.
+ * @param license license module
+ */
+
+void license_generate_keys(rdpLicense* license)
+{
+       /* FIXME: generate real keys, not null keys */
+
+       memset(license->client_random, 0, 32);
+
+       license->encrypted_pre_master_secret->length = 72;
+       license->encrypted_pre_master_secret->data = (uint8*) xzalloc(72);
+}
+
+/**
  * Read Product Information (PRODUCT_INFO).\n
  * @msdn{cc241915}
  * @param s stream
@@ -347,7 +359,7 @@ void license_free_scope_list(SCOPE_LIST* scopeList)
 
 void license_read_license_request_packet(rdpLicense* license, STREAM* s)
 {
-       printf("LICENSE_REQUEST\n");
+       DEBUG_LICENSE("Receiving License Request Packet");
 
        /* ServerRandom (32 bytes) */
        stream_read(s, license->server_random, 32);
@@ -374,7 +386,13 @@ void license_read_license_request_packet(rdpLicense* license, STREAM* s)
 
 void license_read_platform_challenge_packet(rdpLicense* license, STREAM* s)
 {
+       DEBUG_LICENSE("Receiving Platform Challenge Packet");
 
+       stream_seek(s, 4); /* ConnectFlags, Reserved (4 bytes) */
+
+       /* EncryptedPlatformChallenge */
+
+       /* MACData (16 bytes) */
 }
 
 /**
@@ -386,7 +404,7 @@ void license_read_platform_challenge_packet(rdpLicense* license, STREAM* s)
 
 void license_read_new_license_packet(rdpLicense* license, STREAM* s)
 {
-
+       DEBUG_LICENSE("Receiving New License Packet");
 }
 
 /**
@@ -398,7 +416,7 @@ void license_read_new_license_packet(rdpLicense* license, STREAM* s)
 
 void license_read_upgrade_license_packet(rdpLicense* license, STREAM* s)
 {
-
+       DEBUG_LICENSE("Receiving Upgrade License Packet");
 }
 
 /**
@@ -410,7 +428,7 @@ void license_read_upgrade_license_packet(rdpLicense* license, STREAM* s)
 
 void license_read_error_alert_packet(rdpLicense* license, STREAM* s)
 {
-
+       DEBUG_LICENSE("Receiving Error Alert Packet");
 }
 
 /**
@@ -455,12 +473,59 @@ void license_send_new_license_request_packet(rdpLicense* license)
        STREAM* s;
 
        s = license_send_stream_init(license);
+       DEBUG_LICENSE("Sending New License Request Packet");
 
-       /* TODO: generate keys */
+       license->client_user_name->data = license->rdp->settings->username;
+       license->client_user_name->length = strlen(license->rdp->settings->username);
+
+       license->client_machine_name->data = license->rdp->settings->hostname;
+       license->client_machine_name->length = strlen(license->rdp->settings->hostname);
+
+       license_generate_keys(license);
 
        license_write_new_license_request_packet(license, s);
 
        license_send(license, s, NEW_LICENSE_REQUEST);
+
+       license->client_user_name->data = NULL;
+       license->client_user_name->length = 0;
+
+       license->client_machine_name->data = NULL;
+       license->client_machine_name->length = 0;
+}
+
+/**
+ * Write Client Challenge Response Packet.\n
+ * @msdn{cc241922}
+ * @param license license module
+ * @param s stream
+ */
+
+void license_write_platform_challenge_response_packet(rdpLicense* license, STREAM* s)
+{
+       /* EncryptedPlatformChallengeResponse */
+
+       /* EncryptedHWID */
+
+       /* MACData */
+}
+
+/**
+ * Send Client Challenge Response Packet.\n
+ * @msdn{cc241922}
+ * @param license license module
+ */
+
+void license_send_platform_challenge_response_packet(rdpLicense* license)
+{
+       STREAM* s;
+
+       s = license_send_stream_init(license);
+       DEBUG_LICENSE("Sending Platform Challenge Response Packet");
+
+       license_write_platform_challenge_response_packet(license, s);
+
+       license_send(license, s, PLATFORM_CHALLENGE_RESPONSE);
 }
 
 /**
index b78f529..0e31d45 100644 (file)
@@ -25,6 +25,7 @@ typedef struct rdp_license rdpLicense;
 #include "rdp.h"
 
 #include <freerdp/freerdp.h>
+#include <freerdp/utils/debug.h>
 #include <freerdp/utils/stream.h>
 
 /* Licensing Packet Types */
@@ -105,6 +106,8 @@ void license_send(rdpLicense* license, STREAM* s, uint8 type);
 void license_recv(rdpLicense* license, STREAM* s);
 STREAM* license_send_stream_init(rdpLicense* license);
 
+void license_generate_keys(rdpLicense* license);
+
 PRODUCT_INFO* license_new_product_info();
 void license_free_product_info(PRODUCT_INFO* productInfo);
 void license_read_product_info(STREAM* s, PRODUCT_INFO* productInfo);
@@ -127,7 +130,18 @@ void license_read_error_alert_packet(rdpLicense* license, STREAM* s);
 void license_write_new_license_request_packet(rdpLicense* license, STREAM* s);
 void license_send_new_license_request_packet(rdpLicense* license);
 
+void license_write_platform_challenge_response_packet(rdpLicense* license, STREAM* s);
+void license_send_platform_challenge_response_packet(rdpLicense* license);
+
 rdpLicense* license_new(rdpRdp* rdp);
 void license_free(rdpLicense* license);
 
+#define WITH_DEBUG_LICENSE     1
+
+#ifdef WITH_DEBUG_LICENSE
+#define DEBUG_LICENSE(fmt, ...) DEBUG_CLASS(LICENSE, fmt, ## __VA_ARGS__)
+#else
+#define DEBUG_LICENSE(fmt, ...) DEBUG_NULL(fmt, ## __VA_ARGS__)
+#endif
+
 #endif /* __LICENSE_H */
index 14fb845..9fa6518 100644 (file)
@@ -137,7 +137,7 @@ void rdp_recv(rdpRdp* rdp)
                                break;
 
                        default:
-                               printf("incorrect security flags: 0x%02X\n", sec_flags);
+                               printf("incorrect security flags: 0x%04X\n", sec_flags);
                                break;
                }
        }