diff options
| author | sr | 2012-09-01 18:08:27 +0200 |
|---|---|---|
| committer | sr | 2012-09-01 18:08:27 +0200 |
| commit | 3e992e066c6aeb3972758a2304cccbdba024c31e (patch) | |
| tree | b7d31b75002d5b6edd3c18b884eebf08346828ac /src/server/ipc.c | |
| parent | [SERVER] Added soft and hard timeouts for image deletion: reject any new clie... (diff) | |
| download | dnbd3-3e992e066c6aeb3972758a2304cccbdba024c31e.tar.gz dnbd3-3e992e066c6aeb3972758a2304cccbdba024c31e.tar.xz dnbd3-3e992e066c6aeb3972758a2304cccbdba024c31e.zip | |
[KERNEL] Tell server whether we're a client or a server in proxy mode
[KERNEL] SysFS: Return empty string for current_server if not connected
[SERVER] Code refactoring
Diffstat (limited to 'src/server/ipc.c')
| -rw-r--r-- | src/server/ipc.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/server/ipc.c b/src/server/ipc.c index ebc907b..37ca36f 100644 --- a/src/server/ipc.c +++ b/src/server/ipc.c @@ -364,7 +364,8 @@ static int ipc_receive(int client_sock) GSList *iterator = NULL; struct tm *timeinfo; - char time_buff[64], rid[20], ipaddr[100]; +#define STRBUFLEN 100 + char strbuffer[STRBUFLEN]; dnbd3_ipc_t header; @@ -428,18 +429,27 @@ static int ipc_receive(int client_sock) for (iterator = _dnbd3_images; iterator; iterator = iterator->next) { const dnbd3_image_t *image = iterator->data; - sprintf(rid, "%d", image->rid); - timeinfo = localtime(&image->atime); - strftime(time_buff, 64, "%d.%m.%y %H:%M:%S", timeinfo); tmp_node = xmlNewNode(NULL, BAD_CAST "image"); if (tmp_node == NULL) goto get_info_reply_cleanup; xmlNewProp(tmp_node, BAD_CAST "name", BAD_CAST image->config_group); - xmlNewProp(tmp_node, BAD_CAST "atime", BAD_CAST time_buff); - xmlNewProp(tmp_node, BAD_CAST "rid", BAD_CAST rid); + timeinfo = localtime(&image->atime); + strftime(strbuffer, STRBUFLEN, "%d.%m.%y %H:%M:%S", timeinfo); + xmlNewProp(tmp_node, BAD_CAST "atime", BAD_CAST strbuffer); + sprintf(strbuffer, "%d", image->rid); + xmlNewProp(tmp_node, BAD_CAST "rid", BAD_CAST strbuffer); xmlNewProp(tmp_node, BAD_CAST "file", BAD_CAST image->file); - xmlNewProp(tmp_node, BAD_CAST "servers", BAD_CAST "???"); - xmlNewProp(tmp_node, BAD_CAST "cache", BAD_CAST image->cache_file); + xmlNewProp(tmp_node, BAD_CAST "servers", BAD_CAST "???"); // TODO + if (image->cache_file && image->cache_map) + { + xmlNewProp(tmp_node, BAD_CAST "cachefile", BAD_CAST image->cache_file); + int i, complete = 0, size = IMGSIZE_TO_MAPBYTES(image->filesize); + for (i = 0; i < size; ++i) + if (image->cache_map[i]) + complete += 100; + sprintf(strbuffer, "%d", complete / size); + xmlNewProp(tmp_node, BAD_CAST "cachefill", BAD_CAST image->cache_file); + } xmlAddChild(images_node, tmp_node); } // Clients @@ -455,9 +465,9 @@ static int ipc_receive(int client_sock) tmp_node = xmlNewNode(NULL, BAD_CAST "client"); if (tmp_node == NULL) goto get_info_reply_cleanup; - *ipaddr = '\0'; - inet_ntop(client->addrtype, client->ipaddr, ipaddr, 100); - xmlNewProp(tmp_node, BAD_CAST "ip", BAD_CAST ipaddr); + *strbuffer = '\0'; + inet_ntop(client->addrtype, client->ipaddr, strbuffer, STRBUFLEN); + xmlNewProp(tmp_node, BAD_CAST "ip", BAD_CAST strbuffer); xmlNewProp(tmp_node, BAD_CAST "file", BAD_CAST client->image->file); xmlAddChild(clients_node, tmp_node); } |
