5 char* charset = "utf-8";
6 char* encodings = "copyrect hextile corre rre raw mousewarp";
15 static int vncstart(Vnc*, int);
22 static int pids[NProcs];
23 static char killkin[] = "die vnc kin";
26 * called by any proc when exiting to tear everything down.
40 for(i = 0; i < NProcs; i++)
41 if(pids[i] != 0 && pids[i] != pid)
42 postnote(PNPROC, pids[i], killkin);
46 netmkvncaddr(char *server)
48 char *p, portstr[NETPATHLEN];
54 if(p = strchr(server, ':')) {
58 snprint(portstr, sizeof portstr, "%d", port);
59 return netmkaddr(server, "tcp", portstr);
65 sysfatal("connection closed");
71 fprint(2, "usage: vncv [-e encodings] [-k keypattern] [-l charset] [-csv] host[:n]\n");
76 main(int argc, char **argv)
78 int p, dfd, cfd, shared;
79 char *keypattern, *label;
89 encodings = EARGF(usage());
101 keypattern = EARGF(usage());
104 charset = EARGF(usage());
113 serveraddr = strdup(argv[0]);
114 dfd = dial(netmkvncaddr(argv[0]), nil, nil, &cfd);
116 sysfatal("cannot dial %s: %r", serveraddr);
120 memset(&conn, 0, sizeof(conn));
121 if((dfd = tlsClient(dfd, &conn)) < 0)
122 sysfatal("tlsClient: %r");
123 /* XXX check thumbprint */
125 free(conn.sessionID);
127 vnc = vncinit(dfd, cfd, nil);
129 if(vnchandshake(vnc) < 0)
130 sysfatal("handshake failure: %r");
131 if(vncauth(vnc, keypattern) < 0)
132 sysfatal("authentication failure: %r");
133 if(vncstart(vnc, shared) < 0)
134 sysfatal("init failure: %r");
136 label = smprint("vnc %s", serveraddr);
137 if(initdraw(0, 0, label) < 0)
138 sysfatal("initdraw: %r");
140 display->locking = 1;
141 unlockdisplay(display);
143 d = addpt(vnc->dim, Pt(2*Borderwidth, 2*Borderwidth));
145 fprint(2, "screen size %P, desktop size %P\n", display->image->r.max, d);
155 switch(p = rfork(RFPROC|RFMEM)){
157 sysfatal("rfork: %r");
167 switch(p = rfork(RFPROC|RFMEM)){
169 sysfatal("rfork: %r");
179 switch(p = rfork(RFPROC|RFMEM)){
181 sysfatal("rfork: %r");
196 vncstart(Vnc *v, int shared)
198 vncwrchar(v, shared);
200 v->dim = vncrdpoint(v);
201 v->Pixfmt = vncrdpixfmt(v);
202 v->name = vncrdstring(v);