diff options
author | Omar Tarabai <tarabai@devegypt.com> | 2014-05-16 12:54:18 +0000 |
---|---|---|
committer | Omar Tarabai <tarabai@devegypt.com> | 2014-05-16 12:54:18 +0000 |
commit | aeaf5c97d7d115d99f30e86be66c622b7a6ebf4f (patch) | |
tree | 13e3f037af1fc84188b91e6054153714ad3f631a /src/peerstore/gnunet-service-peerstore.c | |
parent | 369811cfb47a51f240c7c4872e29c6eccd21fb0c (diff) | |
download | gnunet-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.c | 58 |
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 | */ | ||
91 | int 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 | } |