diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2016-01-11 16:36:26 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2016-01-11 16:36:26 +0000 |
commit | a393dbd7b27c62ebd101113b361560a477404bf5 (patch) | |
tree | 5dd7983acf8538ffe16bd128fe5a7416f6462a62 /src/identity-provider/identity_provider_api.c | |
parent | 55bc55b5f2046c96e1ae5a1d774c14300cc4b890 (diff) | |
download | gnunet-a393dbd7b27c62ebd101113b361560a477404bf5.tar.gz gnunet-a393dbd7b27c62ebd101113b361560a477404bf5.zip |
- fixes, modify api
Diffstat (limited to 'src/identity-provider/identity_provider_api.c')
-rw-r--r-- | src/identity-provider/identity_provider_api.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/identity-provider/identity_provider_api.c b/src/identity-provider/identity_provider_api.c index f0e91a739..bec0ab742 100644 --- a/src/identity-provider/identity_provider_api.c +++ b/src/identity-provider/identity_provider_api.c | |||
@@ -193,6 +193,9 @@ message_handler (void *cls, | |||
193 | const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm; | 193 | const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm; |
194 | const struct GNUNET_IDENTITY_PROVIDER_ExchangeResultMessage *erm; | 194 | const struct GNUNET_IDENTITY_PROVIDER_ExchangeResultMessage *erm; |
195 | char *str; | 195 | char *str; |
196 | char *ticket_str; | ||
197 | char *token_str; | ||
198 | char *label_str; | ||
196 | uint16_t size; | 199 | uint16_t size; |
197 | 200 | ||
198 | if (NULL == msg) | 201 | if (NULL == msg) |
@@ -214,26 +217,56 @@ message_handler (void *cls, | |||
214 | return; | 217 | return; |
215 | } | 218 | } |
216 | irm = (const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *) msg; | 219 | irm = (const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *) msg; |
217 | str = (char *) &irm[1]; | 220 | str = GNUNET_strdup ((char *) &irm[1]); |
218 | if ( (size > sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) && | 221 | if ( (size > sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) && |
219 | ('\0' != str[size - sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage) - 1]) ) | 222 | ('\0' != str[size - sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage) - 1]) ) |
220 | { | 223 | { |
224 | GNUNET_free (str); | ||
221 | GNUNET_break (0); | 225 | GNUNET_break (0); |
222 | reschedule_connect (h); | 226 | reschedule_connect (h); |
223 | return; | 227 | return; |
224 | } | 228 | } |
225 | if (size == sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) | 229 | if (size == sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage)) |
230 | { | ||
231 | GNUNET_free (str); | ||
226 | str = NULL; | 232 | str = NULL; |
227 | 233 | } | |
234 | label_str = strtok (str, ","); | ||
235 | |||
236 | if (NULL == label_str) | ||
237 | { | ||
238 | GNUNET_free (str); | ||
239 | GNUNET_break (0); | ||
240 | reschedule_connect (h); | ||
241 | return; | ||
242 | } | ||
243 | ticket_str = strtok (NULL, ","); | ||
244 | if (NULL == ticket_str) | ||
245 | { | ||
246 | GNUNET_free (str); | ||
247 | GNUNET_break (0); | ||
248 | reschedule_connect (h); | ||
249 | return; | ||
250 | } | ||
251 | token_str = strtok (NULL, ","); | ||
252 | if (NULL == token_str) | ||
253 | { | ||
254 | GNUNET_free (str); | ||
255 | GNUNET_break (0); | ||
256 | reschedule_connect (h); | ||
257 | return; | ||
258 | } | ||
228 | op = h->op_head; | 259 | op = h->op_head; |
229 | GNUNET_CONTAINER_DLL_remove (h->op_head, | 260 | GNUNET_CONTAINER_DLL_remove (h->op_head, |
230 | h->op_tail, | 261 | h->op_tail, |
231 | op); | 262 | op); |
232 | GNUNET_CLIENT_receive (h->client, &message_handler, h, | 263 | GNUNET_CLIENT_receive (h->client, &message_handler, h, |
233 | GNUNET_TIME_UNIT_FOREVER_REL); | 264 | GNUNET_TIME_UNIT_FOREVER_REL); |
234 | ticket.data = str; | 265 | ticket.data = ticket_str; |
266 | token.data = token_str; | ||
235 | if (NULL != op->iss_cb) | 267 | if (NULL != op->iss_cb) |
236 | op->iss_cb (op->cls, &ticket); | 268 | op->iss_cb (op->cls, label_str, &ticket, &token); |
269 | GNUNET_free (str); | ||
237 | GNUNET_free (op); | 270 | GNUNET_free (op); |
238 | break; | 271 | break; |
239 | case GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_EXCHANGE_RESULT: | 272 | case GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_EXCHANGE_RESULT: |