Beispiel #1
0
static void
fqd_peer_auth_hook(fq_client conn, int authed) {
  int i;
  fqd_peer_connection *peer;
  peer = fq_client_get_userdata(conn);
  fq_debug(FQ_DEBUG_PEER, "authed(%s:%d) -> %d\n",
           peer->host, peer->port, authed);
  if(authed || !peer) return;

  pthread_mutex_lock(&lock);
  peer->online_and_bound = true;
  for(i=0;i<peer->n_bindings;i++) {
    peer_binding_info *bi = peer->bindings[i];
    fq_bind_req *breq;
    breq = calloc(1, sizeof(*breq));
    memcpy(&breq->exchange, &bi->exchange, sizeof(bi->exchange));
    breq->flags = FQ_BIND_PEER | (bi->perm ? FQ_BIND_PERM : 0);
    breq->program = strdup(bi->prog);
    fq_client_bind(conn, breq);
    fq_debug(FQ_DEBUG_PEER, "bindreq(%s:%d) %.*s/%s\n",
             peer->host, peer->port, bi->exchange.len, bi->exchange.name,
             bi->prog);
  }
  pthread_mutex_unlock(&lock);
}
Beispiel #2
0
int main(int argc, char **argv) {
  hrtime_t s, f;
  uint64_t cnt = 0, icnt = 0, icnt_total = 0;
  int rcvd = 0;
  fq_client c;
  fq_bind_req breq;
  fq_msg *m;
  signal(SIGPIPE, SIG_IGN);
  fq_client_init(&c, 0, logger);
  if(argc < 5) {
    fprintf(stderr, "%s <host> <port> <user> <pass> [size [count]]\n",
            argv[0]);
    exit(-1);
  }
  fq_client_creds(c, argv[1], atoi(argv[2]), argv[3], argv[4]);
  fq_client_heartbeat(c, 1000);
  fq_client_set_backlog(c, 10000, 100);
  fq_client_connect(c);

  memset(&breq, 0, sizeof(breq));
  memcpy(breq.exchange.name, "maryland", 8);
  breq.exchange.len = 8;
  breq.peermode = 0;
  breq.program = (char *)"prefix:\"test.prefix.\"";

  fq_client_bind(c, &breq);
  while(breq.out__route_id == 0) usleep(100);
  printf("route set -> %u\n", breq.out__route_id);
  if(breq.out__route_id == FQ_BIND_ILLEGAL) {
    fprintf(stderr, "Failure to bind...\n");
    exit(-1);
  }

  s = fq_gethrtime();
  while(1) {
    f = fq_gethrtime();
    while(m = fq_client_receive(c)) {
      icnt++;
      icnt_total++;
      rcvd++;
      fq_msg_deref(m);
    }
    usleep(1000);
    if(f-s > 1000000000) {
      print_rate(c, s, f, cnt, icnt);
      printf("total: %llu\n", (unsigned long long)icnt_total);
      icnt = 0;
      cnt = 0;
      s = f;
    }
  }
  (void) argc;
  return 0;
}
Beispiel #3
0
static void
fqd_peer_online_bind(fqd_peer_connection *peer, peer_binding_info *bi) {
  if(peer->online_and_bound == true) {
    fq_bind_req *breq;
    fq_debug(FQ_DEBUG_PEER, "binding peer(%s:%d) exchange:\"%.*s\"\n",
             peer->host, peer->port, bi->exchange.len, bi->exchange.name);
    breq = calloc(1, sizeof(*breq));
    memcpy(&breq->exchange, &bi->exchange, sizeof(bi->exchange));
    breq->flags = FQ_BIND_PEER | FQ_BIND_PERM;
    breq->program = strdup(bi->prog);
    fq_client_bind(peer->client, breq);
  }
}
Beispiel #4
0
static void
my_auth_handler(fq_client c, int error) {
  fq_bind_req *breq;
 
  if(error) return;

  printf("attempting bind\n"); 
  breq = malloc(sizeof(*breq));
  memset(breq, 0, sizeof(*breq));
  memcpy(breq->exchange.name, "maryland", 8);
  breq->exchange.len = 8;
  breq->flags = FQ_BIND_TRANS;
  breq->program = strdup("prefix:\"test.\" (sample(1) && route_contains(\"boo\"))");
  fq_client_bind(c, breq);
}
Beispiel #5
0
Datei: fqc.c Projekt: denji/fq
int main(int argc, char **argv) {
  hrtime_t s0, s, f, f0;
  uint64_t cnt = 0, icnt = 0;
  int psize = 0, i = 0, rcvd = 0;
  fq_client c;
  fq_bind_req breq;
  fq_msg *m;
  signal(SIGPIPE, SIG_IGN);
  fq_client_init(&c, 0, logger);
  if(argc < 5) {
    fprintf(stderr, "%s <host> <port> <user> <pass> [size [count]]\n",
            argv[0]);
    exit(-1);
  }
  fq_client_creds(c, argv[1], atoi(argv[2]), argv[3], argv[4]);
  fq_client_heartbeat(c, 1000);
  fq_client_set_backlog(c, 10000, 100);
  fq_client_connect(c);

  memset(&breq, 0, sizeof(breq));
  memcpy(breq.exchange.name, "maryland", 8);
  breq.exchange.len = 8;
  breq.peermode = 0;
  breq.program = (char *)"prefix:\"test.prefix.\"";

  fq_client_bind(c, &breq);
  while(breq.out__route_id == 0) usleep(100);
  printf("route set -> %u\n", breq.out__route_id);
  if(breq.out__route_id == FQ_BIND_ILLEGAL) {
    fprintf(stderr, "Failure to bind...\n");
    exit(-1);
  }

  if(argc > 5) {
     psize = atoi(argv[5]);
  }
  printf("payload size -> %d\n", psize);
  if(argc > 6) {
    send_count = atoi(argv[6]);
  }
  printf("message count -> %d\n", send_count);

  s0 = s = fq_gethrtime();
  while(i < send_count || fq_client_data_backlog(c) > 0) {
    if(i < send_count) {
      m = fq_msg_alloc_BLANK(psize);
      memset(m->payload, 0, psize);
      fq_msg_exchange(m, "maryland", 8);
      fq_msg_route(m, "test.prefix.foo", 15);
      fq_msg_id(m, NULL);
      fq_client_publish(c, m);
      cnt++;
      i++;
      fq_msg_free(m);
    }
    else usleep(100);


    f = fq_gethrtime();
    while(m = fq_client_receive(c)) {
      icnt++;
      rcvd++;
      fq_msg_deref(m);
    }
    if(f-s > 1000000000) {
      print_rate(c, s, f, cnt, icnt);
      icnt = 0;
      cnt = 0;
      s = f;
    }
  }
  f0 = fq_gethrtime();
  print_rate(c, s0, f0, i, 0);
  do {
    icnt=0;
    while(m = fq_client_receive(c)) {
      icnt++;
      rcvd++;
      fq_msg_deref(m);
    }
  } while(rcvd < send_count);
  f0 = fq_gethrtime();
  print_rate(c, s0, f0, 0, rcvd);
  printf("Total received during test: %d\n", rcvd);

  (void) argc;
  return 0;
}