Lines Matching defs:baller

370   struct eyeballer *baller[2];
389 struct eyeballer *baller;
392 baller = calloc(1, sizeof(*baller));
393 if(!baller)
396 baller->name = ((ai_family == AF_INET)? "ipv4" : (
401 baller->cf_create = cf_create;
402 baller->first = baller->addr = addr;
403 baller->ai_family = ai_family;
404 baller->primary = primary;
405 baller->delay_ms = delay_ms;
406 baller->timeoutms = addr_next_match(baller->addr, baller->ai_family)?
408 baller->timeout_id = timeout_id;
409 baller->result = CURLE_COULDNT_CONNECT;
411 *pballer = baller;
415 static void baller_close(struct eyeballer *baller,
418 if(baller && baller->cf) {
419 Curl_conn_cf_discard_chain(&baller->cf, data);
423 static void baller_free(struct eyeballer *baller,
426 if(baller) {
427 baller_close(baller, data);
428 free(baller);
432 static void baller_rewind(struct eyeballer *baller)
434 baller->rewinded = TRUE;
435 baller->addr = baller->first;
436 baller->inconclusive = FALSE;
439 static void baller_next_addr(struct eyeballer *baller)
441 baller->addr = addr_next_match(baller->addr, baller->ai_family);
452 struct eyeballer *baller)
455 struct Curl_cfilter *cf_prev = baller->cf;
464 result = baller->cf_create(&baller->cf, data, cf->conn, baller->addr,
470 for(wcf = baller->cf; wcf; wcf = wcf->next) {
475 if(addr_next_match(baller->addr, baller->ai_family)) {
476 Curl_expire(data, baller->timeoutms, baller->timeout_id);
481 CURL_TRC_CF(data, cf, "%s failed", baller->name);
482 baller_close(baller, data);
486 baller->result = result;
490 * Start a connection attempt on the current baller address.
497 struct eyeballer *baller,
500 baller->error = 0;
501 baller->connected = FALSE;
502 baller->has_started = TRUE;
504 while(baller->addr) {
505 baller->started = Curl_now();
506 baller->timeoutms = addr_next_match(baller->addr, baller->ai_family) ?
508 baller_initiate(cf, data, baller);
509 if(!baller->result)
511 baller_next_addr(baller);
513 if(!baller->addr) {
514 baller->is_done = TRUE;
516 return baller->result;
524 struct eyeballer *baller,
528 baller_next_addr(baller);
531 if(!baller->addr && baller->inconclusive && !baller->rewinded)
532 baller_rewind(baller);
533 baller_start(cf, data, baller, timeoutms);
536 baller->error = 0;
537 baller->connected = FALSE;
538 baller->has_started = TRUE;
539 baller->is_done = TRUE;
540 baller->result = CURLE_COULDNT_CONNECT;
542 return baller->result;
547 struct eyeballer *baller,
552 *connected = baller->connected;
553 if(!baller->result && !*connected) {
555 baller->result = Curl_conn_cf_connect(baller->cf, data, 0, connected);
557 if(!baller->result) {
559 baller->connected = TRUE;
560 baller->is_done = TRUE;
562 else if(Curl_timediff(*now, baller->started) >= baller->timeoutms) {
564 "ms, move on!", baller->name, baller->timeoutms);
566 baller->error = ETIMEDOUT;
568 baller->result = CURLE_OPERATION_TIMEDOUT;
571 else if(baller->result == CURLE_WEIRD_SERVER_REPLY)
572 baller->inconclusive = TRUE;
574 return baller->result;
602 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
603 struct eyeballer *baller = ctx->baller[i];
605 if(!baller || baller->is_done)
608 if(!baller->has_started) {
612 baller->result = baller_connect(cf, data, baller, &now, connected);
614 baller->name, baller->result, *connected);
616 if(!baller->result) {
619 ctx->winner = baller;
620 ctx->baller[i] = NULL;
627 else if(!baller->is_done) {
628 /* The baller failed to connect, start its next attempt */
629 if(baller->error) {
630 data->state.os_errno = baller->error;
631 SET_SOCKERRNO(baller->error);
633 baller_start_next(cf, data, baller, Curl_timeleft(data, &now, TRUE));
634 if(baller->is_done) {
635 CURL_TRC_CF(data, cf, "%s done", baller->name);
639 CURL_TRC_CF(data, cf, "%s trying next", baller->name);
663 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
664 struct eyeballer *baller = ctx->baller[i];
666 if(!baller || baller->has_started)
668 /* We start its primary baller has failed to connect or if
670 if((baller->primary && baller->primary->is_done) ||
671 Curl_timediff(now, ctx->started) >= baller->delay_ms) {
672 baller_start(cf, data, baller, Curl_timeleft(data, &now, TRUE));
673 if(baller->is_done) {
674 CURL_TRC_CF(data, cf, "%s done", baller->name);
679 baller->name, baller->timeoutms);
698 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
699 struct eyeballer *baller = ctx->baller[i];
700 if(!baller)
703 baller->name, baller->has_started, baller->result);
704 if(baller->has_started && baller->result) {
705 result = baller->result;
799 /* switch around, so a single baller always uses addr0 */
810 memset(ctx->baller, 0, sizeof(ctx->baller));
811 result = eyeballer_new(&ctx->baller[0], ctx->cf_create, addr0, ai_family0,
818 ctx->baller[0]->name, ctx->baller[0]->timeoutms);
821 result = eyeballer_new(&ctx->baller[1], ctx->cf_create, addr1, ai_family1,
822 ctx->baller[0], /* wait on that to fail */
830 ctx->baller[1]->name, ctx->baller[1]->timeoutms);
845 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
846 baller_free(ctx->baller[i], data);
847 ctx->baller[i] = NULL;
861 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
862 struct eyeballer *baller = ctx->baller[i];
863 if(!baller || !baller->cf)
865 Curl_conn_cf_adjust_pollset(baller->cf, data, ps);
950 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
951 struct eyeballer *baller = ctx->baller[i];
952 if(!baller || !baller->cf)
954 if(baller->cf->cft->has_data_pending(baller->cf, data))
969 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
970 struct eyeballer *baller = ctx->baller[i];
973 if(baller && baller->cf &&
974 !baller->cf->cft->query(baller->cf, data, query, NULL, &t)) {
994 for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
995 struct eyeballer *baller = ctx->baller[i];
998 if(baller && baller->cf &&
999 !baller->cf->cft->query(baller->cf, data, query,