Vodafone Test Suite
Dependencies: mbed-rtos mbed HTTPClient VodafoneUSBModem
Tests/Test14.h
- Committer:
- ashleymills
- Date:
- 2012-11-01
- Revision:
- 67:a61d60fa342c
- Parent:
- 66:6b00a764e549
- Child:
- 69:4fc3b0ad12c7
File content as of revision 67:a61d60fa342c:
#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; };