aboutsummaryrefslogtreecommitdiff
path: root/src/peerstore/peerstore_common.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-09-24 11:58:31 +0000
committerChristian Grothoff <christian@grothoff.org>2016-09-24 11:58:31 +0000
commit3bca0a62abc14e5fe36e1c80ff487e0051dad562 (patch)
tree25a9dc36162d498910f6e41aa85a0d3863e0c1c0 /src/peerstore/peerstore_common.c
parentd02c15600b668a30e091d2c5c59d918bb1e4fee7 (diff)
downloadgnunet-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.c94
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 */
32void 32void
33PEERSTORE_hash_key (const char *sub_system, 33PEERSTORE_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 */
72struct StoreRecordMessage *
73PEERSTORE_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,
131struct GNUNET_MQ_Envelope * 74struct GNUNET_MQ_Envelope *
132PEERSTORE_create_record_mq_envelope (const char *sub_system, 75PEERSTORE_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 */
184struct GNUNET_PEERSTORE_Record * 128struct GNUNET_PEERSTORE_Record *
185PEERSTORE_parse_record_message (const struct GNUNET_MessageHeader *message) 129PEERSTORE_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