Exemple #1
0
static void mock_join(struct remote_mock* rm) {
	int fd;
	char buffer[1024];
	join_msg* msg = (join_msg*)buffer;
	msg->type = NODE_JOIN;
	//msg->node_id = my_id;
	msg->node_type = REGULAR_NODE;
	msg->port = my_port;
	strcpy(msg->address, my_address);
	fd = udp_socket_connect("127.0.0.1", 8888);
	send(fd, buffer, sizeof(join_msg), 0);
	close(fd);
}
int udp_socket_channel_init( comm_channel_t *channel, socket_type_t type, char *addr, int port )
{
	udp_connection_t *uc = udp_get_connection( channel );

	if( !uc )
    {
		return( -1 );
	}

    if (type == SOCK_UDP_CLIENT)
        return udp_socket_connect( uc, addr, port );

	return udp_socket_init( uc, port );
}
Exemple #3
0
int conn_udp_sendto(const void *data, size_t len, const void *src, size_t src_len,
                    const void *dst, size_t dst_len, int family, uint16_t sport,
                    uint16_t dport)
{
    int res;
    _send_cmd_t send_cmd;

    if (!send_registered) {
        if (evproc_regCallback(EVENT_TYPE_CONN_SEND, _output_callback) != E_SUCCESS) {
            return -EIO;
        }
        else {
            send_registered = true;
        }
    }
    mutex_init(&send_cmd.mutex);
    if ((len > (UIP_BUFSIZE - (UIP_LLH_LEN + UIP_IPUDPH_LEN))) ||
        (len > UINT16_MAX)) {
        return -EMSGSIZE;
    }
    if ((dst_len > sizeof(ipv6_addr_t)) || (family != AF_INET6)) {
        return -EAFNOSUPPORT;
    }
    mutex_lock(&send_cmd.mutex);
    send_cmd.data = data;
    send_cmd.data_len = (uint16_t)len;
    if ((res = _reg_and_bind(&send_cmd.sock, NULL, NULL, sport)) < 0) {
        mutex_unlock(&send_cmd.mutex);
        return res;
    }
    udp_socket_connect(&send_cmd.sock, (uip_ipaddr_t *)dst, dport); /* can't fail at this point */
    /* change to emb6 thread context */
    if (evproc_putEvent(E_EVPROC_TAIL, EVENT_TYPE_CONN_SEND, &send_cmd) != E_SUCCESS) {
        udp_socket_close(&send_cmd.sock);
        mutex_unlock(&send_cmd.mutex);
        return -EIO;
    }
    /* block thread until data was send */
    mutex_lock(&send_cmd.mutex);
    udp_socket_close(&send_cmd.sock);
    mutex_unlock(&send_cmd.mutex);

    return send_cmd.res;
}
Exemple #4
0
val* mock_recover_key(struct remote_mock* rm, key* k) {
	int port = 12345;
	unsigned int h = joat_hash(k->data, k->size);
		
	rec_key_msg_for_key(k, rm->buffer, &rm->buffer_size);
	rm->recv_sock = udp_bind_fd(my_port);
	socket_make_reusable(rm->recv_sock);
	socket_make_non_block(rm->recv_sock);
	if (h % 2 != 0)
		port = 12346;
	rm->send_sock = udp_socket_connect("127.0.0.1", port);
	send(rm->send_sock, rm->buffer, rm->buffer_size, 0);	
	rm->ev_read = event_new(rm->base, rm->recv_sock, EV_READ, handle_rec_key, rm);
	event_add(rm->ev_read, NULL);
	event_base_dispatch(rm->base);
	close(rm->recv_sock);
	close(rm->send_sock);
	return rm->v;
}
Exemple #5
0
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(multicast_example_process, ev, data)
{
  PROCESS_BEGIN();

  /* Create a linkl-local multicast addresses. */
  uip_ip6addr(&addr, 0xff02, 0, 0, 0, 0, 0, 0x1337, 0x0001);

  /* Join local group. */
  if(uip_ds6_maddr_add(&addr) == NULL) {
    printf("Error: could not join local multicast group.\n");
  }

  /* Register UDP socket callback */
  udp_socket_register(&s, NULL, receiver);

  /* Bind UDP socket to local port */
  udp_socket_bind(&s, PORT);

  /* Connect UDP socket to remote port */
  udp_socket_connect(&s, NULL, PORT);

  while(1) {

    /* Set up two timers, one for keeping track of the send interval,
       which is periodic, and one for setting up a randomized send time
       within that interval. */
    etimer_set(&periodic_timer, SEND_INTERVAL);
    etimer_set(&send_timer, (random_rand() % SEND_INTERVAL));

    PROCESS_WAIT_UNTIL(etimer_expired(&send_timer));

    printf("Sending multicast\n");
    udp_socket_sendto(&s,
                      "hello", 6,
                      &addr, PORT);

    PROCESS_WAIT_UNTIL(etimer_expired(&periodic_timer));
  }

  PROCESS_END();
}
Exemple #6
0
/*---------------------------------------------------------------------------*/
int
propple_socket_open(struct propple_socket *s,
                    void *ptr,
                    propple_socket_input_callback_t callback,
                    uint16_t port,
                    clock_time_t interval,
                    clock_time_t interval_max,
                    uint8_t duptheshold)
{
  s->ptr = ptr;
  s->callback = callback;
  s->interval = interval;
  s->interval_max = interval_max;
  s->duptheshold = duptheshold;
  s->port = port;

  s->duplicates = 0;
  s->interval_scaling = 0;

  /* Register UDP socket callback */
  if(udp_socket_register(&s->s, s, recv) == 0) {
    printf("propple_socket_open: udp_socket_register failed\n");
    return 0;
  }

  /* Bind UDP socket to local port */
  if(udp_socket_bind(&s->s, port) == 0) {
    printf("propple_socket_open: udp_socket_bind failed\n");
    return 0;
  }

  /* Connect UDP socket to remote port */
  if(udp_socket_connect(&s->s, NULL, port) == 0) {
    printf("propple_socket_open: udp_socket_connect failed\n");
    return 0;
  }

  return 1;
}
Exemple #7
0
static int _reg(struct udp_socket *c, void *ptr, udp_socket_input_callback_t cb,
                const sock_udp_ep_t *local, const sock_udp_ep_t *remote)
{
    if (((local != NULL) && (local->family != AF_INET6)) ||
        ((remote != NULL) && (remote->family != AF_INET6))) {
        return -EAFNOSUPPORT;
    }
    if (udp_socket_register(c, ptr, cb) < 0) {
        return -ENOMEM;
    }
    if (local != NULL) {
        if (udp_socket_bind(c, local->port) < 0) {
            udp_socket_close(c);
            return -EADDRINUSE;
        }
    }
    if (remote != NULL) {
        /* check of return value not necessary, since neither c nor
         * c->udp_conn is NULL (only error case) at this point */
        udp_socket_connect(c, (uip_ipaddr_t *)&remote->addr, remote->port);
    }
    return 0;
}