tftpLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* tftpLib.h - vxWorks Trival File Transfer protocol header file */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01j,24may02,vvv  replaced GNU_PACKED with _WRS_PACK_ALIGN
  7. 01i,19jan01,scm  ARM - add gnu compiler work around for pragma 1...
  8. 01h,09oct97,nbs  modified TFTP_DESC to include the file name
  9.  in the request, spr # 9413
  10. 01g,22sep92,rrr  added support for c++
  11. 01f,18sep92,jcf  added include of netinet/in.h.
  12. 01e,04jul92,jcf  cleaned up.
  13. 01d,15jun92,elh  changed retransmission time.
  14. 01c,26may92,rrr  the tree shuffle
  15. 01b,29feb92,elh  ansified.
  16.  incorperated changes done by jmm for server.
  17. 01a,19Jul91,elh  written.
  18. */
  19. #ifndef __INCtftpLibh
  20. #define __INCtftpLibh
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. #include "vwModNum.h"
  25. #include "netinet/in.h"
  26. /* defines */
  27. /* TFTP constant values.  */
  28. #define TFTP_SEGSIZE 512 /* data segment size */
  29. #define TFTP_FILENAME_SIZE 128 /* max length of  */
  30. /* filename */
  31. #define TFTP_ACK_SIZE 4 /* size of ack message */
  32. #define TFTP_DATA_HDR_SIZE 4 /* header size  */
  33. #define TFTP_TIMEOUT 2 /* secs between rexmt's */
  34. #define TFTP_PORT   69 /* tftp default port    */
  35. #define TFTP_CLIENT 0
  36. #define TFTP_SERVER 1
  37. /* TFTP Op Codes/packet types */
  38. #define TFTP_RRQ 01 /* read request */
  39. #define TFTP_WRQ 02 /* write request  */
  40. #define TFTP_DATA 03 /* data packet  */
  41. #define TFTP_ACK 04 /* acknowledgement  */
  42. #define TFTP_ERROR  05 /* error packet  */
  43. /*
  44.   TFTP message formats are:
  45. Type        Op #     Format without header
  46.              2 bytes   string   1 byte  string  1 byte
  47.             ------------------------------------------
  48. TFTP_RRQ/  | [01|02]| filename |  0   | mode   |   0 |
  49. TFTP_WRQ    ------------------------------------------
  50.              2 bytes  2 bytes   n bytes
  51.             ---------------------------
  52. TFTP_DATA  |   03   | block # | data  |
  53.             ---------------------------
  54.              2 bytes   2 bytes
  55.             ------------------
  56. TFTP_ACK   |   04   | block #|
  57.             ------------------
  58.              2 bytes  2 bytes     string  1 byte
  59.             -------------------------------------
  60. TFTP_ERROR |  05    | ErrorCode | ErrMsg |   0  |
  61.             -------------------------------------
  62. */
  63. #if CPU_FAMILY==I960
  64. #pragma align 1 /* don't to optimize alignments */
  65. #endif /* CPU_FAMILY==I960 */
  66. #if (defined __arm__)
  67. #define TFTP_PACKED _WRS_PACK_ALIGN(1)
  68. #else
  69. #define TFTP_PACKED
  70. #endif
  71. /* TFTP packet structure.  */
  72. struct tftpFormat
  73.     {
  74.     u_short blockOrError;
  75.     char data [TFTP_SEGSIZE];
  76.     } TFTP_PACKED;
  77. typedef struct tftp_msg
  78.     {
  79.     u_short th_opcode; /* packet op code */
  80.     union
  81. {
  82.         char  request [TFTP_SEGSIZE + 2]; /* request string  */
  83. struct   tftpFormat  misc;
  84.       } TFTP_PACKED th;
  85.     } TFTP_MSG;
  86. #if CPU_FAMILY==I960
  87. #pragma align 0 /* turn off alignment requirement */
  88. #endif /* CPU_FAMILY==I960 */
  89. /* useful defines to access the TFTP packet */
  90. #define th_request th.request /* request string  */
  91. #define th_block th.misc.blockOrError /* block number */
  92. #define th_error th.misc.blockOrError /* error code */
  93. #define th_errMsg th.misc.data /* error message */
  94. #define th_data th.misc.data /* data */
  95. /* TFTP defined error codes.  */
  96. #define EUNDEF 0 /* not defined  */
  97. #define ENOTFOUND 1 /* file not found  */
  98. #define EACCESS 2 /* access violation */
  99. #define ENOSPACE 3 /* disk full */
  100. #define EBADOP 4 /* illegal operation  */
  101. #define EBADID 5 /* unknown transfer ID */
  102. #define EEXISTS 6 /* file already exists */
  103. #define ENOUSER 7 /* no such user */
  104. /* mode structure */
  105. typedef struct tftp_mode
  106.     {
  107.     char *m_name; /* mode name */
  108.     char *m_mode; /* mode type */
  109.     } TFTP_MODE;
  110. /* error structure */
  111. typedef struct tftp_errmsg
  112.     {
  113.     int   e_code; /* error code */
  114.     char  *e_msg; /* error message */
  115.     } TFTP_ERRMSG;
  116. /* TFTP descriptor */
  117. typedef struct tftp_desc
  118.     {
  119.     char  mode [32]; /* mode  */
  120.     BOOL connected; /* state  */
  121.     char     serverName [128]; /* server ascii name */
  122.     struct sockaddr_in serverAddr; /* server address  */
  123.     int  sock; /* socket  */
  124.     u_short serverPort; /* server port number */
  125.     char fileName [TFTP_FILENAME_SIZE]; /* requested file name  */
  126.     } TFTP_DESC;
  127. /* TFTP task defaults */
  128. #define TFTP_TASK_PRIORITY 70 /* TFTP task priority */
  129. #define TFTP_TASK_OPTIONS 0 /* TFTP task options */
  130. #define TFTP_TASK_STACKSIZE 7000 /* TFTP stack size  */
  131. /* tftpLib error values */
  132. #define S_tftpLib_INVALID_ARGUMENT (M_tftpLib | 1)
  133. #define S_tftpLib_INVALID_DESCRIPTOR (M_tftpLib | 2)
  134. #define S_tftpLib_INVALID_COMMAND (M_tftpLib | 3)
  135. #define S_tftpLib_INVALID_MODE (M_tftpLib | 4)
  136. #define S_tftpLib_UNKNOWN_HOST (M_tftpLib | 5)
  137. #define S_tftpLib_NOT_CONNECTED (M_tftpLib | 6)
  138. #define S_tftpLib_TIMED_OUT (M_tftpLib | 7)
  139. #define S_tftpLib_TFTP_ERROR (M_tftpLib | 8)
  140. #if defined(__STDC__) || defined(__cplusplus)
  141. extern STATUS  tftpXfer (char * pHost, int port, char * pFilename,
  142.   char * pCommand, char * pMode, int * pDataDesc,
  143.        int * pErrorDesc);
  144. extern STATUS  tftpCopy (char * pHost, int port, char * pFilename,
  145.   char * pCommand, char * pMode, int fd);
  146. extern TFTP_DESC *tftpInit (void);
  147. extern STATUS  tftpModeSet (TFTP_DESC * pTftpDesc, char * pMode);
  148. extern STATUS  tftpPeerSet (TFTP_DESC * pTftpDesc, char * pHostname,
  149.      int port);
  150. extern STATUS  tftpPut (TFTP_DESC *pTftpDesc, char *pFilename, int fd,
  151.          int clientOrServer);
  152. extern STATUS  tftpGet (TFTP_DESC *pTftpDesc, char *pFilename, int fd,
  153.          int clientOrServer);
  154. extern STATUS  tftpInfoShow (TFTP_DESC * pTftpDesc);
  155. extern STATUS  tftpQuit (TFTP_DESC * pTftpDesc);
  156. extern int  tftpSend (TFTP_DESC *pTftpDesc, TFTP_MSG *pTftpMsg, int sizeMsg,
  157.           TFTP_MSG *pTftpReply, int opReply, int blockReply,
  158.           int *pPort);
  159. extern int  tftpErrorCreate (TFTP_MSG * pTftpMsg, int errorNum);
  160. #else   /* __STDC__ */
  161. extern STATUS  tftpXfer ();
  162. extern STATUS  tftpCopy ();
  163. extern TFTP_DESC *tftpInit ();
  164. extern STATUS  tftpModeSet ();
  165. extern STATUS  tftpPeerSet ();
  166. extern STATUS  tftpPut ();
  167. extern STATUS  tftpGet ();
  168. extern STATUS  tftpInfoShow ();
  169. extern STATUS  tftpQuit ();
  170. extern int  tftpSend ();
  171. extern int  tftpErrorCreate ();
  172. #endif  /* __STDC__ */
  173. #ifdef __cplusplus
  174. }
  175. #endif
  176. #endif /* __INCtftpLibh */