shithub: rd

Download patch

ref: 8fb518ad2fb092e8bad347bd0623935a7298eb0d
parent: 72ab06eec3a686b276790c3121ac51561cd2ff01
author: Yaroslav Kolomiiets <[email protected]>
date: Sat May 14 19:15:43 EDT 2016

cosmetic touches

--- a/dat.h
+++ b/dat.h
@@ -25,7 +25,6 @@
 {
 	int		fd;			/* connection I/O descriptor */
 	long		sproto;		/* magic to bounce back to server */
-	char		*label;		/* window label */
 	char		*local;		/* local system name */
 	char		*user;		/* user name for auto logon  */
 	char		*windom;		/* domain for auto logon */
@@ -50,8 +49,8 @@
 };
 int	starttls(Rdp*);
 int	rdphandshake(Rdp*);
-int	x224connect(Rdp*);
-int	x224disconnect(Rdp*);
+int	x224handshake(Rdp*);
+int	x224hangup(Rdp*);
 void	sendclientinfo(Rdp*);
 void	confirmactive(Rdp*);
 void	assync(Rdp*);
@@ -112,11 +111,13 @@
 	Mconnected,	/* S: MCS Connect Response + GCC Confce Create Resp */
 	Mactivated,	/* C: MCS Confirm Active */
 	Mclosing,		/* S: Disconnect Provider Ultimatum */
-	Aflow,		/* S: T.128 Flow PDU */
+	Mvcdata,		/* S,C: MCS virtual channel data, raw */
 	Async,		/* C: MPAS 2.2.1.14 Client Synchronize PDU */
 	Actl,			/* C: MPAS 2.2.1.15 Control PDU */
 	Afontls,		/* C: MPAS 2.2.1.18 Client Font List PDU */
 	Ainput,      	/* C: MPAS (T.128) Input Event */
+	Aupdate,		/* S: T.128 ASPDU or a "Fast-Path" RDP PDU */
+	Aflow,		/* S: T.128 Flow PDU */
 	Dclientinfo,	/* C: RDP 2.2.1.11 Client Info */
 	Dsupress,		/* C: RDP 2.2.11.3 Suppress Output PDU */
 	Lneedlicense,	/* S: Licensing PDU */
@@ -124,8 +125,6 @@
 	Lhavechal,	/* S: Licensing PDU */
 	Lnolicense,	/* C: Licensing PDU */
 	Ldone,		/* S: Licensing PDU */
-	Aupdate,		/* S: T.128 ASPDU or a "Fast-Path" RDP PDU */
-	Mvcdata,		/* S,C: MCS virtual channel data, raw */
 };
 
 enum /* Msg.negproto - for msg.c x224.c */
@@ -160,8 +159,7 @@
 	int	mtype;	/* Ainput */
 	ulong	msec;	/* Ainput */
 	ulong	flags;	/* Ainput, Mvcdata */
-	int	iarg1;	/* Ainput */
-	int	iarg2;	/* Ainput */
+	int	iarg[2];	/* Ainput */
 	int	action;	/* Actl */
 	int	allow;	/* Dsupress */
 	uchar*	data;	/* Mvcdata, Aupdate */
--- a/kbd.c
+++ b/kbd.c
@@ -111,18 +111,18 @@
 kbdsendscan(Rdp* c, int sc, int mod)
 {
 	long msec;
-	int f;
+	int x;
 
-	f = 0;
+	x = 0;
 	if(sc&Sext)
-		f = KeyEx;
+		x = KeyEx;
 	sc &= ~Sext;
 
 	msec = time(nil);
 	if(mod != 0)
 		passinput(c, msec, InputKeycode, 0, mod, 0);
-	passinput(c, msec, InputKeycode, f|0, sc, 0);
-	passinput(c, msec, InputKeycode, f|KeyUp, sc, 0);
+	passinput(c, msec, InputKeycode, x|0, sc, 0);
+	passinput(c, msec, InputKeycode, x|KeyUp, sc, 0);
 	if(mod != 0)
 		passinput(c, msec, InputKeycode, KeyUp, mod, 0);
 }
--- a/mouse.c
+++ b/mouse.c
@@ -18,9 +18,9 @@
 static int mfd = -1;
 
 static void
-sendmouse(Rdp* c, Mouse m, int flags)
+sendmouse(Rdp* c, Mouse m, int f)
 {
-	passinput(c, m.msec, InputMouse, flags, m.xy.x, m.xy.y);
+	passinput(c, m.msec, InputMouse, f, m.xy.x, m.xy.y);
 }
 
 static void
--- a/msg.c
+++ b/msg.c
@@ -247,8 +247,8 @@
 		PLONG(q+4, m->msec);
 		PSHORT(q+8, m->mtype);
 		PSHORT(q+10, m->flags);
-		PSHORT(q+12, m->iarg1);
-		PSHORT(q+14, m->iarg2);
+		PSHORT(q+12, m->iarg[0]);
+		PSHORT(q+14, m->iarg[1]);
 		return len;
 
 	case Lreq:
--- a/rd.c
+++ b/rd.c
@@ -5,7 +5,7 @@
 #include "dat.h"
 #include "fns.h"
 
-Rdp rd = {
+Rdp conn = {
 	.fd = -1,
 	.depth = 16,
 	.windom = "",
@@ -41,7 +41,7 @@
 }
 
 static int
-startmouseproc(void)
+startmouseproc(Rdp* c)
 {
 	int mpid;
 
@@ -54,13 +54,13 @@
 		return mpid;
 	}
 	atexit(atexitkiller);
-	readdevmouse(&rd);
+	readdevmouse(c);
 	exits("mouse eof");
 	return 0;
 }
 
 static int
-startkbdproc(void)
+startkbdproc(Rdp* c)
 {
 	int pid;
 	switch(pid = rfork(RFPROC|RFMEM)){
@@ -72,13 +72,13 @@
 		return pid;
 	}
 	atexit(atexitkiller);
-	readkbd(&rd);
+	readkbd(c);
 	exits("kbd eof");
 	return 0;
 }
 
 static int
-startsnarfproc(void)
+startsnarfproc(Rdp* c)
 {
 	int pid;
 
@@ -92,7 +92,7 @@
 	}
 	atexit(atexitkiller);
 	initsnarf();
-	pollsnarf(&rd);
+	pollsnarf(c);
 	exits("snarf eof");
 	return 0;
 }
@@ -119,12 +119,12 @@
 void
 main(int argc, char *argv[])
 {
-	int doauth, fd;
-	char *server, *addr, *keyspec;
+	int doauth;
+	char *server, *addr, *keyspec, *label;
 	UserPasswd *creds;
+	Rdp* c;
 
-	rd.local = getenv("sysname");
-	rd.user = getenv("user");
+	c = &conn;
 
 	keyspec = "";
 	doauth = 1;
@@ -137,25 +137,22 @@
 		keyspec = EARGF(usage());
 		break;
 	case 'T':
-		rd.label = strdup(EARGF(usage()));
+		label = strdup(EARGF(usage()));
 		break;
 	case 'd':
-		rd.windom = strdup(EARGF(usage()));
+		c->windom = strdup(EARGF(usage()));
 		break;
 	case 's':
-		rd.shell = strdup(EARGF(usage()));
+		c->shell = strdup(EARGF(usage()));
 		break;
 	case 'c':
-		rd.rwd = strdup(EARGF(usage()));
+		c->rwd = strdup(EARGF(usage()));
 		break;
-	case 'n':
-		rd.local = estrdup(EARGF(usage()));
-		break;
 	case 'a':
-		rd.depth = atol(EARGF(usage()));
+		c->depth = atol(EARGF(usage()));
 		break;
 	case '0':
-		rd.wantconsole = 1;
+		c->wantconsole = 1;
 		break;
 	default:
 		usage();
@@ -165,58 +162,59 @@
 		usage();
 
 	server = argv[0];
-	if(rd.local == nil)
+
+	c->local = getenv("sysname");
+	c->user = getenv("user");
+	if(c->local == nil)
 		sysfatal("set $sysname or use -n\n");
-	if(rd.user == nil)
+	if(c->user == nil)
 		sysfatal("set $user");
-	if (rd.label == nil)
-		rd.label = smprint("rd %s", server);
-
 	if(doauth){
 		creds = auth_getuserpasswd(auth_getkey, "proto=pass service=rdp %s", keyspec);
 		if(creds == nil)
 			fprint(2, "factotum: %r\n");
 		else {
-			rd.user = creds->user;
-			rd.passwd = creds->passwd;
+			c->user = creds->user;
+			c->passwd = creds->passwd;
 		}
 	}else
-		rd.user = "";
-	initvc(&rd);
+		c->user = "";
 
+	initvc(c);
+
 	addr = netmkaddr(server, "tcp", "3389");
-	fd = dial(addr, nil, nil, nil);
-	if(fd < 0)
+	c->fd = dial(addr, nil, nil, nil);
+	if(c->fd < 0)
 		sysfatal("dial %s: %r", addr);
-	rd.fd = fd;
-	if(x224connect(&rd) < 0)
-		sysfatal("connect: %r");
+	if(x224handshake(c) < 0)
+		sysfatal("X.224 handshake: %r");
 
-	if(initdraw(drawerror, nil, rd.label) < 0)
+	if(label == nil)
+		label = smprint("rd %s", server);
+	if(initdraw(drawerror, nil, label) < 0)
 		sysfatal("initdraw: %r");
 	display->locking = 1;
 	unlockdisplay(display);
 
-	rd.ysz = Dy(screen->r);
-	rd.xsz = (Dx(screen->r) +3) & ~3;
+	c->ysz = Dy(screen->r);
+	c->xsz = (Dx(screen->r) +3) & ~3;
 
-	if(rdphandshake(&rd) < 0)
+	if(rdphandshake(c) < 0)
 		sysfatal("handshake: %r");
 
 	atexit(atexitkiller);
 	atexitkill(getpid());
-	atexitkill(startmouseproc());
-	atexitkill(startkbdproc());
-	atexitkill(startsnarfproc());
+	atexitkill(startmouseproc(c));
+	atexitkill(startkbdproc(c));
+	atexitkill(startsnarfproc(c));
 
-	readnet(&rd);
+	readnet(c);
 
-	x224disconnect(&rd);
-
-	if(!rd.active)
+	x224hangup(c);
+	if(!c->active)
 		exits(nil);
-	if(rd.hupreason)
-		sysfatal("disconnect reason code %d", rd.hupreason);
+	if(c->hupreason)
+		sysfatal("disconnect reason code %d", c->hupreason);
 	sysfatal("hangup");
 }
 
--- a/rpc.c
+++ b/rpc.c
@@ -9,7 +9,7 @@
 int	joinchannel(Rdp*,int,int);
 
 int
-x224connect(Rdp* c)
+x224handshake(Rdp* c)
 {
 	Msg t, r;
 
@@ -27,16 +27,16 @@
 		werrstr("server refused STARTTLS");
 		return -1;
 	}
+	c->sproto = r.negproto;
 
 	if(starttls(c) < 0)
 		return -1;
 
-	c->sproto = r.negproto;
 	return 0;
 }
 
 int
-x224disconnect(Rdp* c)
+x224hangup(Rdp* c)
 {
 	Msg t;
 
@@ -61,7 +61,6 @@
 	t.nvc = c->nvc;
 	if(writemsg(c, &t) <= 0)
 		sysfatal("Connect Initial: writemsg: %r");
-
 	if(readmsg(c, &r) <= 0)
 		sysfatal("Connect Response: readmsg: %r");
 	if(r.type != Mconnected)
@@ -142,12 +141,12 @@
 	mcsuid = c->mcsuid;
 	userchan = c->userchan;
 
-	if(joinchannel(c, mcsuid, userchan) < 0)
+	if(joinchannel(c, c->mcsuid, c->userchan) < 0)
 		return -1;
-	if(joinchannel(c, mcsuid, GLOBALCHAN) < 0)
+	if(joinchannel(c, c->mcsuid, GLOBALCHAN) < 0)
 		return -1;
 	for(i = 0; i < nv; i++)
-		if(joinchannel(c, mcsuid, v[i].mcsid) < 0)
+		if(joinchannel(c, c->mcsuid, v[i].mcsid) < 0)
 			return -1;
 
 	sendclientinfo(c);
@@ -363,7 +362,7 @@
 }
 
 void
-passinput(Rdp* c, ulong msec, int mtype, int iflags, int iarg1, int iarg2)
+passinput(Rdp* c, ulong msec, int t, int f, int a, int b)
 {
 	Msg t;
 
@@ -370,11 +369,11 @@
 	t.type = Ainput;
 	t.originid = c->userchan;
 	t.shareid = c->shareid;
-	t.mtype = mtype;
 	t.msec = msec;
-	t.flags = iflags;
-	t.iarg1 = iarg1;
-	t.iarg2 = iarg2;
+	t.mtype = t;
+	t.flags = f;
+	t.iarg[0] = a;
+	t.iarg[1] = b;
 	if(writemsg(c, &t) <= 0)
 		sysfatal("passinput: %r");
 }