// Global types and definitions

// list to store user information from ini file
struct user
{
	char name[20];
	user * next;
};


// return values from DeletePlaylistEntry
#define DPE_OK			1
#define DPE_NOREAD		2
#define DPE_NOWRITE		3


// playlist for deleting items
struct playlistitem
{
	int number;
	char time[10];
	char name[MAX_PATH];
	char path[MAX_PATH];
	playlistitem * next;
};

struct fileinfo
{
	char path[MAX_PATH];
	char name[MAX_PATH];
	bool playlist;
	bool urlsct;
	fileinfo *next;
	fileinfo *prev;
};

struct filesearch
{
	fileinfo *firstfile;
	fileinfo *firstdir;
	int dnodes;
	int fnodes;
};

// Request IDs
#define RID_GET			101
#define RID_HEAD		102

// Image types
#define IMG_GIF			301
#define IMG_ICO			302

// Access level IDs. These get OR-ed together to come up with a single value
#define AUTH_ANON		0		
#define AUTH_BROWSE		1
#define AUTH_DOWNLOAD	2
#define AUTH_PLAYLIST	4
#define AUTH_CLEAR		8
#define AUTH_CONTROL	16
#define AUTH_SERVER		32

// Target frames
#define T_NONE			601
#define T_MAIN			602
#define T_BOTTOM		603
#define T_TOP			604

// holds information about 1 name/value pair  ...?<name>=<value>&...
struct argument
{
	char name[30];
	char value[128];
};

// Main connection information structure
struct http_request
{
	char user[20];					// logged on user (or 'anon')
	char request[10];				// 'GET', 'HEAD' etc
	int reqID;						// integer representing the above
	char file[512];					// full requested url
	char page[MAX_PATH];			// just the page, without arguments
	char http_version[10];			// HTTP Version; eg. "HTTP/1.0"
	int responsecode;				// HTTP response; 200, 400, 401 etc
	char realm[50];					// authentication realm
	int auth;						// access level
	argument pairs[50];				// name/value pairs for arguments
	int num_args;					// number of arguments
};


#define BUF_LEN 10000

// Return states
#define ST_NONE			200
#define ST_CLOSE		201
#define ST_CLOSEBODY	202

struct connection
{
	char output[BUF_LEN];
	http_request http;
	SOCKET socket;
	sockaddr_in remote_host;
	int state;
	bool log;

};