From ee62ca14800eb27e51038a78a0dab4f71b6be31f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 24 Apr 2015 17:13:31 +0200 Subject: [FUSE] Integrate into cmake build process --- src/fuse/helper.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/fuse/helper.c (limited to 'src/fuse/helper.c') diff --git a/src/fuse/helper.c b/src/fuse/helper.c new file mode 100644 index 0000000..7b1101d --- /dev/null +++ b/src/fuse/helper.c @@ -0,0 +1,96 @@ +/* + * Helper functions for imageFuse + * by Stephan Schwaer, January 2014 + */ + +#include "helper.h" +void printLog( log_info *info ) +{ + FILE *logFile; + + // Create logfile + + logFile = fopen( "log.txt", "w" ); + if ( logFile == NULL ) { + printf( "Error creating/opening log.txt\n" ); + return; + } + + //rewind(file); + fprintf( logFile, "ImageSize: %"PRIu64" MiB\n", ( uint64_t )( info->imageSize/ ( 1024ll*1024ll ) ) ); + fprintf( logFile, "ReceivedMiB: %"PRIu64" MiB\n", ( uint64_t )( info->receivedBytes/ ( 1024ll*1024ll ) ) ); + fprintf( logFile, "imageBlockCount: %"PRIu64"\n", info->imageBlockCount ); + fprintf( logFile, "Blocksize: 4KiB\n\n" ); + fprintf( logFile, "Block access count:\n" ); + + uint64_t i = 0; + for ( ; i < info->imageBlockCount; i++ ) { + if ( i % 50 == 0 ) { + fprintf( logFile, "\n" ); + } + fprintf( logFile, "%i ", ( int ) info->blockRequestCount[i] ); + } + fprintf( logFile, "\n" ); + fclose( logFile ); +} + +bool sock_printable( struct sockaddr *addr, socklen_t addrLen, char *output, int len ) +{ + char host[100], port[10]; + int ret = getnameinfo( addr, addrLen, host, 100, port, 10, NI_NUMERICHOST | NI_NUMERICSERV ); + if ( ret == 0 ) { + snprintf( output, len, "[%s]:%s", host, port ); + } + return ret == 0; +} + +// TODO: Pretty much same as in server/* +int connect_to_server( char *server_address, int port ) +{ + const int on = 1; + int sock = -1; + struct addrinfo hints, *res, *ptr; + char portStr[6]; + + // Set hints for local addresses. + memset( &hints, 0, sizeof( hints ) ); + hints.ai_flags = AI_PASSIVE; + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + snprintf( portStr, sizeof portStr, "%d", port ); + if ( getaddrinfo( server_address, portStr, &hints, &res ) != 0 || res == NULL ) { + return false; + } + // Attempt to bind to all of the addresses as long as there's room in the poll list + for ( ptr = res; ptr != NULL; ptr = ptr->ai_next ) { + char bla[100]; + if ( !sock_printable( ( struct sockaddr * ) ptr->ai_addr, ptr->ai_addrlen, bla, 100 ) ) { + snprintf( bla, 100, "[invalid]" ); + } + printf( "Trying to connect to %s ", bla ); + sock = socket( ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol ); + if ( sock < 0 ) { + printf( "...cannot create socket, errno=%d\n", errno ); + sock = -1; + continue; + } + setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof( on ) ); + if ( ptr->ai_family == PF_INET6 ) { + setsockopt( sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof( on ) ); + } + if ( connect( sock, ptr->ai_addr, ptr->ai_addrlen ) < 0 ) { + // if ( bind( sock, ptr->ai_addr, ptr->ai_addrlen ) == -1 ) { + printf( "...socket Error, errno=%d\n", errno ); + close( sock ); + sock = -1; + continue; + } else { + printf( "... connecting successful!\n" ); + break; + } + } + + freeaddrinfo( res ); + return sock; +} + -- cgit v1.2.3-55-g7522