ref: a035fa013e92d436806dac855c4dd772292e4c20
dir: /sys/src/cmd/vnc/vnc.h/
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <draw.h>
#include <memdraw.h>
typedef struct Pixfmt	Pixfmt;
typedef struct Colorfmt	Colorfmt;
typedef struct Vnc	Vnc;
struct Colorfmt {
	int		max;
	int		shift;
};
struct Pixfmt {
	int		bpp;
	int		depth;
	int		bigendian;
	int		truecolor;
	Colorfmt	red;
	Colorfmt	green;
	Colorfmt	blue;
};
struct Vnc {
	QLock;
	int		datafd;			/* for network connection */
	int		ctlfd;			/* control for network connection */
	Biobuf		in;
	Biobuf		out;
	Rectangle	dim;
	Pixfmt;
	char		*name;	/* client only */
	int		canresize;
	struct {
		ulong		id;
		Rectangle	rect;
		ulong		flags;
	}		screen[1];
};
enum {
	/* authentication negotiation */
	AFailed		= 0,
	ANoAuth,
	AVncAuth,
	/* vnc auth negotiation */
	VncAuthOK	= 0,
	VncAuthFailed,
	VncAuthTooMany,
	VncChalLen	= 16,
	/* server to client */
	MFrameUpdate	= 0,
	MSetCmap,
	MBell,
	MSCut,
	MSAck,
	/* client to server */
	MPixFmt		= 0,
	MFixCmap,
	MSetEnc,
	MFrameReq,
	MKey,
	MMouse,
	MCCut,
	MSetDesktopSize = 251,
	/* image encoding methods */
	EncRaw		= 0,
	EncCopyRect	= 1,
	EncRre		= 2,
	EncCorre	= 4,
	EncHextile	= 5,
	EncZlib		= 6,  /* 6,7,8 have been used by others */
	EncTight	= 7,
	EncZHextile	= 8,
	EncMouseWarp	= 9,
	EncDesktopSize	= -223,
	EncXDesktopSize	= -308,
	/* paramaters for hextile encoding */
	HextileDim	= 16,
	HextileRaw	= 1,
	HextileBack	= 2,
	HextileFore	= 4,
	HextileRects	= 8,
	HextileCols	= 16
};
/*
 * we're only using the ulong as a place to store bytes,
 * and as something to compare against.
 * the bytes are stored in little-endian format.
 */
typedef ulong Color;
/* auth.c */
extern	int		vncauth(Vnc*, char*);
extern	int		vnchandshake(Vnc*);
extern	int		vncsrvauth(Vnc*);
extern	int		vncsrvhandshake(Vnc*);
/* proto.c */
extern	Vnc*		vncinit(int, int, Vnc*);
extern	uchar		vncrdchar(Vnc*);
extern	ushort		vncrdshort(Vnc*);
extern	ulong		vncrdlong(Vnc*);
extern	Point		vncrdpoint(Vnc*);
extern	Rectangle	vncrdrect(Vnc*);
extern	Rectangle	vncrdcorect(Vnc*);
extern	Pixfmt		vncrdpixfmt(Vnc*);
extern	void		vncrdbytes(Vnc*, void*, int);
extern	char*		vncrdstring(Vnc*);
extern	char*	vncrdstringx(Vnc*);
extern	void		vncwrstring(Vnc*, char*);
extern  void    	vncgobble(Vnc*, long);
extern	void		vncflush(Vnc*);
extern	void		vncterm(Vnc*);
extern	void		vncwrbytes(Vnc*, void*, int);
extern	void		vncwrlong(Vnc*, ulong);
extern	void		vncwrshort(Vnc*, ushort);
extern	void		vncwrchar(Vnc*, uchar);
extern	void		vncwrpixfmt(Vnc*, Pixfmt*);
extern	void		vncwrrect(Vnc*, Rectangle);
extern	void		vncwrpoint(Vnc*, Point);
extern	void		vnclock(Vnc*);		/* for writing */
extern	void		vncunlock(Vnc*);
extern	void		hexdump(void*, int);
/* implemented by clients of the io library */
extern	void		vnchungup(Vnc*);
extern	int		verbose;
extern	char*		serveraddr;