diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-09-24 11:58:31 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-09-24 11:58:31 +0000 |
commit | 3bca0a62abc14e5fe36e1c80ff487e0051dad562 (patch) | |
tree | 25a9dc36162d498910f6e41aa85a0d3863e0c1c0 /src/peerstore/peerstore_common.c | |
parent | d02c15600b668a30e091d2c5c59d918bb1e4fee7 (diff) | |
download | gnunet-3bca0a62abc14e5fe36e1c80ff487e0051dad562.tar.gz gnunet-3bca0a62abc14e5fe36e1c80ff487e0051dad562.zip |
migrate peerstore to new service MQ API
Diffstat (limited to 'src/peerstore/peerstore_common.c')
-rw-r--r-- | src/peerstore/peerstore_common.c | 94 |
1 files changed, 10 insertions, 84 deletions
diff --git a/src/peerstore/peerstore_common.c b/src/peerstore/peerstore_common.c index 07d43db2e..d12c4e21e 100644 --- a/src/peerstore/peerstore_common.c +++ b/src/peerstore/peerstore_common.c | |||
@@ -31,7 +31,8 @@ | |||
31 | */ | 31 | */ |
32 | void | 32 | void |
33 | PEERSTORE_hash_key (const char *sub_system, | 33 | PEERSTORE_hash_key (const char *sub_system, |
34 | const struct GNUNET_PeerIdentity *peer, const char *key, | 34 | const struct GNUNET_PeerIdentity *peer, |
35 | const char *key, | ||
35 | struct GNUNET_HashCode *ret) | 36 | struct GNUNET_HashCode *ret) |
36 | { | 37 | { |
37 | size_t sssize; | 38 | size_t sssize; |
@@ -58,64 +59,6 @@ PEERSTORE_hash_key (const char *sub_system, | |||
58 | 59 | ||
59 | 60 | ||
60 | /** | 61 | /** |
61 | * Creates a record message ready to be sent | ||
62 | * | ||
63 | * @param sub_system sub system string | ||
64 | * @param peer Peer identity (can be NULL) | ||
65 | * @param key record key string (can be NULL) | ||
66 | * @param value record value BLOB (can be NULL) | ||
67 | * @param value_size record value size in bytes (set to 0 if value is NULL) | ||
68 | * @param expiry absolute time after which the record expires | ||
69 | * @param msg_type message type to be set in header | ||
70 | * @return pointer to record message struct | ||
71 | */ | ||
72 | struct StoreRecordMessage * | ||
73 | PEERSTORE_create_record_message (const char *sub_system, | ||
74 | const struct GNUNET_PeerIdentity *peer, | ||
75 | const char *key, const void *value, | ||
76 | size_t value_size, | ||
77 | struct GNUNET_TIME_Absolute *expiry, | ||
78 | uint16_t msg_type) | ||
79 | { | ||
80 | struct StoreRecordMessage *srm; | ||
81 | size_t ss_size; | ||
82 | size_t key_size; | ||
83 | size_t request_size; | ||
84 | void *dummy; | ||
85 | |||
86 | ss_size = strlen (sub_system) + 1; | ||
87 | if (NULL == key) | ||
88 | key_size = 0; | ||
89 | else | ||
90 | key_size = strlen (key) + 1; | ||
91 | request_size = | ||
92 | sizeof (struct StoreRecordMessage) + ss_size + key_size + value_size; | ||
93 | srm = GNUNET_malloc (request_size); | ||
94 | srm->header.size = htons (request_size); | ||
95 | srm->header.type = htons (msg_type); | ||
96 | srm->key_size = htons (key_size); | ||
97 | if (NULL != expiry) | ||
98 | srm->expiry = *expiry; | ||
99 | if (NULL == peer) | ||
100 | srm->peer_set = htons (GNUNET_NO); | ||
101 | else | ||
102 | { | ||
103 | srm->peer_set = htons (GNUNET_YES); | ||
104 | srm->peer = *peer; | ||
105 | } | ||
106 | srm->sub_system_size = htons (ss_size); | ||
107 | srm->value_size = htons (value_size); | ||
108 | dummy = &srm[1]; | ||
109 | GNUNET_memcpy (dummy, sub_system, ss_size); | ||
110 | dummy += ss_size; | ||
111 | GNUNET_memcpy (dummy, key, key_size); | ||
112 | dummy += key_size; | ||
113 | GNUNET_memcpy (dummy, value, value_size); | ||
114 | return srm; | ||
115 | } | ||
116 | |||
117 | |||
118 | /** | ||
119 | * Creates a MQ envelope for a single record | 62 | * Creates a MQ envelope for a single record |
120 | * | 63 | * |
121 | * @param sub_system sub system string | 64 | * @param sub_system sub system string |
@@ -131,7 +74,8 @@ PEERSTORE_create_record_message (const char *sub_system, | |||
131 | struct GNUNET_MQ_Envelope * | 74 | struct GNUNET_MQ_Envelope * |
132 | PEERSTORE_create_record_mq_envelope (const char *sub_system, | 75 | PEERSTORE_create_record_mq_envelope (const char *sub_system, |
133 | const struct GNUNET_PeerIdentity *peer, | 76 | const struct GNUNET_PeerIdentity *peer, |
134 | const char *key, const void *value, | 77 | const char *key, |
78 | const void *value, | ||
135 | size_t value_size, | 79 | size_t value_size, |
136 | struct GNUNET_TIME_Absolute *expiry, | 80 | struct GNUNET_TIME_Absolute *expiry, |
137 | enum GNUNET_PEERSTORE_StoreOption options, | 81 | enum GNUNET_PEERSTORE_StoreOption options, |
@@ -178,13 +122,12 @@ PEERSTORE_create_record_mq_envelope (const char *sub_system, | |||
178 | /** | 122 | /** |
179 | * Parses a message carrying a record | 123 | * Parses a message carrying a record |
180 | * | 124 | * |
181 | * @param message the actual message | 125 | * @param srm the actual message |
182 | * @return Pointer to record or NULL if error | 126 | * @return Pointer to record or NULL if error |
183 | */ | 127 | */ |
184 | struct GNUNET_PEERSTORE_Record * | 128 | struct GNUNET_PEERSTORE_Record * |
185 | PEERSTORE_parse_record_message (const struct GNUNET_MessageHeader *message) | 129 | PEERSTORE_parse_record_message (const struct StoreRecordMessage *srm) |
186 | { | 130 | { |
187 | struct StoreRecordMessage *srm; | ||
188 | struct GNUNET_PEERSTORE_Record *record; | 131 | struct GNUNET_PEERSTORE_Record *record; |
189 | uint16_t req_size; | 132 | uint16_t req_size; |
190 | uint16_t ss_size; | 133 | uint16_t ss_size; |
@@ -192,37 +135,20 @@ PEERSTORE_parse_record_message (const struct GNUNET_MessageHeader *message) | |||
192 | uint16_t value_size; | 135 | uint16_t value_size; |
193 | char *dummy; | 136 | char *dummy; |
194 | 137 | ||
195 | req_size = ntohs (message->size); | 138 | req_size = ntohs (srm->header.size) - sizeof (*srm); |
196 | if (req_size < sizeof (struct StoreRecordMessage)) | ||
197 | { | ||
198 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
199 | "Received message with invalid size: (%d < %d).\n", | ||
200 | (int) req_size, | ||
201 | (int) sizeof (struct StoreRecordMessage)); | ||
202 | return NULL; | ||
203 | } | ||
204 | srm = (struct StoreRecordMessage *) message; | ||
205 | ss_size = ntohs (srm->sub_system_size); | 139 | ss_size = ntohs (srm->sub_system_size); |
206 | key_size = ntohs (srm->key_size); | 140 | key_size = ntohs (srm->key_size); |
207 | value_size = ntohs (srm->value_size); | 141 | value_size = ntohs (srm->value_size); |
208 | if (ss_size + key_size + value_size + sizeof (struct StoreRecordMessage) != | 142 | if (ss_size + key_size + value_size != req_size) |
209 | req_size) | ||
210 | { | 143 | { |
211 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 144 | GNUNET_break (0); |
212 | "Received message with invalid sizes: (%d + %d + %d + %d != %d).\n", | ||
213 | ss_size, | ||
214 | key_size, | ||
215 | value_size, | ||
216 | (int) sizeof (struct StoreRecordMessage), | ||
217 | req_size); | ||
218 | return NULL; | 145 | return NULL; |
219 | } | 146 | } |
220 | record = GNUNET_new (struct GNUNET_PEERSTORE_Record); | 147 | record = GNUNET_new (struct GNUNET_PEERSTORE_Record); |
221 | if (GNUNET_YES == ntohs (srm->peer_set)) | 148 | if (GNUNET_YES == ntohs (srm->peer_set)) |
222 | { | 149 | { |
223 | record->peer = GNUNET_new (struct GNUNET_PeerIdentity); | 150 | record->peer = GNUNET_new (struct GNUNET_PeerIdentity); |
224 | 151 | *record->peer = srm->peer; | |
225 | GNUNET_memcpy (record->peer, &srm->peer, sizeof (struct GNUNET_PeerIdentity)); | ||
226 | } | 152 | } |
227 | record->expiry = GNUNET_new (struct GNUNET_TIME_Absolute); | 153 | record->expiry = GNUNET_new (struct GNUNET_TIME_Absolute); |
228 | 154 | ||