84 lines
1.9 KiB
C
84 lines
1.9 KiB
C
#include "utils.h"
|
|
#include "pico_dns_common.h"
|
|
#include "pico_mdns.h"
|
|
#include "pico_ipv4.h"
|
|
#include "pico_addressing.h"
|
|
|
|
/*** START MDNS ***/
|
|
|
|
#ifdef PICO_SUPPORT_MDNS
|
|
|
|
#define SECONDS 10
|
|
|
|
static int fully_initialized = 0;
|
|
|
|
void mdns_init_callback( pico_mdns_rtree *rtree,
|
|
char *str,
|
|
void *arg )
|
|
{
|
|
printf("\nInitialised with hostname: %s\n\n", str);
|
|
|
|
fully_initialized = 1;
|
|
}
|
|
|
|
void app_mdns(char *arg, struct pico_ip4 address)
|
|
{
|
|
char *hostname, *peername;
|
|
char *nxt = arg;
|
|
uint64_t starttime = 0;
|
|
int once = 0;
|
|
|
|
if (!nxt)
|
|
exit(255);
|
|
|
|
nxt = cpy_arg(&hostname, nxt);
|
|
if(!hostname) {
|
|
exit(255);
|
|
}
|
|
|
|
if(!nxt) {
|
|
printf("Not enough args supplied!\n");
|
|
exit(255);
|
|
}
|
|
|
|
nxt = cpy_arg(&peername, nxt);
|
|
if(!peername) {
|
|
exit(255);
|
|
}
|
|
|
|
printf("\nStarting mDNS module...\n");
|
|
if (pico_mdns_init(hostname, address, &mdns_init_callback, NULL)) {
|
|
printf("Initialisation returned with Error!\n");
|
|
exit(255);
|
|
}
|
|
|
|
printf("\nTry reinitialising mDNS\n");
|
|
if (pico_mdns_init(hostname, address, &mdns_init_callback, NULL)) {
|
|
printf("Initialisation returned with Error!\n");
|
|
exit(255);
|
|
}
|
|
|
|
printf("DONE - Re-initialising mDNS module.\n");
|
|
|
|
starttime = PICO_TIME_MS();
|
|
printf("Starting time: %d\n", starttime);
|
|
|
|
while(1) {
|
|
pico_stack_tick();
|
|
usleep(2000);
|
|
|
|
if (((PICO_TIME_MS() - starttime) > SECONDS * 1000) && fully_initialized && !once) {
|
|
printf("\nTry reinitialising mDNS (a second time)\n");
|
|
if (pico_mdns_init(hostname, address, &mdns_init_callback, NULL)) {
|
|
printf("Initialisation returned with Error!\n");
|
|
exit(255);
|
|
}
|
|
once = 1;
|
|
printf("DONE - Re-initialising mDNS module. (a second time)\n");
|
|
}
|
|
|
|
}
|
|
}
|
|
#endif
|
|
/*** END MDNS ***/
|