Home | History | Annotate | Download | only in discovery
      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