📄 tport_internal.h
字号:
FILE *mr_dump_file; tport_primary_t *mr_primaries; /**< List of primary contacts */ 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};/** Virtual funtion table */struct tport_vtable{ char const *vtp_name; enum tport_via vtp_public; int 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); int 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); int (*vtp_send)(tport_t const *self, msg_t *msg, msg_iovec_t iov[], int 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 tport_register_type(tport_vtable_t const *vtp);/** Test if transport is needs connect() before sending. */static inline int tport_is_connection_oriented(tport_t const *self){ return self->tp_conn_orient;}/** Test if transport has actual connection. */static inline int tport_is_connected(tport_t const *self){ return self->tp_connected;}void tport_has_been_updated(tport_t *tport);int tport_primary_compression(tport_primary_t *pri, char const *compression, tagi_t const *tl);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_bind_socket(int socket, su_addrinfo_t *ai, char const **return_culprit);void tport_close(tport_t *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);int tport_recv_iovec(tport_t const *self, msg_t **mmsg, msg_iovec_t iovec[msg_n_fragments], int N, int exact);msg_t *tport_msg_alloc(tport_t const *self, unsigned 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_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);void 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, char const *indent, su_time_t now);void tport_dump_iovec(tport_t const *self, msg_t *msg, int n, su_iovec_t const iov[], int iovused, char const *what, char const *how);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);int tport_send_dgram(tport_t const *self, msg_t *msg, msg_iovec_t iov[], int 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);int tport_send_stream(tport_t const *self, msg_t *msg, msg_iovec_t iov[], int iovused);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);/* ---------------------------------------------------------------------- *//* 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);int tport_send_comp(tport_t const *self, msg_t *msg, msg_iovec_t iov[], int 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 + -