initial commit
This commit is contained in:
commit
9d20827c46
2469 changed files with 470994 additions and 0 deletions
120
iris-legacy/iris/irisnet/jdns/jdns_mdnsd.h
Normal file
120
iris-legacy/iris/irisnet/jdns/jdns_mdnsd.h
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Copyright (C) 2005 Jeremie Miller
|
||||
* Copyright (C) 2005,2006 Justin Karneges
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef JDNS_MDNSD_H
|
||||
#define JDNS_MDNSD_H
|
||||
|
||||
#include "jdns_p.h"
|
||||
|
||||
struct mytimeval
|
||||
{
|
||||
unsigned long int tv_sec; /* seconds */
|
||||
unsigned long int tv_usec; /* microseconds */
|
||||
};
|
||||
|
||||
typedef struct mdnsd_struct *mdnsd; // main daemon data
|
||||
typedef struct mdnsdr_struct *mdnsdr; // record entry
|
||||
// answer data
|
||||
typedef struct mdnsda_struct
|
||||
{
|
||||
unsigned char *name;
|
||||
unsigned short int type;
|
||||
unsigned long int ttl;
|
||||
unsigned long int real_ttl;
|
||||
unsigned short int rdlen;
|
||||
unsigned char *rdata;
|
||||
unsigned long int ip; // A
|
||||
unsigned char *rdname; // NS/CNAME/PTR/SRV
|
||||
struct { unsigned short int priority, weight, port; } srv; // SRV
|
||||
} *mdnsda;
|
||||
|
||||
///////////
|
||||
// Global functions
|
||||
//
|
||||
// create a new mdns daemon for the given class of names (usually 1) and maximum frame size
|
||||
mdnsd mdnsd_new(int class, int frame, int port, int (*time_now)(mdnsd d, void *arg), int (*rand_int)(mdnsd d, void *arg), void *arg);
|
||||
//
|
||||
// gracefully shutdown the daemon, use mdnsd_out() to get the last packets
|
||||
void mdnsd_shutdown(mdnsd d);
|
||||
//
|
||||
// flush all cached records (network/interface changed)
|
||||
void mdnsd_flush(mdnsd d);
|
||||
//
|
||||
// free given mdnsd (should have used mdnsd_shutdown() first!)
|
||||
void mdnsd_free(mdnsd d);
|
||||
//
|
||||
///////////
|
||||
|
||||
///////////
|
||||
// I/O functions
|
||||
//
|
||||
// incoming message from host (to be cached/processed)
|
||||
void mdnsd_in(mdnsd d, const jdns_packet_t *m, const jdns_response_t *resp, const jdns_address_t *addr, unsigned short int port);
|
||||
//
|
||||
// outgoing messge to be delivered to host, returns >0 if one was returned and m/ip/port set
|
||||
int mdnsd_out(mdnsd d, jdns_packet_t **m, jdns_address_t **addr, unsigned short int *port);
|
||||
//
|
||||
// returns the max wait-time until mdnsd_out() needs to be called again
|
||||
struct mytimeval *mdnsd_sleep(mdnsd d);
|
||||
//
|
||||
////////////
|
||||
|
||||
///////////
|
||||
// Q/A functions
|
||||
//
|
||||
// register a new query
|
||||
// answer(record, arg) is called whenever one is found/changes/expires (immediate or anytime after, mdnsda valid until ->ttl==0)
|
||||
// either answer returns -1, or another mdnsd_query with a NULL answer will remove/unregister this query
|
||||
void mdnsd_query(mdnsd d, char *host, int type, int (*answer)(mdnsda a, void *arg), void *arg);
|
||||
//
|
||||
// returns the first (if last == NULL) or next answer after last from the cache
|
||||
// mdnsda only valid until an I/O function is called
|
||||
mdnsda mdnsd_list(mdnsd d, char *host, int type, mdnsda last);
|
||||
//
|
||||
///////////
|
||||
|
||||
///////////
|
||||
// Publishing functions
|
||||
//
|
||||
// create a new unique record (try mdnsda_list first to make sure it's not used)
|
||||
// conflict(arg) called at any point when one is detected and unable to recover
|
||||
// after the first data is set_*(), any future changes effectively expire the old one and attempt to create a new unique record
|
||||
mdnsdr mdnsd_unique(mdnsd d, char *host, int type, long int ttl, void (*pubresult)(int result, char *host, int type, void *arg), void *arg);
|
||||
//
|
||||
// create a new shared record
|
||||
mdnsdr mdnsd_shared(mdnsd d, char *host, int type, long int ttl);
|
||||
//
|
||||
// de-list the given record
|
||||
void mdnsd_done(mdnsd d, mdnsdr r);
|
||||
//
|
||||
// these all set/update the data for the given record, nothing is published until they are called
|
||||
void mdnsd_set_raw(mdnsd d, mdnsdr r, char *data, int len);
|
||||
void mdnsd_set_host(mdnsd d, mdnsdr r, char *name);
|
||||
void mdnsd_set_ip(mdnsd d, mdnsdr r, unsigned long int ip);
|
||||
void mdnsd_set_srv(mdnsd d, mdnsdr r, int priority, int weight, int port, char *name);
|
||||
//
|
||||
///////////
|
||||
|
||||
|
||||
#endif
|
||||
Reference in a new issue