Example #1
0
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;
}
Example #2
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;
}