Vodafone Test Suite
Dependencies: mbed-rtos mbed HTTPClient VodafoneUSBModem
Diff: Tests/Test14.h
- Revision:
- 67:a61d60fa342c
- Parent:
- 66:6b00a764e549
- Child:
- 69:4fc3b0ad12c7
--- a/Tests/Test14.h Thu Nov 01 11:19:47 2012 +0000 +++ b/Tests/Test14.h Thu Nov 01 15:49:08 2012 +0000 @@ -0,0 +1,139 @@ +#pragma once +#include "VodafoneTestCase.h" +#include "TestHelper.h" +#include "socket.h" + +extern const char *gTest14Description; + +class Test14 : public VodafoneTestCase { + public: + Test14(VodafoneUSBModem *m) : VodafoneTestCase(m) {} + private: + + virtual void setupTest(){} + + virtual bool executeTest() { + char urlBuffer[125],socketBuffer[256],strBytesToSend[32]; + bool outcome = true; + int sockfd = NULL, socketBufferLength = 256, ret = -1; + int bytesToSend = 128, nextBytesToSend = 128; + unsigned char currentChar = 0; + float timeOut = 1800; // half an hour + + LOG("Description: %s",gTest14Description); + LOG("Connecting to internet"); + if(_modem->connect("internet","web","web")==0) { + LOG("Connected to internet"); + } else { + LOG("Failed to connect to internet"); + _modem->disconnect(); + return false; + } + + Timer t; + for(int i=0; i<14; i++) { + LOG("Doing upload for %d bytes",nextBytesToSend); + // connect to socket and push message + if(!connectToSocket("109.74.199.96",7777,&sockfd)) { + LOG("Error connecting to socket"); + _modem->disconnect(); + return false; + } + + // send password + write(sockfd,"7834_0hf093",11); + + ret = ::recv(sockfd,socketBuffer,socketBufferLength,0); + socketBuffer[3] = 0x00; + if(ret<0||strcmp(socketBuffer,"ACK")!=0) { + LOG("Got :\"%s\"",socketBuffer); + LOG("Error receiving ACK."); + close(sockfd); + _modem->disconnect(); + return false; + } + + // send file size + sprintf(strBytesToSend,"%d",bytesToSend); + write(sockfd,strBytesToSend,strlen(strBytesToSend)); + + // get ACK + if(read(sockfd,socketBuffer,256)<=0) { + LOG("Timeout or error waiting for ack\r\n"); + close(sockfd); + _modem->disconnect(); + return false; + } + + socketBuffer[3] = 0x00; + if(strcmp(socketBuffer,"ACK")!=0) { + LOG("Failure to receive ACK\r\n"); + close(sockfd); + _modem->disconnect(); + return false; + } + + // sending file + t.reset(); + t.start(); + int bytesSent = 0, currentBufferSize = 0; + currentChar = 0; + while(bytesToSend&&t.read()<timeOut) { + if(bytesToSend<socketBufferLength) { + currentBufferSize = bytesToSend; + } else { + currentBufferSize = socketBufferLength; + } + + for(int i=0; i<currentBufferSize; i++) { + socketBuffer[i] = currentChar; + currentChar++; + } + + if(write(sockfd,socketBuffer,currentBufferSize)!=currentBufferSize) { + LOG("Failure sending present buffer, failed at %d\r\n",bytesToSend); + close(sockfd); + _modem->disconnect(); + return false; + } + bytesToSend -= currentBufferSize; + } + t.stop(); + + if(t.read()>=timeOut) { + LOG("Timeout when uploading file"); + close(sockfd); + _modem->disconnect(); + return false; + } + + // wait for confirm + if(read(sockfd,socketBuffer,256)<=0) { + LOG("Timeout or error waiting for ack\r\n"); + close(sockfd); + _modem->disconnect(); + return false; + } + + socketBuffer[3] = 0x00; + if(strcmp(socketBuffer,"ACK")!=0) { + LOG("Failure to receive ACK\r\n"); + close(sockfd); + _modem->disconnect(); + return false; + } + LOG(" DONE. Sent %d bytes in %f seconds for an average of %f kb/s", + nextBytesToSend,t.read(),((float)nextBytesToSend/1000.0)/t.read()); + close(sockfd); + + nextBytesToSend*=2; + bytesToSend = nextBytesToSend; + } + + _modem->disconnect(); + return true; + } + + virtual void endTest() {} + char *_ussdResponse; +}; \ No newline at end of file