summaryrefslogtreecommitdiff
path: root/FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h')
-rw-r--r--FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h b/FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h
new file mode 100644
index 000000000..73768040e
--- /dev/null
+++ b/FreeRTOS-Labs/Demo/Common/Demo_IP_Protocols/include/FreeRTOS_server_private.h
@@ -0,0 +1,185 @@
+/*
+ * FreeRTOS+TCP V2.0.3
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * http://aws.amazon.com/freertos
+ * http://www.FreeRTOS.org
+ */
+
+ /*
+ Some code which is common to TCP servers like HTTP and FTP
+*/
+
+#ifndef FREERTOS_SERVER_PRIVATE_H
+#define FREERTOS_SERVER_PRIVATE_H
+
+#define FREERTOS_NO_SOCKET NULL
+
+/* FreeRTOS+FAT */
+#include "ff_stdio.h"
+
+/* Each HTTP server has 1, at most 2 sockets */
+#define HTTP_SOCKET_COUNT 2
+
+/*
+ * ipconfigTCP_COMMAND_BUFFER_SIZE sets the size of:
+ * pcCommandBuffer': a buffer to receive and send TCP commands
+ *
+ * ipconfigTCP_FILE_BUFFER_SIZE sets the size of:
+ * pcFileBuffer' : a buffer to access the file system: read or write data.
+ *
+ * The buffers are both used for FTP as well as HTTP.
+ */
+
+#ifndef ipconfigTCP_COMMAND_BUFFER_SIZE
+ #define ipconfigTCP_COMMAND_BUFFER_SIZE ( 2048 )
+#endif
+
+#ifndef ipconfigTCP_FILE_BUFFER_SIZE
+ #define ipconfigTCP_FILE_BUFFER_SIZE ( 2048 )
+#endif
+
+struct xTCP_CLIENT;
+
+typedef BaseType_t ( * FTCPWorkFunction ) ( struct xTCP_CLIENT * /* pxClient */ );
+typedef void ( * FTCPDeleteFunction ) ( struct xTCP_CLIENT * /* pxClient */ );
+
+#define TCP_CLIENT_FIELDS \
+ enum eSERVER_TYPE eType; \
+ struct xTCP_SERVER *pxParent; \
+ Socket_t xSocket; \
+ const char *pcRootDir; \
+ FTCPWorkFunction fWorkFunction; \
+ FTCPDeleteFunction fDeleteFunction; \
+ struct xTCP_CLIENT *pxNextClient
+
+typedef struct xTCP_CLIENT
+{
+ /* This define contains fields which must come first within each of the client structs */
+ TCP_CLIENT_FIELDS;
+ /* --- Keep at the top --- */
+
+} TCPClient_t;
+
+struct xHTTP_CLIENT
+{
+ /* This define contains fields which must come first within each of the client structs */
+ TCP_CLIENT_FIELDS;
+ /* --- Keep at the top --- */
+
+ const char *pcUrlData;
+ const char *pcRestData;
+ char pcCurrentFilename[ ffconfigMAX_FILENAME ];
+ size_t uxBytesLeft;
+ FF_FILE *pxFileHandle;
+ union {
+ struct {
+ uint32_t
+ bReplySent : 1;
+ };
+ uint32_t ulFlags;
+ } bits;
+};
+
+typedef struct xHTTP_CLIENT HTTPClient_t;
+
+struct xFTP_CLIENT
+{
+ /* This define contains fields which must come first within each of the client structs */
+ TCP_CLIENT_FIELDS;
+ /* --- Keep at the top --- */
+
+ uint32_t ulRestartOffset;
+ uint32_t ulRecvBytes;
+ size_t uxBytesLeft; /* Bytes left to send */
+ uint32_t ulClientIP;
+ TickType_t xStartTime;
+ uint16_t usClientPort;
+ Socket_t xTransferSocket;
+ BaseType_t xTransType;
+ BaseType_t xDirCount;
+ FF_FindData_t xFindData;
+ FF_FILE *pxReadHandle;
+ FF_FILE *pxWriteHandle;
+ char pcCurrentDir[ ffconfigMAX_FILENAME ];
+ char pcFileName[ ffconfigMAX_FILENAME ];
+ char pcConnectionAck[ 128 ];
+ char pcClientAck[ 128 ];
+ union {
+ struct {
+ uint32_t
+ bHelloSent : 1,
+ bLoggedIn : 1,
+ bStatusUser : 1,
+ bInRename : 1,
+ bReadOnly : 1;
+ };
+ uint32_t ulFTPFlags;
+ } bits;
+ union {
+ struct {
+ uint32_t
+ bIsListen : 1, /* pdTRUE for passive data connections (using list()). */
+ bDirHasEntry : 1, /* pdTRUE if ff_findfirst() was successful. */
+ bClientConnected : 1, /* pdTRUE after connect() or accept() has succeeded. */
+ bEmptyFile : 1, /* pdTRUE if a connection-without-data was received. */
+ bHadError : 1; /* pdTRUE if a transfer got aborted because of an error. */
+ };
+ uint32_t ulConnFlags;
+ } bits1;
+};
+
+typedef struct xFTP_CLIENT FTPClient_t;
+
+BaseType_t xHTTPClientWork( TCPClient_t *pxClient );
+BaseType_t xFTPClientWork( TCPClient_t *pxClient );
+
+void vHTTPClientDelete( TCPClient_t *pxClient );
+void vFTPClientDelete( TCPClient_t *pxClient );
+
+BaseType_t xMakeAbsolute( struct xFTP_CLIENT *pxClient, char *pcBuffer, BaseType_t xBufferLength, const char *pcFileName );
+BaseType_t xMakeRelative( FTPClient_t *pxClient, char *pcBuffer, BaseType_t xBufferLength, const char *pcFileName );
+
+struct xTCP_SERVER
+{
+ SocketSet_t xSocketSet;
+ /* A buffer to receive and send TCP commands, either HTTP of FTP. */
+ char pcCommandBuffer[ ipconfigTCP_COMMAND_BUFFER_SIZE ];
+ /* A buffer to access the file system: read or write data. */
+ char pcFileBuffer[ ipconfigTCP_FILE_BUFFER_SIZE ];
+
+ #if( ipconfigUSE_FTP != 0 )
+ char pcNewDir[ ffconfigMAX_FILENAME ];
+ #endif
+ #if( ipconfigUSE_HTTP != 0 )
+ char pcContentsType[40]; /* Space for the msg: "text/javascript" */
+ char pcExtraContents[40]; /* Space for the msg: "Content-Length: 346500" */
+ #endif
+ BaseType_t xServerCount;
+ TCPClient_t *pxClients;
+ struct xSERVER
+ {
+ enum eSERVER_TYPE eType; /* eSERVER_HTTP | eSERVER_FTP */
+ const char *pcRootDir;
+ Socket_t xSocket;
+ } xServers[ 1 ];
+};
+
+#endif /* FREERTOS_SERVER_PRIVATE_H */