added upxd
This commit is contained in:
		| @ -1,4 +1,4 @@ | ||||
| pkgincludedir= $(includedir)/qse/net | ||||
| pkginclude_HEADERS = http.h htre.h htrd.h httpd.h | ||||
| pkginclude_HEADERS = http.h htre.h htrd.h httpd.h upxd.h | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: htrd.h 223 2008-06-26 06:44:41Z baconevi $ | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
							
								
								
									
										89
									
								
								qse/include/qse/net/upxd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								qse/include/qse/net/upxd.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <htrd://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef _QSE_NET_UPXD_H_ | ||||
| #define _QSE_NET_UPXD_H_ | ||||
|  | ||||
| #include <qse/types.h> | ||||
| #include <qse/macros.h> | ||||
|  | ||||
| typedef struct qse_upxd_t qse_upxd_t; | ||||
| typedef struct qse_upxd_client_t qse_upxd_client_t; | ||||
| typedef struct qse_upxd_server_t qse_upxd_server_t; | ||||
|  | ||||
| enum qse_upxd_errnum_t | ||||
| { | ||||
| 	QSE_UPXD_ENOERR, | ||||
|      QSE_UPXD_ENOMEM, | ||||
|      QSE_UPXD_EINVAL, | ||||
|      QSE_UPXD_EACCES, | ||||
|      QSE_UPXD_ENOENT, | ||||
|      QSE_UPXD_EEXIST, | ||||
|      QSE_UPXD_EINTR, | ||||
|      QSE_UPXD_EAGAIN, | ||||
|  | ||||
| 	QSE_UPXD_ENOIMPL, | ||||
| 	QSE_UPXD_EOTHER | ||||
| }; | ||||
| typedef qse_upxd_errnum_t qse_upxd_errnum_t; | ||||
|  | ||||
| struct qse_upxd_server_t | ||||
| { | ||||
| 	qse_upxd_server_t*  next; | ||||
| 	/* ------------------------------ */ | ||||
| 	qse_nwad_t          nwad; | ||||
| 	qse_ubi_t           handle; | ||||
| }; | ||||
|  | ||||
| struct qse_upxd_client_t | ||||
| { | ||||
| 	qse_nwad_t remote_addr; | ||||
| 	qse_nwad_t local_addr; | ||||
| }; | ||||
|  | ||||
| struct qse_upxd_cbs_t | ||||
| { | ||||
| 	struct | ||||
| 	{ | ||||
| 		int (*open) (qse_upxd_t* upxd, qse_upxd_server_t* server); | ||||
| 		void (*close) (qse_upxd_t* upxd, qse_upxd_server_t* server); | ||||
|  | ||||
| 		qse_ssize_t (*recv) ( | ||||
| 			qse_upxd_t* upxd, | ||||
| 			qse_upxd_client_t* client, | ||||
| 			qse_mchar_t* buf, qse_size_t bufsize); | ||||
|  | ||||
| 		qse_ssize_t (*send) ( | ||||
| 			qse_upxd_t* upxd, | ||||
| 			qse_upxd_client_t* client, | ||||
| 			const qse_mchar_t* buf, qse_size_t bufsize); | ||||
| 	} server; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
| @ -15,7 +15,8 @@ libqsenet_la_SOURCES = \ | ||||
| 	httpd-cgi.c \ | ||||
| 	httpd-proxy.c \ | ||||
| 	httpd-resol.c \ | ||||
| 	httpd-task.c | ||||
| 	httpd-task.c \ | ||||
| 	upxd.c | ||||
|  | ||||
| libqsenet_la_LDFLAGS = -version-info 1:0:0 -no-undefined -L../cmn -L$(libdir) | ||||
| libqsenet_la_LIBADD = -lqsecmn | ||||
|  | ||||
							
								
								
									
										109
									
								
								qse/lib/net/upxd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								qse/lib/net/upxd.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,109 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <htrd://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include "upxd.h" | ||||
|  | ||||
| qse_upxd_t* qse_upxd_open (qse_mmgr_t* mmgr, qse_size_t xtnsize) | ||||
| { | ||||
| 	qse_upxd_t* upxd; | ||||
|  | ||||
| 	upxd = (qse_upxd_t*) QSE_MMGR_ALLOC ( | ||||
| 		mmgr, QSE_SIZEOF(*upxd) + xtnsize | ||||
| 	); | ||||
| 	if (upxd == QSE_NULL) return QSE_NULL; | ||||
|  | ||||
| 	if (qse_upxd_init (upxd, mmgr) <= -1) | ||||
| 	{ | ||||
| 		QSE_MMGR_FREE (upxd->mmgr, upxd); | ||||
| 		return QSE_NULL; | ||||
| 	} | ||||
|  | ||||
| 	return upxd; | ||||
| } | ||||
|  | ||||
| void qse_upxd_close (qse_upxd_t* upxd) | ||||
| { | ||||
| 	qse_upxd_fini (upxd); | ||||
| 	QSE_MMGR_FREE (upxd->mmgr, upxd); | ||||
| } | ||||
|  | ||||
| int qse_upxd_init (qse_upxd_t* upxd, qse_mmgr_t* mmgr) | ||||
| { | ||||
| 	QSE_MEMSET (upxd, 0, QSE_SIZEOF(*upxd)); | ||||
| 	upxd->mmgr = mmgr; | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void qse_upxd_fini (qse_upxd_t* upxd) | ||||
| { | ||||
| 	free_server_list (upxd, upxd->server.list); | ||||
| 	QSE_ASSERT (upxd->server.navail == 0); | ||||
| 	upxd->server.list = QSE_NULL; | ||||
| } | ||||
|  | ||||
| void qse_upxd_stop (qse_upxd_t* upxd) | ||||
| { | ||||
| 	upxd->stopreq = 1; | ||||
| } | ||||
|   | ||||
| qse_upxd_errnum_t qse_upxd_geterrnum (qse_upxd_t* upxd) | ||||
| { | ||||
| 	return upxd->errnum; | ||||
| } | ||||
|  | ||||
| void qse_upxd_seterrnum (qse_upxd_t* upxd, qse_upxd_errnum_t errnum) | ||||
| { | ||||
| 	upxd->errnum = errnum; | ||||
| } | ||||
|  | ||||
| int qse_upxd_addserver (qse_upxd_t* upxd, const qse_nwad_t* nwad) | ||||
| { | ||||
| 	qse_upxd_server_t* server; | ||||
|  | ||||
| 	server = QSE_MMGR_ALLOC (upxd->mmgr, QSE_SIZEOF(*server)); | ||||
| 	if (server == QSE_NULL) | ||||
| 	{ | ||||
| 		upxd->errnum = QSE_UPXD_ENOMEM; | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	QSE_MEMSET (server, 0, QSE_SIZEOF(*server)); | ||||
| 	server->nwad = *nwad; | ||||
|  | ||||
| 	if (upxd->cbs->server.open (upxd, server) <= -1) | ||||
| 	{ | ||||
| 		QSE_MMGR_FREE (upxd->mmgr, server); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	server->next = upxd->server.list;	 | ||||
| 	upxd->server.list = server; | ||||
| } | ||||
|  | ||||
| int qse_upxd_loop (qse_upxd_t* upxd, qse_upxd_cbls_t* cbs) | ||||
| { | ||||
| 	upxd->stopreq = 0; | ||||
|  | ||||
| 	while (!upxd->stopreq) | ||||
| 	{ | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
							
								
								
									
										36
									
								
								qse/lib/net/upxd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								qse/lib/net/upxd.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <htrd://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef _QSE_LIB_NET_UPXD_H_ | ||||
| #define _QSE_LIB_NET_UPXD_H_ | ||||
|  | ||||
| #include <qse/net/upxd.h> | ||||
|  | ||||
| struct qse_upxd_t | ||||
| { | ||||
| 	int stopreq; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		qse_upxd_server_t* list; | ||||
| 	} server; | ||||
| }; | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user