예제 #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;
}
예제 #2
0
static void test_udp_broadcast(){
  jnx_udp_listener *listener = 

    jnx_socket_udp_listener_broadcast_create(UDPTESTPORT,AF_INET,NULL);
  JNXLOG(LDEBUG,"Firing broadcast packet");
  fire_threaded_udp_packet_broadcast(UDPTESTPORT);
  int x = 0;
  while(x < 20) {
    JNXLOG(LDEBUG,"Ticking jnx_socket_udp_listener_tick");
    jnx_socket_udp_listener_tick(listener,test_udp_listener_callback,NULL);
    if(test_udp_listener_complete)break;
    sleep(.5);
    ++x;
  }
  jnx_socket_udp_listener_destroy(&listener);
  JNXCHECK(test_udp_listener_complete);
  JNXCHECK(listener == NULL);
}