📄 tport_internal.h
字号:
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 + -