added _instsize to qse_httpd_t, qse_httpd_server_t, qse_httpd_client_t, etc
This commit is contained in:
		| @ -290,7 +290,7 @@ static void sig_reconf (int sig) | ||||
| 	if (g_httpd)  | ||||
| 	{ | ||||
| 		httpd_xtn_t* httpd_xtn; | ||||
| 		httpd_xtn = qse_httpd_getxtnstd (g_httpd); | ||||
| 		httpd_xtn = qse_httpd_getxtn(g_httpd); | ||||
| 		httpd_xtn->impede_code = sig; | ||||
| 		qse_httpd_impede (g_httpd); | ||||
| 	} | ||||
| @ -429,7 +429,7 @@ static int make_resource ( | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, client->server); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, client->server); | ||||
|  | ||||
| 	if (server_xtn->orgmakersrc (httpd, client, req, rsrc) <= -1) return -1; | ||||
| 	if (server_xtn->nodir && rsrc->type == QSE_HTTPD_RSRC_DIR) | ||||
| @ -448,7 +448,7 @@ static void free_resource ( | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, client->server); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, client->server); | ||||
| 	server_xtn->orgfreersrc (httpd, client, req, rsrc); | ||||
| } | ||||
| /* --------------------------------------------------------------------- */ | ||||
| @ -748,8 +748,8 @@ static int query_server ( | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	loccfg_t* loccfg = QSE_NULL; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, server); | ||||
| 	httpd_xtn = qse_httpd_getxtn(httpd); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, server); | ||||
|  | ||||
| 	if (code == QSE_HTTPD_SERVERSTD_SSL) | ||||
| 	{ | ||||
| @ -1733,7 +1733,7 @@ static int load_loccfg (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_t* list | ||||
| { | ||||
| 	/*httpd_xtn_t* httpd_xtn; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd);*/ | ||||
| 	httpd_xtn = qse_httpd_getxtn(httpd);*/ | ||||
|  | ||||
| 	if (load_loccfg_basic (httpd, xli, list, cfg) <= -1 || | ||||
| 	    load_loccfg_index (httpd, xli, list, cfg) <= -1 || | ||||
| @ -1900,8 +1900,8 @@ static int load_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server, q | ||||
| 		QSE_HTB_HASHER_DEFAULT | ||||
| 	}; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, server); | ||||
| 	httpd_xtn = qse_httpd_getxtn(httpd); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, server); | ||||
|  | ||||
| 	/* load the server-wide configuration not specific to host/location */ | ||||
| 	for (i = 0; i < SCFG_MAX; i++) | ||||
| @ -2007,7 +2007,7 @@ static void free_server_config (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	qse_size_t i; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, server); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, server); | ||||
|  | ||||
| 	for (i = 0; i < SCFG_MAX; i++) | ||||
| 	{ | ||||
| @ -2033,7 +2033,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	qse_xli_pair_t* pair; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = qse_httpd_getxtn(httpd); | ||||
|  | ||||
| 	qse_memset (&dope, 0, QSE_SIZEOF(dope)); | ||||
|  | ||||
| @ -2081,7 +2081,7 @@ static qse_httpd_server_t* attach_server (qse_httpd_t* httpd, int num, qse_xli_l | ||||
| 		return QSE_NULL; | ||||
| 	} | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, xserver); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, xserver); | ||||
|  | ||||
| 	/* remember original callbacks  */ | ||||
| 	qse_httpd_getserverstdopt (httpd, xserver, QSE_HTTPD_SERVERSTD_QUERY, &server_xtn->orgquery); | ||||
| @ -2110,7 +2110,7 @@ static int load_hook_modules (qse_httpd_t* httpd, qse_xli_list_t* hook_list) | ||||
| 	 | ||||
| 	int i; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = qse_httpd_getxtn(httpd); | ||||
|  | ||||
| 	for (i = 0; ; i++) | ||||
| 	{ | ||||
| @ -2315,7 +2315,7 @@ static int open_config_file (qse_httpd_t* httpd) | ||||
| 	}; | ||||
|  | ||||
|  | ||||
| 	httpd_xtn = (httpd_xtn_t*) qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
| 	QSE_ASSERT (httpd_xtn->xli == QSE_NULL); | ||||
|  | ||||
| 	httpd_xtn->xli = qse_xli_openstd (0, 0, QSE_NULL); | ||||
| @ -2372,7 +2372,7 @@ static int close_config_file (qse_httpd_t* httpd) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
|  | ||||
| 	httpd_xtn = (httpd_xtn_t*) qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
| 	if (httpd_xtn->xli) | ||||
| 	{ | ||||
| 		qse_xli_close (httpd_xtn->xli); | ||||
| @ -2387,7 +2387,7 @@ static void set_limit (qse_httpd_t* httpd, const qse_char_t* name, int what) | ||||
| 	qse_xli_pair_t* pair; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
|  | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
|  | ||||
| 	pair = qse_xli_findpair (httpd_xtn->xli, QSE_NULL, name); | ||||
| 	if (pair) | ||||
| @ -2426,7 +2426,7 @@ static int load_config (qse_httpd_t* httpd) | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	int i; | ||||
|  | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
|  | ||||
| 	if (open_config_file (httpd) <= -1) goto oops; | ||||
|  | ||||
| @ -2506,14 +2506,13 @@ oops: | ||||
|  | ||||
| static void reconf_server (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	qse_xli_pair_t* pair; | ||||
|  | ||||
| 	/* reconfigure the server when the server is impeded in sig_reconf(). */ | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	server_xtn = qse_httpd_getserverstdxtn (httpd, server); | ||||
| 	server_xtn = qse_httpd_getserverxtn(httpd, server); | ||||
|  | ||||
| 	if (httpd_xtn->xli) | ||||
| 	{ | ||||
| @ -2531,11 +2530,10 @@ static void reconf_server (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
|  | ||||
| static void impede_httpd (qse_httpd_t* httpd) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
|  | ||||
| 	/* reconfigure the server when the server is impeded in sig_reconf(). */ | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	if (httpd_xtn->impede_code == 9999) | ||||
| 	{ | ||||
| 		qse_httpd_stop (httpd); | ||||
| @ -2564,9 +2562,7 @@ static void impede_httpd (qse_httpd_t* httpd) | ||||
|  | ||||
| static int prerewrite_url (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, const qse_mchar_t* host, qse_mchar_t** url) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
|  | ||||
| printf ("PREREWRITING.....................\n"); | ||||
| /* | ||||
| @ -2583,11 +2579,9 @@ printf ("PREREWRITING.....................\n"); | ||||
|  | ||||
| static void logact_httpd (qse_httpd_t* httpd, const qse_httpd_act_t* act) | ||||
| { | ||||
| 	/*httpd_xtn_t* httpd_xtn;*/ | ||||
| 	/*httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd);*/ | ||||
| 	qse_char_t tmp[128], tmp2[128], tmp3[128]; | ||||
|  | ||||
| 	/*httpd_xtn = qse_httpd_getxtnstd (httpd);*/ | ||||
|  | ||||
| 	switch (act->code) | ||||
| 	{ | ||||
| 		case QSE_HTTPD_CATCH_MERRMSG: | ||||
| @ -2727,8 +2721,7 @@ wrongusage: | ||||
|  | ||||
| static void free_httpd_xtn (qse_httpd_t* httpd) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
| 	free_loccfg_contents (httpd, &httpd_xtn->dflcfg); | ||||
| } | ||||
|  | ||||
| @ -2746,7 +2739,7 @@ static int httpd_main (int argc, qse_char_t* argv[]) | ||||
| 	if (ret <= -1) return -1; | ||||
| 	if (ret == 0) return 0; | ||||
|  | ||||
| 	httpd = qse_httpd_openstd (QSE_SIZEOF(httpd_xtn_t), QSE_NULL); | ||||
| 	httpd = qse_httpd_openstd(QSE_SIZEOF(httpd_xtn_t), QSE_NULL); | ||||
| 	if (httpd == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_fprintf (QSE_STDERR, QSE_T("ERROR: Cannot open httpd\n")); | ||||
| @ -2756,7 +2749,7 @@ static int httpd_main (int argc, qse_char_t* argv[]) | ||||
| 	qse_memset (&ecb, 0, QSE_SIZEOF(ecb)); | ||||
| 	ecb.close = free_httpd_xtn; | ||||
| 	qse_httpd_pushecb (httpd, &ecb); | ||||
| 	httpd_xtn = qse_httpd_getxtnstd (httpd); | ||||
| 	httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(httpd); | ||||
| 	httpd_xtn->cfgfile = g_cfgfile; | ||||
|  | ||||
| 	if (load_config (httpd) <= -1) goto oops; | ||||
| @ -2815,11 +2808,10 @@ static void interrupt new_keyboard_handler (void) | ||||
| { | ||||
| 	if (!impeded_for_keyboard && g_httpd)  | ||||
| 	{ | ||||
| 		httpd_xtn_t* httpd_xtn; | ||||
| 		httpd_xtn_t* httpd_xtn = (httpd_xtn_t*)qse_httpd_getxtn(g_httpd); | ||||
| 		int c; | ||||
|  | ||||
| /* TODO: read a keystroke... etc */ | ||||
| 		httpd_xtn = qse_httpd_getxtnstd (g_httpd); | ||||
| 		httpd_xtn->impede_code = 9999; | ||||
| 		qse_httpd_impede (g_httpd); | ||||
| 		impeded_for_keyboard = 1; | ||||
|  | ||||
| @ -1559,12 +1559,16 @@ QSE_EXPORT void qse_awk_close ( | ||||
| 	qse_awk_t* awk /**< awk */ | ||||
| ); | ||||
|  | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| /** | ||||
|  * The qse_awk_getxtn() function returns the pointer to the extension area | ||||
|  * placed behind the actual awk object. | ||||
|  */ | ||||
| static QSE_INLINE void* qse_awk_getxtn (qse_awk_t* awk) { return (void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize); } | ||||
| /** | ||||
|  * The qse_awk_getmmgr() function gets the memory manager used in | ||||
|  * qse_awk_open(). | ||||
|  */ | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| static QSE_INLINE void* qse_awk_getxtn (qse_awk_t* awk) { return (void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize); } | ||||
| static QSE_INLINE qse_mmgr_t* qse_awk_getmmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_mmgr; } | ||||
| static QSE_INLINE qse_cmgr_t* qse_awk_getcmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_cmgr; } | ||||
| static QSE_INLINE void qse_awk_setcmgr (qse_awk_t* awk, qse_cmgr_t* cmgr) { ((qse_awk_alt_t*)awk)->_cmgr = cmgr; } | ||||
| @ -1609,7 +1613,7 @@ QSE_EXPORT void qse_awk_clear ( | ||||
|  * The qse_awk_geterrstr() gets an error string getter. | ||||
|  */ | ||||
| QSE_EXPORT qse_awk_errstr_t qse_awk_geterrstr ( | ||||
| 	const qse_awk_t* awk    /**< awk */ | ||||
| 	qse_awk_t* awk    /**< awk */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -1647,7 +1651,7 @@ QSE_EXPORT void qse_awk_seterrstr ( | ||||
|  * \return error number | ||||
|  */ | ||||
| QSE_EXPORT qse_awk_errnum_t qse_awk_geterrnum ( | ||||
| 	const qse_awk_t* awk /**< awk */ | ||||
| 	qse_awk_t* awk /**< awk */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -1655,7 +1659,7 @@ QSE_EXPORT qse_awk_errnum_t qse_awk_geterrnum ( | ||||
|  * last error has occurred. | ||||
|  */ | ||||
| QSE_EXPORT const qse_awk_loc_t* qse_awk_geterrloc ( | ||||
| 	const qse_awk_t* awk /**< awk */ | ||||
| 	qse_awk_t* awk /**< awk */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -1665,7 +1669,7 @@ QSE_EXPORT const qse_awk_loc_t* qse_awk_geterrloc ( | ||||
|  * \return error message | ||||
|  */ | ||||
| QSE_EXPORT const qse_char_t* qse_awk_geterrmsg ( | ||||
| 	const qse_awk_t* awk /**< awk */ | ||||
| 	qse_awk_t* awk /**< awk */ | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT const qse_char_t* qse_awk_backuperrmsg ( | ||||
| @ -1678,7 +1682,7 @@ QSE_EXPORT const qse_char_t* qse_awk_backuperrmsg ( | ||||
|  * pointed to by \a errinf from \a awk. | ||||
|  */ | ||||
| QSE_EXPORT void qse_awk_geterrinf ( | ||||
| 	const qse_awk_t*  awk,   /**< awk */ | ||||
| 	qse_awk_t*        awk,   /**< awk */ | ||||
| 	qse_awk_errinf_t* errinf /**< error information buffer */ | ||||
| ); | ||||
|  | ||||
| @ -1718,7 +1722,7 @@ QSE_EXPORT void qse_awk_seterrinf ( | ||||
|  * The qse_awk_geterror() function gets error information via parameters. | ||||
|  */ | ||||
| QSE_EXPORT void qse_awk_geterror ( | ||||
| 	const qse_awk_t*   awk,    /**< awk */ | ||||
| 	qse_awk_t*         awk,    /**< awk */ | ||||
| 	qse_awk_errnum_t*  errnum, /**< error number */ | ||||
| 	const qse_char_t** errmsg, /**< error message */ | ||||
| 	qse_awk_loc_t*     errloc  /**< error location */ | ||||
| @ -2331,7 +2335,7 @@ QSE_EXPORT qse_htb_t* qse_awk_rtx_getnvmap ( | ||||
|  * \return error number | ||||
|  */ | ||||
| QSE_EXPORT qse_awk_errnum_t qse_awk_rtx_geterrnum ( | ||||
| 	const qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| 	qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -2340,7 +2344,7 @@ QSE_EXPORT qse_awk_errnum_t qse_awk_rtx_geterrnum ( | ||||
|  * \return error location | ||||
|  */ | ||||
| QSE_EXPORT const qse_awk_loc_t* qse_awk_rtx_geterrloc ( | ||||
| 	const qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| 	qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -2349,7 +2353,7 @@ QSE_EXPORT const qse_awk_loc_t* qse_awk_rtx_geterrloc ( | ||||
|  * \return error message | ||||
|  */ | ||||
| QSE_EXPORT const qse_char_t* qse_awk_rtx_geterrmsg ( | ||||
| 	const qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| 	qse_awk_rtx_t* rtx /**< runtime context */ | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT const qse_char_t* qse_awk_rtx_backuperrmsg ( | ||||
| @ -2361,7 +2365,7 @@ QSE_EXPORT const qse_char_t* qse_awk_rtx_backuperrmsg ( | ||||
|  * pointed to by \a errinf from a runtime context \a rtx. | ||||
|  */ | ||||
| QSE_EXPORT void qse_awk_rtx_geterrinf ( | ||||
| 	const qse_awk_rtx_t* rtx,   /**< runtime context */ | ||||
| 	qse_awk_rtx_t*       rtx,   /**< runtime context */ | ||||
| 	qse_awk_errinf_t*    errinf /**< error information */ | ||||
| ); | ||||
|  | ||||
| @ -2372,7 +2376,7 @@ QSE_EXPORT void qse_awk_rtx_geterrinf ( | ||||
|  * \a errmsg; the error line into memory pointed to by \a errlin. | ||||
|  */ | ||||
| QSE_EXPORT void qse_awk_rtx_geterror ( | ||||
| 	const qse_awk_rtx_t* rtx,    /**< runtime context */ | ||||
| 	qse_awk_rtx_t*       rtx,    /**< runtime context */ | ||||
| 	qse_awk_errnum_t*    errnum, /**< error number */ | ||||
| 	const qse_char_t**   errmsg, /**< error message */ | ||||
| 	qse_awk_loc_t*       errloc  /**< error location */ | ||||
|  | ||||
| @ -37,6 +37,18 @@ | ||||
| #include <qse/si/nwad.h> | ||||
|  | ||||
| typedef struct qse_httpd_t        qse_httpd_t; | ||||
|  | ||||
| #define QSE_HTTPD_HDR \ | ||||
| 	qse_size_t  _instsize; \ | ||||
| 	qse_mmgr_t* _mmgr | ||||
|  | ||||
| typedef struct qse_httpd_alt_t qse_httpd_alt_t; | ||||
| struct qse_httpd_alt_t | ||||
| { | ||||
| 	/* ensure that qse_httpd_alt_t matches the beginning part of qse_httpd_t */ | ||||
| 	QSE_HTTPD_HDR; | ||||
| }; | ||||
|  | ||||
| typedef struct qse_httpd_mate_t   qse_httpd_mate_t; | ||||
| typedef struct qse_httpd_server_t qse_httpd_server_t; | ||||
| typedef struct qse_httpd_client_t qse_httpd_client_t; | ||||
| @ -676,6 +688,7 @@ typedef enum qse_httpd_mate_type_t  qse_httpd_mate_type_t; | ||||
| /* it contains header fields common between  | ||||
|  * qse_httpd_cleint_t and qse_httpd_server_t. */ | ||||
| #define QSE_HTTPD_MATE_HDR \ | ||||
| 	qse_size_t _instsize; \ | ||||
| 	qse_httpd_mate_type_t type | ||||
|  | ||||
| struct qse_httpd_mate_t | ||||
| @ -1077,13 +1090,22 @@ QSE_EXPORT void qse_httpd_close ( | ||||
| 	qse_httpd_t* httpd  | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_mmgr_t* qse_httpd_getmmgr ( | ||||
| 	qse_httpd_t* httpd | ||||
| );  | ||||
|  | ||||
| QSE_EXPORT void* qse_httpd_getxtn ( | ||||
| 	qse_httpd_t* httpd | ||||
| ); | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| /** | ||||
|  * The qse_httpd_getxtn() function returns the pointer to the extension area | ||||
|  * placed behind the actual httpd object. | ||||
|  */ | ||||
| static QSE_INLINE void* qse_httpd_getxtn (qse_httpd_t* httpd) { return (void*)((qse_uint8_t*)httpd + ((qse_httpd_alt_t*)httpd)->_instsize); } | ||||
| /** | ||||
|  * The qse_httpd_gethttpd() function gets the memory manager used in | ||||
|  * qse_httpd_open(). | ||||
|  */ | ||||
| static QSE_INLINE qse_mmgr_t* qse_httpd_getmmgr (qse_httpd_t* httpd) { return ((qse_httpd_alt_t*)httpd)->_mmgr; } | ||||
| #else | ||||
| #       define qse_httpd_getxtn(httpd) ((void*)((qse_uint8_t*)httpd + ((qse_httpd_alt_t*)httpd)->_instsize)) | ||||
| #       define qse_httpd_getmmgr(httpd) (((qse_httpd_alt_t*)(httpd))->_mmgr) | ||||
| #endif /* QSE_HAVE_INLINE */ | ||||
|  | ||||
| QSE_EXPORT qse_httpd_errnum_t qse_httpd_geterrnum ( | ||||
| 	qse_httpd_t* httpd | ||||
| @ -1140,9 +1162,6 @@ QSE_EXPORT void qse_httpd_stop ( | ||||
| QSE_EXPORT void qse_httpd_impede ( | ||||
| 	qse_httpd_t* httpd | ||||
| ); | ||||
|  | ||||
| #define qse_httpd_getserverxtn(httpd,server) ((void*)(server+1)) | ||||
|  | ||||
| QSE_EXPORT qse_httpd_server_t* qse_httpd_attachserver ( | ||||
| 	qse_httpd_t*                   httpd, | ||||
| 	const qse_httpd_server_dope_t* dope, | ||||
| @ -1154,6 +1173,12 @@ QSE_EXPORT void qse_httpd_detachserver ( | ||||
| 	qse_httpd_server_t* server | ||||
| ); | ||||
|  | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| static QSE_INLINE void* qse_httpd_getserverxtn (qse_httpd_t* httpd, qse_httpd_server_t* server) { return (void*)((qse_uint8_t*)server + ((qse_httpd_mate_t*)server)->_instsize); } | ||||
| #else | ||||
| #       define qse_httpd_getserverxtn(httpd, server) ((void*)((qse_uint8_t*)server + ((qse_httpd_mate_t*)server)->_instsize)) | ||||
| #endif | ||||
|  | ||||
| QSE_EXPORT qse_httpd_server_t* qse_httpd_getfirstserver ( | ||||
| 	qse_httpd_t* httpd | ||||
| ); | ||||
|  | ||||
| @ -233,10 +233,6 @@ QSE_EXPORT qse_httpd_t* qse_httpd_openstdwithmmgr ( | ||||
| 	qse_httpd_errnum_t* errnum | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT void* qse_httpd_getxtnstd ( | ||||
| 	qse_httpd_t* httpd | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_httpd_server_t* qse_httpd_attachserverstd ( | ||||
| 	qse_httpd_t*                   httpd, | ||||
| 	const qse_httpd_server_dope_t* dope, | ||||
| @ -268,11 +264,6 @@ QSE_EXPORT int qse_httpd_setserverstdopt ( | ||||
| 	const void*               value | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT void* qse_httpd_getserverstdxtn ( | ||||
| 	qse_httpd_t*         httpd, | ||||
| 	qse_httpd_server_t*  server | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT int qse_httpd_loopstd ( | ||||
| 	qse_httpd_t*              httpd, | ||||
| 	const qse_httpd_dnsstd_t* dns, | ||||
|  | ||||
| @ -306,13 +306,10 @@ protected: | ||||
|  | ||||
|  | ||||
| private: | ||||
| 	static ssize_t sin ( | ||||
| 		sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); | ||||
| 	static ssize_t xin ( | ||||
| 		sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); | ||||
| 	static ssize_t xout ( | ||||
| 		sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* dat, size_t len); | ||||
| 	static const char_t* xerrstr (const sed_t* s, errnum_t num); | ||||
| 	static ssize_t sin (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); | ||||
| 	static ssize_t xin (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* buf, size_t len); | ||||
| 	static ssize_t xout (sed_t* s, io_cmd_t cmd, io_arg_t* arg, char_t* dat, size_t len); | ||||
| 	static const char_t* xerrstr (sed_t* s, errnum_t num); | ||||
| }; | ||||
|  | ||||
| ///////////////////////////////// | ||||
|  | ||||
| @ -62,6 +62,17 @@ | ||||
|  */ | ||||
| typedef struct qse_sed_t qse_sed_t; | ||||
|  | ||||
| #define QSE_SED_HDR \ | ||||
| 	qse_size_t  _instsize; \ | ||||
| 	qse_mmgr_t* _mmgr | ||||
|  | ||||
| typedef struct qse_sed_alt_t qse_sed_alt_t; | ||||
| struct qse_sed_alt_t | ||||
| { | ||||
| 	/* ensure that qse_sed_alt_t matches the beginning part of qse_sed_t */ | ||||
| 	QSE_SED_HDR; | ||||
| }; | ||||
|  | ||||
| typedef struct qse_sed_loc_t qse_sed_loc_t; | ||||
| typedef struct qse_sed_adr_t qse_sed_adr_t;  | ||||
| typedef struct qse_sed_cmd_t qse_sed_cmd_t; | ||||
| @ -274,7 +285,7 @@ typedef enum qse_sed_errnum_t qse_sed_errnum_t; | ||||
|  * editor with the qse_sed_seterrstr() function to customize an error string. | ||||
|  */ | ||||
| typedef const qse_char_t* (*qse_sed_errstr_t) ( | ||||
| 	const qse_sed_t* sed,   /**< stream editor */ | ||||
| 	qse_sed_t*       sed,   /**< stream editor */ | ||||
| 	qse_sed_errnum_t num    /**< an error number */ | ||||
| ); | ||||
|  | ||||
| @ -436,22 +447,23 @@ QSE_EXPORT void qse_sed_close ( | ||||
| 	qse_sed_t* sed /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
|  * The  qse_sed_getmmgr() function returns the memory | ||||
|  * manager used in qse_sed_open(). | ||||
|  */ | ||||
| QSE_EXPORT qse_mmgr_t* qse_sed_getmmgr ( | ||||
| 	qse_sed_t* sed | ||||
| );  | ||||
|  | ||||
|  | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| /** | ||||
|  * The qse_sed_getxtn() function returns the pointer | ||||
|  * to the beginning of the extension area created with  | ||||
|  * The qse_sed_getxtn() function returns the pointer to the extension area | ||||
|  * placed behind the actual sed object. | ||||
|  */ | ||||
| static QSE_INLINE void* qse_sed_getxtn (qse_sed_t* sed) { return (void*)((qse_uint8_t*)sed + ((qse_sed_alt_t*)sed)->_instsize); } | ||||
| /** | ||||
|  * The qse_sed_getmmgr() function gets the memory manager used in | ||||
|  * qse_sed_open(). | ||||
|  */ | ||||
| QSE_EXPORT void* qse_sed_getxtn ( | ||||
| 	qse_sed_t* sed | ||||
| ); | ||||
| static QSE_INLINE qse_mmgr_t* qse_sed_getmmgr (qse_sed_t* sed) { return ((qse_sed_alt_t*)sed)->_mmgr; } | ||||
| #else | ||||
| #       define qse_sed_getxtn(sed) ((void*)((qse_uint8_t*)sed + ((qse_sed_alt_t*)sed)->_instsize)) | ||||
| #       define qse_sed_getmmgr(sed) (((qse_sed_alt_t*)(sed))->_mmgr) | ||||
| #endif /* QSE_HAVE_INLINE */ | ||||
|  | ||||
|  | ||||
| /** | ||||
| @ -492,7 +504,7 @@ QSE_EXPORT int qse_sed_setopt ( | ||||
|  * The qse_sed_geterrstr() gets an error string getter. | ||||
|  */ | ||||
| QSE_EXPORT qse_sed_errstr_t qse_sed_geterrstr ( | ||||
| 	const qse_sed_t* sed    /**< stream editor */ | ||||
| 	qse_sed_t* sed    /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -529,7 +541,7 @@ QSE_EXPORT void qse_sed_seterrstr ( | ||||
|  * @return error number | ||||
|  */ | ||||
| QSE_EXPORT qse_sed_errnum_t qse_sed_geterrnum ( | ||||
| 	const qse_sed_t* sed /**< stream editor */ | ||||
| 	qse_sed_t* sed /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -538,7 +550,7 @@ QSE_EXPORT qse_sed_errnum_t qse_sed_geterrnum ( | ||||
|  * @return error location | ||||
|  */ | ||||
| QSE_EXPORT const qse_sed_loc_t* qse_sed_geterrloc ( | ||||
| 	const qse_sed_t* sed /**< stream editor */ | ||||
| 	qse_sed_t* sed /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -546,7 +558,7 @@ QSE_EXPORT const qse_sed_loc_t* qse_sed_geterrloc ( | ||||
|  * @return error message pointer | ||||
|  */ | ||||
| QSE_EXPORT const qse_char_t* qse_sed_geterrmsg ( | ||||
| 	const qse_sed_t* sed /**< stream editor */ | ||||
| 	qse_sed_t* sed /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
| @ -555,7 +567,7 @@ QSE_EXPORT const qse_char_t* qse_sed_geterrmsg ( | ||||
|  * to by each parameter. | ||||
|  */ | ||||
| QSE_EXPORT void qse_sed_geterror ( | ||||
| 	const qse_sed_t*   sed,    /**< stream editor */ | ||||
| 	qse_sed_t*         sed,    /**< stream editor */ | ||||
| 	qse_sed_errnum_t*  errnum, /**< error number */ | ||||
| 	const qse_char_t** errmsg, /**< error message */ | ||||
| 	qse_sed_loc_t*     errloc  /**< error location */ | ||||
|  | ||||
| @ -103,8 +103,7 @@ extern "C" { | ||||
|  | ||||
| /** | ||||
|  * The qse_sed_openstd() function creates a stream editor with the default | ||||
|  * memory manager and initializes it. Use qse_sed_getxtnstd() to get the  | ||||
|  * pointer to the extension area. Do not use qse_sed_getxtn() for this. | ||||
|  * memory manager and initializes it.  | ||||
|  * \return pointer to a stream editor on success, #QSE_NULL on failure. | ||||
|  */ | ||||
| QSE_EXPORT qse_sed_t* qse_sed_openstd ( | ||||
| @ -115,8 +114,7 @@ QSE_EXPORT qse_sed_t* qse_sed_openstd ( | ||||
| /** | ||||
|  * The qse_sed_openstdwithmmgr() function creates a stream editor with a  | ||||
|  * user-defined memory manager. It is equivalent to qse_sed_openstd(),  | ||||
|  * except that you can specify your own memory manager.Use qse_sed_getxtnstd(),  | ||||
|  * not qse_sed_getxtn() to get the pointer to the extension area. | ||||
|  * except that you can specify your own memory manager. | ||||
|  * \return pointer to a stream editor on success, #QSE_NULL on failure. | ||||
|  */ | ||||
| QSE_EXPORT qse_sed_t* qse_sed_openstdwithmmgr ( | ||||
| @ -125,15 +123,6 @@ QSE_EXPORT qse_sed_t* qse_sed_openstdwithmmgr ( | ||||
| 	qse_sed_errnum_t* errnum | ||||
| ); | ||||
|  | ||||
| /** | ||||
|  * The qse_sed_getxtnstd() gets the pointer to extension space.  | ||||
|  * Note that you must not call qse_sed_getxtn() for a stream editor | ||||
|  * created with qse_sed_openstd() and qse_sed_openstdwithmmgr(). | ||||
|  */ | ||||
| QSE_EXPORT void* qse_sed_getxtnstd ( | ||||
| 	qse_sed_t* sed /**< stream editor */ | ||||
| ); | ||||
|  | ||||
| /** | ||||
|  * The qse_sed_compstd() function compiles sed scripts specified in | ||||
|  * an array of stream resources. The end of the array is indicated | ||||
|  | ||||
| @ -478,16 +478,16 @@ static int cgi_add_env ( | ||||
| 		tmp[1] = suffix;  | ||||
| 		tmp[2] = QSE_NULL; | ||||
|  | ||||
| 		tr = qse_mbsadup  (tmp, QSE_NULL, httpd->mmgr); | ||||
| 		tr = qse_mbsadup(tmp, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 		if (tr)  | ||||
| 		{ | ||||
| 			qse_canonmbspath (tr, tr, 0); | ||||
| 			if (qse_env_insertmbs (env, QSE_MT("PATH_TRANSLATED"), tr) <= -1)  | ||||
| 			{ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tr); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tr); | ||||
| 				goto oops_nomem; | ||||
| 			} | ||||
| 			QSE_MMGR_FREE (httpd->mmgr, tr); | ||||
| 			QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tr); | ||||
| 		} | ||||
| 		if (qse_env_insertmbs (env, QSE_MT("PATH_INFO"), suffix) <= -1) goto  oops_nomem; | ||||
| 	} | ||||
| @ -795,7 +795,7 @@ static int task_init_cgi ( | ||||
| 		else  | ||||
| 		{ | ||||
| 			/* do chunking to cgi */ | ||||
| 			cgi->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); | ||||
| 			cgi->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); | ||||
| 			if (cgi->reqfwdbuf == QSE_NULL)  | ||||
| 			{ | ||||
| 				httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -832,7 +832,7 @@ static int task_init_cgi ( | ||||
| 	{	 | ||||
| 		/* create a buffer to hold request content from the client | ||||
| 		 * and copy content received already */ | ||||
| 		cgi->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); | ||||
| 		cgi->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); | ||||
| 		if (cgi->reqfwdbuf == QSE_NULL)  | ||||
| 		{ | ||||
| 			httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -886,7 +886,7 @@ static int task_init_cgi ( | ||||
| 	} | ||||
|  | ||||
| done: | ||||
| 	cgi->env = qse_env_open (httpd->mmgr, 0, 0); | ||||
| 	cgi->env = qse_env_open (qse_httpd_getmmgr(httpd), 0, 0); | ||||
| 	if (cgi->env == QSE_NULL)  | ||||
| 	{ | ||||
| 		httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -1462,7 +1462,7 @@ static int task_main_cgi ( | ||||
| 	else | ||||
| 	{ | ||||
| 		cgi_script_htrd_xtn_t* xtn; | ||||
| 		cgi->script_htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(cgi_script_htrd_xtn_t)); | ||||
| 		cgi->script_htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(cgi_script_htrd_xtn_t)); | ||||
| 		if (cgi->script_htrd == QSE_NULL) goto oops; | ||||
|  | ||||
| 		xtn = (cgi_script_htrd_xtn_t*) qse_htrd_getxtn (cgi->script_htrd); | ||||
| @ -1477,7 +1477,7 @@ static int task_main_cgi ( | ||||
| 			QSE_HTRD_REQUEST | ||||
| 		); | ||||
|  | ||||
| 		cgi->res = qse_mbs_open (httpd->mmgr, 0, 256); | ||||
| 		cgi->res = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, 256); | ||||
| 		if (cgi->res == QSE_NULL) goto oops; | ||||
| 	} | ||||
|  | ||||
| @ -1507,17 +1507,17 @@ static int task_main_cgi ( | ||||
| 			tmp[1] = QSE_MT(" "); | ||||
| 			tmp[2] = cgi->path; | ||||
| 			tmp[3] = QSE_NULL; | ||||
| 			xpath = qse_mbsadup (tmp, QSE_NULL, httpd->mmgr); | ||||
| 			xpath = qse_mbsadup (tmp, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 			if (xpath == QSE_NULL) goto oops; | ||||
| 		} | ||||
| 		else xpath = cgi->path; | ||||
| 	} | ||||
|  | ||||
| 	x = qse_pio_init ( | ||||
| 		&cgi->pio, httpd->mmgr, (const qse_char_t*)xpath, | ||||
| 		&cgi->pio, qse_httpd_getmmgr(httpd), (const qse_char_t*)xpath, | ||||
| 		cgi->env, pio_options); | ||||
| 	if (xpath != cgi->path &&  | ||||
| 	    xpath != (qse_mchar_t*)&cgi->fnc) QSE_MMGR_FREE (httpd->mmgr, xpath); | ||||
| 	    xpath != (qse_mchar_t*)&cgi->fnc) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), xpath); | ||||
|  | ||||
| 	if (x <= -1) | ||||
| 	{ | ||||
|  | ||||
| @ -160,7 +160,7 @@ static qse_size_t format_dirent ( | ||||
| 	 *       a lot of file names to escape. */ | ||||
|  | ||||
| 	/* perform percent-encoding for the anchor */ | ||||
| 	encname = qse_perenchttpstrdup (0, dirent->name, httpd->mmgr); | ||||
| 	encname = qse_perenchttpstrdup (0, dirent->name, qse_httpd_getmmgr(httpd)); | ||||
| 	if (encname == QSE_NULL) | ||||
| 	{ | ||||
| 		httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -171,7 +171,7 @@ static qse_size_t format_dirent ( | ||||
| 	escname = qse_httpd_escapehtml (httpd, dirent->name); | ||||
| 	if (escname == QSE_NULL)  | ||||
| 	{ | ||||
| 		if (encname != dirent->name) QSE_MMGR_FREE (httpd->mmgr, encname); | ||||
| 		if (encname != dirent->name) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), encname); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| @ -205,7 +205,7 @@ static qse_size_t format_dirent ( | ||||
| 	); | ||||
|  | ||||
| 	if (escname != dirent->name) qse_httpd_freemem (httpd, escname); | ||||
| 	if (encname != dirent->name) QSE_MMGR_FREE (httpd->mmgr, encname); | ||||
| 	if (encname != dirent->name) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), encname); | ||||
|  | ||||
| 	if (x == (qse_size_t)-1) httpd->errnum = QSE_HTTPD_ENOBUF; | ||||
| 	return x; | ||||
|  | ||||
| @ -1055,7 +1055,7 @@ static int task_init_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ | ||||
| 	/* TODO: DETERMINE THIS SIZE */ | ||||
| 	len = MAX_SEND_SIZE; | ||||
|  | ||||
| 	proxy->reqfwdbuf = qse_mbs_open (httpd->mmgr, 0, (len < 512? 512: len)); | ||||
| 	proxy->reqfwdbuf = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, (len < 512? 512: len)); | ||||
| 	if (proxy->reqfwdbuf == QSE_NULL) goto nomem_oops; | ||||
|  | ||||
| 	if (proxy->flags & PROXY_RAW) | ||||
| @ -1094,12 +1094,12 @@ static int task_init_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ | ||||
| 			qse_size_t x; | ||||
|  | ||||
| 			qpath = qse_htre_getqpath(arg->req); | ||||
| 			qpath_enc = qse_perenchttpstrdup (QSE_PERENCHTTPSTR_KEEP_SLASH, qpath, httpd->mmgr); | ||||
| 			qpath_enc = qse_perenchttpstrdup (QSE_PERENCHTTPSTR_KEEP_SLASH, qpath, qse_httpd_getmmgr(httpd)); | ||||
| 			if (qpath_enc == QSE_NULL) goto nomem_oops; | ||||
| 			 | ||||
|  | ||||
| 			x = qse_mbs_cat (proxy->reqfwdbuf, qpath_enc); | ||||
| 			if (qpath != qpath_enc) QSE_MMGR_FREE (httpd->mmgr, qpath_enc); | ||||
| 			if (qpath != qpath_enc) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), qpath_enc); | ||||
|  | ||||
| 			if (x == (qse_size_t)-1) goto nomem_oops; | ||||
| 		#else | ||||
| @ -2381,7 +2381,7 @@ static int task_main_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ | ||||
| 	if (!(proxy->flags & PROXY_RAW)) | ||||
| 	{ | ||||
| 		/* set up a http reader to read a response from the peer */ | ||||
| 		proxy->peer_htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(proxy_peer_htrd_xtn_t)); | ||||
| 		proxy->peer_htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(proxy_peer_htrd_xtn_t)); | ||||
| 		if (proxy->peer_htrd == QSE_NULL) goto oops; | ||||
| 		xtn = (proxy_peer_htrd_xtn_t*) qse_htrd_getxtn (proxy->peer_htrd); | ||||
| 		xtn->proxy = proxy; | ||||
| @ -2391,7 +2391,7 @@ static int task_main_proxy (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_ | ||||
| 		qse_htrd_setopt (proxy->peer_htrd, QSE_HTRD_RESPONSE | QSE_HTRD_TRAILERS); | ||||
| 	} | ||||
|  | ||||
| 	proxy->res = qse_mbs_open (httpd->mmgr, 0, 256); | ||||
| 	proxy->res = qse_mbs_open (qse_httpd_getmmgr(httpd), 0, 256); | ||||
| 	if (proxy->res == QSE_NULL) goto oops; | ||||
| 	proxy->res_consumed = 0; | ||||
| 	proxy->res_pending = 0; | ||||
|  | ||||
| @ -295,9 +295,7 @@ static int dns_open (qse_httpd_t* httpd, qse_httpd_dns_t* dns) | ||||
| { | ||||
| 	qse_nwad_t nwad; | ||||
| 	dns_ctx_t* dc; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtn (httpd); | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	dns->handle[0] = QSE_INVALID_SCKHND; | ||||
| 	dns->handle[1] = QSE_INVALID_SCKHND; | ||||
| @ -605,7 +603,7 @@ static dns_ans_t* dns_get_answer_from_cache (dns_ctx_t* dc, const qse_mchar_t* n | ||||
| static int dns_recv (qse_httpd_t* httpd, qse_httpd_dns_t* dns, qse_httpd_hnd_t handle) | ||||
| { | ||||
| 	dns_ctx_t* dc = (dns_ctx_t*)dns->ctx; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	qse_skad_t fromaddr; | ||||
| 	qse_sck_len_t fromlen; | ||||
| @ -627,8 +625,6 @@ static int dns_recv (qse_httpd_t* httpd, qse_httpd_dns_t* dns, qse_httpd_hnd_t h | ||||
| 	qse_nwad_t* resolved_nwad = QSE_NULL; | ||||
| 	int cache_ttl = 0; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtn (httpd); | ||||
|  | ||||
| 	fromlen = QSE_SIZEOF(fromaddr); | ||||
| 	len = recvfrom (handle, buf, QSE_SIZEOF(buf), 0, (struct sockaddr*)&fromaddr, &fromlen); | ||||
|  | ||||
| @ -838,7 +834,7 @@ static void tmr_dns_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm | ||||
| 		/*httpd_xtn_t* httpd_xtn;*/ | ||||
| 		qse_tmr_event_t tmout_event; | ||||
|  | ||||
| 		/*httpd_xtn = qse_httpd_getxtn (dc->httpd);*/ | ||||
| 		/*httpd_xtn = GET_HTTPD_XTN(dc->httpd);*/ | ||||
|  | ||||
| 		QSE_MEMSET (&tmout_event, 0, QSE_SIZEOF(tmout_event)); | ||||
| 		qse_gettime (&tmout_event.when); | ||||
| @ -898,7 +894,7 @@ static void tmr_dns_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm | ||||
| static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t* name, qse_httpd_resolve_t resol, const qse_httpd_dns_server_t* dns_server, void* ctx) | ||||
| { | ||||
| 	dns_ctx_t* dc = (dns_ctx_t*)dns->ctx; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	qse_uint32_t seq; | ||||
| 	qse_uint16_t xid; | ||||
| @ -908,8 +904,6 @@ static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t | ||||
| 	qse_tmr_event_t tmout_event; | ||||
| 	int dns_flags; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtn (httpd); | ||||
|  | ||||
| 	ans = dns_get_answer_from_cache (dc, name); | ||||
| 	if (ans) | ||||
| 	{ | ||||
|  | ||||
| @ -15,7 +15,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	modpath = sysname; | ||||
| 	#else | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (!modpath) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -29,7 +29,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	/* do nothing */ | ||||
| 	#else | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, modpath); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); | ||||
| 	#endif | ||||
|  | ||||
| 	return h; | ||||
| @ -54,7 +54,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	modpath = sysname; | ||||
| 	#else | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (!modpath) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -74,7 +74,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	/* do nothing */ | ||||
| 	#else | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, modpath); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); | ||||
| 	#endif | ||||
|  | ||||
| 	QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*)); | ||||
| @ -91,7 +91,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	modpath = sysname; | ||||
| 	#else | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (!modpath) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -105,7 +105,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	/* do nothing */ | ||||
| 	#else | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, modpath); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); | ||||
| 	#endif | ||||
|  | ||||
| 	QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*)); | ||||
| @ -118,7 +118,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	modpath = sysname; | ||||
| 	#else | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, httpd->mmgr); | ||||
| 	modpath = qse_wcstombsdup (sysname, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (!modpath) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -132,7 +132,7 @@ static void* mod_open (qse_httpd_t* httpd, const qse_char_t* sysname) | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	/* do nothing */ | ||||
| 	#else | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, modpath); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), modpath); | ||||
| 	#endif | ||||
|  | ||||
| 	return h; | ||||
| @ -168,7 +168,7 @@ static void* mod_symbol (qse_httpd_t* httpd, void* handle, const qse_char_t* nam | ||||
| #if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	mname = name; | ||||
| #else | ||||
| 	mname = qse_wcstombsdup (name, QSE_NULL, httpd->mmgr); | ||||
| 	mname = qse_wcstombsdup (name, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (!mname) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -207,7 +207,7 @@ static void* mod_symbol (qse_httpd_t* httpd, void* handle, const qse_char_t* nam | ||||
| #if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	/* nothing to do */ | ||||
| #else | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, mname); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), mname); | ||||
| #endif | ||||
|  | ||||
| 	return s; | ||||
|  | ||||
| @ -100,11 +100,9 @@ static int urs_open (qse_httpd_t* httpd, qse_httpd_urs_t* urs) | ||||
| { | ||||
| 	qse_nwad_t nwad; | ||||
| 	urs_ctx_t* dc; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
| 	int type, proto = 0; /*IPPROTO_UDP;*/ /*IPPROTO_SCTP*/ | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtn (httpd); | ||||
|  | ||||
| 	urs->handle[0] = QSE_INVALID_SCKHND; | ||||
| 	urs->handle[1] = QSE_INVALID_SCKHND; | ||||
| 	urs->handle[2] = QSE_INVALID_SCKHND; | ||||
| @ -280,7 +278,7 @@ static void urs_close (qse_httpd_t* httpd, qse_httpd_urs_t* urs) | ||||
| static int urs_recv (qse_httpd_t* httpd, qse_httpd_urs_t* urs, qse_httpd_hnd_t handle) | ||||
| { | ||||
| 	urs_ctx_t* dc = (urs_ctx_t*)urs->ctx; | ||||
| 	/*httpd_xtn_t* httpd_xtn;*/ | ||||
| 	/*httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd);*/ | ||||
|  | ||||
| 	qse_skad_t fromaddr; | ||||
| 	qse_sck_len_t fromlen; | ||||
| @ -291,8 +289,6 @@ static int urs_recv (qse_httpd_t* httpd, qse_httpd_urs_t* urs, qse_httpd_hnd_t h | ||||
| 	urs_req_t* req; | ||||
| 	qse_mchar_t* spc; | ||||
|  | ||||
| 	/*httpd_xtn = qse_httpd_getxtn (httpd);*/ | ||||
|  | ||||
| /* TODO: use recvmsg with MSG_ERRQUEUE... set socket option IP_RECVERR... */ | ||||
| 	fromlen = QSE_SIZEOF(fromaddr); | ||||
| 	len = recvfrom (handle, dc->rcvbuf, QSE_SIZEOF(dc->rcvbuf) - 1, 0, (struct sockaddr*)&fromaddr, &fromlen); | ||||
| @ -363,11 +359,9 @@ static void tmr_urs_tmout_handle (qse_tmr_t* tmr, const qse_ntime_t* now, qse_tm | ||||
| 	 *---------------------------------------------------------------- */ | ||||
| 	if (req->urs_retries > 0) | ||||
| 	{ | ||||
| 		/*httpd_xtn_t* httpd_xtn;*/ | ||||
| 		/*httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(dc->httpd);*/ | ||||
| 		qse_tmr_event_t tmout_event; | ||||
|  | ||||
| 		/*httpd_xtn = qse_httpd_getxtn (dc->httpd);*/ | ||||
|  | ||||
| 		QSE_MEMSET (&tmout_event, 0, QSE_SIZEOF(tmout_event)); | ||||
| 		qse_gettime (&tmout_event.when); | ||||
| 		qse_addtime (&tmout_event.when, &req->urs_tmout, &tmout_event.when); | ||||
| @ -422,7 +416,7 @@ printf ("urs timed out....\n"); | ||||
| static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_urs_server_t* urs_server, void* ctx) | ||||
| { | ||||
| 	urs_ctx_t* dc = (urs_ctx_t*)urs->ctx; | ||||
| 	httpd_xtn_t* httpd_xtn; | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	qse_uint16_t xid; | ||||
| 	qse_uint32_t seq; | ||||
| @ -430,8 +424,6 @@ static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t | ||||
| 	qse_size_t url_len; | ||||
| 	qse_tmr_event_t tmout_event; | ||||
|  | ||||
| 	httpd_xtn = qse_httpd_getxtn (httpd); | ||||
|  | ||||
| 	if (dc->req_count >= QSE_COUNTOF(dc->reqs)) | ||||
| 	{ | ||||
| 		/* too many pending requests */ | ||||
|  | ||||
| @ -168,7 +168,6 @@ typedef struct server_xtn_t server_xtn_t; | ||||
| struct server_xtn_t | ||||
| { | ||||
| 	qse_httpd_server_detach_t detach; | ||||
|  | ||||
| 	qse_httpd_serverstd_query_t query; | ||||
| 	qse_httpd_serverstd_makersrc_t makersrc; | ||||
| 	qse_httpd_serverstd_freersrc_t freersrc; | ||||
| @ -635,15 +634,22 @@ struct httpd_xtn_t | ||||
| 	qse_httpd_ursstd_t urs; | ||||
| }; | ||||
|  | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| static QSE_INLINE httpd_xtn_t* GET_HTTPD_XTN(qse_httpd_t* httpd) { return (httpd_xtn_t*)((qse_uint8_t*)qse_httpd_getxtn(httpd) - QSE_SIZEOF(httpd_xtn_t)); } | ||||
| static QSE_INLINE server_xtn_t* GET_SERVER_XTN(qse_httpd_t* httpd,qse_httpd_server_t* server) { return (server_xtn_t*)((qse_uint8_t*)qse_httpd_getserverxtn(httpd, server) - QSE_SIZEOF(server_xtn_t)); } | ||||
| #else | ||||
| #define GET_HTTPD_XTN(httpd) ((httpd_xtn_t*)((qse_uint8_t*)qse_httpd_getxtn(httpd) - QSE_SIZEOF(httpd_xtn_t))) | ||||
| #define GET_SERVER_XTN(httpd,server) ((server_xtn_t*)((qse_uint8_t*)qse_httpd_getserverxtn(httpd, server) - QSE_SIZEOF(server_xtn_t))) | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #if defined(USE_SSL) | ||||
| static int init_server_ssl (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
| { | ||||
| 	SSL_CTX* ssl_ctx = QSE_NULL; | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); | ||||
| 	qse_httpd_serverstd_ssl_t ssl; | ||||
|  | ||||
| 	server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, server); | ||||
|  | ||||
| 	if (server_xtn->query (httpd, server, QSE_HTTPD_SERVERSTD_SSL, QSE_NULL, &ssl) <= -1) | ||||
| 	{ | ||||
| 		goto oops; | ||||
| @ -707,9 +713,7 @@ static void fini_server_ssl (server_xtn_t* xtn) | ||||
| static int init_xtn_peer_ssl (qse_httpd_t* httpd) | ||||
| { | ||||
| 	SSL_CTX* peer_ctx = QSE_NULL; | ||||
| 	httpd_xtn_t* xtn; | ||||
|  | ||||
| 	xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); | ||||
| 	httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	peer_ctx = SSL_CTX_new (SSLv23_client_method()); | ||||
| 	if (!peer_ctx)  | ||||
| @ -738,8 +742,7 @@ static void fini_xtn_peer_ssl (httpd_xtn_t* xtn) | ||||
|  | ||||
| static void cleanup_standard_httpd (qse_httpd_t* httpd) | ||||
| { | ||||
| 	httpd_xtn_t* xtn; | ||||
| 	xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); | ||||
| 	httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| #if defined(USE_SSL) | ||||
| 	if (xtn->ssl_peer_ctx) fini_xtn_peer_ssl (xtn); | ||||
| @ -766,7 +769,9 @@ qse_httpd_t* qse_httpd_openstdwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize, qs | ||||
| 	httpd = qse_httpd_open (mmgr, QSE_SIZEOF(httpd_xtn_t) + xtnsize, errnum); | ||||
| 	if (httpd == QSE_NULL) goto oops; | ||||
|  | ||||
| 	xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); | ||||
| 	httpd->_instsize += QSE_SIZEOF(httpd_xtn_t); | ||||
|  | ||||
| 	xtn = GET_HTTPD_XTN(httpd); | ||||
| 	/* the extension area has been cleared in qse_httpd_open(). | ||||
| 	 * QSE_MEMSET (xtn, 0, QSE_SIZEOF(*xtn));*/ | ||||
|  | ||||
| @ -817,11 +822,6 @@ oops: | ||||
| 	return QSE_NULL; | ||||
| } | ||||
|  | ||||
| void* qse_httpd_getxtnstd (qse_httpd_t* httpd) | ||||
| { | ||||
| 	return (void*)((httpd_xtn_t*)QSE_XTN(httpd) + 1); | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------- */ | ||||
|  | ||||
| static qse_sck_hnd_t open_client_socket (qse_httpd_t* httpd, int domain, int type, int proto) | ||||
| @ -1299,9 +1299,7 @@ static int client_accepted (qse_httpd_t* httpd, qse_httpd_client_t* client) | ||||
| 	#if defined(USE_SSL) | ||||
| 		int ret; | ||||
| 		SSL* ssl; | ||||
| 		server_xtn_t* server_xtn; | ||||
|  | ||||
| 		server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, client->server); | ||||
| 		server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); | ||||
|  | ||||
| 		if (!server_xtn->ssl_ctx) | ||||
| 		{ | ||||
| @ -1389,7 +1387,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) | ||||
| { | ||||
| 	/* -------------------------------------------------------------------- */ | ||||
|  | ||||
| 	httpd_xtn_t* xtn; | ||||
| 	httpd_xtn_t* xtn = GET_HTTPD_XTN(httpd); | ||||
| 	qse_skad_t connaddr, bindaddr; | ||||
| 	int connaddrsize, bindaddrsize; | ||||
| 	int connected = 1; | ||||
| @ -1409,7 +1407,6 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) | ||||
| 	int flag; | ||||
| #endif | ||||
|  | ||||
| 	xtn = (httpd_xtn_t*) qse_httpd_getxtn (httpd); | ||||
| 	 | ||||
| 	/* turn off internally used bits */ | ||||
| 	peer->flags &= ~QSE_HTTPD_PEER_ALL_INTERNALS; | ||||
| @ -1775,7 +1772,7 @@ static void dispatch_muxcb (qse_mux_t* mux, const qse_mux_evt_t* evt) | ||||
| 	qse_httpd_hnd_t handle; | ||||
| 	int mask = 0; | ||||
|  | ||||
| 	xtn = qse_mux_getxtn (mux); | ||||
| 	xtn = qse_mux_getxtn(mux); | ||||
| 	handle = evt->hnd; | ||||
|  | ||||
| 	if (evt->mask & QSE_MUX_IN) mask |= QSE_HTTPD_MUX_READ; | ||||
| @ -1790,14 +1787,14 @@ static void* mux_open (qse_httpd_t* httpd, qse_httpd_muxcb_t cbfun) | ||||
| 	qse_mux_t* mux; | ||||
| 	mux_xtn_t* xtn; | ||||
|  | ||||
| 	mux = qse_mux_open (httpd->mmgr, QSE_SIZEOF(*xtn), dispatch_muxcb, 256, QSE_NULL); | ||||
| 	mux = qse_mux_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*xtn), dispatch_muxcb, 256, QSE_NULL); | ||||
| 	if (!mux) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ESYSERR); | ||||
| 		return QSE_NULL; | ||||
| 	} | ||||
|  | ||||
| 	xtn = qse_mux_getxtn (mux); | ||||
| 	xtn = qse_mux_getxtn(mux); | ||||
| 	xtn->httpd = httpd; | ||||
| 	xtn->cbfun = cbfun; | ||||
| 	return mux; | ||||
| @ -2148,7 +2145,7 @@ static qse_fio_t* __open_file (qse_httpd_t* httpd, const qse_mchar_t* path, int | ||||
| 	fio = qse_httpd_allocmem (httpd, QSE_SIZEOF(*fio)); | ||||
| 	if (fio == QSE_NULL) return QSE_NULL; | ||||
|  | ||||
| 	if (qse_fio_init (fio, httpd->mmgr, (const qse_char_t*)path, fio_flags, fio_mode) <= -1) | ||||
| 	if (qse_fio_init (fio, qse_httpd_getmmgr(httpd), (const qse_char_t*)path, fio_flags, fio_mode) <= -1) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, fioerr_to_errnum(qse_fio_geterrnum(fio))); | ||||
| 		qse_httpd_freemem (httpd, fio); | ||||
| @ -2327,23 +2324,23 @@ static int dir_open (qse_httpd_t* httpd, const qse_mchar_t* path, qse_httpd_hnd_ | ||||
| 	dir_t* d; | ||||
| 	qse_dir_errnum_t direrrnum; | ||||
|  | ||||
| 	d = QSE_MMGR_ALLOC (httpd->mmgr, QSE_SIZEOF(*d)); | ||||
| 	d = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*d)); | ||||
| 	if (d == QSE_NULL)  | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	d->path = qse_mbsdup (path, httpd->mmgr); | ||||
| 	d->path = qse_mbsdup (path, qse_httpd_getmmgr(httpd)); | ||||
| 	if (d->path == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| 		QSE_MMGR_FREE (httpd->mmgr, d); | ||||
| 		QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	d->dp = qse_dir_open ( | ||||
| 		httpd->mmgr, 0,  | ||||
| 		qse_httpd_getmmgr(httpd), 0,  | ||||
| 		(const qse_char_t*)d->path,  | ||||
| 		QSE_DIR_MBSPATH | QSE_DIR_SORT, | ||||
| 		&direrrnum | ||||
| @ -2351,8 +2348,8 @@ static int dir_open (qse_httpd_t* httpd, const qse_mchar_t* path, qse_httpd_hnd_ | ||||
| 	if (d->dp == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, direrr_to_errnum(direrrnum)); | ||||
| 		QSE_MMGR_FREE (httpd->mmgr, d->path); | ||||
| 		QSE_MMGR_FREE (httpd->mmgr, d); | ||||
| 		QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d->path); | ||||
| 		QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| @ -2372,8 +2369,8 @@ static void dir_close (qse_httpd_t* httpd, qse_httpd_hnd_t handle) | ||||
|  | ||||
| 	qse_dir_close (d->dp); | ||||
|  | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, d->path); | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, d); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d->path); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), d); | ||||
| } | ||||
|  | ||||
| static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_dirent_t* dirent) | ||||
| @ -2394,7 +2391,7 @@ static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_diren | ||||
| 	else if (n == 0) return 0; | ||||
|  | ||||
| 	/* i assume that d->path ends with a slash */ | ||||
| 	fpath = qse_mbsdup2 (d->path, (const qse_mchar_t*)de.name, httpd->mmgr); | ||||
| 	fpath = qse_mbsdup2 (d->path, (const qse_mchar_t*)de.name, qse_httpd_getmmgr(httpd)); | ||||
| 	if (fpath == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -2402,7 +2399,7 @@ static int dir_read (qse_httpd_t* httpd, qse_httpd_hnd_t handle, qse_httpd_diren | ||||
| 	} | ||||
|  | ||||
| 	n = stat_file (httpd, fpath, &dirent->stat, 0);	 | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, fpath); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), fpath); | ||||
| 	if (n <= -1) QSE_MEMSET (dirent, 0, QSE_SIZEOF(*dirent)); | ||||
|  | ||||
| 	dirent->name = (const qse_mchar_t*)de.name; | ||||
| @ -2426,15 +2423,13 @@ static qse_htb_walk_t walk (qse_htb_t* htb, qse_htb_pair_t* pair, void* ctx) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static int process_request ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, int peek) | ||||
| static int process_request (qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req, int peek) | ||||
| { | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); | ||||
| 	qse_httpd_task_t* task; | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	qse_http_method_t mth; | ||||
| 	qse_httpd_rsrc_t rsrc; | ||||
|  | ||||
| 	server_xtn = (server_xtn_t*)qse_httpd_getserverxtn (httpd, client->server); | ||||
|  | ||||
| 	/* percent-decode the query path to the original buffer | ||||
| 	 * since i'm not going to need it in the original form | ||||
| @ -2628,15 +2623,12 @@ static int poke_request ( | ||||
| 	return process_request (httpd, client, req, 0); | ||||
| } | ||||
|  | ||||
| static int format_error ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_client_t* client, int code, qse_mchar_t* buf, int bufsz) | ||||
| static int format_error (qse_httpd_t* httpd, qse_httpd_client_t* client, int code, qse_mchar_t* buf, int bufsz) | ||||
| { | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); | ||||
| 	qse_size_t n; | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	const qse_mchar_t* head, * foot, * msg; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, client->server); | ||||
|  | ||||
| 	if (server_xtn->query (httpd, client->server, QSE_HTTPD_SERVERSTD_ERRHEAD, QSE_NULL, &head) <= -1) head = QSE_NULL; | ||||
| 	if (head == QSE_NULL) head = QSE_MT("<style type='text/css'>body { background-color:#d0e4fe; font-size: 0.9em; } div.header { font-weight: bold; margin-bottom: 5px; } div.footer { border-top: 1px solid #99AABB; text-align: right; }</style>"); | ||||
|  | ||||
| @ -2796,32 +2788,32 @@ static void free_resource ( | ||||
| 	{ | ||||
| 		case QSE_HTTPD_RSRC_CGI: | ||||
| 			if (target->u.cgi.suffix)  | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.suffix); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.suffix); | ||||
| 			if (target->u.cgi.script != qpath)  | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.script); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.script); | ||||
| 			if (!(target->u.cgi.flags & QSE_HTTPD_RSRC_CGI_FNC)) | ||||
| 			{ | ||||
| 				if (target->u.cgi.path != qpath) | ||||
| 					QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.path); | ||||
| 					QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.path); | ||||
| 				if (target->u.cgi.shebang) | ||||
| 					QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.cgi.shebang); | ||||
| 					QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.cgi.shebang); | ||||
| 			} | ||||
|  | ||||
| 			break; | ||||
|  | ||||
| 		case QSE_HTTPD_RSRC_DIR: | ||||
| 			if (target->u.dir.path != qpath) | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.dir.path); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.dir.path); | ||||
| 			break; | ||||
|  | ||||
| 		case QSE_HTTPD_RSRC_FILE: | ||||
| 			if (target->u.file.path != qpath) | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.file.path); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.file.path); | ||||
| 			break; | ||||
|  | ||||
| 		case QSE_HTTPD_RSRC_RELOC: | ||||
| 			if (target->u.reloc.target != qpath) | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, (qse_mchar_t*)target->u.reloc.target); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), (qse_mchar_t*)target->u.reloc.target); | ||||
| 			break; | ||||
|  | ||||
| 		default: | ||||
| @ -2844,7 +2836,7 @@ static qse_mchar_t* merge_paths ( | ||||
| 		ta[idx++] = path; | ||||
| 	} | ||||
| 	ta[idx++] = QSE_NULL; | ||||
| 	xpath = qse_mbsadup (ta, QSE_NULL, httpd->mmgr); | ||||
| 	xpath = qse_mbsadup (ta, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| 	if (xpath == QSE_NULL) | ||||
| 	{ | ||||
| 		httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -2904,14 +2896,12 @@ static int attempt_cgi ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_client_t* client, qse_htre_t* req,  | ||||
| 	struct rsrc_tmp_t* tmp, qse_httpd_rsrc_t* target) | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); | ||||
| 	qse_mchar_t* shebang = QSE_NULL; | ||||
| 	qse_mchar_t* suffix = QSE_NULL; | ||||
| 	qse_mchar_t* script = QSE_NULL; | ||||
| 	qse_httpd_serverstd_cgi_t cgi; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, client->server); | ||||
|  | ||||
| 	if (tmp->final_match) | ||||
| 	{ | ||||
| 		qse_httpd_serverstd_query_info_t qinfo; | ||||
| @ -2940,7 +2930,7 @@ static int attempt_cgi ( | ||||
| 				/* free tmp->xpath here upon success since it's not used for relocation. | ||||
| 				 * upon failure, it is freed by the caller. so the 'oops' part  | ||||
| 				 * of this function doesn't free it. */ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tmp->xpath); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp->xpath); | ||||
| 				return 1; | ||||
| 			} | ||||
| 			else script = (qse_mchar_t*)tmp->qpath; | ||||
| @ -3004,8 +2994,8 @@ static int attempt_cgi ( | ||||
| 							/* the script name is composed of the orginal query path. | ||||
| 							 * the pointer held in 'slash' is valid for tmp->qpath as | ||||
| 							 * tmp->qpath_rp is at most the tail part of tmp->qpath. */ | ||||
| 							script = qse_mbsxdup (tmp->qpath, slash - tmp->qpath, httpd->mmgr); | ||||
| 							suffix = qse_mbsdup (slash, httpd->mmgr); | ||||
| 							script = qse_mbsxdup (tmp->qpath, slash - tmp->qpath, qse_httpd_getmmgr(httpd)); | ||||
| 							suffix = qse_mbsdup (slash, qse_httpd_getmmgr(httpd)); | ||||
| 							if (!script || !suffix) goto oops; | ||||
|  | ||||
| 							goto bingo; | ||||
| @ -3051,7 +3041,7 @@ static int attempt_cgi ( | ||||
| 				if (server_xtn->query (httpd, client->server, QSE_HTTPD_SERVERSTD_CGI, &qinfo, &cgi) >= 0 && cgi.cgi && cgi.fncptr) | ||||
| 				{ | ||||
| 					/* virtual cgi script */ | ||||
| 					script = qse_mbsdup (tmp->qpath, httpd->mmgr); | ||||
| 					script = qse_mbsdup (tmp->qpath, qse_httpd_getmmgr(httpd)); | ||||
| 					if (!script) goto oops; | ||||
| 					suffix = QSE_NULL; | ||||
|  | ||||
| @ -3085,7 +3075,7 @@ bingo: | ||||
| 	{ | ||||
| 		if (cgi.shebang) | ||||
| 		{ | ||||
| 			shebang = qse_mbsdup (cgi.shebang, httpd->mmgr); | ||||
| 			shebang = qse_mbsdup (cgi.shebang, qse_httpd_getmmgr(httpd)); | ||||
| 			if (shebang == QSE_NULL) goto oops; | ||||
| 		} | ||||
|  | ||||
| @ -3101,9 +3091,9 @@ bingo: | ||||
|  | ||||
| oops: | ||||
| 	httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| 	if (shebang) QSE_MMGR_FREE (httpd->mmgr, shebang); | ||||
| 	if (suffix) QSE_MMGR_FREE (httpd->mmgr, suffix); | ||||
| 	if (script && script != tmp->qpath) QSE_MMGR_FREE (httpd->mmgr, script); | ||||
| 	if (shebang) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), shebang); | ||||
| 	if (suffix) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), suffix); | ||||
| 	if (script && script != tmp->qpath) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), script); | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| @ -3111,7 +3101,7 @@ static int make_resource ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_client_t* client,  | ||||
| 	qse_htre_t* req, qse_httpd_rsrc_t* target) | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, client->server); | ||||
| 	struct rsrc_tmp_t tmp; | ||||
|  | ||||
| 	qse_httpd_stat_t st; | ||||
| @ -3125,8 +3115,6 @@ static int make_resource ( | ||||
|  | ||||
| 	QSE_MEMSET (target, 0, QSE_SIZEOF(*target)); | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, client->server); | ||||
|  | ||||
| 	QSE_MEMSET (&qinfo, 0, QSE_SIZEOF(qinfo)); | ||||
| 	qinfo.req = req; | ||||
| 	qinfo.client = client; | ||||
| @ -3314,20 +3302,20 @@ auth_ok: | ||||
| 					tpath = merge_paths (httpd, tmp.xpath, ptr); | ||||
| 					if (tpath == QSE_NULL)  | ||||
| 					{ | ||||
| 						QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 						QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 						return -1; | ||||
| 					} | ||||
|  | ||||
| 					if (httpd->opt.scb.file.stat (httpd, tpath, &st) >= 0 && !st.isdir) | ||||
| 					{ | ||||
| 						/* the index file is found */ | ||||
| 						QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 						QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 						tmp.xpath = tpath; | ||||
| 						tmp.idxfile = ptr; | ||||
| 						goto attempt_file; | ||||
| 					} | ||||
|  | ||||
| 					QSE_MMGR_FREE (httpd->mmgr, tpath); | ||||
| 					QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tpath); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| @ -3340,7 +3328,7 @@ auth_ok: | ||||
| 				qse_htre_discardcontent (req); | ||||
| 				target->type = QSE_HTTPD_RSRC_ERROR; | ||||
| 				/* free xpath since it won't be used */ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 			} | ||||
| 			else if (tmp.qpath[tmp.qpath_len - 1] != QSE_MT('/')) | ||||
| 			{ | ||||
| @ -3350,7 +3338,7 @@ auth_ok: | ||||
| 				target->u.reloc.flags = QSE_HTTPD_RSRC_RELOC_APPENDSLASH | QSE_HTTPD_RSRC_RELOC_PERMANENT; | ||||
| 				target->u.reloc.target = tmp.qpath; | ||||
| 				/* free xpath since it won't be used */ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| @ -3375,7 +3363,7 @@ auth_ok: | ||||
| 		n = attempt_cgi (httpd, client, req, &tmp, target); | ||||
| 		if (n <= -1)  | ||||
| 		{ | ||||
| 			QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 			QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 			return -1; | ||||
| 		} | ||||
| 		if (n >= 1)  | ||||
| @ -3384,7 +3372,7 @@ auth_ok: | ||||
| 			{ | ||||
| 				/* tmp.xpath is not set to target->u.cgi.path when | ||||
| 				 * this flag is set. it must be deallocated */ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 			} | ||||
| 			return 0; | ||||
| 		} | ||||
| @ -3400,7 +3388,7 @@ auth_ok: | ||||
| 		{ | ||||
| 			/* free xpath since it won't be used */ | ||||
| 			qse_htre_discardcontent (req); | ||||
| 			QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 			QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
| 			target->type = QSE_HTTPD_RSRC_ERROR; | ||||
| 		} | ||||
| 		else | ||||
| @ -3411,7 +3399,7 @@ auth_ok: | ||||
| 				qse_htre_discardcontent (req); | ||||
|  | ||||
| 				/* free xpath since it won't be used */ | ||||
| 				QSE_MMGR_FREE (httpd->mmgr, tmp.xpath); | ||||
| 				QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), tmp.xpath); | ||||
|  | ||||
| 				/* create a relocation resource */ | ||||
| 				target->type = QSE_HTTPD_RSRC_RELOC; | ||||
| @ -3447,11 +3435,9 @@ auth_ok: | ||||
|  | ||||
| static void detach_server (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
|  | ||||
| 	server_xtn = (server_xtn_t*) qse_httpd_getserverxtn (httpd, server); | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); | ||||
| 	if (server_xtn->detach) server_xtn->detach (httpd, server); | ||||
| 	if (server_xtn->auth.ptr) QSE_MMGR_FREE (httpd->mmgr, server_xtn->auth.ptr); | ||||
| 	if (server_xtn->auth.ptr) QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), server_xtn->auth.ptr); | ||||
|  | ||||
| #if defined(USE_SSL) | ||||
| 	if (server_xtn->ssl_ctx) fini_server_ssl (server_xtn); | ||||
| @ -3605,10 +3591,12 @@ qse_httpd_server_t* qse_httpd_attachserverstd ( | ||||
| 	/* detach_server() is called when the server is detached */ | ||||
| 	xdope.detach = detach_server; | ||||
|  | ||||
| 	xserver = qse_httpd_attachserver (httpd, &xdope, QSE_SIZEOF(*server_xtn) + xtnsize); | ||||
| 	xserver = qse_httpd_attachserver(httpd, &xdope, QSE_SIZEOF(*server_xtn) + xtnsize); | ||||
| 	if (xserver == QSE_NULL) return QSE_NULL; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, xserver); | ||||
| 	xserver->_instsize += QSE_SIZEOF(*server_xtn); | ||||
|  | ||||
| 	server_xtn = GET_SERVER_XTN(httpd, xserver); | ||||
| 	QSE_MEMSET (server_xtn, 0, QSE_SIZEOF(*server_xtn)); | ||||
|  | ||||
| 	/* chain the original detach function */ | ||||
| @ -3705,9 +3693,7 @@ int qse_httpd_getserverstdopt ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_server_t* server, | ||||
| 	qse_httpd_serverstd_opt_t id, void* value) | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, server); | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); | ||||
|  | ||||
| 	switch (id) | ||||
| 	{ | ||||
| @ -3733,9 +3719,7 @@ int qse_httpd_setserverstdopt ( | ||||
| 	qse_httpd_t* httpd, qse_httpd_server_t* server, | ||||
| 	qse_httpd_serverstd_opt_t id, const void* value) | ||||
| { | ||||
| 	server_xtn_t* server_xtn; | ||||
|  | ||||
| 	server_xtn = qse_httpd_getserverxtn (httpd, server); | ||||
| 	server_xtn_t* server_xtn = GET_SERVER_XTN(httpd, server); | ||||
|  | ||||
| 	switch (id) | ||||
| 	{ | ||||
| @ -3756,18 +3740,11 @@ int qse_httpd_setserverstdopt ( | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
|  | ||||
| void* qse_httpd_getserverstdxtn (qse_httpd_t* httpd, qse_httpd_server_t* server) | ||||
| { | ||||
| 	server_xtn_t* xtn = qse_httpd_getserverxtn (httpd, server); | ||||
| 	return (void*)(xtn + 1); | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------- */ | ||||
|  | ||||
| int qse_httpd_loopstd (qse_httpd_t* httpd, const qse_httpd_dnsstd_t* dns, const qse_httpd_ursstd_t* urs) | ||||
| { | ||||
| 	httpd_xtn_t* httpd_xtn = qse_httpd_getxtn (httpd); | ||||
| 	httpd_xtn_t* httpd_xtn = GET_HTTPD_XTN(httpd); | ||||
|  | ||||
| 	/* default dns server info */ | ||||
| 	if (dns) | ||||
|  | ||||
| @ -72,7 +72,7 @@ qse_httpd_t* qse_httpd_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_httpd_err | ||||
| { | ||||
| 	qse_httpd_t* httpd; | ||||
|  | ||||
| 	httpd = (qse_httpd_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_httpd_t) + xtnsize); | ||||
| 	httpd = (qse_httpd_t*)QSE_MMGR_ALLOC(mmgr, QSE_SIZEOF(qse_httpd_t) + xtnsize); | ||||
| 	if (httpd) | ||||
| 	{ | ||||
| 		if (qse_httpd_init (httpd, mmgr) <= -1) | ||||
| @ -91,7 +91,7 @@ qse_httpd_t* qse_httpd_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_httpd_err | ||||
| void qse_httpd_close (qse_httpd_t* httpd) | ||||
| { | ||||
| 	qse_httpd_fini (httpd); | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, httpd); | ||||
| 	QSE_MMGR_FREE (httpd->_mmgr, httpd); | ||||
| } | ||||
|  | ||||
| int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) | ||||
| @ -100,7 +100,9 @@ int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) | ||||
|  | ||||
| 	QSE_MEMSET (httpd, 0, QSE_SIZEOF(*httpd)); | ||||
|  | ||||
| 	httpd->mmgr = mmgr; | ||||
| 	httpd->_instsize = QSE_SIZEOF(*httpd); | ||||
| 	httpd->_mmgr = mmgr; | ||||
|  | ||||
| 	httpd->tmr = qse_tmr_open (mmgr, QSE_SIZEOF(tmr_xtn_t), 2048); | ||||
| 	if (httpd->tmr == QSE_NULL) return -1; | ||||
|  | ||||
| @ -119,6 +121,7 @@ int qse_httpd_init (qse_httpd_t* httpd, qse_mmgr_t* mmgr) | ||||
| void qse_httpd_fini (qse_httpd_t* httpd) | ||||
| { | ||||
| 	qse_httpd_ecb_t* ecb; | ||||
| 	qse_size_t i; | ||||
|  | ||||
| 	unload_all_modules (httpd); | ||||
|  | ||||
| @ -127,6 +130,16 @@ void qse_httpd_fini (qse_httpd_t* httpd) | ||||
|  | ||||
| 	free_server_list (httpd); | ||||
| 	qse_tmr_close (httpd->tmr); | ||||
|  | ||||
| 	for (i = 0; i < QSE_COUNTOF(httpd->opt.mod); i++) | ||||
| 	{ | ||||
| 		if (httpd->opt.mod[i].ptr) | ||||
| 		{ | ||||
| 			qse_httpd_freemem (httpd, httpd->opt.mod[i].ptr); | ||||
| 			httpd->opt.mod[i].ptr = QSE_NULL; | ||||
| 			httpd->opt.mod[i].len = 0; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void qse_httpd_stop (qse_httpd_t* httpd) | ||||
| @ -149,21 +162,11 @@ void qse_httpd_seterrnum (qse_httpd_t* httpd, qse_httpd_errnum_t errnum) | ||||
| 	httpd->errnum = errnum; | ||||
| } | ||||
|  | ||||
| qse_mmgr_t* qse_httpd_getmmgr (qse_httpd_t* httpd) | ||||
| { | ||||
| 	return httpd->mmgr; | ||||
| } | ||||
|  | ||||
| void* qse_httpd_getxtn (qse_httpd_t* httpd) | ||||
| { | ||||
| 	return QSE_XTN (httpd); | ||||
| } | ||||
|  | ||||
| static int dup_str_opt (qse_httpd_t* httpd, const void* value, qse_cstr_t* tmp) | ||||
| { | ||||
| 	if (value) | ||||
| 	{ | ||||
| 		tmp->ptr = qse_strdup (value, httpd->mmgr); | ||||
| 		tmp->ptr = qse_strdup(value, qse_httpd_getmmgr(httpd)); | ||||
| 		if (tmp->ptr == QSE_NULL) | ||||
| 		{ | ||||
| 			qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||
| @ -236,10 +239,10 @@ int qse_httpd_setopt (qse_httpd_t* httpd, qse_httpd_opt_t id, const void* value) | ||||
| 			qse_cstr_t tmp; | ||||
| 			int idx; | ||||
|  | ||||
| 			if (dup_str_opt (httpd, value, &tmp) <= -1) return -1; | ||||
| 			if (dup_str_opt(httpd, value, &tmp) <= -1) return -1; | ||||
|  | ||||
| 			idx = id - QSE_HTTPD_MODPREFIX; | ||||
| 			if (httpd->opt.mod[idx].ptr) QSE_MMGR_FREE (httpd->mmgr, httpd->opt.mod[idx].ptr); | ||||
| 			if (httpd->opt.mod[idx].ptr) qse_httpd_freemem (httpd, httpd->opt.mod[idx].ptr); | ||||
|  | ||||
| 			httpd->opt.mod[idx] = tmp; | ||||
| 			return 0; | ||||
| @ -276,32 +279,32 @@ void qse_httpd_pushecb (qse_httpd_t* httpd, qse_httpd_ecb_t* ecb) | ||||
|  | ||||
| /* ----------------------------------------------------------------------- */ | ||||
|  | ||||
| QSE_INLINE void* qse_httpd_allocmem (qse_httpd_t* httpd, qse_size_t size) | ||||
| void* qse_httpd_allocmem (qse_httpd_t* httpd, qse_size_t size) | ||||
| { | ||||
| 	void* ptr = QSE_MMGR_ALLOC (httpd->mmgr, size); | ||||
| 	void* ptr = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), size); | ||||
| 	if (ptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| 	return ptr; | ||||
| } | ||||
|  | ||||
| QSE_INLINE void* qse_httpd_callocmem (qse_httpd_t* httpd, qse_size_t size) | ||||
| void* qse_httpd_callocmem (qse_httpd_t* httpd, qse_size_t size) | ||||
| { | ||||
| 	void* ptr = QSE_MMGR_ALLOC (httpd->mmgr, size); | ||||
| 	void* ptr = QSE_MMGR_ALLOC (qse_httpd_getmmgr(httpd), size); | ||||
| 	if (ptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| 	else QSE_MEMSET (ptr, 0, size); | ||||
| 	return ptr; | ||||
| } | ||||
|  | ||||
| QSE_INLINE void* qse_httpd_reallocmem ( | ||||
| void* qse_httpd_reallocmem ( | ||||
| 	qse_httpd_t* httpd, void* ptr, qse_size_t size) | ||||
| { | ||||
| 	void* nptr = QSE_MMGR_REALLOC (httpd->mmgr, ptr, size); | ||||
| 	void* nptr = QSE_MMGR_REALLOC (qse_httpd_getmmgr(httpd), ptr, size); | ||||
| 	if (nptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| 	return nptr; | ||||
| } | ||||
|  | ||||
| QSE_INLINE void qse_httpd_freemem (qse_httpd_t* httpd, void* ptr) | ||||
| void qse_httpd_freemem (qse_httpd_t* httpd, void* ptr) | ||||
| { | ||||
| 	QSE_MMGR_FREE (httpd->mmgr, ptr); | ||||
| 	QSE_MMGR_FREE (qse_httpd_getmmgr(httpd), ptr); | ||||
| } | ||||
|  | ||||
| qse_mchar_t* qse_httpd_strtombsdup (qse_httpd_t* httpd, const qse_char_t* str) | ||||
| @ -309,9 +312,9 @@ qse_mchar_t* qse_httpd_strtombsdup (qse_httpd_t* httpd, const qse_char_t* str) | ||||
| 	qse_mchar_t* mptr; | ||||
|  | ||||
| #if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	mptr = qse_mbsdup (str, httpd->mmgr); | ||||
| 	mptr = qse_mbsdup (str, qse_httpd_getmmgr(httpd)); | ||||
| #else | ||||
| 	mptr = qse_wcstombsdup (str, QSE_NULL, httpd->mmgr); | ||||
| 	mptr = qse_wcstombsdup (str, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| #endif | ||||
|  | ||||
| 	if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -323,9 +326,9 @@ qse_mchar_t* qse_httpd_strntombsdup (qse_httpd_t* httpd, const qse_char_t* str, | ||||
| 	qse_mchar_t* mptr; | ||||
|  | ||||
| #if defined(QSE_CHAR_IS_MCHAR) | ||||
| 	mptr = qse_mbsxdup (str, len, httpd->mmgr); | ||||
| 	mptr = qse_mbsxdup (str, len, qse_httpd_getmmgr(httpd)); | ||||
| #else | ||||
| 	mptr = qse_wcsntombsdup (str, len, QSE_NULL, httpd->mmgr); | ||||
| 	mptr = qse_wcsntombsdup (str, len, QSE_NULL, qse_httpd_getmmgr(httpd)); | ||||
| #endif | ||||
|  | ||||
| 	if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -336,7 +339,7 @@ qse_mchar_t* qse_httpd_mbsdup (qse_httpd_t* httpd, const qse_mchar_t* str) | ||||
| { | ||||
| 	qse_mchar_t* mptr; | ||||
|  | ||||
| 	mptr = qse_mbsdup (str, httpd->mmgr); | ||||
| 	mptr = qse_mbsdup (str, qse_httpd_getmmgr(httpd)); | ||||
| 	if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
|  | ||||
| 	return mptr; | ||||
| @ -346,7 +349,7 @@ qse_mchar_t* qse_httpd_mbsxdup (qse_httpd_t* httpd, const qse_mchar_t* str, qse_ | ||||
| { | ||||
| 	qse_mchar_t* mptr; | ||||
|  | ||||
| 	mptr = qse_mbsxdup (str, len, httpd->mmgr); | ||||
| 	mptr = qse_mbsxdup (str, len, qse_httpd_getmmgr(httpd)); | ||||
| 	if (mptr == QSE_NULL) httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
|  | ||||
| 	return mptr; | ||||
| @ -583,14 +586,14 @@ qse_httpd_peer_t* qse_httpd_decacheproxypeer ( | ||||
| /* ----------------------------------------------------------------------- */ | ||||
| static int htrd_peek_request (qse_htrd_t* htrd, qse_htre_t* req) | ||||
| { | ||||
| 	htrd_xtn_t* xtn = (htrd_xtn_t*) qse_htrd_getxtn (htrd); | ||||
| 	return xtn->httpd->opt.rcb.peekreq (xtn->httpd, xtn->client, req); | ||||
| 	htrd_xtn_t* xtn = (htrd_xtn_t*)qse_htrd_getxtn(htrd); | ||||
| 	return xtn->httpd->opt.rcb.peekreq(xtn->httpd, xtn->client, req); | ||||
| } | ||||
|  | ||||
| static int htrd_poke_request (qse_htrd_t* htrd, qse_htre_t* req) | ||||
| { | ||||
| 	htrd_xtn_t* xtn = (htrd_xtn_t*) qse_htrd_getxtn (htrd); | ||||
| 	return xtn->httpd->opt.rcb.pokereq (xtn->httpd, xtn->client, req); | ||||
| 	htrd_xtn_t* xtn = (htrd_xtn_t*)qse_htrd_getxtn(htrd); | ||||
| 	return xtn->httpd->opt.rcb.pokereq(xtn->httpd, xtn->client, req); | ||||
| } | ||||
|  | ||||
| static qse_htrd_recbs_t htrd_recbs = | ||||
| @ -620,14 +623,15 @@ static qse_httpd_client_t* new_client (qse_httpd_t* httpd, qse_httpd_client_t* t | ||||
| 	qse_tmr_event_t idle_event; | ||||
| 	htrd_xtn_t* xtn; | ||||
|  | ||||
| 	client = qse_httpd_allocmem (httpd, QSE_SIZEOF(*client)); | ||||
| 	client = qse_httpd_allocmem(httpd, QSE_SIZEOF(*client)); | ||||
| 	if (client == QSE_NULL) goto oops; | ||||
|  | ||||
| 	QSE_MEMSET (client, 0, QSE_SIZEOF(*client)); | ||||
| 	client->tmr_idle = QSE_TMR_INVALID_INDEX; | ||||
|  | ||||
| 	client->_instsize = QSE_SIZEOF(*client); | ||||
| 	client->type = QSE_HTTPD_CLIENT; | ||||
| 	client->htrd = qse_htrd_open (httpd->mmgr, QSE_SIZEOF(*xtn)); | ||||
| 	client->htrd = qse_htrd_open (qse_httpd_getmmgr(httpd), QSE_SIZEOF(*xtn)); | ||||
| 	if (client->htrd == QSE_NULL)  | ||||
| 	{ | ||||
| 		httpd->errnum = QSE_HTTPD_ENOMEM; | ||||
| @ -663,7 +667,7 @@ static qse_httpd_client_t* new_client (qse_httpd_t* httpd, qse_httpd_client_t* t | ||||
| 	client->server = tmpl->server; | ||||
| 	client->initial_ifindex = tmpl->initial_ifindex; | ||||
|  | ||||
| 	xtn = (htrd_xtn_t*)qse_htrd_getxtn (client->htrd); | ||||
| 	xtn = (htrd_xtn_t*)qse_htrd_getxtn(client->htrd); | ||||
| 	xtn->httpd = httpd; | ||||
| 	xtn->client = client; | ||||
|  | ||||
| @ -1031,6 +1035,7 @@ qse_httpd_server_t* qse_httpd_attachserver ( | ||||
| 	server = qse_httpd_callocmem (httpd, QSE_SIZEOF(*server) + xtnsize); | ||||
| 	if (server == QSE_NULL) return QSE_NULL; | ||||
|  | ||||
| 	server->_instsize = QSE_SIZEOF(*server); | ||||
| 	server->type = QSE_HTTPD_SERVER; | ||||
| 	/* copy the server dope */ | ||||
| 	server->dope = *dope; | ||||
|  | ||||
| @ -64,7 +64,7 @@ | ||||
|  | ||||
| struct qse_httpd_t | ||||
| { | ||||
| 	qse_mmgr_t* mmgr; | ||||
| 	QSE_HTTPD_HDR; | ||||
| 	qse_httpd_errnum_t errnum; | ||||
| 	qse_httpd_ecb_t* ecb; /* event callbacks */ | ||||
| 	qse_tmr_t* tmr; | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| #include <qse/sed/StdSed.hpp> | ||||
| #include <qse/cmn/main.h> | ||||
| #include <qse/Exception.hpp> | ||||
| #include <iostream> | ||||
| #include "sed00.h" | ||||
|  | ||||
| @ -15,29 +16,22 @@ | ||||
| class MySed: protected QSE::StdSed | ||||
| { | ||||
| public: | ||||
| 	class Error | ||||
| 	{  | ||||
| 	public: | ||||
| 		Error (const char_t* msg) throw (): msg (msg) {} | ||||
| 		const char_t* getMessage() const throw() { return msg; } | ||||
| 	protected: | ||||
| 		const char_t* msg; | ||||
| 	}; | ||||
| 	QSE_EXCEPTION(Error); | ||||
|  | ||||
| 	MySed () { if (open() <= -1) throw Error (QSE_T("cannot open")); } | ||||
| 	~MySed () { close (); } | ||||
| 	MySed () { if (this->open() <= -1) QSE_THROW_WITH_MSG (Error, QSE_T("cannot open sed")); } | ||||
| 	~MySed () { this->close (); } | ||||
|  | ||||
| 	void compile (const char_t* sptr) | ||||
| 	{ | ||||
| 		QSE::StdSed::StringStream stream(sptr); | ||||
| 		if (QSE::StdSed::compile (stream) <= -1) | ||||
| 			throw Error (getErrorMessage()); | ||||
| 			QSE_THROW_WITH_MSG(Error, this->getErrorMessage()); | ||||
| 	} | ||||
|  | ||||
| 	void execute (Stream& stream) | ||||
| 	{ | ||||
| 		if (QSE::StdSed::execute (stream) <= -1) | ||||
| 			throw Error (getErrorMessage()); | ||||
| 			QSE_THROW_WITH_MSG(Error, this->getErrorMessage()); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| @ -57,7 +51,7 @@ int sed_main (int argc, qse_char_t* argv[]) | ||||
| 	} | ||||
| 	catch (MySed::Error& err) | ||||
| 	{ | ||||
| 		xcout << QSE_T("ERROR: ") << err.getMessage() << std::endl; | ||||
| 		xcout << QSE_T("ERROR: ") << QSE_EXCEPTION_MSG(err) << std::endl; | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user