diff options
author | Omar Tarabai <tarabai@devegypt.com> | 2014-05-13 22:08:22 +0000 |
---|---|---|
committer | Omar Tarabai <tarabai@devegypt.com> | 2014-05-13 22:08:22 +0000 |
commit | db2ee15ca4302b0e7fa78e318833cd136265b746 (patch) | |
tree | 118bf881b689d5f2f42353611e9e132ea128eadb /src/peerstore/gnunet-service-peerstore.c | |
parent | 748449cc89a8ef631b8c3c5c3b9168634fc355a5 (diff) | |
download | gnunet-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.c | 62 |
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 | } |