1 /* 2 * This file is part of the Sofia-SIP package 3 * 4 * Copyright (C) 2005 Nokia Corporation. 5 * 6 * Contact: Pekka Pessi <pekka.pessi@nokia.com> 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public License 10 * as published by the Free Software Foundation; either version 2.1 of 11 * the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 21 * 02110-1301 USA 22 * 23 */ 24 25 #ifndef TPORT_PLUGINS_H 26 /** Defined when <sofia-sip/tport_plugins.h> has been included. */ 27 #define TPORT_PLUGINS_H 28 29 /**@file sofia-sip/tport_plugins.h 30 * @brief Transport plugin interface 31 * 32 * @author Pekka Pessi <Pekka.Pessi@nokia.com> 33 * 34 * @date Created: Fri Mar 31 12:22:22 EEST 2006 ppessi 35 */ 36 37 /* -- STUN Plugin ------------------------------------------------------- */ 38 39 #ifndef TPORT_STUN_SERVER_T 40 #define TPORT_STUN_SERVER_T struct tport_stun_server_s 41 #endif 42 /** Safe type for tport server object */ 43 typedef TPORT_STUN_SERVER_T tport_stun_server_t; 44 45 typedef struct { 46 int vst_size; 47 tport_stun_server_t *(*vst_create)(su_root_t *root, tagi_t const *tags); 48 void (*vst_destroy)(tport_stun_server_t *); 49 int (*vst_add_socket)(tport_stun_server_t *, su_socket_t socket); 50 int (*vst_remove_socket)(tport_stun_server_t *, su_socket_t socket); 51 void (*vst_request)(tport_stun_server_t *server, su_socket_t socket, 52 void *msg, ssize_t msglen, 53 void *addr, socklen_t addrlen); 54 } tport_stun_server_vtable_t; 55 56 SOFIAPUBFUN int tport_plug_in_stun_server(tport_stun_server_vtable_t const *); 57 58 59 /* -- SigComp Plugin ---------------------------------------------------- */ 60 61 /* We already use these SigComp types in applications */ 62 63 struct sigcomp_udvm; 64 struct sigcomp_compartment; 65 66 typedef struct tport_comp_vtable_s tport_comp_vtable_t; 67 68 struct tport_comp_vtable_s { 69 /* NOTE: this will change! Unstable! Do not use! */ 70 int vsc_size; 71 72 char const *vsc_compname; 73 size_t vsc_sizeof_context; 74 75 int (*vsc_init_comp)(tp_stack_t *, 76 tport_t *, 77 tport_compressor_t *, 78 char const *comp_name, 79 tagi_t const *tags); 80 81 void (*vsc_deinit_comp)(tp_stack_t *, 82 tport_t *, 83 tport_compressor_t *); 84 85 char const *(*vsc_comp_name)(tport_compressor_t const *master_sc, 86 char const *compression, 87 tagi_t const *tags); 88 89 /* Mapping of public tport API */ 90 91 int (*vsc_can_send_comp)(tport_compressor_t const *); 92 int (*vsc_can_recv_comp)(tport_compressor_t const *); 93 94 int (*vsc_set_comp_name)(tport_t const *self, 95 tport_compressor_t const *return_sc, 96 char const *comp); 97 98 int (*vsc_sigcomp_option)(tport_t const *self, 99 struct sigcomp_compartment *cc, 100 char const *option); 101 102 struct sigcomp_compartment * 103 (*vsc_sigcomp_compartment)(tport_t *self, 104 char const *name, int namelen, 105 int create_if_needed); 106 107 struct sigcomp_compartment * 108 (*vsc_compartment_incref)(struct sigcomp_compartment *cc); 109 110 void (*vsc_compartment_decref)(struct sigcomp_compartment **pointer_to_cc); 111 112 int (*vsc_set_compartment)(tport_t *self, 113 tport_compressor_t *, 114 struct sigcomp_compartment *); 115 116 struct sigcomp_compartment * 117 (*vsc_get_compartment)(tport_t const *self, 118 tport_compressor_t const *); 119 120 int (*vsc_has_sigcomp_assigned)(tport_compressor_t const *comp); 121 122 int (*vsc_sigcomp_accept)(tport_t *self, 123 tport_compressor_t const *comp, 124 struct sigcomp_compartment *cc, 125 msg_t *msg); 126 127 int (*vsc_delivered_using_udvm)(tport_t *tp, 128 msg_t const *msg, 129 struct sigcomp_udvm **return_pointer_to_udvm, 130 int remove); 131 132 int (*vsc_sigcomp_close)(tport_t *self, 133 struct sigcomp_compartment *cc, 134 int how); 135 136 int (*vsc_sigcomp_lifetime)(tport_t *self, 137 struct sigcomp_compartment *, 138 unsigned lifetime_in_ms, 139 int only_expand); 140 141 /* Internal API */ 142 143 struct sigcomp_udvm **(*vsc_get_udvm_slot)(tport_t *self); 144 145 struct sigcomp_compartment * 146 (*vsc_sigcomp_assign_if_needed)(tport_t *self, 147 struct sigcomp_compartment *cc); 148 149 void (*vsc_accept_incomplete)(tport_t const *self, 150 tport_compressor_t *sc, 151 msg_t *msg); 152 153 int (*vsc_recv_comp)(tport_t const *self, 154 tport_compressor_t *sc, 155 msg_t **in_out_msg, 156 su_sockaddr_t *from, 157 socklen_t fromlen); 158 159 ssize_t (*vsc_send_comp)(tport_t const *self, 160 msg_t *msg, 161 msg_iovec_t iov[], 162 size_t iovused, 163 struct sigcomp_compartment *cc, 164 tport_compressor_t *sc); 165 166 167 }; 168 169 SOFIAPUBFUN int tport_plug_in_comp(tport_comp_vtable_t const *); 170 171 #endif /* !defined(TPORT_PLUGINS_H) */ 172