431 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			431 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef CYGONCE_NET_HFS_H
 | |
| #define CYGONCE_NET_HFS_H
 | |
| /* =================================================================
 | |
|  *
 | |
|  *      hfs.h
 | |
|  *
 | |
|  *      A simple http file server.
 | |
|  *
 | |
|  * =================================================================
 | |
|  */
 | |
| #define HFS_INTERFACE_VER 0x16121309
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Typedefs
 | |
| //------------------------------------------------------------------------------
 | |
| typedef unsigned long       HFS_U32;                ///<  Unsigned 32 bits data type
 | |
| typedef unsigned char       HFS_U8;                 ///<  Unsigned 8 bits data type
 | |
| 
 | |
| /**
 | |
|      @name HFS notify status
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_STATUS_CLIENT_REQUEST           0   ///<  client has request comimg in
 | |
| #define CYG_HFS_STATUS_SERVER_RESPONSE_START    1   ///<  server send response data start
 | |
| #define CYG_HFS_STATUS_SERVER_RESPONSE_END      2   ///<  server send response data end
 | |
| #define CYG_HFS_STATUS_CLIENT_DISCONNECT        3   ///<  client disconnect.
 | |
| #define CYG_HFS_STATUS_SERVER_EXIT              4   ///<  notify that the server is exit
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|      @name HFS get custom data return value
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_CB_GETDATA_RETURN_ERROR        -1   ///<  has error
 | |
| #define CYG_HFS_CB_GETDATA_RETURN_OK           0    ///<  ok get all data
 | |
| #define CYG_HFS_CB_GETDATA_RETURN_CONTINUE     1    ///<  has more data need to get
 | |
| 
 | |
| #define CYG_HFS_CB_GETDATA_SEGMENT_ERROR_BREAK         0xFFFFFFFF    ///<  hfs error break, the connection may be closed
 | |
| 
 | |
| //@}
 | |
| 
 | |
| 
 | |
| /**
 | |
|      @name HFS list dir return value
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_LIST_DIR_OPEN_FAIL             -1   ///<  has error when open dir
 | |
| #define CYG_HFS_LIST_DIR_OK                    0    ///<  ok get all data
 | |
| #define CYG_HFS_LIST_DIR_CONTINUE              1    ///<  has more data need to list
 | |
| //@}
 | |
| 
 | |
| 
 | |
| /**
 | |
|      @name HFS upload file result
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_UPLOAD_OK                      0    ///<  upload file ok
 | |
| #define CYG_HFS_UPLOAD_FAIL_FILE_EXIST         -1   ///<  upload file fail because of file exist
 | |
| #define CYG_HFS_UPLOAD_FAIL_RECEIVE_ERROR      -2   ///<  receive data has some error
 | |
| #define CYG_HFS_UPLOAD_FAIL_WRITE_ERROR        -3   ///<  write file has some error
 | |
| #define CYG_HFS_UPLOAD_FAIL_FILENAME_EMPTY     -4   ///<  file name is emtpy
 | |
| #define CYG_HFS_UPLOAD_FAIL_MD5_CHK_FAIL       -5   ///<  upload file MD5 check fail
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|      @name HFS download file result
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_DOWNLOAD_OK                      0    ///<  download file ok
 | |
| #define CYG_HFS_DOWNLOAD_FILE_NOT_EXIST         -1    ///<  download file not exist
 | |
| #define CYG_HFS_DOWNLOAD_FAIL                   -2    ///<  download file fail
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|      @name HFS delete file result
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_DELETE_OK                      0    ///<  delete file ok
 | |
| #define CYG_HFS_DELETE_FAIL                    -1   ///<  delete file fail
 | |
| //@}
 | |
| 
 | |
| 
 | |
| /**
 | |
|      @name HFS maximum length
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_ROOT_DIR_MAXLEN                64   ///<  root dir max path length
 | |
| #define CYG_HFS_KEY_MAXLEN                     64   ///<  key max length
 | |
| #define CYG_HFS_NAME_MAXLEN                    32   ///<  user name max length
 | |
| #define CYG_HFS_PWD_MAXLEN                     32   ///<  user passwd max length
 | |
| #define CYG_HFS_REQUEST_PATH_MAXLEN            1024 ///<  request url path max length
 | |
| #define CYG_HFS_FILE_PATH_MAXLEN               256  ///<  file path max length
 | |
| #define CYG_HFS_MIMETYPE_MAXLEN                40   ///<  mime type max length
 | |
| #define CYG_HFS_USER_QUERY_MAXLEN              24   ///<  client query string max length
 | |
| #define CYG_HFS_CUSTOM_STR_MAXLEN              24   // custom string max length
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|     HFS put data status.
 | |
| 
 | |
| */
 | |
| typedef enum _HFS_PUT_STATUS {
 | |
| 	HFS_PUT_STATUS_CONTINUE               =   0, ///< still have data need to put
 | |
| 	HFS_PUT_STATUS_FINISH                 =   1, ///< put data finish
 | |
| 	HFS_PUT_STATUS_ERR                    =  -1, ///< some error happened
 | |
| } HFS_PUT_STATUS;
 | |
| 
 | |
| 
 | |
| /**
 | |
|      @name HFS header callback return result
 | |
| */
 | |
| //@{
 | |
| #define CYG_HFS_CB_HEADER_RETURN_DEFAULT       0    ///<  the http request need to be handle by hfs internal
 | |
| #define CYG_HFS_CB_HEADER_RETURN_CUSTOM        1    ///<  the http request is handled by customer
 | |
| #define CYG_HFS_CB_HEADER_RETURN_REDIRECT      2    ///<  the http request need to redirect
 | |
| #define CYG_HFS_CB_HEADER_RETURN_ERROR        -1    ///<  the http request has some error
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|      @name callback function
 | |
| */
 | |
| //@{
 | |
| typedef void cyg_hfs_notify(int status); ///< Callback function for notify the HFS server status.
 | |
| typedef int  cyg_hfs_getCustomData(char *path, char *argument, HFS_U32 bufAddr, HFS_U32 *bufSize, char *mimeType, HFS_U32 segmentCount);///< Callback function for get custom data.
 | |
| typedef int  cyg_hfs_check_password(const char *username, const char *password, char *key, char *questionstr); ///< Callback function for check password.
 | |
| typedef int  cyg_hfs_gen_dirlist_html(const char *path, HFS_U32 bufAddr, HFS_U32 *bufSize, const char *usr, const char *pwd, HFS_U32 segmentCount);
 | |
| typedef int  cyg_hfs_client_query(char *path, char *argument, HFS_U32 bufAddr, HFS_U32 *bufSize, char *mimeType, HFS_U32 segmentCount); ///< Callback function for client query
 | |
| typedef int  cyg_hfs_upload_result_cb(int result, HFS_U32 bufAddr, HFS_U32 *bufSize, char *mimeType);///< Callback function for upload command complete
 | |
| typedef int  cyg_hfs_delete_result_cb(int result, HFS_U32 bufAddr, HFS_U32 *bufSize, char *mimeType);///< Callback function for delete command complete
 | |
| typedef int  cyg_hfs_putCustomData(char *path, char *argument, HFS_U32 bufAddr, HFS_U32 bufSize, HFS_U32 segmentCount, HFS_PUT_STATUS putStatus);///< Callback function for put custom data.
 | |
| typedef int  cyg_hfs_header_cb(HFS_U32 headerAddr, HFS_U32 headerSize, char *filepath, char *mimeType, void *reserved);  ///< Callback function for http header parse custom.
 | |
| typedef void cyg_hfs_download_result_cb(int result, char *path);///< Callback function for download command complete
 | |
| 
 | |
| 
 | |
| //@}
 | |
| 
 | |
| /**
 | |
|     Init parameters for HFS.
 | |
| 
 | |
|     This structure is used in cyg_hfs_open() to specify the HFS needed information for normal working
 | |
|     and user customization callback.
 | |
| */
 | |
| typedef struct {
 | |
| 	cyg_hfs_notify          *notify;                                     ///<  Callback function for notify the HFS server status
 | |
| 	cyg_hfs_getCustomData   *getCustomData;                              ///<  Callback function for get custom data
 | |
| 	cyg_hfs_putCustomData   *putCustomData;                              ///<  Callback function for put custom data
 | |
| 	cyg_hfs_check_password  *check_pwd;                                  ///<  Callback function for check password.
 | |
| 	cyg_hfs_gen_dirlist_html *genDirListHtml;                            ///<  Callback function for generate directory list with html format
 | |
| 	cyg_hfs_upload_result_cb *uploadResultCb;                            ///<  Callback function for upload command complete
 | |
| 	cyg_hfs_delete_result_cb *deleteResultCb;                            ///<  Callback function for delete command complete
 | |
| 	char                    clientQueryStr[CYG_HFS_USER_QUERY_MAXLEN + 1]; ///<  client query string
 | |
| 	cyg_hfs_client_query    *clientQueryCb;                              ///<  client query callback function
 | |
| 	int                     portNum;                                     ///<  server port number
 | |
| 	int                     threadPriority;                              ///<  server thread priority
 | |
| 	char                    rootdir[CYG_HFS_ROOT_DIR_MAXLEN + 1];        ///<  root of the visible filesystem
 | |
| 	char                    key[CYG_HFS_KEY_MAXLEN + 1];                 ///<  the key used in check password callback function
 | |
| 	int                     sockbufSize;                                 ///<  socket buffer size
 | |
| 	int                     tos;                                         ///<  type of service
 | |
| 	HFS_U32                 sharedMemAddr;                               ///<  shared memory address
 | |
| 	HFS_U32                 sharedMemSize;                               ///<  shared memory size
 | |
| 	HFS_U32                 maxClientNum;                                ///<  maximum client connection at the same time
 | |
| 	int                     timeoutCnt;                                  ///<  timeout counter for send & receive , time base is 0.5 sec
 | |
| 	int                     httpsPortNum;                                ///<  https port number
 | |
| 	char                    customStr[CYG_HFS_CUSTOM_STR_MAXLEN + 1];    ///<  custom string
 | |
| 	int                     forceCustomCallback;                         ///<  force custom callback even url not have "custom=1"
 | |
| 	cyg_hfs_header_cb       *headerCb;                                   ///<  Callback function for header data parse by customer
 | |
| 	cyg_hfs_download_result_cb *downloadResultCb;                        ///<  Callback function for download command complete
 | |
| } cyg_hfs_open_obj;
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|     IPC message type.
 | |
| 
 | |
| */
 | |
| typedef enum _HFS_IPC_MSG_TYPE {
 | |
| 	HFS_IPC_MSG_TYPE_S2C = 1,         ///<   server to client message
 | |
| 	HFS_IPC_MSG_TYPE_C2S = 2,         ///<   client to server message
 | |
| } HFS_IPC_MSG_TYPE;
 | |
| 
 | |
| 
 | |
| /**
 | |
|     IPC message command ID.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef enum _HFS_IPC_CMD {
 | |
| 	HFS_IPC_SERVER_STARTED = 0,       ///<   the server is stared               (server-> client)
 | |
| 	HFS_IPC_NOTIFY_CLIENT,            ///<   notify the server status to client (server-> client)
 | |
| 	HFS_IPC_NOTIFY_CLIENT_ACK,        ///<   ack of HFS_IPC_NOTIFY_CLIENT
 | |
| 	HFS_IPC_GET_CUSTOM_DATA,          ///<   get user custom data from client   (server-> client)
 | |
| 	HFS_IPC_GET_CUSTOM_DATA_ACK,      ///<   ack of HFS_IPC_GET_CUSTOM_DATA
 | |
| 	HFS_IPC_CHK_PASSWD,               ///<   check password                     (server-> client)
 | |
| 	HFS_IPC_CHK_PASSWD_ACK,           ///<   ack of HFS_IPC_CHK_PASSWD
 | |
| 	HFS_IPC_GEN_DIRLIST_DATA,         ///<   generate dirlist html data         (server-> client)
 | |
| 	HFS_IPC_GEN_DIRLIST_DATA_ACK,     ///<   ack of HFS_IPC_GEN_DIRLIST_DATA
 | |
| 	HFS_IPC_CLIENT_QUERY_DATA,        ///<   client query request               (server-> client)
 | |
| 	HFS_IPC_CLIENT_QUERY_DATA_ACK,    ///<   ack of HFS_IPC_CLIENT_QUERY_DATA
 | |
| 	HFS_IPC_UPLOAD_RESULT_DATA,       ///<   get upload result page request     (server-> client)
 | |
| 	HFS_IPC_UPLOAD_RESULT_DATA_ACK,   ///<   ack of HFS_IPC_UPLOAD_RESULT_DATA
 | |
| 	HFS_IPC_DELETE_RESULT_DATA,       ///<   get delete result page request     (server-> client)
 | |
| 	HFS_IPC_DELETE_RESULT_DATA_ACK,   ///<   ack of HFS_IPC_DELETE_RESULT_DATA
 | |
| 	HFS_IPC_PUT_CUSTOM_DATA,          ///<   get user custom data from client   (server-> client)
 | |
| 	HFS_IPC_PUT_CUSTOM_DATA_ACK,      ///<   ack of HFS_IPC_GET_CUSTOM_DATA
 | |
| 	HFS_IPC_HEADER_CB,                ///<   http header callback to client   (server-> client)
 | |
| 	HFS_IPC_HEADER_CB_ACK,            ///<   ack of HFS_IPC_HEADER_CB
 | |
| 	HFS_IPC_DOWNLOAD_RESULT_DATA,     ///<   get download result page request     (server-> client)
 | |
| 	HFS_IPC_DOWNLOAD_RESULT_DATA_ACK, ///<   ack of HFS_IPC_DOWNLOAD_RESULT_DATA
 | |
| 
 | |
| 
 | |
| 
 | |
| 	HFS_IPC_CLOSE_SERVER   = 0x80,    ///<   close server                       (client-> server)
 | |
| 	HFS_IPC_CLOSE_SERVER_ACK,         ///<   ack of HFS_IPC_CLOSE_SERVER
 | |
| 	HFS_IPC_CLOSE_FINISH,             ///<   close server handshake finish      (client-> server)
 | |
| } HFS_IPC_CMD;
 | |
| 
 | |
| /**
 | |
|     General IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_MSG {
 | |
| 	long      mtype;                  ///<   HFS_IPC_MSG_TYPE
 | |
| 	HFS_U32   uiIPC;                  ///<   HFS_IPC_CMD
 | |
| 	HFS_U32   shareMem;               ///<   share memory address
 | |
| } HFS_IPC_MSG;
 | |
| 
 | |
| /**
 | |
|     Notify IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_NOTIFY_MSG {
 | |
| 	long      mtype;                  ///<   HFS_IPC_MSG_TYPE
 | |
| 	HFS_U32   uiIPC;                  ///<   HFS_IPC_CMD
 | |
| 	HFS_U32   notifyStatus;           ///<   the notify status
 | |
| } HFS_IPC_NOTIFY_MSG;
 | |
| 
 | |
| 
 | |
| #define HFS_IPC_MSGSZ          (sizeof(HFS_IPC_MSG))
 | |
| 
 | |
| /**
 | |
|     Get custom IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_GET_CUSTOM_S {
 | |
| 	HFS_U32   bufAddr;                                      ///<   buffer to put custom data
 | |
| 	HFS_U32   bufSize;                                      ///<   buffer size
 | |
| 	HFS_U32   segmentCount;                                 ///<   the buffer may be not enough to put custom data on time, so need to separate to several segments.
 | |
| 	char      mimeType[CYG_HFS_MIMETYPE_MAXLEN + 1];        ///<   the mimeType of the custom data
 | |
| 	char      path[CYG_HFS_REQUEST_PATH_MAXLEN + 1];        ///<   the url path not inlcude the arguments after the question mark.
 | |
| 	char      argument[CYG_HFS_REQUEST_PATH_MAXLEN + 1];    ///<   the argument passed in the url after the question mark.
 | |
| 	int       returnStatus;                                 ///<   the return value, return CYG_HFS_CB_GETDATA_RETURN_OK means get data ok, CYG_HFS_CB_GETDATA_RETURN_ERROR means get data fail.
 | |
| } HFS_IPC_GET_CUSTOM_S;
 | |
| 
 | |
| /**
 | |
|     Check password IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_CHK_PASSWD_S {
 | |
| 	char      username[CYG_HFS_NAME_MAXLEN + 1];            ///<   user name
 | |
| 	char      password[CYG_HFS_PWD_MAXLEN + 1];             ///<   password
 | |
| 	char      key[CYG_HFS_KEY_MAXLEN + 1];                  ///<   the key that setted in cyg_hfs_open_obj when start hfs.
 | |
| 	char      questionstr[CYG_HFS_REQUEST_PATH_MAXLEN + 1]; ///<   the argument passed in the url after the question mark.
 | |
| 	int       returnStatus;                                 ///<   the return value, return 1 means check password pass, else means fail.
 | |
| } HFS_IPC_CHK_PASSWD_S;
 | |
| 
 | |
| /**
 | |
|     Generate dirlist IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_GEN_DIRLIST_S {
 | |
| 	HFS_U32   bufAddr;                                      ///<   buffer to put dirlist data
 | |
| 	HFS_U32   bufSize;                                      ///<   buffer size
 | |
| 	HFS_U32   segmentCount;                                 ///<   the buffer may be not enough to put custom data on time, so need to separate to several segments.
 | |
| 	char      usr[CYG_HFS_NAME_MAXLEN + 1];                 ///<   user name
 | |
| 	char      pwd[CYG_HFS_PWD_MAXLEN + 1];                  ///<   password
 | |
| 	char      path[CYG_HFS_REQUEST_PATH_MAXLEN + 1];        ///<   the url path not inlcude the arguments after the question mark.
 | |
| 	int       returnStatus;                                 ///<   the return value, return CYG_HFS_LIST_DIR_OK means get data ok, CYG_HFS_LIST_DIR_OPEN_FAIL means get data fail.
 | |
| } HFS_IPC_GEN_DIRLIST_S;
 | |
| 
 | |
| 
 | |
| /**
 | |
|     Client query IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_CLIENT_QUERY_S {
 | |
| 	HFS_U32   bufAddr;                                      ///<   buffer to put data
 | |
| 	HFS_U32   bufSize;                                      ///<   buffer size
 | |
| 	HFS_U32   segmentCount;                                 ///<   the buffer may be not enough to put custom data on time, so need to separate to several segments.
 | |
| 	char      mimeType[CYG_HFS_MIMETYPE_MAXLEN + 1];        ///<   the mimeType of the data
 | |
| 	char      path[CYG_HFS_REQUEST_PATH_MAXLEN + 1];        ///<   the url path not inlcude the arguments after the question mark.
 | |
| 	char      argument[CYG_HFS_REQUEST_PATH_MAXLEN + 1];    ///<   the argument passed in the url after the question mark.
 | |
| 	int       returnStatus;                                 ///<   the return value, return CYG_HFS_CB_GETDATA_RETURN_OK means get data ok, CYG_HFS_CB_GETDATA_RETURN_ERROR means get data fail.
 | |
| } HFS_IPC_CLIENT_QUERY_S;
 | |
| 
 | |
| /**
 | |
|     Upload result IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_UPLOAD_RESULT_S {
 | |
| 	HFS_U32   bufAddr;                                      ///<   buffer to put upload result page data
 | |
| 	HFS_U32   bufSize;                                      ///<   buffer size
 | |
| 	int       uploadResult;                                 ///<   upload result, CYG_HFS_UPLOAD_OK means upload ok else means has some error.
 | |
| 	char      mimeType[CYG_HFS_MIMETYPE_MAXLEN + 1];        ///<   the mimeType of the upload result page data
 | |
| 	int       returnStatus;                                 ///<   the return value, return CYG_HFS_CB_GETDATA_RETURN_OK means get data ok, CYG_HFS_CB_GETDATA_RETURN_ERROR means get data fail.
 | |
| } HFS_IPC_UPLOAD_RESULT_S;
 | |
| 
 | |
| /**
 | |
|     Download result IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_DOWNLOAD_RESULT_S {
 | |
| 	int       downloadResult;                               ///<   download result, CYG_HFS_DOWNLOAD_OK means upload ok else means has some error.
 | |
| 	char      path[CYG_HFS_REQUEST_PATH_MAXLEN + 1];        ///<   the file path that want to download
 | |
| } HFS_IPC_DOWNLOAD_RESULT_S;
 | |
| 
 | |
| /**
 | |
|     Delete result IPC message.
 | |
| 
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_DELETE_RESULT_S {
 | |
| 	HFS_U32   bufAddr;                                      ///<   buffer to put delete result page data
 | |
| 	HFS_U32   bufSize;                                      ///<   buffer size
 | |
| 	int       deleteResult;                                 ///<   delete result, CYG_HFS_DELETE_OK means upload ok else means has some error.
 | |
| 	char      mimeType[CYG_HFS_MIMETYPE_MAXLEN + 1];        ///<   the mimeType of the delete result page data
 | |
| 	int       returnStatus;                                 ///<   the return value, return CYG_HFS_CB_GETDATA_RETURN_OK means get data ok, CYG_HFS_CB_GETDATA_RETURN_ERROR means get data fail.
 | |
| } HFS_IPC_DELETE_RESULT_S;
 | |
| 
 | |
| /**
 | |
|     Put custom IPC message.
 | |
| 
 | |
| */
 | |
| typedef struct _HFS_IPC_PUT_CUSTOM_S {
 | |
| 	HFS_U32         bufAddr;                                      ///<   buffer to put custom data
 | |
| 	HFS_U32         bufSize;                                      ///<   buffer size
 | |
| 	HFS_U32         segmentCount;                                 ///<   the buffer may be not enough to put custom data on time, so need to separate to several segments.
 | |
| 	char            path[CYG_HFS_REQUEST_PATH_MAXLEN + 1];        ///<   the url path not inlcude the arguments after the question mark.
 | |
| 	char            argument[CYG_HFS_REQUEST_PATH_MAXLEN + 1];    ///<   the argument passed in the url after the question mark.
 | |
| 	HFS_PUT_STATUS  putStatus;                                    ///<   HFS put data status
 | |
| 	int             returnStatus;                                 ///<   the return value, return CYG_HFS_CB_GETDATA_RETURN_OK means get data ok, CYG_HFS_CB_GETDATA_RETURN_ERROR means get data fail.
 | |
| } HFS_IPC_PUT_CUSTOM_S;
 | |
| 
 | |
| 
 | |
| /**
 | |
|     HTTP Header IPC message.
 | |
| 
 | |
| */
 | |
| 
 | |
| typedef struct _HFS_IPC_HEADER_S {
 | |
| 	HFS_U32         headerAddr;                                   ///<   buffer to put custom data
 | |
| 	HFS_U32         headerSize;                                   ///<   buffer size
 | |
| 	char            filepath[CYG_HFS_FILE_PATH_MAXLEN + 1];       ///<   the filepath that want to get or set.
 | |
| 	char            mimeType[CYG_HFS_MIMETYPE_MAXLEN + 1];        ///<   the mimeType of get file
 | |
| 	void           *reserved;                                     ///<   reserved parameter
 | |
| 	int             returnStatus;                                 ///<   the return value, return CYG_HFS_CB_HEADER_RETURN_DEFAULT means need to be handle by hfs internal.
 | |
| } HFS_IPC_HEADER_S;
 | |
| 
 | |
| 
 | |
| 
 | |
| #define HFS_IPC_TOKEN_PATH    "hfs"
 | |
| 
 | |
| #ifndef MAKEFOURCC
 | |
| #define MAKEFOURCC(ch0, ch1, ch2, ch3) ((HFS_U32)(HFS_U8)(ch0) | ((HFS_U32)(HFS_U8)(ch1) << 8) | ((HFS_U32)(HFS_U8)(ch2) << 16) | ((HFS_U32)(HFS_U8)(ch3) << 24 ))
 | |
| #endif
 | |
| #define HFS_IPCKEYID   MAKEFOURCC('H','F','S','K')
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C"
 | |
| {
 | |
| #endif
 | |
| /**
 | |
|     Start hfs server.
 | |
| 
 | |
|     @param[in] pObj:  Init info for Hfs.
 | |
| 
 | |
| */
 | |
| extern void cyg_hfs_open(cyg_hfs_open_obj  *pObj);
 | |
| 
 | |
| 
 | |
| /**
 | |
|     Start hfs server by command.
 | |
| 
 | |
|     @param[in] cmd:  Init command for Hfs.
 | |
|       -put         put custom callback
 | |
|       -p           port number
 | |
|       -to          timeout count
 | |
|       -t           thread priority
 | |
|       -r           root path
 | |
|       -s           socket buffer size
 | |
|       -ma          shared memory address
 | |
|       -ms          shared memory size
 | |
|       -w           check password callback
 | |
|       -c           get custom callback
 | |
|       -g           generate dirlist callback
 | |
|       -n           maximum client number
 | |
|       -k           the key passed to check password callback
 | |
|       -q           client query callback
 | |
|       -u           upload result callback
 | |
|       -dl          download result callback
 | |
|       -d           delete result callback
 | |
|       -f           force custom callback
 | |
|       -h           header callback
 | |
| 
 | |
| */
 | |
| extern void cyg_hfs_open2(char *cmd);
 | |
| 
 | |
| /**
 | |
|     Close hfs server.
 | |
| 
 | |
| */
 | |
| extern void cyg_hfs_close(void);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| } //extern "C"
 | |
| #endif
 | |
| 
 | |
| /* ----------------------------------------------------------------- */
 | |
| #endif /* CYGONCE_NET_HFS_H                                          */
 | |
| /* end of hfs.h*/
 | |
| 
 | 
