Diff

Differences From Artifact [a04afbb955]:

To Artifact [01175426be]:


1192
1193
1194
1195
1196
1197
1198




1199
1200
1201
1202
1203
1204
1205
1206

1207
1208
1209




1210
1211
1212
1213
1214
1215
1216
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209

1210
1211


1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222







+
+
+
+







-
+

-
-
+
+
+
+








    xfer->eof = FALSE;
    xfer_download_queue(xfer);

    return xfer;
}

/*
 * Returns INT_MIN to indicate that it didn't even get as far as
 * fxp_read_recv and hence has not freed pktin.
 */
int xfer_download_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin)
{
    struct sftp_request *rreq;
    struct req *rr;

    rreq = sftp_find_request(pktin);
    if (!rreq)
        return 0;            /* this packet doesn't even make sense */
        return INT_MIN;            /* this packet doesn't even make sense */
    rr = (struct req *)fxp_get_userdata(rreq);
    if (!rr)
	return 0;		       /* this packet isn't ours */
    if (!rr) {
        fxp_internal_error("request ID is not part of the current download");
	return INT_MIN;		       /* this packet isn't ours */
    }
    rr->retlen = fxp_read_recv(pktin, rreq, rr->buffer, rr->len);
#ifdef DEBUG_DOWNLOAD
    printf("read request %p has returned [%d]\n", rr, rr->retlen);
#endif

    if ((rr->retlen < 0 && fxp_error_type()==SSH_FX_EOF) || rr->retlen == 0) {
	xfer->eof = TRUE;
1373
1374
1375
1376
1377
1378
1379




1380
1381
1382
1383
1384
1385
1386
1387
1388

1389
1390
1391




1392
1393
1394
1395
1396
1397
1398
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397

1398
1399


1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410







+
+
+
+








-
+

-
-
+
+
+
+







    xfer->req_totalsize += rr->len;

#ifdef DEBUG_UPLOAD
    { char buf[40]; uint64_decimal(rr->offset, buf); printf("queueing write request %p at %s [len %d]\n", rr, buf, len); }
#endif
}

/*
 * Returns INT_MIN to indicate that it didn't even get as far as
 * fxp_write_recv and hence has not freed pktin.
 */
int xfer_upload_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin)
{
    struct sftp_request *rreq;
    struct req *rr, *prev, *next;
    int ret;

    rreq = sftp_find_request(pktin);
    if (!rreq)
        return 0;            /* this packet doesn't even make sense */
        return INT_MIN;            /* this packet doesn't even make sense */
    rr = (struct req *)fxp_get_userdata(rreq);
    if (!rr)
	return 0;		       /* this packet isn't ours */
    if (!rr) {
        fxp_internal_error("request ID is not part of the current upload");
	return INT_MIN;		       /* this packet isn't ours */
    }
    ret = fxp_write_recv(pktin, rreq);
#ifdef DEBUG_UPLOAD
    printf("write request %p has returned [%d]\n", rr, ret);
#endif

    /*
     * Remove this one from the queue.