home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Networking / ncftp-2.4.2-MIHS / src / Xfer.h < prev   
Encoding:
C/C++ Source or Header  |  1996-10-16  |  3.0 KB  |  123 lines

  1. /* Xfer.h */
  2.  
  3. #ifndef _xfer_h_
  4. #define _xfer_h_    1
  5.  
  6. #ifndef _ftp_h_
  7. #include "FTP.h"
  8. #endif
  9.  
  10. #ifndef _rcmd_h_
  11. #include "RCmd.h"
  12. #endif
  13.  
  14. /* This is for block transfer mode.  See RFC 959. */
  15. typedef struct FTPBlockHeader {
  16.     unsigned char desc;
  17.     unsigned char byteCount[2];
  18. } FTPBlockHeader;
  19.  
  20. /* See RFC 959. */
  21. #define kRegularBlock     0
  22. #define kLastBlock     64
  23.  
  24. #define kXferBufSize 32768                   /* Must be 2^16 to support block mode. */
  25.  
  26. /* These coincide with the definitions of kAcceptForWriting, etc., in FTP.h. */
  27. #define kNetWriting kAcceptForWriting
  28. #define kNetReading kAcceptForReading
  29.  
  30. #define NETREADING(xp) ((xp)->netMode == kNetReading)
  31. #define NETWRITING(xp) ((xp)->netMode == kNetWriting)
  32.  
  33. /* More stuff for XferSpec setup.
  34.  * Typically, all of these are used at once when
  35.  * you don't want progress reports.
  36.  */
  37. #define kNoReports 0
  38. #define kFileSizeDontCare 0L
  39. #define kLocalFileIsStdout    "-"
  40.  
  41. /* Some BlockProcs will timeout after the defined interval, and they
  42.  * return this instead of just -1 for a regular error.
  43.  */
  44. #define kTimeoutErr (-2)
  45.  
  46. /* typedef struct XferSpec *XferSpecPtr;  done in RCmd.h.  */
  47.  
  48. #define kNoTransfer ((XferSpecPtr) 0)
  49.  
  50. typedef int (*XferProc) (XferSpecPtr);
  51.  
  52. /* Each progress meter function follows this calling format. */
  53. typedef int (*ProgressMeterProc) (XferSpecPtr, int);
  54.  
  55. typedef struct XferSpec {
  56.     /* These must be filled in by you. */
  57.     int netMode;               /* Reading or writing Net I/O? */
  58.     XferProc xProc;
  59.     int inStream;
  60.     int outStream;
  61.  
  62.     /* You can use this to point to another structure if you like. */
  63.     void *miscPtr;
  64.  
  65.     /* Filled in by you if you want progress reports. */
  66.     int doReports;
  67.     char *localFileName;
  68.     char *remoteFileName;
  69.     long expectedSize;
  70.     long startPoint;
  71.  
  72.     /* These are filled in by RDataCmd. */
  73.     ResponsePtr cmdResp;
  74.     ResponsePtr xferResp;
  75.  
  76.     /* These are filled in by Progress routines. */
  77.     int progMeterInUse;
  78.     ProgressMeterProc prProc;
  79.     long bytesTransferred;
  80.     long bytesLeft;
  81.     double frac;
  82.     double bytesPerSec;
  83.     double secsElap;
  84.     struct timeval startTime;
  85.     struct timeval endTime;
  86.     long timeOfNextUpdate;
  87.  
  88.     /* Needed to guarantee that the file times get set. */
  89.     int doUTime;
  90.     time_t remoteModTime;
  91.     int aborted;
  92.     int outIsTTY;
  93.     int inIsTTY;
  94.     Sig_t origPipe;
  95.     Sig_t origIntr;
  96.     int atEof;               /* Block mode needs this. */
  97. } XferSpec;
  98.  
  99. #define CLEARXFERSPEC(R)    PTRZERO(R, sizeof(XferSpec))
  100.  
  101. typedef int (*NetReadProc) (XferSpecPtr xp);
  102. typedef int (*NetWriteProc) (XferSpecPtr xp, char *, int);
  103.  
  104. /* Xfer.c */
  105. void InitXferBuffer(void);
  106. int BufferGets(char *, size_t, XferSpecPtr);
  107. void XferSigHandler(int);
  108. XferSpecPtr InitXferSpec(void);
  109. void DoneWithXferSpec(XferSpecPtr);
  110. void AbortDataTransfer(XferSpecPtr);
  111. void EndTransfer(XferSpecPtr);
  112. void StartTransfer(XferSpecPtr);
  113. int StdAsciiFileReceive(XferSpecPtr);
  114. int StdAsciiFileSend(XferSpecPtr);
  115. int StdFileReceive(XferSpecPtr);
  116. int StdFileSend(XferSpecPtr);
  117. int StreamModeRead(XferSpecPtr);
  118. int StreamModeWrite(XferSpecPtr, char *, int);
  119. int BlockModeRead(XferSpecPtr);
  120. int BlockModeWrite(XferSpecPtr, char *, int);
  121.  
  122. #endif /* _xfer_h_ */
  123.