]> git.sesse.net Git - rdpsrv/blobdiff - rdp5.c
Remove lots of licensing stuff we didn't need after all.
[rdpsrv] / rdp5.c
diff --git a/rdp5.c b/rdp5.c
index 0ac38076132bbcd5768c83df303537cbba25ccc7..e8fd59749ab8a86278be0b35c3bbc59792427d03 100644 (file)
--- a/rdp5.c
+++ b/rdp5.c
 extern uint8 *g_next_packet;
 extern int listen_on_vnc;
 
+extern uint8 sec_sign_key[16];
+extern int rc4_key_len;
+
+/* Initialise secure transport packet */
+STREAM
+rdp5_init(int maxlen, BOOL encryption)
+{
+       int hdrlen;
+       STREAM s;
+
+       hdrlen = encryption ? 11 : 3;
+       s = tcp_init(maxlen + hdrlen);
+       s_push_layer(s, sec_hdr, hdrlen);
+
+       return s;
+}
+
+void
+rdp5_send(STREAM s, BOOL encryption)
+{
+       int datalen;
+
+       s_pop_layer(s, sec_hdr);
+
+       datalen = s->end - s->p;
+
+       out_uint8(s, encryption ? 0x80 : 0);    // protocol
+       out_uint8(s, 0x80 | (datalen >> 8));
+       out_uint8(s, datalen & 0xff);
+
+       if (encryption) {
+               datalen -= 11;
+
+               sec_sign(s->p, 8, sec_sign_key, rc4_key_len, s->p + 8, datalen);
+               sec_encrypt(s->p + 8, datalen);
+       }
+
+       tcp_send(s);
+}
+
 void
 rdp5_process(STREAM s, BOOL encryption)
 {
@@ -79,7 +119,7 @@ rdp5_process(STREAM s, BOOL encryption)
                                break;
                        }
                        default:
-                               printf("Unimplemented RDP5 opcode %d (len=%u)\n", type, length);
+                               printf("Unimplemented RDP5 opcode %d\n", type);
                                return;
                }
        }