added qse_httpd_entasktextwithmvk()
This commit is contained in:
		| @ -69,14 +69,81 @@ static int task_main_text ( | ||||
| 	return 1; /* more work to do */ | ||||
| } | ||||
|  | ||||
| qse_httpd_task_t* qse_httpd_entasktextwithmvk ( | ||||
| 	qse_httpd_t* httpd, | ||||
| 	qse_httpd_client_t* client, | ||||
| 	qse_httpd_task_t* pred,  | ||||
| 	const qse_mchar_t* text, | ||||
| 	const qse_mchar_t* mime, | ||||
| 	qse_http_method_t method, | ||||
| 	const qse_http_version_t* version, | ||||
| 	int keepalive) | ||||
| { | ||||
| 	qse_size_t tlen; | ||||
| 	qse_mchar_t b_tlen[64]; | ||||
|  | ||||
| 	qse_httpd_task_t task; | ||||
| 	task_text_t data; | ||||
|  | ||||
| 	switch (method) | ||||
| 	{ | ||||
| 		case QSE_HTTP_HEAD: | ||||
| 			tlen = 0; | ||||
| 			break; | ||||
|  | ||||
| 		case QSE_HTTP_GET: | ||||
| 		case QSE_HTTP_POST: | ||||
| 			tlen = qse_mbslen(text); | ||||
| 			break; | ||||
|  | ||||
| 		default: | ||||
| 			/* Method not allowed */ | ||||
| 			return qse_httpd_entaskerrorwithmvk (httpd, client, pred, 405, method, version, keepalive); | ||||
| 	} | ||||
|  | ||||
| 	qse_fmtuintmaxtombs (b_tlen, QSE_COUNTOF(b_tlen), tlen, 10, -1, QSE_MT('\0'), QSE_NULL); | ||||
| 	pred = qse_httpd_entaskformat ( | ||||
| 		httpd, client, pred, | ||||
| 		QSE_MT("HTTP/%d.%d 200 OK\r\nServer: %s\r\nDate: %s\r\nConnection: %s\r\nContent-Type: %s\r\nContent-Length: %s\r\n\r\n"), | ||||
| 		version->major, version->minor, | ||||
| 		qse_httpd_getname (httpd), | ||||
| 		qse_httpd_fmtgmtimetobb (httpd, QSE_NULL, 0), | ||||
| 		(keepalive? QSE_MT("keep-alive"): QSE_MT("close")), | ||||
| 		mime, b_tlen | ||||
| 	); | ||||
| 	if (pred == QSE_NULL) return QSE_NULL; | ||||
|  | ||||
| 	QSE_MEMSET (&data, 0, QSE_SIZEOF(data)); | ||||
| 	data.ptr = text; | ||||
| 	data.left = tlen; | ||||
|  | ||||
| 	QSE_MEMSET (&task, 0, QSE_SIZEOF(task)); | ||||
| 	task.init = task_init_text; | ||||
| 	task.main = task_main_text; | ||||
| 	task.ctx = &data; | ||||
|  | ||||
| 	return qse_httpd_entask (httpd, client, pred, &task, QSE_SIZEOF(data) + data.left); | ||||
| } | ||||
|  | ||||
| qse_httpd_task_t* qse_httpd_entasktext ( | ||||
|      qse_httpd_t* httpd, | ||||
| 	qse_httpd_t* httpd, | ||||
| 	qse_httpd_client_t* client, | ||||
| 	qse_httpd_task_t* pred,  | ||||
| 	const qse_mchar_t* text, | ||||
| 	const qse_mchar_t* mime, | ||||
| 	qse_htre_t* req) | ||||
| { | ||||
| 	qse_http_method_t method; | ||||
| 	qse_http_version_t* version; | ||||
|  | ||||
| 	 | ||||
| 	method = qse_htre_getqmethodtype (req); | ||||
| 	version = qse_htre_getversion (req); | ||||
|  | ||||
| 	qse_htre_discardcontent (req); | ||||
| 	return qse_httpd_entasktextwithmvk (httpd, client, pred, text, mime, method, version, (req->flags & QSE_HTRE_ATTR_KEEPALIVE)); | ||||
|  | ||||
| #if 0 | ||||
| 	qse_size_t tlen; | ||||
| 	qse_mchar_t b_tlen[64]; | ||||
| 	qse_http_method_t method; | ||||
| @ -127,4 +194,5 @@ qse_httpd_task_t* qse_httpd_entasktext ( | ||||
| 	task.ctx = &data; | ||||
|  | ||||
| 	return qse_httpd_entask (httpd, client, pred, &task, QSE_SIZEOF(data) + data.left); | ||||
| #endif | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user