added _instsize to qse_httpd_t, qse_httpd_server_t, qse_httpd_client_t, etc
This commit is contained in:
parent
74b48b87ec
commit
03bdfda578
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user