int DownloadFirmware(char *server_ip, int nPort, char *file_path) { struct sockaddr_in daddr; int sock; int iRet = 0; //char szBuffer[1024] = {"GET /FM/system/TH-sys-48.2.64.178.zip HTTP/1.1\r\nHost:cd.gocam.so\r\nConnection:Close\r\n\r\n"}; char szBuffer[1024] = {0}; struct timeval TimeOut; int nFlag; FILE* file = NULL; int recvlen = 0; sprintf( szBuffer, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection:Close\r\n\r\n", file_path, server_ip ); Textout( "szBuffer = [%s]", szBuffer ); sock = socket( AF_INET, SOCK_STREAM, 0 ); bzero( &daddr, sizeof( struct sockaddr_in ) ); nFlag = 1; setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, ( void* )&nFlag, sizeof( int ) ); TimeOut.tv_sec = 30; TimeOut.tv_usec = 0; setsockopt( sock, SOL_SOCKET, SO_RCVTIMEO, ( char* )&TimeOut, sizeof( TimeOut ) ); if ( iRet != 0 ) { CloseSocket( sock ); return -1; } daddr.sin_family = AF_INET; daddr.sin_port = htons( nPort ); daddr.sin_addr.s_addr = inet_addr( server_ip ); if ( connect( sock, ( struct sockaddr* )&daddr, sizeof( struct sockaddr ) ) == -1 ) { Textout( "connect download server failed\n" ); CloseSocket( sock ); return -1; } send( sock, szBuffer, strlen( szBuffer ), 0 ); DoSystem( "rm -f /tmp/download.bin" ); file = fopen( "/tmp/download.bin", "wb" ); if ( file == NULL ) { printf( "dbg file open failed\n" ); return -1; } while ( 1 ) { iRet = recv( sock, szBuffer, 1024, 0 ); if ( iRet > 0 ) { recvlen += iRet; fwrite( szBuffer, 1, iRet, file ); } else { break; } } printf( "download file recv len=%d\n", recvlen ); fclose( file ); CloseSocket( sock ); ProcessDownloadFile(recvlen); return 0; }
int main(int argc , char *argv[]) { //Parse info if (argc < 4) { std::cout << "Format command invalid\n"; std::cout << "./client \"UploadFile\" (host) (port) (source file) (destination file)\n"; std::cout << "./client \"DownloadFile\" (host) (port) (source file) (destination file)\n"; std::cout << "./client \"UploadDirectory\" (host) (port) (source dir) (destination dir)\n"; std::cout << "./client \"GetListEntry\" (host) (port) (path directory)\n"; std::cout << "./client \"DeleteDirectory\" (host) (port) (path directory)\n"; std::cout << "./client \"GetFileSize\" (host) (port) (path file)\n"; std::cout << "./client \"ReadFile\" (host) (port) (path file) (offset) (buff_size)\n"; std::cout << "./client \"WriteFile\" (host) (port) (path file) (offset) (content)\n"; return 0; } std::string command = argv[1]; std::string host = argv[2]; std::string port = argv[3]; //Connect server int sock; struct sockaddr_in server; //Create socket sock = socket(AF_INET , SOCK_STREAM , 0); if (sock == -1) { printf("Could not create socket"); } puts("Socket created"); server.sin_addr.s_addr = inet_addr(host.c_str()); server.sin_family = AF_INET; server.sin_port = htons( atoi(port.c_str()) ); //Connect to remote server if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0) { perror("connect failed. Error"); return 1; } puts("Connected\n"); // if (command.compare("UploadFile") == 0) { if (argc < 6) { std::cout << "Format command invalid\n"; return 0; } std::string sourceFile = argv[4]; std::string destinationFile = argv[5]; ProcessUploadFile(sock, sourceFile, destinationFile); } else if (command.compare("DownloadFile") == 0) { if (argc < 6) { std::cout << "Format command invalid\n"; return 0; } std::string sourceFile = argv[4]; std::string destinationFile = argv[5]; ProcessDownloadFile(sock, sourceFile, destinationFile); } else if (command.compare("UploadDirectory") == 0) { if (argc < 6) { std::cout << "Format command invalid\n"; return 0; } std::string sourceDir = argv[4]; std::string destinationDir = argv[5]; ProcessUploadDir(host, port, sourceDir, destinationDir); } else if (command.compare("GetListEntry") == 0) { if (argc < 5) { std::cout << "Format command invalid\n"; return 0; } std::string pathDir = argv[4]; ProcessGetListEntry(sock, pathDir); } else if (command.compare("DeleteDirectory") == 0) { if (argc < 5) { std::cout << "Format command invalid\n"; return 0; } std::string pathDir = argv[4]; ProcessDeleteDir(sock, pathDir); } else if (command.compare("GetFileSize") == 0) { if (argc < 5) { std::cout << "Format command invalid\n"; return 0; } std::string pathFile = argv[4]; ProcessGetFileSize(sock, pathFile); } else if (command.compare("ReadFile") == 0) { if (argc < 7) { std::cout << "Format command invalid\n"; return 0; } std::string pathFile = argv[4]; size_t offset = atoi(argv[5]); size_t buff_size = atoi(argv[6]); ProcessReadFile(sock, pathFile, offset, buff_size); } else if (command.compare("WriteFile") == 0) { if (argc < 7) { std::cout << "Format command invalid\n"; return 0; } std::string pathFile = argv[4]; size_t offset = atoi(argv[5]); std::string buffer = argv[6]; ProcessWriteFile(sock, pathFile, offset, buffer); } close(sock); return 0; }