added QSE_HTTPD_MODPREFIX and QSE_HTTPD_MODPOSTFIX
This commit is contained in:
		| @ -67,10 +67,12 @@ typedef enum qse_httpd_errnum_t qse_httpd_errnum_t; | |||||||
| enum qse_httpd_opt_t | enum qse_httpd_opt_t | ||||||
| { | { | ||||||
| 	QSE_HTTPD_TRAIT, | 	QSE_HTTPD_TRAIT, | ||||||
| 	QSE_HTTPD_SCB, |  | ||||||
| 	QSE_HTTPD_RCB, |  | ||||||
| 	QSE_HTTPD_TMOUT, | 	QSE_HTTPD_TMOUT, | ||||||
| 	QSE_HTTPD_IDLELIMIT | 	QSE_HTTPD_IDLELIMIT, | ||||||
|  | 	QSE_HTTPD_MODPREFIX, | ||||||
|  | 	QSE_HTTPD_MODPOSTFIX, | ||||||
|  | 	QSE_HTTPD_SCB, | ||||||
|  | 	QSE_HTTPD_RCB | ||||||
| }; | }; | ||||||
| typedef enum qse_httpd_opt_t qse_httpd_opt_t; | typedef enum qse_httpd_opt_t qse_httpd_opt_t; | ||||||
|  |  | ||||||
| @ -1128,6 +1130,16 @@ QSE_EXPORT int qse_httpd_rewriteurl ( | |||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | QSE_EXPORT int qse_httpd_loadmod ( | ||||||
|  | 	qse_httpd_t*      httpd, | ||||||
|  | 	const qse_char_t* name | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_httpd_mod_t* qse_httpd_findmod ( | ||||||
|  | 	qse_httpd_t*      httpd, | ||||||
|  | 	const qse_char_t* name | ||||||
|  | ); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -123,6 +123,27 @@ void* qse_httpd_getxtn (qse_httpd_t* httpd) | |||||||
| 	return QSE_XTN (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); | ||||||
|  | 		if (tmp->ptr == QSE_NULL) | ||||||
|  | 		{ | ||||||
|  | 			qse_httpd_seterrnum (httpd, QSE_HTTPD_ENOMEM); | ||||||
|  | 			return -1; | ||||||
|  | 		} | ||||||
|  | 		tmp->len = qse_strlen (tmp->ptr); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		tmp->ptr = QSE_NULL; | ||||||
|  | 		tmp->len = 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
| int qse_httpd_getopt (qse_httpd_t* httpd, qse_httpd_opt_t id, void* value) | int qse_httpd_getopt (qse_httpd_t* httpd, qse_httpd_opt_t id, void* value) | ||||||
| { | { | ||||||
| 	switch (id) | 	switch (id) | ||||||
| @ -131,14 +152,6 @@ int qse_httpd_getopt (qse_httpd_t* httpd, qse_httpd_opt_t id, void* value) | |||||||
| 			*(int*)value = httpd->opt.trait; | 			*(int*)value = httpd->opt.trait; | ||||||
| 			return 0; | 			return 0; | ||||||
|  |  | ||||||
| 		case QSE_HTTPD_SCB: |  | ||||||
| 			*(qse_httpd_scb_t*)value = httpd->opt.scb; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case QSE_HTTPD_RCB: |  | ||||||
| 			*(qse_httpd_rcb_t*)value = httpd->opt.rcb; |  | ||||||
| 			return 0; |  | ||||||
|  |  | ||||||
| 		case QSE_HTTPD_TMOUT: | 		case QSE_HTTPD_TMOUT: | ||||||
| 			*(qse_ntime_t*)value = httpd->opt.tmout; | 			*(qse_ntime_t*)value = httpd->opt.tmout; | ||||||
| 			return 0; | 			return 0; | ||||||
| @ -146,6 +159,19 @@ int qse_httpd_getopt (qse_httpd_t* httpd, qse_httpd_opt_t id, void* value) | |||||||
| 		case QSE_HTTPD_IDLELIMIT: | 		case QSE_HTTPD_IDLELIMIT: | ||||||
| 			*(qse_ntime_t*)value = httpd->opt.idle_limit; | 			*(qse_ntime_t*)value = httpd->opt.idle_limit; | ||||||
| 			return 0; | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_MODPREFIX: | ||||||
|  | 		case QSE_HTTPD_MODPOSTFIX: | ||||||
|  | 			*(const qse_char_t**)value = httpd->opt.mod[id - QSE_HTTPD_MODPREFIX].ptr; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_SCB: | ||||||
|  | 			*(qse_httpd_scb_t*)value = httpd->opt.scb; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_RCB: | ||||||
|  | 			*(qse_httpd_rcb_t*)value = httpd->opt.rcb; | ||||||
|  | 			return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	httpd->errnum = QSE_HTTPD_EINVAL; | 	httpd->errnum = QSE_HTTPD_EINVAL; | ||||||
| @ -160,6 +186,29 @@ int qse_httpd_setopt (qse_httpd_t* httpd, qse_httpd_opt_t id, const void* value) | |||||||
| 			httpd->opt.trait = *(const int*)value; | 			httpd->opt.trait = *(const int*)value; | ||||||
| 			return 0; | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_TMOUT: | ||||||
|  | 			httpd->opt.tmout = *(qse_ntime_t*)value; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_IDLELIMIT: | ||||||
|  | 			httpd->opt.idle_limit = *(qse_ntime_t*)value; | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		case QSE_HTTPD_MODPREFIX: | ||||||
|  | 		case QSE_HTTPD_MODPOSTFIX: | ||||||
|  | 		{ | ||||||
|  | 			qse_cstr_t tmp; | ||||||
|  | 			int idx; | ||||||
|  |  | ||||||
|  | 			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); | ||||||
|  |  | ||||||
|  | 			httpd->opt.mod[idx] = tmp; | ||||||
|  | 			return 0; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		case QSE_HTTPD_SCB: | 		case QSE_HTTPD_SCB: | ||||||
| 			httpd->opt.scb = *(qse_httpd_scb_t*)value; | 			httpd->opt.scb = *(qse_httpd_scb_t*)value; | ||||||
| 			return 0; | 			return 0; | ||||||
| @ -168,13 +217,7 @@ int qse_httpd_setopt (qse_httpd_t* httpd, qse_httpd_opt_t id, const void* value) | |||||||
| 			httpd->opt.rcb = *(qse_httpd_rcb_t*)value; | 			httpd->opt.rcb = *(qse_httpd_rcb_t*)value; | ||||||
| 			return 0; | 			return 0; | ||||||
|  |  | ||||||
| 		case QSE_HTTPD_TMOUT: |  | ||||||
| 			httpd->opt.tmout = *(qse_ntime_t*)value; |  | ||||||
| 			return 0; |  | ||||||
| 		 | 		 | ||||||
| 		case QSE_HTTPD_IDLELIMIT: |  | ||||||
| 			httpd->opt.idle_limit = *(qse_ntime_t*)value; |  | ||||||
| 			return 0; |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	httpd->errnum = QSE_HTTPD_EINVAL; | 	httpd->errnum = QSE_HTTPD_EINVAL; | ||||||
|  | |||||||
| @ -38,10 +38,11 @@ struct qse_httpd_t | |||||||
| 	struct | 	struct | ||||||
| 	{ | 	{ | ||||||
| 		int trait; | 		int trait; | ||||||
| 		qse_httpd_scb_t scb; /* system callbacks */ |  | ||||||
| 		qse_httpd_rcb_t rcb; /* request callbacks */ |  | ||||||
| 		qse_ntime_t tmout; /* poll timeout */ | 		qse_ntime_t tmout; /* poll timeout */ | ||||||
| 		qse_ntime_t idle_limit;  | 		qse_ntime_t idle_limit;  | ||||||
|  | 		qse_cstr_t mod[2]; /* module prefix and postfix */ | ||||||
|  | 		qse_httpd_scb_t scb; /* system callbacks */ | ||||||
|  | 		qse_httpd_rcb_t rcb; /* request callbacks */ | ||||||
| 	} opt; | 	} opt; | ||||||
|  |  | ||||||
| 	int stopreq: 1; | 	int stopreq: 1; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user