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);
+}
--
⑨