xref: /plan9/sys/src/cmd/vnc/vnc.h (revision 5e4924093ecb86f7174bf23023955abc83fb6962)
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;