aboutsummaryrefslogtreecommitdiff
path: root/src/peerstore/gnunet-service-peerstore.c
diff options
context:
space:
mode:
authorOmar Tarabai <tarabai@devegypt.com>2014-05-13 22:08:22 +0000
committerOmar Tarabai <tarabai@devegypt.com>2014-05-13 22:08:22 +0000
commitdb2ee15ca4302b0e7fa78e318833cd136265b746 (patch)
tree118bf881b689d5f2f42353611e9e132ea128eadb /src/peerstore/gnunet-service-peerstore.c
parent748449cc89a8ef631b8c3c5c3b9168634fc355a5 (diff)
downloadgnunet-db2ee15ca4302b0e7fa78e318833cd136265b746.tar.gz
gnunet-db2ee15ca4302b0e7fa78e318833cd136265b746.zip
PEERSTORE api overhaul
Diffstat (limited to 'src/peerstore/gnunet-service-peerstore.c')
-rw-r--r--src/peerstore/gnunet-service-peerstore.c62
1 files changed, 28 insertions, 34 deletions
diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c
index 837c5ca75..303f25027 100644
--- a/src/peerstore/gnunet-service-peerstore.c
+++ b/src/peerstore/gnunet-service-peerstore.c
@@ -90,65 +90,59 @@ void handle_store (void *cls,
90 const struct GNUNET_MessageHeader *message) 90 const struct GNUNET_MessageHeader *message)
91{ 91{
92 struct StoreRequestMessage *req; 92 struct StoreRequestMessage *req;
93 uint16_t msg_size; 93 uint16_t req_size;
94 uint16_t sub_system_size; 94 uint16_t ss_size;
95 uint16_t key_size;
95 uint16_t value_size; 96 uint16_t value_size;
96 char *sub_system; 97 char *sub_system;
98 char *key;
97 void *value; 99 void *value;
100 uint16_t response_type;
98 struct GNUNET_SERVER_TransmitContext *tc; 101 struct GNUNET_SERVER_TransmitContext *tc;
99 struct StoreResponseMessage *res;
100 char *emsg;
101 size_t emsg_size = 0;
102 char *emsg_dest;
103 102
104 msg_size = ntohs(message->size); 103 req_size = ntohs(message->size);
105 if(msg_size < sizeof(struct StoreRequestMessage)) 104 if(req_size < sizeof(struct StoreRequestMessage))
106 { 105 {
107 GNUNET_break(0); 106 GNUNET_break(0);
108 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 107 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
109 return; 108 return;
110 } 109 }
111 req = (struct StoreRequestMessage *)message; 110 req = (struct StoreRequestMessage *)message;
112 sub_system_size = ntohs(req->sub_system_size); 111 ss_size = ntohs(req->sub_system_size);
112 key_size = ntohs(req->key_size);
113 value_size = ntohs(req->value_size); 113 value_size = ntohs(req->value_size);
114 if(sub_system_size + value_size + sizeof(struct StoreRequestMessage) 114 if(ss_size + key_size + value_size + sizeof(struct StoreRequestMessage)
115 != msg_size) 115 != req_size)
116 { 116 {
117 GNUNET_break(0); 117 GNUNET_break(0);
118 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 118 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
119 return; 119 return;
120 } 120 }
121 sub_system = (char *)&req[1]; 121 sub_system = (char *)&req[1];
122 value = sub_system + sub_system_size; 122 key = sub_system + ss_size;
123 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a store request (size: %lu) for sub system `%s' and peer `%s'\n", 123 value = key + key_size;
124 msg_size, 124 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a store request (size: %lu) for sub system `%s', peer `%s', key `%s'\n",
125 value_size,
126 sub_system,
127 GNUNET_i2s (&req->peer),
128 key);
129 if(GNUNET_OK == db->store_record(db->cls,
125 sub_system, 130 sub_system,
126 GNUNET_i2s (&req->peer));
127 if(GNUNET_OK != db->store_record(db->cls,
128 &req->peer, 131 &req->peer,
129 sub_system, 132 key,
130 value, 133 value,
131 value_size)) 134 value_size))
132 { 135 {
133 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value, sqlite database error."); 136 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK;
134 emsg = _("Failed to store requested value, sqlite database error.");
135 emsg_size = strlen(emsg) + 1;
136 } 137 }
137 res = GNUNET_malloc(sizeof(struct StoreResponseMessage) + emsg_size); 138 else
138 res->emsg_size = htons(emsg_size);
139 res->header.size = htons(sizeof(struct StoreResponseMessage) + emsg_size);
140 res->header.type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT);
141 if(emsg_size > 0)
142 { 139 {
143 res->success = htons(GNUNET_NO); 140 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value, sqlite database error.");
144 emsg_dest = (char *)&res[1]; 141 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_FAIL;
145 memcpy(emsg_dest, emsg, emsg_size);
146 } 142 }
147 else 143
148 res->success = htons(GNUNET_YES);
149 tc = GNUNET_SERVER_transmit_context_create (client); 144 tc = GNUNET_SERVER_transmit_context_create (client);
150 GNUNET_SERVER_transmit_context_append_message(tc, (struct GNUNET_MessageHeader *)res); 145 GNUNET_SERVER_transmit_context_append_data(tc, NULL, 0, response_type);
151 GNUNET_free(res);
152 GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL); 146 GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL);
153 147
154} 148}