////////////////////////////////////////////////////////////////////////////////////////////////
//
//  mod_csp -- Apache mod_csp module
//
////////////////////////////////////////////////////////////////////////////////////////////////

// for printf
#include <stdio.h>
#include <httpd.h>
#include <http_config.h>
#include <http_protocol.h>
#include <ap_config.h>
#include <apr_hash.h>
#include <apr_strings.h>
#include <signal.h>
#include <setjmp.h>
#include <ap_regex.h>


#ifdef __CSP__
#else

#define GET		__get__
#define POST	__post__
#define COOKIE	__cookie__
#define REQUEST __r__
#define POOL __p__

#define HEADER_IN	__r__->headers_in
#define HEADER_OUT	__r__->headers_out

#define tbl_set(a,b,c)		apr_table_set(a,b,c)
#define tbl_add(a,b,c)		apr_table_add(a,b,c)
#define tbl_clr(a)			apr_table_clear(a);
#define tbl_unset(a,b)		apr_table_unset(a,b)

#undef printf
#define printf(arg,...) (arg==NULL)?NONE:ap_rprintf(__r__,arg, ##__VA_ARGS__)
#define psprintf(arg,...) (arg==NULL)?NONE:apr_psprintf(__r__,arg, ##__VA_ARGS__)
#define stnjoin(...) apr_pstrcat(__p__,__VA_ARGS__,NULL)
#define stncat(...) apr_pstrcat(__p__,__VA_ARGS__,NULL)
#define stndup(a) apr_pstrdup (__p__,a)


#define unescape_url(a)		ap_unescape_url(a)
#define escape_uri(a)		ap_escape_uri(__p__,a)
#define escape_html(a)		ap_escape_html(__p__,a)


#define	REGEXOK				0
#define	REGEXNG				1
#define	REGEXERROR			-1

typedef apr_table_t * table;

extern  char * NONE;

struct _sessionTable {
	int datasize;
	void * data;
	int keysize;
	void * key;
};

struct _param {
	request_rec * r;			//	request_rec
	apr_table_t * g;			//	get
	apr_table_t * p;			//	post
	apr_table_t * c;			//	cookie
	int * session_index;
	struct _sessionTable * session;
	int timeout;
	int (* func)();				//	test
};

///////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////
extern request_rec * __r__;
extern apr_pool_t * __p__;
extern apr_table_t * __get__;
extern apr_table_t * __post__;
extern apr_table_t * __cookie__;
extern 	int * __session_index__;
extern struct _sessionTable * __session__;
extern jmp_buf jbuf;
extern void set_content_type(char * str);
extern int regex_match(char * str,char * pattern);
extern char * regex_replace(char *src, char *pattern, char *replaceStr);

extern apr_table_t * tbl_make(int size);

extern int tbl_size(apr_table_t * __table__);
extern char * tbl_key_i(apr_table_t * __table__,int i);
extern char * tbl_val_i(apr_table_t * __table__,int i);
extern char *  tbl_val(apr_table_t * __table__,char * args);
extern char * stnreplace(char *buf, char *pre, char *aft);
extern char *  getGet(char * args);
extern char *  getPost(char * args);
extern char *  getCookie(char * args);
extern void setCookie(char * args1,char * args2);
extern void setSession(char * key,char * data);
extern char * getSession(char * key);
extern void setSession_ptr(char * key,void * data,int size);
extern void * getSession_ptr(char * key);


#endif
#define __CSP__

