Beispiel #1
0
int discovery_service_start(discovery_service *svc, discovery_strategy *strategy) {
  JNXCHECK(svc);

  // *** TODO Set up brodcast or multicast ***
  // It should just be a simple matter of passing a flag to the service
  // or changing the function signature and calling either
  // set_up_sockets_for_broadcast or set_up_sockets_for_multicast.
  // set_up_sockets_for_broadcast(svc);
  svc->sock_send = jnx_socket_udp_create(svc->family);
  svc->udp_listener = jnx_socket_udp_listener_broadcast_create(
      port_to_string(svc), svc->family);

  svc->isrunning = 1;

  if (0 != listen_for_discovery_packets(svc)) {
    JNXLOG(0, "[DISCOVERY] Couldn't start the discovery listener.\n");
    return ERR_DISCOVERY_START;
  }

  initiate_discovery(svc);

  if (strategy == NULL) {
    svc->peers->is_active_peer = is_active_peer_ask_once;
    send_discovery_request(svc);
  }
  else {
    svc->peers->is_active_peer = is_active_peer_periodic_update;
    strategy(svc);
  }

  return 0;
}
Beispiel #2
0
static void *worker_broadcast(void *args) {
  char *port = (char*)args;
  jnx_socket *t = jnx_socket_udp_create(AF_INET);
  JNXLOG(LDEBUG,"worker_broadcast firing...");
  jnx_socket_udp_broadcast_send(t,"255.255.255.255",port,(jnx_uint8*)"ping",5);
  return NULL;
}
Beispiel #3
0
static void *worker_multicast(void *args) {
  char *port = (char*)args;
  jnx_socket *t = jnx_socket_udp_create(AF_INET);
  jnx_socket_udp_multicast_send(t,BGROUP,port,(jnx_uint8*)"ping",5);
  return NULL;
}
Beispiel #4
0
static void *worker_ipv6(void *args) {
  char *port = (char*)args;
  jnx_socket *t = jnx_socket_udp_create(AF_INET6);
  jnx_socket_udp_send(t,"::1",port,(jnx_uint8*)"ping",5);
  return NULL;
}