lwIP Robustness Test.
Dependencies: EthernetInterface mbed-rtos mbed
main.cpp
- Committer:
- tass
- Date:
- 2013-07-24
- Revision:
- 0:cdcf1e7c5b86
File content as of revision 0:cdcf1e7c5b86:
#include "mbed.h"
#include "EthernetInterface.h"
#define msgdbg(...)
//#define msgdbg printf
#define SENDING_RETRIES 5u
#define READING_RETRIES 5u
#define DHCP_RETRIES 10u
#define BUFFER_SIZE 256
#define NUMBER_OF_HOSTS 3u
#define MBED_HOST "www.mbed.org"
#define MBED_HOST_REQUEST "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n"
#define MEDIAFAX_HOST "www.mediafax.ro"
#define MEDIAFAX_HOST_REQUEST "GET / HTTP/1.1\nHost: www.mediafax.ro\n\n"
#define NXP_HOST "www.nxp.com"
#define NXP_HOST_REQUEST "GET /documents/user_manual/UM10360.pdf HTTP/1.0\nHost: www.nxp.com\n\n"
int totalTime = 0;
extern uint32_t os_time;
struct WebStats
{
char request[70];
char host[20];
int avgDuration;
int maxReceived;
int minReceived;
int snapshots;
};
struct WebStats webStatistics[NUMBER_OF_HOSTS]=
{
{MBED_HOST_REQUEST,MBED_HOST,0,0,0x7FFFFFFF,0},
{MEDIAFAX_HOST_REQUEST,MEDIAFAX_HOST,0,0,0x7FFFFFFF,0},
{NXP_HOST_REQUEST,NXP_HOST,0,0,0x7FFFFFFF,0}
};
void printStatistics(void)
{
printf("\nTotal Time : %f seconds\n",(float)totalTime/1000.0f);
for(int i=0;i<NUMBER_OF_HOSTS;i++)
{
printf("Host number : %d | %s\n",i, webStatistics[i].host);
printf("MaxRecv : %d\n",webStatistics[i].maxReceived);
printf("MinRecv : %d\n",webStatistics[i].minReceived);
printf("Avg duration : %d ms\n",webStatistics[i].avgDuration);
printf("Total snapshots : %d\n\n",webStatistics[i].snapshots);
}
}
int main() {
int retries = 0;
EthernetInterface eth;
TCPSocketConnection client;
printf("Initialising...\n");
// use DHCP
eth.init();
// attempt DHCP and if timing out then try again
while (eth.connect()) {
retries++;
printf("[%d] DHCP timeout %d\n",os_time,retries);
if(retries >= DHCP_RETRIES)
{
printf("DHCP failed. Bailing out..\n");
goto failure;
}
};
printf("[%d] Starting the robustness test...\n",os_time);
while(1)
{
for(int i=0;i<NUMBER_OF_HOSTS;i++,client.close())
{
int retries = 0;
int received = 0;
int time = 0;
char tmpBuffer[BUFFER_SIZE];
int ret;
printf("Mbed --> %s\n",webStatistics[i].host);
time = os_time;
// connecting
if (client.connect(webStatistics[i].host, 80)) {
printf("Failed to connect to : %s\n",webStatistics[i].host);
continue;
}
retries = 0;
// sending request
while(1)
{
if( (ret = client.send_all(webStatistics[i].request,strlen(webStatistics[i].request))) <= 0)
{
printf("Retry sending no %d, return :%d\n",retries,ret);
retries++;
}
else break;
if(retries == SENDING_RETRIES+1)
{
printf("Failed sending. Bailing out this connection\n");
continue;
}
}
retries = 0;
// start reading
while(true)
{
if( (ret = client.receive(tmpBuffer,sizeof(tmpBuffer))) <= 0)
retries++;
else
received += ret;
if(retries == READING_RETRIES)
break;
}
//Snapshot!
time = os_time - time;
if(webStatistics[i].maxReceived < received)
{
webStatistics[i].maxReceived = received;
}
if(webStatistics[i].minReceived > received)
{
webStatistics[i].minReceived = received;
}
printf("Received : %d bytes\n",received);
webStatistics[i].avgDuration = ((webStatistics[i].avgDuration *(webStatistics[i].snapshots++) ) + time)/webStatistics[i].snapshots;
totalTime += time;
}
printStatistics();
Thread::wait(500);
}
failure:
printf("Fatal error. Main thread is inactive\n");
while(1);
}
TASS Belgium