Example #1
0
File: hub.c Project: nizox/hub
static void
listen_callback(evutil_socket_t fd, short ev, void *arg)
{
  struct hub *hub = arg;
  ssize_t n;

  if (ev & EV_READ)
  {
    struct sockaddr_in addr;
    socklen_t addrlen = sizeof(addr);

    if ((n = recvfrom(fd, mbuf, sizeof(mbuf), 0,
            (struct sockaddr *) &addr, &addrlen)) > 0)
    {
      struct peer *ptr = hub->peers;

      while (ptr)
      {
        if (!evutil_sockaddr_cmp((struct sockaddr *) &addr, ptr->addr, 0))
        {
          ptr->received += n;
          printf("%zi bytes from %s (total %zi bytes)\n",
              n, ptr->name, ptr->received);
          break;
        }
        ptr = ptr->next;
      }
      n = tnt_tun_write(&hub->tun, mbuf, n);
      if (n > 0)
        hub->rx += n;
    }
  }
}
Example #2
0
int
endpoint_cmp(struct endpoint const *a,
             struct endpoint const *b)
{
    if (a->addrlen != b->addrlen)
        return  -1;
    return evutil_sockaddr_cmp(endpoint_addr(a), endpoint_addr(b), 1);
}
Example #3
0
static int
find_udppeer(struct udp_peer const *a, void *ctx)
{
    struct sockaddr *s = ctx;
    return !evutil_sockaddr_cmp(endpoint_addr(&a->peer_addr), s, 0);
}