diff --git a/qse/include/qse/cmn/nwad.h b/qse/include/qse/cmn/nwad.h index 00802e11..5fca32b6 100644 --- a/qse/include/qse/cmn/nwad.h +++ b/qse/include/qse/cmn/nwad.h @@ -21,6 +21,11 @@ #ifndef _QSE_CMN_NWAD_H_ #define _QSE_CMN_NWAD_H_ +/** \file + * This file defines functions and data types for handling + * a network address and a socket address. + */ + #include #include #include @@ -38,9 +43,14 @@ typedef struct qse_nwad_t qse_nwad_t; #define QSE_NWAD_LOCAL_MAX_PATH 128 +/** + * The qse_nwad_t type defines a structure to hold a network address. + */ struct qse_nwad_t { + /** network address type */ qse_nwad_type_t type; + union { struct @@ -65,7 +75,7 @@ struct qse_nwad_t * trailers may get truncated, when itconverted to skad. */ qse_char_t path[QSE_NWAD_LOCAL_MAX_PATH]; } local; - } u; + } u; }; enum qse_nwadtostr_flag_t @@ -86,6 +96,10 @@ typedef enum qse_nwadtostr_flag_t qse_nwadtostr_flag_t; typedef struct qse_skad_t qse_skad_t; +/** + * The qse_skad_t type defines a structure large enough to hold a socket + * address. + */ struct qse_skad_t { #define QSE_SKAD_DATA_SIZE 0 @@ -132,15 +146,27 @@ QSE_EXPORT void qse_clearnwad ( qse_nwad_type_t type ); +/** + * The qse_setnwadport() function changes the port number field of a + * network saddress. + */ QSE_EXPORT void qse_setnwadport ( qse_nwad_t* nwad, qse_uint16_t port ); +/** + * The qse_getnwadport() function returns the port number field of a + * network address. + */ QSE_EXPORT qse_uint16_t qse_getnwadport ( qse_nwad_t* nwad ); +/** + * The qse_mbstonwad() function converts a multi-byte string \a mbs to a + * network address and stores it to memory pointed to by \a nwad. + */ QSE_EXPORT int qse_mbstonwad ( const qse_mchar_t* mbs, qse_nwad_t* nwad @@ -187,16 +213,30 @@ QSE_EXPORT qse_size_t qse_nwadtowcs ( # define qse_nwadtostr(nwad,ptr,len,flags) qse_nwadtowcs(nwad,ptr,len,flags) #endif +/** + * The qse_skadtonwad() function converts a socket address \a skad + * to a network address and stroes it to memory pointed to by \a nwad. + * \return -1 upon failure, size of the socket address in success. + */ QSE_EXPORT int qse_skadtonwad ( const qse_skad_t* skad, qse_nwad_t* nwad ); +/** + * The qse_nwadtoskad() function converts a network address \a nwad + * to a socket address and stores it to memory pointed to by \a skad. + * \return -1 upon failure, size of the socket address in success. + */ QSE_EXPORT int qse_nwadtoskad ( const qse_nwad_t* nwad, qse_skad_t* skad ); +/** + * The qse_skadfamily() function returns the socket address family + * of a given address \a skad. + */ QSE_EXPORT int qse_skadfamily ( const qse_skad_t* skad ); diff --git a/qse/include/qse/xli/stdxli.h b/qse/include/qse/xli/stdxli.h index 0394802d..b1a44816 100644 --- a/qse/include/qse/xli/stdxli.h +++ b/qse/include/qse/xli/stdxli.h @@ -25,13 +25,7 @@ #include /** \file - * This file defines functions and data types that help you create - * an xli interpreter with less effort. It is designed to be as close - * to conventional xli implementations as possible. - * - * The source script handler does not evaluate a file name of the "var=val" - * form as an assignment expression. Instead, it just treats it as a - * normal file name. + * This file provides easier interface to a qse_xli_t object. */ /** diff --git a/qse/include/qse/xli/xli.h b/qse/include/qse/xli/xli.h index ff5ff5fb..965405fd 100644 --- a/qse/include/qse/xli/xli.h +++ b/qse/include/qse/xli/xli.h @@ -21,6 +21,23 @@ #ifndef _QSE_XLI_XLI_H_ #define _QSE_XLI_XLI_H_ +/** \file + * This file defines functions and data types for handling key-value pairs + * orgianized in the way shown below. + * + * \code + * key1 = "abc"; + * key2 { + * key21 = "hello"; + * key22 = "world"; + * key23 { + * key231 = 99999; + * } + * } + * key3 = "12345"; + * \endcode + */ + #include #include @@ -81,7 +98,7 @@ enum qse_xli_opt_t QSE_XLI_PAIRXTNSIZE, /** - * the size of extension area associated with the root list node. + * The size of extension area associated with the root list node. * you can get the pointer to the extension with qse_getxlirootxtn(). * the new size set takes effect after the call to qse_xli_yieldroot(). */ diff --git a/qse/lib/http/httpd-cgi.c b/qse/lib/http/httpd-cgi.c index 219676e0..3c43076a 100644 --- a/qse/lib/http/httpd-cgi.c +++ b/qse/lib/http/httpd-cgi.c @@ -1509,14 +1509,14 @@ static int task_main_cgi ( x = qse_pio_init ( &cgi->pio, httpd->mmgr, (const qse_char_t*)xpath, cgi->env, pio_options); - if (xpath != cgi->path && xpath != &cgi->fnc) QSE_MMGR_FREE (httpd->mmgr, xpath); + if (xpath != cgi->path && + xpath != (qse_mchar_t*)&cgi->fnc) QSE_MMGR_FREE (httpd->mmgr, xpath); if (x <= -1) { qse_pio_errnum_t errnum; errnum = qse_pio_geterrnum (&cgi->pio); - if (errnum == QSE_PIO_ENOENT) http_errnum = 404; else if (errnum == QSE_PIO_EACCES) http_errnum = 403; @@ -1674,4 +1674,3 @@ qse_httpd_task_t* qse_httpd_entaskcgi ( ((arg.shebang.len + 1) * QSE_SIZEOF(*arg.shebang.ptr)) ); } - diff --git a/qse/lib/http/httpd-proxy.c b/qse/lib/http/httpd-proxy.c index 0585d4f7..f31f2441 100644 --- a/qse/lib/http/httpd-proxy.c +++ b/qse/lib/http/httpd-proxy.c @@ -1053,7 +1053,10 @@ static int task_init_proxy ( { /* the query path has been percent-decoded. get the original qpath*/ - /* + #if 0 + /* percent-encoding back doesn't work all the time because + * some characters not encoded in the original request may get + * encoded. some picky servers has thrown errors for such requests */ qse_mchar_t* qpath, * qpath_enc; qse_size_t x; @@ -1066,9 +1069,10 @@ static int task_init_proxy ( if (qpath != qpath_enc) QSE_MMGR_FREE (httpd->mmgr, qpath_enc); if (x == (qse_size_t)-1) goto nomem_oops; - */ - + #else + /* using the original query path minimizes the chance of side-effects */ if (qse_mbs_cat (proxy->reqfwdbuf, qse_htre_getorgqpath(arg->req)) == (qse_size_t)-1) goto nomem_oops; + #endif } else {