1 #ifndef _discovery_discovery_h 2 #define _discovery_discovery_h 3 4 /* 5 * Copyright 2003, 2004 Porchdog Software. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without modification, 8 * are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25 * OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * The views and conclusions contained in the software and documentation are those 28 * of the authors and should not be interpreted as representing official policies, 29 * either expressed or implied, of Porchdog Software. 30 */ 31 32 #include <salt/salt.h> 33 #include <salt/socket.h> 34 35 36 #if defined(__cplusplus) 37 extern "C" 38 { 39 #endif 40 41 42 struct _sw_discovery; 43 typedef struct _sw_discovery * sw_discovery; 44 45 46 /* 47 * keeps track of different discovery operations 48 */ 49 typedef sw_uint32 sw_discovery_oid; 50 51 52 /* 53 * For backwards compatibility 54 */ 55 #define sw_discovery_publish_host_id sw_discovery_oid 56 #define sw_discovery_publish_id sw_discovery_oid 57 #define sw_discovery_browse_id sw_discovery_oid 58 #define sw_discovery_resolve_id sw_discovery_oid 59 60 61 /* 62 * how to connect to server 63 */ 64 typedef enum _sw_discovery_init_flags 65 { 66 SW_DISCOVERY_USE_SHARED_SERVICE = 0x1, 67 SW_DISCOVERY_USE_PRIVATE_SERVICE = 0x2, 68 SW_DISCOVERY_SKIP_VERSION_CHECK = 0x4 69 } sw_discovery_init_flags; 70 71 72 /* 73 * status for asynchronous registration call 74 */ 75 typedef enum _sw_discovery_publish_status 76 { 77 SW_DISCOVERY_PUBLISH_STARTED, 78 SW_DISCOVERY_PUBLISH_STOPPED, 79 SW_DISCOVERY_PUBLISH_NAME_COLLISION, 80 SW_DISCOVERY_PUBLISH_INVALID 81 } sw_discovery_publish_status; 82 83 84 typedef enum _sw_discovery_browse_status 85 { 86 SW_DISCOVERY_BROWSE_INVALID, 87 SW_DISCOVERY_BROWSE_RELEASE, 88 SW_DISCOVERY_BROWSE_ADD_DOMAIN, 89 SW_DISCOVERY_BROWSE_ADD_DEFAULT_DOMAIN, 90 SW_DISCOVERY_BROWSE_REMOVE_DOMAIN, 91 SW_DISCOVERY_BROWSE_ADD_SERVICE, 92 SW_DISCOVERY_BROWSE_REMOVE_SERVICE, 93 SW_DISCOVERY_BROWSE_RESOLVED 94 } sw_discovery_browse_status; 95 96 97 typedef enum _sw_discovery_query_record_status 98 { 99 SW_DISCOVERY_QUERY_RECORD_ADD = 0x1 100 } sw_discovery_query_record_status; 101 102 103 typedef sw_result 104 (HOWL_API *sw_discovery_publish_reply)( 105 sw_discovery session, 106 sw_discovery_oid oid, 107 sw_discovery_publish_status status, 108 sw_opaque extra); 109 110 typedef sw_result 111 (HOWL_API *sw_discovery_browse_reply)( 112 sw_discovery session, 113 sw_discovery_oid oid, 114 sw_discovery_browse_status status, 115 sw_uint32 interface_index, 116 sw_const_string name, 117 sw_const_string type, 118 sw_const_string domain, 119 sw_opaque extra); 120 121 typedef sw_result 122 (HOWL_API *sw_discovery_resolve_reply)( 123 sw_discovery session, 124 sw_discovery_oid oid, 125 sw_uint32 interface_index, 126 sw_const_string name, 127 sw_const_string type, 128 sw_const_string domain, 129 sw_ipv4_address address, 130 sw_port port, 131 sw_octets text_record, 132 sw_uint32 text_record_len, 133 sw_opaque extra); 134 135 136 typedef sw_result 137 (HOWL_API *sw_discovery_query_record_reply)( 138 sw_discovery session, 139 sw_discovery_oid oid, 140 sw_discovery_query_record_status status, 141 sw_uint32 interface_index, 142 sw_const_string fullname, 143 sw_uint16 rrtype, 144 sw_uint16 rrclass, 145 sw_uint16 rrdatalen, 146 sw_const_octets rrdata, 147 sw_uint32 ttl, 148 sw_opaque extra); 149 150 151 /* 152 * API for publishing/browsing/resolving services 153 */ 154 sw_result HOWL_API 155 sw_discovery_init( 156 sw_discovery * self); 157 158 159 sw_result HOWL_API 160 sw_discovery_init_with_flags( 161 sw_discovery * self, 162 sw_discovery_init_flags flags); 163 164 165 sw_result HOWL_API 166 sw_discovery_fina( 167 sw_discovery self); 168 169 170 sw_result HOWL_API 171 sw_discovery_publish_host( 172 sw_discovery self, 173 sw_uint32 interface_index, 174 sw_const_string name, 175 sw_const_string domain, 176 sw_ipv4_address address, 177 sw_discovery_publish_reply reply, 178 sw_opaque extra, 179 sw_discovery_oid * oid); 180 181 182 sw_result HOWL_API 183 sw_discovery_publish( 184 sw_discovery self, 185 sw_uint32 interface_index, 186 sw_const_string name, 187 sw_const_string type, 188 sw_const_string domain, 189 sw_const_string host, 190 sw_port port, 191 sw_octets text_record, 192 sw_uint32 text_record_len, 193 sw_discovery_publish_reply reply, 194 sw_opaque extra, 195 sw_discovery_oid * oid); 196 197 198 sw_result HOWL_API 199 sw_discovery_publish_update( 200 sw_discovery self, 201 sw_discovery_oid oid, 202 sw_octets text_record, 203 sw_uint32 text_record_len); 204 205 206 207 /* 208 * API for browsing domains 209 */ 210 sw_result HOWL_API 211 sw_discovery_browse_domains( 212 sw_discovery self, 213 sw_uint32 interface_index, 214 sw_discovery_browse_reply reply, 215 sw_opaque extra, 216 sw_discovery_oid * oid); 217 218 219 220 /* 221 * API for browsing services 222 */ 223 sw_result HOWL_API 224 sw_discovery_browse( 225 sw_discovery self, 226 sw_uint32 interface_index, 227 sw_const_string type, 228 sw_const_string domain, 229 sw_discovery_browse_reply reply, 230 sw_opaque extra, 231 sw_discovery_oid * oid); 232 233 234 /* 235 * API for resolving services 236 */ 237 sw_result HOWL_API 238 sw_discovery_resolve( 239 sw_discovery self, 240 sw_uint32 interface_index, 241 sw_const_string name, 242 sw_const_string type, 243 sw_const_string domain, 244 sw_discovery_resolve_reply reply, 245 sw_opaque extra, 246 sw_discovery_oid * oid); 247 248 249 sw_result HOWL_API 250 sw_discovery_query_record( 251 sw_discovery self, 252 sw_uint32 interface_index, 253 sw_uint32 flags, 254 sw_const_string fullname, 255 sw_uint16 rrtype, 256 sw_uint16 rrclass, 257 sw_discovery_query_record_reply reply, 258 sw_opaque extra, 259 sw_discovery_oid * oid); 260 261 262 sw_result HOWL_API 263 sw_discovery_cancel( 264 sw_discovery self, 265 sw_discovery_oid oid); 266 267 268 269 /* ---------------------------------------------------------- 270 * 271 * Event Processing APIs 272 * 273 * ---------------------------------------------------------- 274 */ 275 276 277 sw_result HOWL_API 278 sw_discovery_run( 279 sw_discovery self); 280 281 282 sw_result HOWL_API 283 sw_discovery_stop_run( 284 sw_discovery self); 285 286 287 int HOWL_API 288 sw_discovery_socket( 289 sw_discovery self); 290 291 292 sw_result HOWL_API 293 sw_discovery_read_socket( 294 sw_discovery self); 295 296 297 sw_result HOWL_API 298 sw_discovery_salt( 299 sw_discovery self, 300 sw_salt * salt); 301 302 303 /* 304 * Error codes 305 */ 306 #define SW_DISCOVERY_E_BASE 900 307 #define SW_DISCOVERY_E_UNKNOWN (SW_DISCOVERY_E_BASE + 2) 308 #define SW_DISCOVERY_E_NO_SUCH_NAME (SW_DISCOVERY_E_BASE + 3) 309 #define SW_DISCOVERY_E_NO_MEM (SW_DISCOVERY_E_BASE + 4) 310 #define SW_DISCOVERY_E_BAD_PARAM (SW_DISCOVERY_E_BASE + 5) 311 #define SW_DISCOVERY_E_BAD_REFERENCE (SW_DISCOVERY_E_BASE + 6) 312 #define SW_DISCOVERY_E_BAD_STATE (SW_DISCOVERY_E_BASE + 7) 313 #define SW_DISCOVERY_E_BAD_FLAGS (SW_DISCOVERY_E_BASE + 8) 314 #define SW_DISCOVERY_E_NOT_SUPPORTED (SW_DISCOVERY_E_BASE + 9) 315 #define SW_DISCOVERY_E_NOT_INITIALIZED (SW_DISCOVERY_E_BASE + 10) 316 #define SW_DISCOVERY_E_NO_CACHE (SW_DISCOVERY_E_BASE + 11) 317 #define SW_DISCOVERY_E_ALREADY_REGISTERED (SW_DISCOVERY_E_BASE + 12) 318 #define SW_DISCOVERY_E_NAME_CONFLICT (SW_DISCOVERY_E_BASE + 13) 319 #define SW_DISCOVERY_E_INVALID (SW_DISCOVERY_E_BASE + 14) 320 321 322 #if defined(__cplusplus) 323 } 324 #endif 325 326 327 #endif 328