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) 37extern "C" 38{ 39#endif 40 41 42struct _sw_discovery; 43typedef struct _sw_discovery * sw_discovery; 44 45 46/* 47 * keeps track of different discovery operations 48 */ 49typedef 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 */ 64typedef 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 */ 75typedef 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 84typedef 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 97typedef enum _sw_discovery_query_record_status 98{ 99 SW_DISCOVERY_QUERY_RECORD_ADD = 0x1 100} sw_discovery_query_record_status; 101 102 103typedef 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 110typedef 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 121typedef 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 136typedef 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 */ 154sw_result HOWL_API 155sw_discovery_init( 156 sw_discovery * self); 157 158 159sw_result HOWL_API 160sw_discovery_init_with_flags( 161 sw_discovery * self, 162 sw_discovery_init_flags flags); 163 164 165sw_result HOWL_API 166sw_discovery_fina( 167 sw_discovery self); 168 169 170sw_result HOWL_API 171sw_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 182sw_result HOWL_API 183sw_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 198sw_result HOWL_API 199sw_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 */ 210sw_result HOWL_API 211sw_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 */ 223sw_result HOWL_API 224sw_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 */ 237sw_result HOWL_API 238sw_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 249sw_result HOWL_API 250sw_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 262sw_result HOWL_API 263sw_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 277sw_result HOWL_API 278sw_discovery_run( 279 sw_discovery self); 280 281 282sw_result HOWL_API 283sw_discovery_stop_run( 284 sw_discovery self); 285 286 287int HOWL_API 288sw_discovery_socket( 289 sw_discovery self); 290 291 292sw_result HOWL_API 293sw_discovery_read_socket( 294 sw_discovery self); 295 296 297sw_result HOWL_API 298sw_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