|
Message
From: cvs at opencores.org<cvs@o...>
Date: Sat Apr 28 21:12:09 CEST 2007
Subject: [cvs-checkins] MODIFIED: mlite ...
Date: 00/07/04 28:21:12 Modified: mlite/kernel netutil.c Log: Added http get telnet option Revision Changes Path 1.2 mlite/kernel/netutil.c http://www.opencores.org/cvsweb.shtml/mlite/kernel/netutil.c.diff?r1=1.1&r2=1.2 (In the diff below, changes in quantity of whitespace are not shown.) Index: netutil.c =================================================================== RCS file: /cvsroot/rhoads/mlite/kernel/netutil.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- netutil.c 26 Apr 2007 01:31:22 -0000 1.1 +++ netutil.c 28 Apr 2007 19:12:06 -0000 1.2 @@ -541,7 +541,7 @@ //******************* Console ************************ -static uint8 myBuffer[1024*3]; +static uint8 myBuffer[1024*3], myString[80]; IPSocket *socketTelnet; @@ -585,7 +585,7 @@ v1 /= v2; } sprintf((char*)myBuffer, "%d\r\n", v1); - IPPrintf(socket, myBuffer); + IPPrintf(socket, (char*)myBuffer); } @@ -596,6 +596,8 @@ IPClose(socket); if(socket2) IPPrintf(socket2, "Ping Reply\r\n"); + else + printf("Ping Reply\n"); } @@ -604,6 +606,7 @@ char buf[80]; IPSocket *socketTelnet = arg; IPSocket *socketPing; + (void)socket; sprintf(buf, "ip=%d.%d.%d.%d\r\n", (uint8)(ip >> 24), (uint8)(ip >> 16), (uint8)(ip >> 8), (uint8)ip); IPPrintf(socketTelnet, buf); @@ -679,16 +682,65 @@ } +static void TelnetHttpCallback(IPSocket *socket) +{ + int length; + if(myString[0]) + IPPrintf(socket, myString); + myString[0] = 0; + length = strlen(myBuffer); + length += IPRead(socket, myBuffer+length, sizeof(myBuffer)-length-1); + myBuffer[length] = 0; + if(length >= sizeof(myBuffer)-1 || socket->state > IP_TCP) + { + IPClose(socket); + IPPrintf(socketTelnet, "Done\r\n"); + } +} + +static void TelnetHttp(IPSocket *socket, char *command) +{ + char buf[80], name[80]; + int ip0, ip1, ip2, ip3; + IPSocket *socketHttp; + if(strlen(command) < 5) + { + IPPrintf(socket, "http #.#.#.# File\r\n"); + return; + } + sscanf(command, "%s %d.%d.%d.%d %s %s %s", + buf, &ip0, &ip1, &ip2, &ip3, name); + ip0 = (ip0 << 24) | (ip1 << 16) | (ip2 << 8) | ip3; + socketTelnet = socket; + sprintf(myString, "GET %s HTTP/1.0\r\n\r\n", name); + myBuffer[0] = 0; + socketHttp = IPOpen(IP_MODE_TCP, ip0, 80, TelnetHttpCallback); +} + + static void TelnetShow(IPSocket *socket, char *command) { - (char)command; - IPPrintf(socket, myBuffer); + int i; + (void)command;
+ // Insert '\r' before '\n'
+ for(i = 0; myBuffer[i] && i < sizeof(myBuffer); ++i)
+ {
+ if(myBuffer[i] == '\n' && myBuffer[i-1] != '\r')
+ {
+ memcpy(myBuffer+i+1, myBuffer+i, sizeof(myBuffer)-2-i);
+ myBuffer[i] = '\r';
+ }
+ }
+ myBuffer[sizeof(myBuffer)-1] = 0;
+ IPPrintf(socket, (char*)myBuffer);
IPPrintf(socket, "\r\n");
}
static void TelnetClear(IPSocket *socket, char *command)
{
+ (void)socket;
+ (void)command;
memset(myBuffer, 0, sizeof(myBuffer));
}
@@ -699,6 +751,7 @@
"ping", 0, TelnetPing,
"ftp", 0, TelnetFtp,
"tftp", 0, TelnetTftp,
+ "http", 0, TelnetHttp,
"show", 0, TelnetShow,
"clear", 0, TelnetClear,
NULL, 0, NULL
|
 |