summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorsr2013-07-25 22:00:10 +0200
committersr2013-07-25 22:00:10 +0200
commit706ef832d30d2797103d5a49e9e4f4ee0a509411 (patch)
tree7e5051374c9717017473a7397e8e233ee38868e1 /src/server/net.c
parentImplement CRC-32 list generation; fix quick CRC-32 check on image loading (diff)
downloaddnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.tar.gz
dnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.tar.xz
dnbd3-706ef832d30d2797103d5a49e9e4f4ee0a509411.zip
...Working on proxy mode...
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/src/server/net.c b/src/server/net.c
index ac82116..16b202f 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -61,7 +61,7 @@ static inline char recv_request_header(int sock, dnbd3_request_t *request)
return FALSE;
}
#ifdef _DEBUG
- if (_fake_delay) usleep(_fake_delay);
+ if ( _fake_delay ) usleep( _fake_delay );
#endif
return TRUE;
}
@@ -125,19 +125,19 @@ void *net_client_handler(void *dnbd3_client)
uint16_t rid, client_version;
/*
- char map_x, bit_mask;
- uint64_t map_y;
- uint64_t todo_size = 0;
- uint64_t todo_offset = 0;
- uint64_t cur_offset = 0;
- uint64_t last_offset = 0;
- */
+ char map_x, bit_mask;
+ uint64_t map_y;
+ uint64_t todo_size = 0;
+ uint64_t todo_offset = 0;
+ uint64_t cur_offset = 0;
+ uint64_t last_offset = 0;
+ */
dnbd3_server_entry_t server_list[NUMBER_SERVERS];
// Set to zero to make valgrind happy
- memset(&reply, 0, sizeof(reply));
- memset(&payload, 0, sizeof(payload));
+ memset( &reply, 0, sizeof(reply) );
+ memset( &payload, 0, sizeof(payload) );
reply.magic = dnbd3_packet_magic;
// Receive first packet. This must be CMD_SELECT_IMAGE by protocol specification
@@ -337,7 +337,17 @@ void *net_client_handler(void *dnbd3_client)
break;
case CMD_SET_CLIENT_MODE:
- client->is_server = FALSE;
+ image->atime = time( NULL );
+ break;
+
+ case CMD_GET_CRC32:
+ reply.cmd = CMD_GET_CRC32;
+ if ( image->crc32 == NULL ) {
+ reply.size = 0;
+ } else {
+ reply.size = IMGSIZE_TO_HASHBLOCKS(image->filesize) * 4;
+ }
+ send_reply( client->sock, &reply, image->crc32 );
break;
default:
@@ -347,19 +357,19 @@ void *net_client_handler(void *dnbd3_client)
}
/*
- // Check for messages that have been queued from another thread
- while ( client->sendqueue != NULL ) {
- dnbd3_binstring_t *message = NULL;
- spin_lock( &client->lock );
- if ( client->sendqueue != NULL ) {
- message = client->sendqueue->data;
- client->sendqueue = g_slist_remove( client->sendqueue, message );
- }
- spin_unlock( &client->lock );
- send_data( client->sock, message->data, message->len );
- free( message );
- }
- */
+ // Check for messages that have been queued from another thread
+ while ( client->sendqueue != NULL ) {
+ dnbd3_binstring_t *message = NULL;
+ spin_lock( &client->lock );
+ if ( client->sendqueue != NULL ) {
+ message = client->sendqueue->data;
+ client->sendqueue = g_slist_remove( client->sendqueue, message );
+ }
+ spin_unlock( &client->lock );
+ send_data( client->sock, message->data, message->len );
+ free( message );
+ }
+ */
}
}