⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 su_port.h

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 H
📖 第 1 页 / 共 2 页
字号:
int su_port_eventmask(su_port_t *self, int index, int socket, int events){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->    su_port_eventmask(self, index, socket, events);}su_inlineint su_port_wait_events(su_port_t *self, su_duration_t timeout){  su_virtual_port_t *base = (su_virtual_port_t *)self;  if (base->sup_vtable->su_port_wait_events == NULL)    return errno = ENOSYS, -1;  return base->sup_vtable->    su_port_wait_events(self, timeout);}su_inlinevoid su_port_run(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  base->sup_vtable->su_port_run(self);}su_inlinevoid su_port_break(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  base->sup_vtable->su_port_break(self);}su_inlinesu_duration_t su_port_step(su_port_t *self, su_duration_t tout){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_step(self, tout);}su_inlineint su_port_own_thread(su_port_t const *self){  su_virtual_port_t const *base = (su_virtual_port_t *)self;  return base->sup_vtable->    su_port_thread((su_port_t *)self, su_port_thread_op_is_obtained) == 2;}su_inline int su_port_has_thread(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_thread(self, su_port_thread_op_is_obtained);}su_inline int su_port_release(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_thread(self, su_port_thread_op_release);}su_inline int su_port_obtain(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_thread(self, su_port_thread_op_obtain);}su_inlineint su_port_add_prepoll(su_port_t *self,			su_root_t *root, 			su_prepoll_f *prepoll, 			su_prepoll_magic_t *magic){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_add_prepoll(self, root, prepoll, magic);}su_inlineint su_port_remove_prepoll(su_port_t *self,			   su_root_t *root){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_remove_prepoll(self, root);}su_inlinesu_timer_t **su_port_timers(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_timers(self);}su_inlineint su_port_multishot(su_port_t *self, int multishot){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_multishot(self, multishot);}su_inlineint su_port_getmsgs(su_port_t *self){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_getmsgs(self);}su_inlineint su_port_getmsgs_from(su_port_t *self, su_port_t *cloneport){  su_virtual_port_t *base = (su_virtual_port_t *)self;  return base->sup_vtable->su_port_getmsgs_from(self, cloneport);}SOFIAPUBFUN void su_port_wait(su_clone_r rclone);SOFIAPUBFUN int su_port_execute(su_task_r const task,				int (*function)(void *), void *arg,				int *return_value);/* ---------------------------------------------------------------------- *//**@internal Base port object. * * Port is a per-thread reactor. Multiple root objects executed by a single * thread share the su_port_t object. */typedef struct su_base_port_s {  su_home_t        sup_home[1];  su_port_vtable_t const *sup_vtable;  /* Implementation may vary stuff below, too. */    /* Pre-poll callback */  su_prepoll_f    *sup_prepoll;   su_prepoll_magic_t *sup_pp_magic;  su_root_t       *sup_pp_root;  /* Message list - this is protected by su_port_lock()/su_port_unlock() */  su_msg_t        *sup_head, **sup_tail;  /* Timer list */  su_timer_queue_t sup_timers;  unsigned         sup_running;	  /**< In su_root_run() loop? */} su_base_port_t;/* Base methods */SOFIAPUBFUN int su_base_port_init(su_port_t *, su_port_vtable_t const *);SOFIAPUBFUN void su_base_port_deinit(su_port_t *self);SOFIAPUBFUN void su_base_port_lock(su_port_t *self, char const *who);SOFIAPUBFUN void su_base_port_unlock(su_port_t *self, char const *who);SOFIAPUBFUN int su_base_port_thread(su_port_t const *self,				    enum su_port_thread_op op);SOFIAPUBFUN void su_base_port_incref(su_port_t *self, char const *who);SOFIAPUBFUN int su_base_port_decref(su_port_t *self,				    int blocking,				    char const *who);SOFIAPUBFUN struct _GSource *su_base_port_gsource(su_port_t *self);SOFIAPUBFUN su_socket_t su_base_port_mbox(su_port_t *self);SOFIAPUBFUN int su_base_port_send(su_port_t *self, su_msg_r rmsg);SOFIAPUBFUN int su_base_port_getmsgs(su_port_t *self);SOFIAPUBFUN int su_base_port_getmsgs_from(su_port_t *self,					   su_port_t *from);SOFIAPUBFUN void su_base_port_run(su_port_t *self);SOFIAPUBFUN void su_base_port_break(su_port_t *self);SOFIAPUBFUN su_duration_t su_base_port_step(su_port_t *self,					    su_duration_t tout);SOFIAPUBFUN int su_base_port_add_prepoll(su_port_t *self,					 su_root_t *root, 					 su_prepoll_f *, 					 su_prepoll_magic_t *);SOFIAPUBFUN int su_base_port_remove_prepoll(su_port_t *self, su_root_t *root);SOFIAPUBFUN su_timer_t **su_base_port_timers(su_port_t *self);SOFIAPUBFUN int su_base_port_multishot(su_port_t *self, int multishot);SOFIAPUBFUN int su_base_port_start_shared(su_root_t *parent,					  su_clone_r return_clone,					  su_root_magic_t *magic,					  su_root_init_f init,					  su_root_deinit_f deinit);SOFIAPUBFUN void su_base_port_wait(su_clone_r rclone);/* ---------------------------------------------------------------------- */#if SU_HAVE_PTHREADS#include <pthread.h>/** @internal Pthread port object */ typedef struct su_pthread_port_s {  su_base_port_t   sup_base[1];  struct su_pthread_port_waiting_parent                   *sup_waiting_parent;  pthread_t        sup_tid;  pthread_mutex_t  sup_obtained[1];#if 0  pthread_mutex_t  sup_runlock[1];  pthread_cond_t   sup_resume[1];  short            sup_paused;	/**< True if thread is paused */#endif  short            sup_thread;	/**< True if thread is active */} su_pthread_port_t;/* Pthread methods */SOFIAPUBFUN int su_pthread_port_init(su_port_t *, su_port_vtable_t const *);SOFIAPUBFUN void su_pthread_port_deinit(su_port_t *self);SOFIAPUBFUN void su_pthread_port_lock(su_port_t *self, char const *who);SOFIAPUBFUN void su_pthread_port_unlock(su_port_t *self, char const *who);SOFIAPUBFUN int su_pthread_port_thread(su_port_t *self,				       enum su_port_thread_op op);#if 0				/* not yet  */SOFIAPUBFUN int su_pthread_port_send(su_port_t *self, su_msg_r rmsg);SOFIAPUBFUN su_port_t *su_pthread_port_create(void);SOFIAPUBFUN su_port_t *su_pthread_port_start(su_root_t *parent,					     su_clone_r return_clone,					     su_root_magic_t *magic,					     su_root_init_f init,					     su_root_deinit_f deinit);#endifSOFIAPUBFUN int su_pthreaded_port_start(su_port_create_f *create,					su_root_t *parent,					su_clone_r return_clone,					su_root_magic_t *magic,					su_root_init_f init,					su_root_deinit_f deinit);SOFIAPUBFUN void su_pthread_port_wait(su_clone_r rclone);SOFIAPUBFUN int su_pthread_port_execute(su_task_r const task,					int (*function)(void *), void *arg,					int *return_value);#if 0SOFIAPUBFUN int su_pthread_port_pause(su_port_t *self);SOFIAPUBFUN int su_pthread_port_resume(su_port_t *self);#endif#elsetypedef su_base_port_t su_pthread_port_t;#define su_pthread_port_init   su_base_port_init#define su_pthread_port_deinit su_base_port_deinit#define su_pthread_port_lock   su_base_port_lock#define su_pthread_port_unlock su_base_port_unlock#define su_pthread_port_thread su_base_port_thread#define su_pthread_port_wait   su_base_port_wait#define su_pthread_port_execute  su_base_port_execute#endif/* ====================================================================== *//* Mailbox port using sockets */#define SU_MBOX_SIZE 2typedef struct su_socket_port_s {  su_pthread_port_t sup_base[1];  int               sup_mbox_index;  su_socket_t       sup_mbox[SU_MBOX_SIZE];} su_socket_port_t;SOFIAPUBFUN int su_socket_port_init(su_socket_port_t *, 				    su_port_vtable_t const *);SOFIAPUBFUN void su_socket_port_deinit(su_socket_port_t *self);SOFIAPUBFUN int su_socket_port_send(su_port_t *self, su_msg_r rmsg);SOFIA_END_DECLS#endif /* SU_PORT_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -