|
Lines 816-825
Link Here
|
| 816 |
|
816 |
|
| 817 |
/* Send some more requests */ |
817 |
/* Send some more requests */ |
| 818 |
while (num_req < max_req) { |
818 |
while (num_req < max_req) { |
|
|
819 |
#ifdef HAVE_INT64_T |
| 819 |
debug3("Request range %llu -> %llu (%d/%d)", |
820 |
debug3("Request range %llu -> %llu (%d/%d)", |
| 820 |
(unsigned long long)offset, |
821 |
(unsigned long long)offset, |
| 821 |
(unsigned long long)offset + buflen - 1, |
822 |
(unsigned long long)offset + buflen - 1, |
| 822 |
num_req, max_req); |
823 |
num_req, max_req); |
|
|
824 |
#endif |
| 823 |
req = xmalloc(sizeof(*req)); |
825 |
req = xmalloc(sizeof(*req)); |
| 824 |
req->id = conn->msg_id++; |
826 |
req->id = conn->msg_id++; |
| 825 |
req->len = buflen; |
827 |
req->len = buflen; |
|
Lines 857-865
Link Here
|
| 857 |
break; |
859 |
break; |
| 858 |
case SSH2_FXP_DATA: |
860 |
case SSH2_FXP_DATA: |
| 859 |
data = buffer_get_string(&msg, &len); |
861 |
data = buffer_get_string(&msg, &len); |
|
|
862 |
#ifdef HAVE_INT64_T |
| 860 |
debug3("Received data %llu -> %llu", |
863 |
debug3("Received data %llu -> %llu", |
| 861 |
(unsigned long long)req->offset, |
864 |
(unsigned long long)req->offset, |
| 862 |
(unsigned long long)req->offset + len - 1); |
865 |
(unsigned long long)req->offset + len - 1); |
|
|
866 |
#endif |
| 863 |
if (len > req->len) |
867 |
if (len > req->len) |
| 864 |
fatal("Received more data than asked for " |
868 |
fatal("Received more data than asked for " |
| 865 |
"%d > %d", len, req->len); |
869 |
"%d > %d", len, req->len); |
|
Lines 878-888
Link Here
|
| 878 |
num_req--; |
882 |
num_req--; |
| 879 |
} else { |
883 |
} else { |
| 880 |
/* Resend the request for the missing data */ |
884 |
/* Resend the request for the missing data */ |
|
|
885 |
#ifdef HAVE_INT64_T |
| 881 |
debug3("Short data block, re-requesting " |
886 |
debug3("Short data block, re-requesting " |
| 882 |
"%llu -> %llu (%2d)", |
887 |
"%llu -> %llu (%2d)", |
| 883 |
(unsigned long long)req->offset + len, |
888 |
(unsigned long long)req->offset + len, |
| 884 |
(unsigned long long)req->offset + |
889 |
(unsigned long long)req->offset + |
| 885 |
req->len - 1, num_req); |
890 |
req->len - 1, num_req); |
|
|
891 |
#endif |
| 886 |
req->id = conn->msg_id++; |
892 |
req->id = conn->msg_id++; |
| 887 |
req->len -= len; |
893 |
req->len -= len; |
| 888 |
req->offset += len; |
894 |
req->offset += len; |
|
Lines 896-904
Link Here
|
| 896 |
if (size > 0 && offset > size) { |
902 |
if (size > 0 && offset > size) { |
| 897 |
/* Only one request at a time |
903 |
/* Only one request at a time |
| 898 |
* after the expected EOF */ |
904 |
* after the expected EOF */ |
|
|
905 |
#ifdef HAVE_INT64_T |
| 899 |
debug3("Finish at %llu (%2d)", |
906 |
debug3("Finish at %llu (%2d)", |
| 900 |
(unsigned long long)offset, |
907 |
(unsigned long long)offset, |
| 901 |
num_req); |
908 |
num_req); |
|
|
909 |
#endif |
| 902 |
max_req = 1; |
910 |
max_req = 1; |
| 903 |
} |
911 |
} |
| 904 |
else if (max_req < conn->num_requests + 1) { |
912 |
else if (max_req < conn->num_requests + 1) { |
|
Lines 1051-1058
Link Here
|
| 1051 |
buffer_put_int64(&msg, offset); |
1059 |
buffer_put_int64(&msg, offset); |
| 1052 |
buffer_put_string(&msg, data, len); |
1060 |
buffer_put_string(&msg, data, len); |
| 1053 |
send_msg(conn->fd_out, &msg); |
1061 |
send_msg(conn->fd_out, &msg); |
|
|
1062 |
#ifdef HAVE_INT64_T |
| 1054 |
debug3("Sent message SSH2_FXP_WRITE I:%d O:%llu S:%u", |
1063 |
debug3("Sent message SSH2_FXP_WRITE I:%d O:%llu S:%u", |
| 1055 |
id, (unsigned long long)offset, len); |
1064 |
id, (unsigned long long)offset, len); |
|
|
1065 |
#endif |
| 1056 |
} else if (TAILQ_FIRST(&acks) == NULL) |
1066 |
} else if (TAILQ_FIRST(&acks) == NULL) |
| 1057 |
break; |
1067 |
break; |
| 1058 |
|
1068 |
|
|
Lines 1091-1098
Link Here
|
| 1091 |
close(local_fd); |
1101 |
close(local_fd); |
| 1092 |
goto done; |
1102 |
goto done; |
| 1093 |
} |
1103 |
} |
|
|
1104 |
#ifdef HAVE_INT64_T |
| 1094 |
debug3("In write loop, ack for %u %d bytes at %llu", |
1105 |
debug3("In write loop, ack for %u %d bytes at %llu", |
| 1095 |
ack->id, ack->len, (unsigned long long)ack->offset); |
1106 |
ack->id, ack->len, (unsigned long long)ack->offset); |
|
|
1107 |
#endif |
| 1096 |
++ackid; |
1108 |
++ackid; |
| 1097 |
free(ack); |
1109 |
free(ack); |
| 1098 |
} |
1110 |
} |