summaryrefslogtreecommitdiff
path: root/lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c')
m---------lib/lufa0
-rw-r--r--lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c163
2 files changed, 0 insertions, 163 deletions
diff --git a/lib/lufa b/lib/lufa
new file mode 160000
+Subproject ce10f7642b0459e409839b23cc91498945119b4
diff --git a/lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c b/lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c
deleted file mode 100644
index 4500a4b781..0000000000
--- a/lib/lufa/Projects/Webserver/Lib/TELNETServerApp.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2017.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaims all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * TELNET Webserver Application. When connected to the uIP stack,
- * this will serve out raw TELNET to the client on port 23.
- */
-
-#define INCLUDE_FROM_TELNETSERVERAPP_C
-#include "TELNETServerApp.h"
-
-#if defined(ENABLE_TELNET_SERVER) || defined(__DOXYGEN__)
-
-/** Welcome message to send to a TELNET client when a connection is first made. */
-const char PROGMEM WelcomeHeader[] = "********************************************\r\n"
- "* LUFA uIP Webserver (TELNET) *\r\n"
- "********************************************\r\n";
-
-/** Main TELNET menu, giving the user the list of available commands they may issue */
-const char PROGMEM TELNETMenu[] = "\r\n"
- " == Available Commands: ==\r\n"
- " c) List Active TCP Connections\r\n"
- " =========================\r\n"
- "\r\n>";
-
-/** Header to print before the current connections are printed to the client */
-const char PROGMEM CurrentConnectionsHeader[] = "\r\n* Current TCP Connections: *\r\n";
-
-/** Initialization function for the simple TELNET webserver. */
-void TELNETServerApp_Init(void)
-{
- /* Listen on port 23 for TELNET connections from hosts */
- uip_listen(HTONS(TELNET_SERVER_PORT));
-}
-
-/** uIP stack application callback for the TELNET server. This function must be called each time the
- * TCP/IP stack needs a TCP packet to be processed.
- */
-void TELNETServerApp_Callback(void)
-{
- uip_tcp_appstate_t* const AppState = &uip_conn->appstate;
- char* const AppData = (char*)uip_appdata;
-
- if (uip_connected())
- {
- /* New connection - initialize connection state values */
- AppState->TELNETServer.CurrentState = TELNET_STATE_SendHeader;
- }
-
- if (uip_acked())
- {
- /* Progress to the next state once the current state's data has been ACKed */
- AppState->TELNETServer.CurrentState = AppState->TELNETServer.NextState;
- }
-
- if (uip_rexmit() || uip_acked() || uip_newdata() || uip_connected() || uip_poll())
- {
- switch (AppState->TELNETServer.CurrentState)
- {
- case TELNET_STATE_SendHeader:
- /* Copy over and send the TELNET welcome message upon first connection */
- strcpy_P(AppData, WelcomeHeader);
- uip_send(AppData, strlen(AppData));
-
- AppState->TELNETServer.NextState = TELNET_STATE_SendMenu;
- break;
- case TELNET_STATE_SendMenu:
- /* Copy over and send the TELNET menu to the client */
- strcpy_P(AppData, TELNETMenu);
- uip_send(AppData, strlen(AppData));
-
- AppState->TELNETServer.NextState = TELNET_STATE_GetCommand;
- break;
- case TELNET_STATE_GetCommand:
- if (!(uip_datalen()))
- break;
-
- /* Save the issued command for later processing */
- AppState->TELNETServer.IssuedCommand = AppData[0];
-
- AppState->TELNETServer.CurrentState = TELNET_STATE_SendResponse;
- break;
- case TELNET_STATE_SendResponse:
- /* Determine which command was issued, perform command processing */
- switch (AppState->TELNETServer.IssuedCommand)
- {
- case 'c':
- TELNETServerApp_DisplayTCPConnections();
- break;
- default:
- strcpy_P(AppData, PSTR("Invalid Command.\r\n"));
- uip_send(AppData, strlen(AppData));
- break;
- }
-
- AppState->TELNETServer.NextState = TELNET_STATE_SendMenu;
- break;
- }
- }
-}
-
-/** Sends a list of active TCP connections to the TELNET client. */
-static void TELNETServerApp_DisplayTCPConnections(void)
-{
- char* const AppData = (char*)uip_appdata;
-
- strcpy_P(AppData, CurrentConnectionsHeader);
-
- uint16_t ResponseLen = strlen(AppData);
- uint8_t ActiveConnCount = 0;
-
- /* Loop through the complete uIP TCP connections list, looking for active connections */
- for (uint8_t i = 0; i < UIP_CONNS; i++)
- {
- struct uip_conn* CurrConnection = &uip_conns[i];
-
- /* If the connection is not closed, it is active and must be added to the out buffer */
- if (CurrConnection->tcpstateflags != UIP_CLOSED)
- {
- /* Add the current connection's details to the out buffer */
- ResponseLen += sprintf_P(&AppData[ResponseLen], PSTR("%u) %d.%d.%d.%d (Local Port %u <=> Remote Port %u)\r\n"),
- ++ActiveConnCount,
- CurrConnection->ripaddr.u8[0],
- CurrConnection->ripaddr.u8[1],
- CurrConnection->ripaddr.u8[2],
- CurrConnection->ripaddr.u8[3],
- HTONS(CurrConnection->lport), HTONS(CurrConnection->rport));
- }
- }
-
- uip_send(AppData, ResponseLen);
-}
-
-#endif
-