Diff for /tftpd/src/srv.c between versions 1.7.2.1 and 1.8.2.1

version 1.7.2.1, 2014/02/24 21:55:35 version 1.8.2.1, 2017/01/22 21:00:33
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2014Copyright 2004 - 2017
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 82  txPkt(sched_task_t *task) Line 82  txPkt(sched_task_t *task)
         if (wlen == -1)          if (wlen == -1)
                 ESYSERR(0);                  ESYSERR(0);
         else if (wlen != TASK_DATLEN(task)) {          else if (wlen != TASK_DATLEN(task)) {
                EERROR(EIO, "Sended %d bytes != packet %d bytes",                 EERROR(EIO, "Sended %d bytes != packet %zu bytes", 
                                 wlen, TASK_DATLEN(task));                                  wlen, TASK_DATLEN(task));
                 schedEvent(TASK_ROOT(task), execProg, "error", 0, NULL, TFTP_OPC_ERROR);                  schedEvent(TASK_ROOT(task), execProg, "error", 0, NULL, TFTP_OPC_ERROR);
                 schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL,                   schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL, 
Line 171  txAck(sched_task_t *task) Line 171  txAck(sched_task_t *task)
                 schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL, timeoutSession, NULL);                  schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL, timeoutSession, NULL);
                 schedEvent(TASK_ROOT(task), timeoutSession, NULL, 0, TASK_DATA(task), 0);                  schedEvent(TASK_ROOT(task), timeoutSession, NULL, 0, TASK_DATA(task), 0);
                 EVERBOSE(2, "Finish WRQ request");                  EVERBOSE(2, "Finish WRQ request");
                   schedResumeby(TASK_ROOT(task), CRITERIA_ID, 0);
         }          }
         taskExit(task, NULL);          taskExit(task, NULL);
 }  }
Line 219  getOpts(rpack_t * __restrict pkt, int rlen) Line 220  getOpts(rpack_t * __restrict pkt, int rlen)
         } while (rlen > 0);          } while (rlen > 0);
   
         EVERBOSE(4, "blksize=%u tsize=%llu timeout=%d rollover=%u",           EVERBOSE(4, "blksize=%u tsize=%llu timeout=%d rollover=%u", 
                        cli.siz, cli.tsiz, (int) cli.tout.tv_sec, cli.roll - 1);                        cli.siz, (unsigned long long) cli.tsiz, (int) cli.tout.tv_sec, cli.roll - 1);
         return 0;          return 0;
 }  }
   
Line 248  txOack(sched_task_t *task) Line 249  txOack(sched_task_t *task)
         }          }
         if (cli.tsiz) {          if (cli.tsiz) {
                 memset(szStr, 0, sizeof szStr);                  memset(szStr, 0, sizeof szStr);
                snprintf(szStr, sizeof szStr, "%llu", cli.tsiz);                snprintf(szStr, sizeof szStr, "%llu", (unsigned long long) cli.tsiz);
                 rpack_rdata(pkt, TFTP_OPT_TSIZE, strlen(TFTP_OPT_TSIZE) + 1);                  rpack_rdata(pkt, TFTP_OPT_TSIZE, strlen(TFTP_OPT_TSIZE) + 1);
                 rpack_rdata(pkt, szStr, strlen(szStr) + 1);                  rpack_rdata(pkt, szStr, strlen(szStr) + 1);
         }          }
Line 266  txOack(sched_task_t *task) Line 267  txOack(sched_task_t *task)
         }          }
   
         EVERBOSE(4, "blksize=%u tsize=%llu timeout=%d rollover=%u",           EVERBOSE(4, "blksize=%u tsize=%llu timeout=%d rollover=%u", 
                        cli.siz, cli.tsiz, (int) cli.tout.tv_sec, cli.roll - 1);                        cli.siz, (unsigned long long) cli.tsiz, (int) cli.tout.tv_sec, cli.roll - 1);
         schedCallOnce(TASK_ROOT(task), txPkt, NULL, TASK_FD(task),           schedCallOnce(TASK_ROOT(task), txPkt, NULL, TASK_FD(task), 
                         TASK_DATA(task), RPACK_OFF(pkt));                          TASK_DATA(task), RPACK_OFF(pkt));
         taskExit(task, NULL);          taskExit(task, NULL);
Line 286  RQ(sched_task_t *task) Line 287  RQ(sched_task_t *task)
         cli.siz = TFTP_LOAD_MAX;          cli.siz = TFTP_LOAD_MAX;
         cli.opc = ntohs(rpack_uint16(pkt, NULL, 0));          cli.opc = ntohs(rpack_uint16(pkt, NULL, 0));
         if (!RW && cli.opc == TFTP_OPC_WRQ) {          if (!RW && cli.opc == TFTP_OPC_WRQ) {
                code = 2;                code = htons(2);
                 goto end;                  goto end;
         }          }
         len = str_getString(RPACK_NEXT(pkt), rlen, &str);          len = str_getString(RPACK_NEXT(pkt), rlen, &str);
Line 477  DATA(sched_task_t *task) Line 478  DATA(sched_task_t *task)
   
         EVERBOSE(3, "DATA:: seq=%hu; len=%d", cli.seq, len);          EVERBOSE(3, "DATA:: seq=%hu; len=%d", cli.seq, len);
   
        if (!bf)        if (len > 0) {
                len = pwrite(cli.fd, RPACK_NEXT(pkt), len, (cli.seq - 1) * cli.siz);                if (!bf)
        else                        len = pwrite(cli.fd, RPACK_NEXT(pkt), len, (cli.seq - 1) * cli.siz);
                len = bfwrite(cli.fd, RPACK_NEXT(pkt), len);                else
        if (len == -1) {                        len = bfwrite(cli.fd, RPACK_NEXT(pkt), len);
                ESYSERR(0);                if (len == -1) {
                code = htons(3);                        ESYSERR(0);
                goto end;                        code = htons(3);
        } else {                        goto end;
                rpack_rnext(pkt, len);                } else
                EVERBOSE(3, "Written to file %s %d bytes", cli.file, len);                        rpack_rnext(pkt, len);
         }          }
           EVERBOSE(3, "Written to file %s %d bytes", cli.file, len);
   
         schedEvent(TASK_ROOT(task), txAck, NULL, TASK_FD(task), TASK_DATA(task), 0);          schedEvent(TASK_ROOT(task), txAck, NULL, TASK_FD(task), TASK_DATA(task), 0);
         taskExit(task, NULL);          taskExit(task, NULL);

Removed from v.1.7.2.1  
changed lines
  Added in v.1.8.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>