| 523 | } |
| 524 | |
| 525 | static void finish_request(struct transfer_request *request) |
| 526 | { |
| 527 | struct http_pack_request *preq; |
| 528 | struct http_object_request *obj_req; |
| 529 | |
| 530 | request->curl_result = request->slot->curl_result; |
| 531 | request->http_code = request->slot->http_code; |
| 532 | request->slot = NULL; |
| 533 | |
| 534 | /* Keep locks active */ |
| 535 | check_locks(); |
| 536 | |
| 537 | if (request->headers) |
| 538 | curl_slist_free_all(request->headers); |
| 539 | |
| 540 | /* URL is reused for MOVE after PUT and used during FETCH */ |
| 541 | if (request->state != RUN_PUT && request->state != RUN_FETCH_PACKED) { |
| 542 | FREE_AND_NULL(request->url); |
| 543 | } |
| 544 | |
| 545 | if (request->state == RUN_MKCOL) { |
| 546 | if (request->curl_result == CURLE_OK || |
| 547 | request->http_code == 405) { |
| 548 | remote_dir_exists[request->obj->oid.hash[0]] = 1; |
| 549 | start_put(request); |
| 550 | } else { |
| 551 | fprintf(stderr, "MKCOL %s failed, aborting (%d/%ld)\n", |
| 552 | oid_to_hex(&request->obj->oid), |
| 553 | request->curl_result, request->http_code); |
| 554 | request->state = ABORTED; |
| 555 | aborted = 1; |
| 556 | } |
| 557 | } else if (request->state == RUN_PUT) { |
| 558 | if (request->curl_result == CURLE_OK) { |
| 559 | start_move(request); |
| 560 | } else { |
| 561 | fprintf(stderr, "PUT %s failed, aborting (%d/%ld)\n", |
| 562 | oid_to_hex(&request->obj->oid), |
| 563 | request->curl_result, request->http_code); |
| 564 | request->state = ABORTED; |
| 565 | aborted = 1; |
| 566 | } |
| 567 | } else if (request->state == RUN_MOVE) { |
| 568 | if (request->curl_result == CURLE_OK) { |
| 569 | if (push_verbosely) |
| 570 | fprintf(stderr, " sent %s\n", |
| 571 | oid_to_hex(&request->obj->oid)); |
| 572 | request->obj->flags |= REMOTE; |
| 573 | release_request(request); |
| 574 | } else { |
| 575 | fprintf(stderr, "MOVE %s failed, aborting (%d/%ld)\n", |
| 576 | oid_to_hex(&request->obj->oid), |
| 577 | request->curl_result, request->http_code); |
| 578 | request->state = ABORTED; |
| 579 | aborted = 1; |
| 580 | } |
| 581 | } else if (request->state == RUN_FETCH_LOOSE) { |
| 582 | obj_req = (struct http_object_request *)request->userData; |
no test coverage detected