shithub: rd

Download patch

ref: 2959acc59ca6324966d55953f7893276415dd49b
parent: f283a6a6cf3a8283e3896e5556fe8cbdbd6413a8
author: Yaroslav K <yarikos@gmail.com>
date: Sat Aug 23 15:58:46 EDT 2025

have some tests

--- /dev/null
+++ b/aud_test.c
@@ -1,0 +1,370 @@
+#include "audio.c"
+
+void playsound(Rdp*, uchar*, uint) {};
+
+int audiotests(void);
+
+static int testaudio1(void);
+static int testaudio2(void);
+
+
+static char* pkt1 = 
+"07000E04"	// Header
+"F0EEC802"	// dwFlags
+"AB95AC03"	// dwVolume
+"4B8E1731"	// dwPitch
+"0000"	// wDGramPort 
+"2900"	// wNumberOfFormats=41
+"FF"	// cLastBlockConfirmed=255
+"0800"	// wVersion=8
+"00"	// bPad
+// AUDIO_FORMAT[0]
+"06A1"	// wFormatTag=0xA106 (AAC)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=44,100
+"C05D0000"	// nAvgBytesPerSec=0x5DC0
+"0400"	// nBlockAlign=4 
+"1000"	// wBitsPerSample=16
+"0000"	// cbSize=0
+// AUDIO_FORMAT[1]
+"06A1"	// wFormatTag=0xA106 (AAC)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=0xAC44
+"204E0000"	// nAvgBytesPerSec=0x4E20
+"0400"	// nBlockAlign=4
+"1000"	// wBitsPerSample=16
+"0000"	// cbSize=0
+// AUDIO_FORMAT[2]
+"06A1"	// wFormatTag=0xA106 (AAC)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=44,100
+"803E0000"	// nAvgBytesPerSec=0x3E80
+"0400"	// nBlockAlign=4
+"1000"	// wBitsPerSample=16
+"0000"	// cbSize=0
+// AUDIO_FORMAT[3]
+"06A1"	// wFormatTag=0xA106 (AAC)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=44,100
+"E02E0000"	// nAvgBytesPerSec=0x2EE0
+"0400"	// nBlockAlign=4
+"1000"	// wBitsPerSample=16
+"0000"	// cbSize=0
+// AUDIO_FORMAT[4]
+"0100"	// wFormatTag=0x0001 (PCM)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=44,100
+"10B10200"	// nAvgBytesPerSec=176,400
+"0400"	// nBlockAlign=4
+"1000"	// wBitsPerSample=16
+"0000"	// cbSize=0
+// AUDIO_FORMAT[5]
+"0600"	// wFormatTag=0x0006 (ALAW)
+"0200"
+"44AC0000"
+"88580100"
+"0200"
+"0800"
+"0000"
+// AUDIO_FORMAT[6]
+"0700"	// wFormatTag=0x0007 (MULAW)
+"0200"
+"44AC0000"
+"88580100"
+"0200"
+"0800"
+"0000"
+// AUDIO_FORMAT[7]
+"0200"	// wFormatTag=0x0002 (ADPCM)
+"0200"	// nChannels=2
+"44AC0000"	// nSamplesPerSec=44,100
+"47AD0000"	// nAvgBytesPerSec=0xAD47
+"0008"	// nBlockAlign=2048
+"0400"	// wBitsPerSample=4
+"2000"	// cbSize=32
+"F4070700"	"00010000"
+"000200FF"	"00000000"
+"C0004000"	"F0000000"
+"CC0130FF"	"880118FF"
+// AUDIO_FORMAT[8]
+"1100"	// wFormatTag=0x11(DVI_ADPCM)
+"0200"
+"44AC0000"
+"DBAC0000"
+"0008"
+"0400"
+"0200"	// cbSize=2
+"F907"
+// AUDIO_FORMAT[9]
+"0600"	// wFormatTag=0x0006 (ALAW)
+"0200"
+"22560000"
+"44AC0000"
+"0200"
+"0800"
+"0000"
+// AUDIO_FORMAT[10]
+"0600"
+"0100"
+"44AC0000"
+"44AC0000"
+"0100"
+"0800"
+"0000"
+// AUDIO_FORMAT[11]
+"0700"
+"0200"
+"22560000"
+"44AC0000"
+"0200"
+"0800"
+"0000"
+// AUDIO_FORMAT[11]
+"0700"
+"0100"
+"44AC0000"
+"44AC0000"
+"0100"
+"0800"
+"0000"
+// AUDIO_FORMAT[12]
+"0200"
+"0200"
+"22560000"
+"27570000"
+"0004"
+"0400"
+"2000"	// cbSize=32
+"F4030700"	"00010000"
+"000200FF"	"00000000"
+"C0004000"	"F0000000"
+"CC0130FF"	"880118FF"
+// AUDIO_FORMAT[13]
+"1100"
+"0200"
+"22560000"
+"B9560000"
+"0004"
+"0400"
+"0200"	// cbSize=2
+"F903"
+// AUDIO_FORMAT[14]
+"0200"
+"0100"
+"44AC0000"
+"A3560000"
+"0004"
+"0400"
+"2000"	// cbSize=32
+"F4070700"	"00010000"
+"000200FF"	"00000000"
+"C0004000"	"F0000000"
+"CC0130FF"	"880118FF"
+// AUDIO_FORMAT[14]
+"1100"
+"0100"
+"44AC0000"
+"6D560000"
+"0004"
+"0400"
+"0200"
+"F907"
+// [15]
+"0600"
+"0200"
+"112B0000"
+"22560000"
+"0200"
+"0800"
+"0000"
+// [16]
+"0600"
+"0100"
+"22560000"
+"22560000"
+"0100"
+"0800"
+"0000"
+// [17]
+"0700"
+"0200"
+"112B0000"
+"22560000"
+"0200"
+"0800"
+"0000"
+// [18]
+"0700"
+"0100"
+"22560000"
+"22560000"
+"0100"
+"0800"
+"0000"
+// [19]
+"0600"
+"0200"
+"401F0000"
+"803E0000"
+"0200"
+"0800"
+"0000"
+// [20]
+"0700"
+"0200"
+"401F0000"
+"803E0000"
+"0200"
+"0800"
+"0000"
+// [21]
+"0200"
+"0200"
+"112B0000"
+"192C0000"
+"0002"
+"0400"
+"2000"
+"F4010700"	"00010000"
+"000200FF"	"00000000"
+"C0004000"	"F0000000"
+"CC0130FF"	"880118FF"
+// [22]
+"1100"
+"0200"
+"112B0000"
+"A92B0000"
+"0002"
+"0400"
+"0200"
+"F901"
+// [23]
+"0200"
+"0100"
+"22560000"
+"932B0000"
+"0002"
+"0400"
+"2000"
+"F4030700"	"00010000"
+"000200FF"	"00000000"
+"C0004000"	"F0000000"
+"CC0130FF"	"880118FF"
+// [24]
+"1100"
+"0100"
+"22560000"
+"5C2B0000"
+"0002"
+"0400"
+"0200"
+"F903"
+// [25]
+"0600"
+"0100"
+"112B0000"
+"112B0000"
+"0100"
+"0800"
+"0000"
+// [26]
+"0700"
+"0100"
+"112B0000"
+"112B0000"
+"0100"
+"0800"
+"0000"
+// [27]
+"3100"	// wFormatTag=0x31 (GSM610)
+"0100"
+"44AC0000"
+"FD220000"
+"4100"
+"0000"
+"0200"
+"4001"	// cbSize=320
+// [28]
+"02000200" "401F0000" "00200000" "00020400"
+"2000F401" "07000001" "00000002" "00FF0000"
+"0000C000" "4000F000" "0000CC01" "30FF8801"
+"18FF1100" "0200401F" "0000AE1F" "00000002"
+"04000200" "F9010600" "0100401F" "0000401F"
+"00000100" "08000000" "07000100" "401F0000"
+"401F0000" "01000800" "00000200" "0100112B"
+"00000C16" "00000001" "04002000" "F4010700"
+"00010000" "000200FF" "00000000" "C0004000"
+"F0000000" "CC0130FF" "880118FF" "11000100"
+"112B0000" "D4150000" "00010400" "0200F901"
+"31000100" "22560000" "7E110000" "41000000"
+"02004001" "02000100" "401F0000" "00100000"
+"00010400" "2000F401" "07000001" "00000002"
+"00FF0000" "0000C000" "4000F000" "0000CC01"
+"30FF8801" "18FF1100" "0100401F" "0000D70F"
+"00000001" "04000200" "F9013100" "0100112B"
+"0000BF08" "00004100" "00000200" "40013100"
+"0100401F" "00005906" "00004100" "00000200"
+"4001";
+
+static int
+testaudio1(){
+	int n, nb;
+	uchar buf[1042];
+	Audiomsg r;
+
+	nb = dec16(buf, sizeof buf, pkt1, strlen(pkt1));
+	n = audiogetmsg(&r, buf, nb);
+	if(n < 0)
+		sysfatal("testaudio1: unexpected error: %r\n");
+	if(n != 1042)
+		sysfatal("testaudio1: len: want %d, got %d\n", 1042, n);
+	if(r.type != Afmt)
+		sysfatal("testaudio1: r.type: want 0x%x, got 0x%x\n",
+			Afmt, r.type);
+	if(r.seq != 255)
+		sysfatal("testaudio1: r.seq: want %ud, got %ud\n",
+			255, r.seq);
+	if(r.ver != 8)
+		sysfatal("testaudio1: r.ver: want %ud, got %ud\n",
+			8, r.ver);
+	if(r.nfmt != 41)
+		sysfatal("testaudio1: r.nfmt: want %ud, got %ud\n",
+			41, r.nfmt);
+	if(r.ndata != 1018)
+		sysfatal("testaudio1: r.bdata: want %ud, got %ud\n",
+			1018, r.ndata);
+	return 0;
+}
+
+static int
+testaudio2()
+{
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Audiomsg m;
+
+	m.type = Afmt;
+	n = audioputmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testaudio2: unexpected error: %r\n");
+	s = smprint("%.*H", n, buf);
+	want = "07002600" "01000000" "FFFFFFFF" "00000100"
+		"00000100" "00050000" "01000200" "44AC0000"
+		"10B10200" "04001000" "0000";
+	if(strcmp(s, want) != 0)
+		sysfatal("testaudio2: want %s, got %s", want, s);
+	if(n != strlen(want)/2)
+		sysfatal("testaudio2: want %ld, got %d", strlen(want)/2, n);
+	return 0;
+}
+
+int
+audiotests()
+{
+	fmtinstall('H', encodefmt);
+
+	testaudio1();
+	testaudio2();
+	return 0;
+}
--- /dev/null
+++ b/byte.c
@@ -1,0 +1,58 @@
+#include <u.h>
+#include "fns.h"
+
+short
+igets(uchar* p)
+{
+	return p[0] | (p[1]<<8);
+}
+	
+long
+igetl(uchar* p)
+{
+ 	return p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24);
+}
+
+void
+iputs(uchar* p, short v)
+{
+	p[0]=(uchar)v;
+	p[1]=(uchar)(v>>8);
+}
+
+void
+iputl(uchar* p, long v)
+{
+	p[0]=(uchar)v;
+	p[1]=(uchar)(v>>8);
+	p[2]=(uchar)(v>>16);
+	p[3]=(uchar)(v>>24);
+}
+
+short
+nhgets(uchar* p)
+{
+	return (p[0]<<8) | p[1];
+}
+
+long
+nhgetl(uchar* p)
+{
+	return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
+}
+
+void
+hnputs(uchar* p, short v)
+{
+	p[0]=(uchar)(v>>8);
+	p[1]=(uchar)v;
+}
+
+void
+hnputl(uchar* p, long v)
+{
+	p[0]=(uchar)(v>>24);
+	p[1]=(uchar)(v>>16);
+	p[2]=(uchar)(v>>8);
+	p[3]=(uchar)v;
+}
--- /dev/null
+++ b/efs_test.c
@@ -1,0 +1,126 @@
+#include <u.h>
+#include <libc.h>
+#include "dat.h"
+#include "fns.h"
+
+char Eshort[]=	"short data";
+char Esmall[]=	"buffer too small";
+int sendvc(Rdp*, char*, uchar*, int) { return -1; }
+
+void testcann(void);
+void testcnrq(void);
+void testsannrq(void);
+
+int audiotests(void);
+
+void
+testsannrq()
+{
+	int n, nb;
+	uchar buf[32];
+	Efsmsg m;
+	char *sannrq;
+
+
+	n = getefsmsg(&m, nil, 0);
+	if(n >= 0)
+		sysfatal("testsannrq: expected error");	
+
+	memset(buf, 8, 0);
+	n = getefsmsg(&m, buf, 8);
+	if(n >= 0)
+		sysfatal("testsannrq: expected error");	
+
+	sannrq = "72446E4901000D0005000000";
+	nb = dec16(buf, sizeof buf, sannrq, strlen(sannrq));
+	//fmtinstall('H', encodefmt);
+	//fprint(2, "testsannrq %.*H\n", nb, buf);
+	n = getefsmsg(&m, buf, nb);
+	if(n < 0)
+		sysfatal("testsannrq: unexpected error: %r\n");
+	if(m.ctype != CTcore)
+		sysfatal("testsannrq: m.ctype: expected 0x%x, got 0x%x\n", CTcore, m.ctype);
+	if(m.pakid != CSann)
+		sysfatal("testsannrq: m.pakid: expected 0x%x, got 0x%x\n", CSann, m.pakid);
+	if(m.vermaj != 1)
+		sysfatal("testsannrq: m.vermaj: expected %d, got %d\n", 1, m.vermaj);
+	if(m.vermin != 13)
+		sysfatal("testsannrq: m.vermin: expected %d, got %d\n", 13, m.vermin);
+	if(m.cid != 5)
+		sysfatal("testsannrq: m.cid: expected %d, got %d\n", 5, m.cid);
+}
+
+void
+testcann()
+{
+	int n;
+	uchar buf[32];
+	Efsmsg m;
+	char *cann,*s;
+
+	m.ctype = CTcore;
+	m.pakid = CCann;
+	m.vermaj = 1;
+	m.vermin = 13;
+	m.cid = 5;
+	n = putefsmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testcann: unexpected errror: %r");
+	fmtinstall('H', encodefmt);
+	s = smprint("%.*H", n, buf);
+	cann = "7244434301000D0005000000";
+	if(strcmp(s, cann) != 0)
+		sysfatal("testcann: expected %s, got %s", cann, s);
+	if(n != strlen(cann)/2)
+		sysfatal("testcann: ret: expected %ld, got %d",
+			strlen(cann)/2, n);
+}
+
+void
+testcnrq()
+{
+	int n;
+	uchar buf[64];
+	Efsmsg t;
+	char *targ,*s;
+
+	t.ctype = CTcore;
+	t.pakid= CCnrq;
+	t.cname = "TSDEV-SELFHOST";
+	n = putefsmsg(buf, sizeof buf, &t);
+	if(n < 0)
+		sysfatal("testcann: unexpected errror: %r");
+	fmtinstall('H', encodefmt);
+	s = smprint("%.*H", n, buf);
+	/* [MS-RDPEFS] 4.5 Client Name Request */
+	targ =
+		"7244"	// Header->RDPDR_CTYP_CORE = 0x4472
+		"4E43"	// Header->PAKID_CORE_CLIENT_NAME = 0x434e
+		"01000000"	// UnicodeFlag = 0x00000001
+		"00000000"	// CodePage = 0x00000000
+		"1E000000"	// ComputerNameLen = 0x0000001e (30)
+		"54005300"	// ComputerName
+		"44004500"	// ComputerName (continued)
+		"56002D00"	// ComputerName (continued)
+		"53004500"	// ComputerName (continued)
+		"4C004600"	// ComputerName (continued)
+		"48004F00"	// ComputerName (continued)
+		"53005400"	// ComputerName (continued)
+		"0000";	// ComputerName (continued)
+	if(strcmp(s, targ) != 0)
+		sysfatal("testcann: expected %s, got %s", targ, s);
+	if(n != strlen(targ)/2)
+		sysfatal("testcann: ret: expected %ld, got %d",
+			strlen(targ)/2, n);
+}
+
+void
+main(int, char**)
+{
+	testsannrq();
+	testcann();
+	testcnrq();
+	audiotests();
+	print("ok\n");
+	exits(nil);
+}
--