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

📄 tport_internal.h

📁 Sofia SIP is an open-source SIP User-Agent library, compliant with the IETF RFC3261 specification.
💻 H
📖 第 1 页 / 共 2 页
字号:
  tport_params_t      mr_params[1];    unsigned            mr_boundserver:1; /**< Server has been bound */  unsigned            mr_bindv6only:1; /**< We can bind separately to IPv6/4 */  unsigned :0;  /* Delivery context */  struct tport_delivery {    tport_t              *d_tport;    msg_t                *d_msg;    tp_name_t             d_from[1];    tport_compressor_t   *d_comp;  } mr_delivery[1];  tport_stun_server_t *mr_stun_server;#if 0  struct tport_nat_s {    int initialized;    int bound;    int stun_enabled;    char *external_ip_address;#if HAVE_UPNP || HAVE_SOFIA_STUN    int try_stun;#endif#if HAVE_UPNP#endif#if HAVE_SOFIA_STUN    tport_master_t *tport;    char *stun_server;    /* stun_socket_t *stun_socket; */    stun_handle_t *stun;    su_socket_t stun_socket;    su_sockaddr_t sockaddr;#endif  }                   mr_nat[1];#endif};/** @internal Virtual function table for transports */struct tport_vtable{  char const *vtp_name;  enum tport_via vtp_public;  size_t vtp_pri_size;		/* Size of primary tport */  int (*vtp_init_primary)(tport_primary_t *pri,			  tp_name_t tpn[1],			  su_addrinfo_t *ai, tagi_t const *,			  char const **return_culprit);  void (*vtp_deinit_primary)(tport_primary_t *pri);  int (*vtp_wakeup_pri)(tport_primary_t *pri, int events);  tport_t *(*vtp_connect)(tport_primary_t *pri, su_addrinfo_t *ai, 			  tp_name_t const *tpn);  size_t vtp_secondary_size;	/* Size of secondary tport */  int (*vtp_init_secondary)(tport_t *, int socket, int accepted,			    char const **return_reason);  void (*vtp_deinit_secondary)(tport_t *);  void (*vtp_shutdown)(tport_t *, int how);  int (*vtp_set_events)(tport_t const *self);  int (*vtp_wakeup)(tport_t *self, int events);  int (*vtp_recv)(tport_t *self);  ssize_t (*vtp_send)(tport_t const *self, msg_t *msg,		      msg_iovec_t iov[], size_t iovused);  void (*vtp_deliver)(tport_t *self,  msg_t *msg, su_time_t now);  int (*vtp_prepare)(tport_t *self, msg_t *msg, 		     tp_name_t const *tpn, 		     struct sigcomp_compartment *cc,		     unsigned mtu);  int (*vtp_keepalive)(tport_t *self, su_addrinfo_t const *ai,		       tagi_t const *taglist);  int (*vtp_stun_response)(tport_t const *self,			   void *msg, size_t msglen,			   void *addr, socklen_t addrlen);  int (*vtp_next_secondary_timer)(tport_t *self, su_time_t *, 				  char const **return_why);  void (*vtp_secondary_timer)(tport_t *self, su_time_t);};int tport_register_type(tport_vtable_t const *vtp);/** @internal Test if transport needs connect() before sending. */su_inline int tport_is_connection_oriented(tport_t const *self){  return self->tp_conn_orient;}/** @internal Test if transport involves connection. @NEW_1_12_5. */su_inline int tport_has_connection(tport_t const *self){  return self->tp_has_connection;}void tport_has_been_updated(tport_t *tport);int tport_primary_compression(tport_primary_t *pri,			      char const *compression,			      tagi_t const *tl);void tport_set_tos(su_socket_t socket, su_addrinfo_t *ai, int tos);tport_t *tport_base_connect(tport_primary_t *pri, 			    su_addrinfo_t *ai,			    su_addrinfo_t *name,			    tp_name_t const *tpn);int tport_stream_init_primary(tport_primary_t *pri, 			      su_socket_t socket,			      tp_name_t tpn[1],			      su_addrinfo_t *ai,			      tagi_t const *tags,			      char const **return_reason);tport_t *tport_alloc_secondary(tport_primary_t *pri,			       int socket,			       int accepted,			       char const **return_reason);int tport_accept(tport_primary_t *pri, int events);void tport_zap_secondary(tport_t *self);int tport_set_secondary_timer(tport_t *self);void tport_base_timer(tport_t *self, su_time_t now);int tport_bind_socket(int socket,		      su_addrinfo_t *ai,		      char const **return_culprit);void tport_close(tport_t *self);int tport_shutdown0(tport_t *self, int how);int tport_has_queued(tport_t const *self);int tport_error_event(tport_t *self);void tport_recv_event(tport_t *self);void tport_send_event(tport_t *self);void tport_hup_event(tport_t *self);ssize_t tport_recv_iovec(tport_t const *self, 			 msg_t **mmsg,			 msg_iovec_t iovec[msg_n_fragments], size_t N, 			 int exact);msg_t *tport_msg_alloc(tport_t const *self, usize_t size);int tport_prepare_and_send(tport_t *self, msg_t *msg, 			   tp_name_t const *tpn, 			   struct sigcomp_compartment *cc,			   unsigned mtu);int tport_send_msg(tport_t *self, msg_t *msg, 		   tp_name_t const *tpn, 		   struct sigcomp_compartment *cc);void tport_send_queue(tport_t *self);void tport_deliver(tport_t *self, msg_t *msg, msg_t *next, 		   tport_compressor_t *comp,		   su_time_t now);void tport_base_deliver(tport_t *self, msg_t *msg, su_time_t now);int tport_recv_error_report(tport_t *self);void tport_error_report(tport_t *self, int errcode, 			su_sockaddr_t const *addr);int tport_open_log(tport_master_t *mr, tagi_t *tags);void tport_log_msg(tport_t *tp, msg_t *msg, char const *what, 		   char const *via, su_time_t now);void tport_dump_iovec(tport_t const *self, msg_t *msg, 		      size_t n, su_iovec_t const iov[], size_t iovused,		      char const *what, char const *how);int tport_tcp_ping(tport_t *self, su_time_t now);int tport_tcp_pong(tport_t *self);extern tport_vtable_t const tport_udp_vtable;extern tport_vtable_t const tport_udp_client_vtable;int tport_udp_init_primary(tport_primary_t *, 			   tp_name_t tpn[1], 			   su_addrinfo_t *, 			   tagi_t const *,			   char const **return_culprit);void tport_udp_deinit_primary(tport_primary_t *);int tport_recv_dgram(tport_t *self);ssize_t tport_send_dgram(tport_t const *self, msg_t *msg,			 msg_iovec_t iov[], size_t iovused);int tport_udp_error(tport_t const *self, su_sockaddr_t name[1]);extern tport_vtable_t const tport_tcp_vtable;extern tport_vtable_t const tport_tcp_client_vtable;int tport_tcp_init_primary(tport_primary_t *,  			  tp_name_t  tpn[1],  			  su_addrinfo_t *, tagi_t const *, 			  char const **return_culprit);int tport_tcp_init_client(tport_primary_t *,  			 tp_name_t tpn[1],  			 su_addrinfo_t *, tagi_t const *, 			 char const **return_culprit);int tport_tcp_init_secondary(tport_t *self, int socket, int accepted,			     char const **return_reason);int tport_recv_stream(tport_t *self);ssize_t tport_send_stream(tport_t const *self, msg_t *msg,			  msg_iovec_t iov[], size_t iovused);int tport_tcp_next_timer(tport_t *self, su_time_t *, char const **);void tport_tcp_timer(tport_t *self, su_time_t);int tport_next_recv_timeout(tport_t *, su_time_t *, char const **);void tport_recv_timeout_timer(tport_t *self, su_time_t now);int tport_next_keepalive(tport_t *self, su_time_t *, char const **);void tport_keepalive_timer(tport_t *self, su_time_t now);extern tport_vtable_t const tport_sctp_vtable;extern tport_vtable_t const tport_sctp_client_vtable;extern tport_vtable_t const tport_tls_vtable;extern tport_vtable_t const tport_tls_client_vtable;extern tport_vtable_t const tport_stun_vtable;extern tport_vtable_t const tport_http_connect_vtable;extern tport_vtable_t const tport_threadpool_vtable;typedef struct tport_descriptor_s {  char const *tpd_name;  tport_vtable_t *tpd_vtable;  su_addrinfo_t *tpd_hints;  int tpd_is_client_only;} tport_descriptor_t;typedef int const *(tport_set_f)(tport_master_t *mr, 				 tp_name_t const *tpn,				 tagi_t const *taglist,				 tport_descriptor_t **return_set,				 int return_set_size);/* STUN plugin */int tport_init_stun_server(tport_master_t *mr, tagi_t const *tags);void tport_deinit_stun_server(tport_master_t *mr);int tport_recv_stun_dgram(tport_t const *self, msg_t **in_out_msg,			  su_sockaddr_t *from, socklen_t fromlen);int tport_stun_server_add_socket(tport_t *tp);int tport_stun_server_remove_socket(tport_t *tp);void tport_recv_bytes(tport_t *self, ssize_t bytes, ssize_t on_line);void tport_recv_message(tport_t *self, msg_t *msg, int error);void tport_sent_bytes(tport_t *self, ssize_t bytes, ssize_t on_line);void tport_sent_message(tport_t *self, msg_t *msg, int error);/* ---------------------------------------------------------------------- *//* Compressor plugin */extern tport_comp_vtable_t const *tport_comp_vtable;char const *tport_canonize_comp(char const *comp);int tport_init_compressor(tport_t *,			  char const *comp_name,			  tagi_t const *tags);void tport_deinit_compressor(tport_t *);struct sigcomp_compartment *tport_sigcomp_assign_if_needed(tport_t *self,			       struct sigcomp_compartment *cc);struct sigcomp_udvm **tport_get_udvm_slot(tport_t *self);void tport_sigcomp_accept_incomplete(tport_t *self, msg_t *msg);int tport_recv_comp_dgram(tport_t const *self,			  tport_compressor_t *sc,			  msg_t **in_out_msg,			  su_sockaddr_t *from,			  socklen_t fromlen);ssize_t tport_send_comp(tport_t const *self,		    msg_t *msg, 		    msg_iovec_t iov[], 		    size_t iovused,		    struct sigcomp_compartment *cc,		    tport_compressor_t *sc);SOFIA_END_DECLS#endif /* TPORT_INTERNAL_H */

⌨️ 快捷键说明

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