19a747e4fSDavid du Colombier #include <u.h> 29a747e4fSDavid du Colombier #include <libc.h> 39a747e4fSDavid du Colombier #include <bio.h> 49a747e4fSDavid du Colombier #include <draw.h> 59a747e4fSDavid du Colombier #include <memdraw.h> 69a747e4fSDavid du Colombier 79a747e4fSDavid du Colombier typedef struct Pixfmt Pixfmt; 89a747e4fSDavid du Colombier typedef struct Colorfmt Colorfmt; 99a747e4fSDavid du Colombier typedef struct Vnc Vnc; 109a747e4fSDavid du Colombier 119a747e4fSDavid du Colombier struct Colorfmt { 129a747e4fSDavid du Colombier int max; 139a747e4fSDavid du Colombier int shift; 149a747e4fSDavid du Colombier }; 159a747e4fSDavid du Colombier 169a747e4fSDavid du Colombier struct Pixfmt { 179a747e4fSDavid du Colombier int bpp; 189a747e4fSDavid du Colombier int depth; 199a747e4fSDavid du Colombier int bigendian; 209a747e4fSDavid du Colombier int truecolor; 219a747e4fSDavid du Colombier Colorfmt red; 229a747e4fSDavid du Colombier Colorfmt green; 239a747e4fSDavid du Colombier Colorfmt blue; 249a747e4fSDavid du Colombier }; 259a747e4fSDavid du Colombier 269a747e4fSDavid du Colombier struct Vnc { 279a747e4fSDavid du Colombier QLock; 289a747e4fSDavid du Colombier int datafd; /* for network connection */ 299a747e4fSDavid du Colombier int ctlfd; /* control for network connection */ 309a747e4fSDavid du Colombier 319a747e4fSDavid du Colombier Biobuf in; 329a747e4fSDavid du Colombier Biobuf out; 339a747e4fSDavid du Colombier 349a747e4fSDavid du Colombier Point dim; 359a747e4fSDavid du Colombier Pixfmt; 36f8e525acSDavid du Colombier char *name; /* client only */ 379a747e4fSDavid du Colombier }; 389a747e4fSDavid du Colombier 399a747e4fSDavid du Colombier enum { 409a747e4fSDavid du Colombier /* authentication negotiation */ 419a747e4fSDavid du Colombier AFailed = 0, 429a747e4fSDavid du Colombier ANoAuth, 439a747e4fSDavid du Colombier AVncAuth, 449a747e4fSDavid du Colombier 459a747e4fSDavid du Colombier /* vnc auth negotiation */ 469a747e4fSDavid du Colombier VncAuthOK = 0, 479a747e4fSDavid du Colombier VncAuthFailed, 489a747e4fSDavid du Colombier VncAuthTooMany, 499a747e4fSDavid du Colombier VncChalLen = 16, 509a747e4fSDavid du Colombier 519a747e4fSDavid du Colombier /* server to client */ 529a747e4fSDavid du Colombier MFrameUpdate = 0, 539a747e4fSDavid du Colombier MSetCmap, 549a747e4fSDavid du Colombier MBell, 559a747e4fSDavid du Colombier MSCut, 56f8e525acSDavid du Colombier MSAck, 579a747e4fSDavid du Colombier 589a747e4fSDavid du Colombier /* client to server */ 599a747e4fSDavid du Colombier MPixFmt = 0, 609a747e4fSDavid du Colombier MFixCmap, 619a747e4fSDavid du Colombier MSetEnc, 629a747e4fSDavid du Colombier MFrameReq, 639a747e4fSDavid du Colombier MKey, 649a747e4fSDavid du Colombier MMouse, 659a747e4fSDavid du Colombier MCCut, 669a747e4fSDavid du Colombier 679a747e4fSDavid du Colombier /* image encoding methods */ 689a747e4fSDavid du Colombier EncRaw = 0, 699a747e4fSDavid du Colombier EncCopyRect = 1, 709a747e4fSDavid du Colombier EncRre = 2, 719a747e4fSDavid du Colombier EncCorre = 4, 729a747e4fSDavid du Colombier EncHextile = 5, 739a747e4fSDavid du Colombier EncZlib = 6, /* 6,7,8 have been used by others */ 749a747e4fSDavid du Colombier EncTight = 7, 759a747e4fSDavid du Colombier EncZHextile = 8, 769a747e4fSDavid du Colombier EncMouseWarp = 9, 779a747e4fSDavid du Colombier 789a747e4fSDavid du Colombier /* paramaters for hextile encoding */ 799a747e4fSDavid du Colombier HextileDim = 16, 809a747e4fSDavid du Colombier HextileRaw = 1, 819a747e4fSDavid du Colombier HextileBack = 2, 829a747e4fSDavid du Colombier HextileFore = 4, 839a747e4fSDavid du Colombier HextileRects = 8, 849a747e4fSDavid du Colombier HextileCols = 16 859a747e4fSDavid du Colombier }; 869a747e4fSDavid du Colombier 879a747e4fSDavid du Colombier /* 889a747e4fSDavid du Colombier * we're only using the ulong as a place to store bytes, 899a747e4fSDavid du Colombier * and as something to compare against. 909a747e4fSDavid du Colombier * the bytes are stored in little-endian format. 919a747e4fSDavid du Colombier */ 929a747e4fSDavid du Colombier typedef ulong Color; 939a747e4fSDavid du Colombier 949a747e4fSDavid du Colombier /* auth.c */ 95*5e492409SDavid du Colombier extern int vncauth(Vnc*, char*); 969a747e4fSDavid du Colombier extern int vnchandshake(Vnc*); 97f8e525acSDavid du Colombier extern int vncsrvauth(Vnc*); 98f8e525acSDavid du Colombier extern int vncsrvhandshake(Vnc*); 999a747e4fSDavid du Colombier 1009a747e4fSDavid du Colombier /* proto.c */ 1019a747e4fSDavid du Colombier extern Vnc* vncinit(int, int, Vnc*); 1029a747e4fSDavid du Colombier extern uchar vncrdchar(Vnc*); 1039a747e4fSDavid du Colombier extern ushort vncrdshort(Vnc*); 1049a747e4fSDavid du Colombier extern ulong vncrdlong(Vnc*); 1059a747e4fSDavid du Colombier extern Point vncrdpoint(Vnc*); 1069a747e4fSDavid du Colombier extern Rectangle vncrdrect(Vnc*); 1079a747e4fSDavid du Colombier extern Rectangle vncrdcorect(Vnc*); 1089a747e4fSDavid du Colombier extern Pixfmt vncrdpixfmt(Vnc*); 1099a747e4fSDavid du Colombier extern void vncrdbytes(Vnc*, void*, int); 1109a747e4fSDavid du Colombier extern char* vncrdstring(Vnc*); 1119a747e4fSDavid du Colombier extern char* vncrdstringx(Vnc*); 1129a747e4fSDavid du Colombier extern void vncwrstring(Vnc*, char*); 1139a747e4fSDavid du Colombier extern void vncgobble(Vnc*, long); 1149a747e4fSDavid du Colombier 1159a747e4fSDavid du Colombier extern void vncflush(Vnc*); 1169a747e4fSDavid du Colombier extern void vncterm(Vnc*); 1179a747e4fSDavid du Colombier extern void vncwrbytes(Vnc*, void*, int); 1189a747e4fSDavid du Colombier extern void vncwrlong(Vnc*, ulong); 1199a747e4fSDavid du Colombier extern void vncwrshort(Vnc*, ushort); 1209a747e4fSDavid du Colombier extern void vncwrchar(Vnc*, uchar); 1219a747e4fSDavid du Colombier extern void vncwrpixfmt(Vnc*, Pixfmt*); 1229a747e4fSDavid du Colombier extern void vncwrrect(Vnc*, Rectangle); 1239a747e4fSDavid du Colombier extern void vncwrpoint(Vnc*, Point); 1249a747e4fSDavid du Colombier 1259a747e4fSDavid du Colombier extern void vnclock(Vnc*); /* for writing */ 1269a747e4fSDavid du Colombier extern void vncunlock(Vnc*); 1279a747e4fSDavid du Colombier 1289a747e4fSDavid du Colombier extern void hexdump(void*, int); 1299a747e4fSDavid du Colombier 1309a747e4fSDavid du Colombier /* implemented by clients of the io library */ 1319a747e4fSDavid du Colombier extern void vnchungup(Vnc*); 1329a747e4fSDavid du Colombier 1339a747e4fSDavid du Colombier extern int verbose; 134b7b24591SDavid du Colombier extern char* serveraddr;