12 static char version[VerLen+1] = "RFB 003.003\n";
15 vncsrvhandshake(Vnc *v)
19 strecpy(msg, msg+sizeof msg, version);
21 fprint(2, "server version: %s\n", msg);
22 vncwrbytes(v, msg, VerLen);
25 vncrdbytes(v, msg, VerLen);
27 fprint(2, "client version: %s\n", msg);
37 vncrdbytes(v, msg, VerLen);
38 if(strncmp(msg, "RFB ", 4) != 0){
39 werrstr("bad rfb version \"%s\"", msg);
43 fprint(2, "server version: %s\n", msg);
45 vncwrbytes(v, msg, VerLen);
51 vncauth(Vnc *v, char *keypattern)
54 uchar chal[VncChalLen];
63 werrstr("unknown auth type 0x%lux", auth);
65 fprint(2, "unknown auth type 0x%lux\n", auth);
69 reason = vncrdstring(v);
70 werrstr("%s", reason);
72 fprint(2, "auth failed: %s\n", reason);
77 fprint(2, "no auth needed\n");
81 vncrdbytes(v, chal, VncChalLen);
82 server = strdup(serveraddr);
83 p = strrchr(server, ':');
86 if(auth_respond(chal, VncChalLen, nil, 0, chal, VncChalLen, auth_getkey,
87 "proto=vnc role=client server=%s %s", server, keypattern) != VncChalLen){
92 vncwrbytes(v, chal, VncChalLen);
98 werrstr("unknown server response 0x%lux", auth);
101 werrstr("server says authentication failed");
104 werrstr("server says too many tries");
120 if((c = auth_challenge("proto=vnc role=server user=%q", getuser()))==nil)
121 sysfatal("vncchal: %r");
122 if(c->nchal != VncChalLen)
123 sysfatal("vncchal got %d bytes wanted %d", c->nchal, VncChalLen);
124 vncwrlong(v, AVncAuth);
125 vncwrbytes(v, c->chal, VncChalLen);
128 vncrdbytes(v, c->chal, VncChalLen);
130 c->nresp = VncChalLen;
131 ai = auth_response(c);
134 fprint(2, "vnc auth failed: server factotum: %r\n");
135 vncwrlong(v, VncAuthFailed);
140 vncwrlong(v, VncAuthOK);