aboutsummaryrefslogtreecommitdiff
path: root/src/peerstore/gnunet-service-peerstore.c
diff options
context:
space:
mode:
authorOmar Tarabai <tarabai@devegypt.com>2014-05-16 12:54:18 +0000
committerOmar Tarabai <tarabai@devegypt.com>2014-05-16 12:54:18 +0000
commitaeaf5c97d7d115d99f30e86be66c622b7a6ebf4f (patch)
tree13e3f037af1fc84188b91e6054153714ad3f631a /src/peerstore/gnunet-service-peerstore.c
parent369811cfb47a51f240c7c4872e29c6eccd21fb0c (diff)
downloadgnunet-aeaf5c97d7d115d99f30e86be66c622b7a6ebf4f.tar.gz
gnunet-aeaf5c97d7d115d99f30e86be66c622b7a6ebf4f.zip
towards peerstore iterate
Diffstat (limited to 'src/peerstore/gnunet-service-peerstore.c')
-rw-r--r--src/peerstore/gnunet-service-peerstore.c58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c
index ad4d68335..be5394ff5 100644
--- a/src/peerstore/gnunet-service-peerstore.c
+++ b/src/peerstore/gnunet-service-peerstore.c
@@ -80,6 +80,37 @@ handle_client_disconnect (void *cls,
80} 80}
81 81
82/** 82/**
83 * Function called by for each matching record.
84 *
85 * @param cls closure
86 * @param peer peer identity
87 * @param sub_system name of the GNUnet sub system responsible
88 * @param value stored value
89 * @param size size of stored value
90 */
91int record_iterator(void *cls,
92 const char *sub_system,
93 const struct GNUNET_PeerIdentity *peer,
94 const char *key,
95 const void *value,
96 size_t size,
97 struct GNUNET_TIME_Absolute expiry)
98{
99 struct GNUNET_SERVER_TransmitContext *tc = cls;
100 struct StoreRecordMessage *srm;
101
102 srm = PEERSTORE_create_record_message(sub_system,
103 peer,
104 key,
105 value,
106 size,
107 expiry,
108 GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE);
109 GNUNET_SERVER_transmit_context_append_message(tc, (const struct GNUNET_MessageHeader *)srm);
110 return GNUNET_YES;
111}
112
113/**
83 * Handle an iterate request from client 114 * Handle an iterate request from client
84 * 115 *
85 * @param cls unused 116 * @param cls unused
@@ -90,7 +121,32 @@ void handle_iterate (void *cls,
90 struct GNUNET_SERVER_Client *client, 121 struct GNUNET_SERVER_Client *client,
91 const struct GNUNET_MessageHeader *message) 122 const struct GNUNET_MessageHeader *message)
92{ 123{
124 struct GNUNET_PEERSTORE_Record *record;
125 struct GNUNET_SERVER_TransmitContext *tc;
93 126
127 record = PEERSTORE_parse_record_message(message);
128 if(NULL == record)
129 {
130 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Malformed iterate request from client\n");
131 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
132 return;
133 }
134 if(NULL == record->sub_system)
135 {
136 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Sub system not supplied in client iterate request\n");
137 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
138 return;
139 }
140 tc = GNUNET_SERVER_transmit_context_create (client);
141 if(GNUNET_OK == db->iterate_records(db->cls,
142 record->sub_system,
143 record->peer,
144 record->key,
145 &record_iterator,
146 tc))
147 {
148
149 }
94} 150}
95 151
96/** 152/**
@@ -134,7 +190,7 @@ void handle_store (void *cls,
134 record->key, 190 record->key,
135 record->value, 191 record->value,
136 record->value_size, 192 record->value_size,
137 GNUNET_TIME_relative_to_absolute(record->lifetime))) 193 record->expiry))
138 { 194 {
139 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK; 195 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK;
140 } 196 }