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); }
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; }
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); } }
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); }
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; }