1
0
mirror of https://github.com/elua/elua.git synced 2025-01-25 01:02:54 +08:00

more fixes in the TELNET code

This commit is contained in:
Bogdan Marinescu 2011-12-12 00:10:19 +02:00
parent d5d0618f50
commit 5eb1f51e2d
3 changed files with 9 additions and 7 deletions

View File

@ -1,9 +1,13 @@
- the aborted/timedout/closed condition in elua_uip_appcall is called more than once for the same socket ? add logs and check
x the aborted/timedout/closed condition in elua_uip_appcall is called more than once for the same socket ? add logs and check
x this seems to be a problem with PuTTY only, Windows and Linux 'telnet' commands do not exhibit this behaviour
- does the telnet socket need to be buffered? might be if there are clients that send data char by char (check Windows)
- test telnet thoroughly
- what happens with a TCP socket state when the connection is closed from the remote end for whatever reason? are the buffers freed?
- check if calling the uIP mainloop at only 2Hz is the right thing to do; doesn't this violate uIP's internal timeout mechanism?
- is uip_forced_poll used properly in uip.c ? what's the point of forced_poll anyway ?
- add per socket callbacks for remote close events (and maybe other error conditions)
- add C/Lua interrupts for different socket events: data received, socket closed, network link up/down ...
- the socket without buffers OR callback should probably be completely removed; the Lua side will only be able to create sockets with buffers?
- clean elua_uip.c after testing:
- remove #ifdef/#define BUILD_CON_TCP at start of file
- uncomment #ifndef in elua_uip_log

View File

@ -33,7 +33,6 @@ static p_elua_net_state_cb elua_uip_state_cb;
#define TCPIP_LOG_BUFSIZE 80
#ifdef TCPIP_LOGS
const char *elua_uip_log_header = "[elua_uip] ";
static void elua_uip_log( const char *fmt, ... )
{
@ -41,15 +40,12 @@ static void elua_uip_log( const char *fmt, ... )
va_start( ap, fmt );
#ifndef BUILD_CON_TCP
printf( elua_uip_log_header );
vprintf( fmt, ap );
#else // #ifndef BUILD_CON_TCP
unsigned i;
char dstr[ TCPIP_LOG_BUFSIZE + 1 ];
vsnprintf( dstr, TCPIP_LOG_BUFSIZE, fmt, ap );
for( i = 0; i < strlen( elua_uip_log_header ); i ++ )
platform_uart_send( CON_UART_ID, elua_uip_log_header[ i ] );
for( i = 0; i < strlen( dstr ); i ++ )
{
if( dstr[ i ] == '\n' )

View File

@ -30,9 +30,9 @@ static unsigned stdh_telnet_handle_input( char *buf, unsigned buflen )
{
int skip;
char *pdata = buf;
unsigned datalen = buflen;
int datalen = buflen;
while( ( pdata < buf + buflen ) && datalen )
while( ( pdata < buf + buflen ) && datalen > 0 )
{
if( *pdata != TELNET_IAC_CHAR ) // regular char, skip it
pdata ++;
@ -52,6 +52,8 @@ static unsigned stdh_telnet_handle_input( char *buf, unsigned buflen )
}
else if( pdata[ 1 ] == TELNET_EOF ) // replace with EOF, remove one char from input
*pdata ++ = STD_CTRLZ_CODE;
else // assume that next character must be consumed anyway
skip = 2;
datalen -= skip;
memmove( pdata, pdata + skip, datalen - ( pdata - buf ) );
}