diff options
Diffstat (limited to 'pjlib/src/pj/ioqueue_common_abs.h')
-rw-r--r-- | pjlib/src/pj/ioqueue_common_abs.h | 237 |
1 files changed, 129 insertions, 108 deletions
diff --git a/pjlib/src/pj/ioqueue_common_abs.h b/pjlib/src/pj/ioqueue_common_abs.h index 1902ff46..85f6f37e 100644 --- a/pjlib/src/pj/ioqueue_common_abs.h +++ b/pjlib/src/pj/ioqueue_common_abs.h @@ -1,108 +1,129 @@ -/* $Id */ - -/* ioqueue_common_abs.h - * - * This file contains private declarations for abstracting various - * event polling/dispatching mechanisms (e.g. select, poll, epoll) - * to the ioqueue. - */ - -#include <pj/list.h> - -/* - * The select ioqueue relies on socket functions (pj_sock_xxx()) to return - * the correct error code. - */ -#if PJ_RETURN_OS_ERROR(100) != PJ_STATUS_FROM_OS(100) -# error "Proper error reporting must be enabled for ioqueue to work!" -#endif - - -struct generic_operation -{ - PJ_DECL_LIST_MEMBER(struct generic_operation); - pj_ioqueue_operation_e op; -}; - -struct read_operation -{ - PJ_DECL_LIST_MEMBER(struct read_operation); - pj_ioqueue_operation_e op; - - void *buf; - pj_size_t size; - unsigned flags; - pj_sockaddr_t *rmt_addr; - int *rmt_addrlen; -}; - -struct write_operation -{ - PJ_DECL_LIST_MEMBER(struct write_operation); - pj_ioqueue_operation_e op; - - char *buf; - pj_size_t size; - pj_ssize_t written; - unsigned flags; - pj_sockaddr_in rmt_addr; - int rmt_addrlen; -}; - -#if PJ_HAS_TCP -struct accept_operation -{ - PJ_DECL_LIST_MEMBER(struct accept_operation); - pj_ioqueue_operation_e op; - - pj_sock_t *accept_fd; - pj_sockaddr_t *local_addr; - pj_sockaddr_t *rmt_addr; - int *addrlen; -}; -#endif - -union operation_key -{ - struct generic_operation generic; - struct read_operation read; - struct write_operation write; -#if PJ_HAS_TCP - struct accept_operation accept; -#endif -}; - -#define DECLARE_COMMON_KEY \ - PJ_DECL_LIST_MEMBER(struct pj_ioqueue_key_t); \ - pj_ioqueue_t *ioqueue; \ - pj_mutex_t *mutex; \ - pj_sock_t fd; \ - int fd_type; \ - void *user_data; \ - pj_ioqueue_callback cb; \ - int connecting; \ - struct read_operation read_list; \ - struct write_operation write_list; \ - struct accept_operation accept_list; - - -#define DECLARE_COMMON_IOQUEUE \ - pj_lock_t *lock; \ - pj_bool_t auto_delete_lock; - - -enum ioqueue_event_type -{ - NO_EVENT, - READABLE_EVENT, - WRITEABLE_EVENT, - EXCEPTION_EVENT, -}; - -static void ioqueue_add_to_set( pj_ioqueue_t *ioqueue, - pj_sock_t fd, - enum ioqueue_event_type event_type ); -static void ioqueue_remove_from_set( pj_ioqueue_t *ioqueue, - pj_sock_t fd, - enum ioqueue_event_type event_type); - +/* $Id */
+/*
+ * PJLIB - PJ Foundation Library
+ * (C)2003-2005 Benny Prijono <bennylp@bulukucing.org>
+ *
+ * Author:
+ * Benny Prijono <bennylp@bulukucing.org>
+ *
+ * This library 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 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* ioqueue_common_abs.h
+ *
+ * This file contains private declarations for abstracting various
+ * event polling/dispatching mechanisms (e.g. select, poll, epoll)
+ * to the ioqueue.
+ */
+
+#include <pj/list.h>
+
+/*
+ * The select ioqueue relies on socket functions (pj_sock_xxx()) to return
+ * the correct error code.
+ */
+#if PJ_RETURN_OS_ERROR(100) != PJ_STATUS_FROM_OS(100)
+# error "Proper error reporting must be enabled for ioqueue to work!"
+#endif
+
+
+struct generic_operation
+{
+ PJ_DECL_LIST_MEMBER(struct generic_operation);
+ pj_ioqueue_operation_e op;
+};
+
+struct read_operation
+{
+ PJ_DECL_LIST_MEMBER(struct read_operation);
+ pj_ioqueue_operation_e op;
+
+ void *buf;
+ pj_size_t size;
+ unsigned flags;
+ pj_sockaddr_t *rmt_addr;
+ int *rmt_addrlen;
+};
+
+struct write_operation
+{
+ PJ_DECL_LIST_MEMBER(struct write_operation);
+ pj_ioqueue_operation_e op;
+
+ char *buf;
+ pj_size_t size;
+ pj_ssize_t written;
+ unsigned flags;
+ pj_sockaddr_in rmt_addr;
+ int rmt_addrlen;
+};
+
+#if PJ_HAS_TCP
+struct accept_operation
+{
+ PJ_DECL_LIST_MEMBER(struct accept_operation);
+ pj_ioqueue_operation_e op;
+
+ pj_sock_t *accept_fd;
+ pj_sockaddr_t *local_addr;
+ pj_sockaddr_t *rmt_addr;
+ int *addrlen;
+};
+#endif
+
+union operation_key
+{
+ struct generic_operation generic;
+ struct read_operation read;
+ struct write_operation write;
+#if PJ_HAS_TCP
+ struct accept_operation accept;
+#endif
+};
+
+#define DECLARE_COMMON_KEY \
+ PJ_DECL_LIST_MEMBER(struct pj_ioqueue_key_t); \
+ pj_ioqueue_t *ioqueue; \
+ pj_mutex_t *mutex; \
+ pj_sock_t fd; \
+ int fd_type; \
+ void *user_data; \
+ pj_ioqueue_callback cb; \
+ int connecting; \
+ struct read_operation read_list; \
+ struct write_operation write_list; \
+ struct accept_operation accept_list;
+
+
+#define DECLARE_COMMON_IOQUEUE \
+ pj_lock_t *lock; \
+ pj_bool_t auto_delete_lock;
+
+
+enum ioqueue_event_type
+{
+ NO_EVENT,
+ READABLE_EVENT,
+ WRITEABLE_EVENT,
+ EXCEPTION_EVENT,
+};
+
+static void ioqueue_add_to_set( pj_ioqueue_t *ioqueue,
+ pj_sock_t fd,
+ enum ioqueue_event_type event_type );
+static void ioqueue_remove_from_set( pj_ioqueue_t *ioqueue,
+ pj_sock_t fd,
+ enum ioqueue_event_type event_type);
+
|