diff options
Diffstat (limited to 'src/chat/gnunet-chat.c')
-rw-r--r-- | src/chat/gnunet-chat.c | 354 |
1 files changed, 173 insertions, 181 deletions
diff --git a/src/chat/gnunet-chat.c b/src/chat/gnunet-chat.c index 85d266534..6dba4dda5 100644 --- a/src/chat/gnunet-chat.c +++ b/src/chat/gnunet-chat.c | |||
@@ -44,7 +44,8 @@ static struct GNUNET_CONTAINER_MetaData *meta; | |||
44 | 44 | ||
45 | static struct GNUNET_CHAT_Room *room; | 45 | static struct GNUNET_CHAT_Room *room; |
46 | 46 | ||
47 | static GNUNET_SCHEDULER_TaskIdentifier handle_cmd_task = GNUNET_SCHEDULER_NO_TASK; | 47 | static GNUNET_SCHEDULER_TaskIdentifier handle_cmd_task = |
48 | GNUNET_SCHEDULER_NO_TASK; | ||
48 | 49 | ||
49 | struct ChatCommand | 50 | struct ChatCommand |
50 | { | 51 | { |
@@ -66,12 +67,13 @@ static void | |||
66 | free_user_list () | 67 | free_user_list () |
67 | { | 68 | { |
68 | struct UserList *next; | 69 | struct UserList *next; |
70 | |||
69 | while (NULL != users) | 71 | while (NULL != users) |
70 | { | 72 | { |
71 | next = users->next; | 73 | next = users->next; |
72 | GNUNET_free (users); | 74 | GNUNET_free (users); |
73 | users = next; | 75 | users = next; |
74 | } | 76 | } |
75 | } | 77 | } |
76 | 78 | ||
77 | static int do_help (const char *args, const void *xtra); | 79 | static int do_help (const char *args, const void *xtra); |
@@ -107,7 +109,7 @@ join_cb (void *cls) | |||
107 | static int | 109 | static int |
108 | receive_cb (void *cls, | 110 | receive_cb (void *cls, |
109 | struct GNUNET_CHAT_Room *room, | 111 | struct GNUNET_CHAT_Room *room, |
110 | const GNUNET_HashCode *sender, | 112 | const GNUNET_HashCode * sender, |
111 | const struct GNUNET_CONTAINER_MetaData *member_info, | 113 | const struct GNUNET_CONTAINER_MetaData *member_info, |
112 | const char *message, | 114 | const char *message, |
113 | struct GNUNET_TIME_Absolute timestamp, | 115 | struct GNUNET_TIME_Absolute timestamp, |
@@ -122,43 +124,45 @@ receive_cb (void *cls, | |||
122 | else | 124 | else |
123 | nick = GNUNET_strdup (_("anonymous")); | 125 | nick = GNUNET_strdup (_("anonymous")); |
124 | fmt = NULL; | 126 | fmt = NULL; |
125 | switch ( (int) options) | 127 | switch ((int) options) |
126 | { | 128 | { |
127 | case GNUNET_CHAT_MSG_OPTION_NONE: | 129 | case GNUNET_CHAT_MSG_OPTION_NONE: |
128 | case GNUNET_CHAT_MSG_ANONYMOUS: | 130 | case GNUNET_CHAT_MSG_ANONYMOUS: |
129 | fmt = _("(%s) `%s' said: %s\n"); | 131 | fmt = _("(%s) `%s' said: %s\n"); |
130 | break; | 132 | break; |
131 | case GNUNET_CHAT_MSG_PRIVATE: | 133 | case GNUNET_CHAT_MSG_PRIVATE: |
132 | fmt = _("(%s) `%s' said to you: %s\n"); | 134 | fmt = _("(%s) `%s' said to you: %s\n"); |
133 | break; | 135 | break; |
134 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ANONYMOUS: | 136 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ANONYMOUS: |
135 | fmt = _("(%s) `%s' said to you: %s\n"); | 137 | fmt = _("(%s) `%s' said to you: %s\n"); |
136 | break; | 138 | break; |
137 | case GNUNET_CHAT_MSG_AUTHENTICATED: | 139 | case GNUNET_CHAT_MSG_AUTHENTICATED: |
138 | fmt = _("(%s) `%s' said for sure: %s\n"); | 140 | fmt = _("(%s) `%s' said for sure: %s\n"); |
139 | break; | 141 | break; |
140 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_AUTHENTICATED: | 142 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_AUTHENTICATED: |
141 | fmt = _("(%s) `%s' said to you for sure: %s\n"); | 143 | fmt = _("(%s) `%s' said to you for sure: %s\n"); |
142 | break; | 144 | break; |
143 | case GNUNET_CHAT_MSG_ACKNOWLEDGED: | 145 | case GNUNET_CHAT_MSG_ACKNOWLEDGED: |
144 | fmt = _("(%s) `%s' was confirmed that you received: %s\n"); | 146 | fmt = _("(%s) `%s' was confirmed that you received: %s\n"); |
145 | break; | 147 | break; |
146 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ACKNOWLEDGED: | 148 | case GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ACKNOWLEDGED: |
147 | fmt = _("(%s) `%s' was confirmed that you and only you received: %s\n"); | 149 | fmt = _("(%s) `%s' was confirmed that you and only you received: %s\n"); |
148 | break; | 150 | break; |
149 | case GNUNET_CHAT_MSG_AUTHENTICATED | GNUNET_CHAT_MSG_ACKNOWLEDGED: | 151 | case GNUNET_CHAT_MSG_AUTHENTICATED | GNUNET_CHAT_MSG_ACKNOWLEDGED: |
150 | fmt = _("(%s) `%s' was confirmed that you received from him or her: %s\n"); | 152 | fmt = _("(%s) `%s' was confirmed that you received from him or her: %s\n"); |
151 | break; | 153 | break; |
152 | case GNUNET_CHAT_MSG_AUTHENTICATED | GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ACKNOWLEDGED: | 154 | case GNUNET_CHAT_MSG_AUTHENTICATED | GNUNET_CHAT_MSG_PRIVATE | GNUNET_CHAT_MSG_ACKNOWLEDGED: |
153 | fmt = _("(%s) `%s' was confirmed that you and only you received from him or her: %s\n"); | 155 | fmt = |
154 | break; | 156 | _ |
155 | case GNUNET_CHAT_MSG_OFF_THE_RECORD: | 157 | ("(%s) `%s' was confirmed that you and only you received from him or her: %s\n"); |
156 | fmt = _("(%s) `%s' said off the record: %s\n"); | 158 | break; |
157 | break; | 159 | case GNUNET_CHAT_MSG_OFF_THE_RECORD: |
158 | default: | 160 | fmt = _("(%s) `%s' said off the record: %s\n"); |
159 | fmt = _("(%s) <%s> said using an unknown message type: %s\n"); | 161 | break; |
160 | break; | 162 | default: |
161 | } | 163 | fmt = _("(%s) <%s> said using an unknown message type: %s\n"); |
164 | break; | ||
165 | } | ||
162 | time = GNUNET_STRINGS_absolute_time_to_string (timestamp); | 166 | time = GNUNET_STRINGS_absolute_time_to_string (timestamp); |
163 | fprintf (stdout, fmt, time, nick, message); | 167 | fprintf (stdout, fmt, time, nick, message); |
164 | GNUNET_free (nick); | 168 | GNUNET_free (nick); |
@@ -183,7 +187,7 @@ confirmation_cb (void *cls, | |||
183 | struct GNUNET_CHAT_Room *room, | 187 | struct GNUNET_CHAT_Room *room, |
184 | uint32_t orig_seq_number, | 188 | uint32_t orig_seq_number, |
185 | struct GNUNET_TIME_Absolute timestamp, | 189 | struct GNUNET_TIME_Absolute timestamp, |
186 | const GNUNET_HashCode *receiver) | 190 | const GNUNET_HashCode * receiver) |
187 | { | 191 | { |
188 | char *nick; | 192 | char *nick; |
189 | 193 | ||
@@ -222,40 +226,41 @@ member_list_cb (void *cls, | |||
222 | ? _("`%s' entered the room\n") : _("`%s' left the room\n"), nick); | 226 | ? _("`%s' entered the room\n") : _("`%s' left the room\n"), nick); |
223 | GNUNET_free (nick); | 227 | GNUNET_free (nick); |
224 | if (NULL != member_info) | 228 | if (NULL != member_info) |
229 | { | ||
230 | /* user joining */ | ||
231 | pos = GNUNET_malloc (sizeof (struct UserList)); | ||
232 | pos->next = users; | ||
233 | pos->pkey = *member_id; | ||
234 | pos->ignored = GNUNET_NO; | ||
235 | users = pos; | ||
236 | } | ||
237 | else | ||
238 | { | ||
239 | /* user leaving */ | ||
240 | prev = NULL; | ||
241 | pos = users; | ||
242 | while ((NULL != pos) && | ||
243 | (0 != memcmp (&pos->pkey, | ||
244 | member_id, | ||
245 | sizeof (struct | ||
246 | GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)))) | ||
225 | { | 247 | { |
226 | /* user joining */ | 248 | prev = pos; |
227 | pos = GNUNET_malloc (sizeof (struct UserList)); | 249 | pos = pos->next; |
228 | pos->next = users; | ||
229 | pos->pkey = *member_id; | ||
230 | pos->ignored = GNUNET_NO; | ||
231 | users = pos; | ||
232 | } | 250 | } |
233 | else | 251 | if (NULL == pos) |
234 | { | 252 | { |
235 | /* user leaving */ | 253 | GNUNET_break (0); |
236 | prev = NULL; | 254 | } |
237 | pos = users; | 255 | else |
238 | while ((NULL != pos) && | 256 | { |
239 | (0 != memcmp (&pos->pkey, | 257 | if (NULL == prev) |
240 | member_id, | 258 | users = pos->next; |
241 | sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)))) | ||
242 | { | ||
243 | prev = pos; | ||
244 | pos = pos->next; | ||
245 | } | ||
246 | if (NULL == pos) | ||
247 | { | ||
248 | GNUNET_break (0); | ||
249 | } | ||
250 | else | 259 | else |
251 | { | 260 | prev->next = pos->next; |
252 | if (NULL == prev) | 261 | GNUNET_free (pos); |
253 | users = pos->next; | ||
254 | else | ||
255 | prev->next = pos->next; | ||
256 | GNUNET_free (pos); | ||
257 | } | ||
258 | } | 262 | } |
263 | } | ||
259 | return GNUNET_OK; | 264 | return GNUNET_OK; |
260 | } | 265 | } |
261 | 266 | ||
@@ -282,12 +287,13 @@ do_join (const char *arg, const void *xtra) | |||
282 | &member_list_cb, NULL, | 287 | &member_list_cb, NULL, |
283 | &confirmation_cb, NULL, &me); | 288 | &confirmation_cb, NULL, &me); |
284 | if (NULL == room) | 289 | if (NULL == room) |
285 | { | 290 | { |
286 | fprintf (stdout, _("Could not change username\n")); | 291 | fprintf (stdout, _("Could not change username\n")); |
287 | return GNUNET_SYSERR; | 292 | return GNUNET_SYSERR; |
288 | } | 293 | } |
289 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); | 294 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); |
290 | fprintf (stdout, _("Joining room `%s' as user `%s'...\n"), room_name, my_name); | 295 | fprintf (stdout, _("Joining room `%s' as user `%s'...\n"), room_name, |
296 | my_name); | ||
291 | GNUNET_free (my_name); | 297 | GNUNET_free (my_name); |
292 | return GNUNET_OK; | 298 | return GNUNET_OK; |
293 | } | 299 | } |
@@ -310,8 +316,7 @@ do_nick (const char *msg, const void *xtra) | |||
310 | EXTRACTOR_METATYPE_TITLE, | 316 | EXTRACTOR_METATYPE_TITLE, |
311 | EXTRACTOR_METAFORMAT_UTF8, | 317 | EXTRACTOR_METAFORMAT_UTF8, |
312 | "text/plain", | 318 | "text/plain", |
313 | nickname, | 319 | nickname, strlen (nickname) + 1); |
314 | strlen(nickname)+1); | ||
315 | room = GNUNET_CHAT_join_room (cfg, | 320 | room = GNUNET_CHAT_join_room (cfg, |
316 | nickname, | 321 | nickname, |
317 | meta, | 322 | meta, |
@@ -322,10 +327,10 @@ do_nick (const char *msg, const void *xtra) | |||
322 | &member_list_cb, NULL, | 327 | &member_list_cb, NULL, |
323 | &confirmation_cb, NULL, &me); | 328 | &confirmation_cb, NULL, &me); |
324 | if (NULL == room) | 329 | if (NULL == room) |
325 | { | 330 | { |
326 | fprintf (stdout, _("Could not change username\n")); | 331 | fprintf (stdout, _("Could not change username\n")); |
327 | return GNUNET_SYSERR; | 332 | return GNUNET_SYSERR; |
328 | } | 333 | } |
329 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); | 334 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); |
330 | fprintf (stdout, _("Changed username to `%s'\n"), my_name); | 335 | fprintf (stdout, _("Changed username to `%s'\n"), my_name); |
331 | GNUNET_free (my_name); | 336 | GNUNET_free (my_name); |
@@ -343,15 +348,15 @@ do_names (const char *msg, const void *xtra) | |||
343 | fprintf (stdout, _("Users in room `%s': "), room_name); | 348 | fprintf (stdout, _("Users in room `%s': "), room_name); |
344 | pos = users; | 349 | pos = users; |
345 | while (NULL != pos) | 350 | while (NULL != pos) |
346 | { | 351 | { |
347 | GNUNET_CRYPTO_hash (&pos->pkey, | 352 | GNUNET_CRYPTO_hash (&pos->pkey, |
348 | sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), | 353 | sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), |
349 | &pid); | 354 | &pid); |
350 | name = GNUNET_PSEUDONYM_id_to_name (cfg, &pid); | 355 | name = GNUNET_PSEUDONYM_id_to_name (cfg, &pid); |
351 | fprintf (stdout, "`%s' ", name); | 356 | fprintf (stdout, "`%s' ", name); |
352 | GNUNET_free (name); | 357 | GNUNET_free (name); |
353 | pos = pos->next; | 358 | pos = pos->next; |
354 | } | 359 | } |
355 | fprintf (stdout, "\n"); | 360 | fprintf (stdout, "\n"); |
356 | return GNUNET_OK; | 361 | return GNUNET_OK; |
357 | } | 362 | } |
@@ -361,10 +366,8 @@ static int | |||
361 | do_send (const char *msg, const void *xtra) | 366 | do_send (const char *msg, const void *xtra) |
362 | { | 367 | { |
363 | uint32_t seq; | 368 | uint32_t seq; |
364 | GNUNET_CHAT_send_message (room, | 369 | |
365 | msg, | 370 | GNUNET_CHAT_send_message (room, msg, GNUNET_CHAT_MSG_OPTION_NONE, NULL, &seq); |
366 | GNUNET_CHAT_MSG_OPTION_NONE, | ||
367 | NULL, &seq); | ||
368 | return GNUNET_OK; | 371 | return GNUNET_OK; |
369 | } | 372 | } |
370 | 373 | ||
@@ -379,40 +382,37 @@ do_send_pm (const char *msg, const void *xtra) | |||
379 | struct UserList *pos; | 382 | struct UserList *pos; |
380 | 383 | ||
381 | if (NULL == strstr (msg, " ")) | 384 | if (NULL == strstr (msg, " ")) |
382 | { | 385 | { |
383 | fprintf (stderr, _("Syntax: /msg USERNAME MESSAGE")); | 386 | fprintf (stderr, _("Syntax: /msg USERNAME MESSAGE")); |
384 | return GNUNET_OK; | 387 | return GNUNET_OK; |
385 | } | 388 | } |
386 | user = GNUNET_strdup (msg); | 389 | user = GNUNET_strdup (msg); |
387 | strstr (user, " ")[0] = '\0'; | 390 | strstr (user, " ")[0] = '\0'; |
388 | msg += strlen (user) + 1; | 391 | msg += strlen (user) + 1; |
389 | if (GNUNET_OK != GNUNET_PSEUDONYM_name_to_id (cfg, user, &uid)) | 392 | if (GNUNET_OK != GNUNET_PSEUDONYM_name_to_id (cfg, user, &uid)) |
390 | { | 393 | { |
391 | fprintf (stderr, _("Unknown user `%s'\n"), user); | 394 | fprintf (stderr, _("Unknown user `%s'\n"), user); |
392 | GNUNET_free (user); | 395 | GNUNET_free (user); |
393 | return GNUNET_OK; | 396 | return GNUNET_OK; |
394 | } | 397 | } |
395 | pos = users; | 398 | pos = users; |
396 | while (NULL != pos) | 399 | while (NULL != pos) |
397 | { | 400 | { |
398 | GNUNET_CRYPTO_hash (&pos->pkey, | 401 | GNUNET_CRYPTO_hash (&pos->pkey, |
399 | sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), | 402 | sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), |
400 | &pid); | 403 | &pid); |
401 | if (0 == memcmp (&pid, &uid, sizeof (GNUNET_HashCode))) | 404 | if (0 == memcmp (&pid, &uid, sizeof (GNUNET_HashCode))) |
402 | break; | 405 | break; |
403 | pos = pos->next; | 406 | pos = pos->next; |
404 | } | 407 | } |
405 | if (NULL == pos) | 408 | if (NULL == pos) |
406 | { | 409 | { |
407 | fprintf (stderr, _("User `%s' is currently not in the room!\n"), user); | 410 | fprintf (stderr, _("User `%s' is currently not in the room!\n"), user); |
408 | GNUNET_free (user); | 411 | GNUNET_free (user); |
409 | return GNUNET_OK; | 412 | return GNUNET_OK; |
410 | } | 413 | } |
411 | GNUNET_CHAT_send_message (room, | 414 | GNUNET_CHAT_send_message (room, |
412 | msg, | 415 | msg, GNUNET_CHAT_MSG_PRIVATE, &pos->pkey, &seq); |
413 | GNUNET_CHAT_MSG_PRIVATE, | ||
414 | &pos->pkey, | ||
415 | &seq); | ||
416 | GNUNET_free (user); | 416 | GNUNET_free (user); |
417 | return GNUNET_OK; | 417 | return GNUNET_OK; |
418 | } | 418 | } |
@@ -422,10 +422,9 @@ static int | |||
422 | do_send_sig (const char *msg, const void *xtra) | 422 | do_send_sig (const char *msg, const void *xtra) |
423 | { | 423 | { |
424 | uint32_t seq; | 424 | uint32_t seq; |
425 | |||
425 | GNUNET_CHAT_send_message (room, | 426 | GNUNET_CHAT_send_message (room, |
426 | msg, | 427 | msg, GNUNET_CHAT_MSG_AUTHENTICATED, NULL, &seq); |
427 | GNUNET_CHAT_MSG_AUTHENTICATED, | ||
428 | NULL, &seq); | ||
429 | return GNUNET_OK; | 428 | return GNUNET_OK; |
430 | } | 429 | } |
431 | 430 | ||
@@ -434,10 +433,9 @@ static int | |||
434 | do_send_ack (const char *msg, const void *xtra) | 433 | do_send_ack (const char *msg, const void *xtra) |
435 | { | 434 | { |
436 | uint32_t seq; | 435 | uint32_t seq; |
436 | |||
437 | GNUNET_CHAT_send_message (room, | 437 | GNUNET_CHAT_send_message (room, |
438 | msg, | 438 | msg, GNUNET_CHAT_MSG_ACKNOWLEDGED, NULL, &seq); |
439 | GNUNET_CHAT_MSG_ACKNOWLEDGED, | ||
440 | NULL, &seq); | ||
441 | return GNUNET_OK; | 439 | return GNUNET_OK; |
442 | } | 440 | } |
443 | 441 | ||
@@ -446,10 +444,8 @@ static int | |||
446 | do_send_anonymous (const char *msg, const void *xtra) | 444 | do_send_anonymous (const char *msg, const void *xtra) |
447 | { | 445 | { |
448 | uint32_t seq; | 446 | uint32_t seq; |
449 | GNUNET_CHAT_send_message (room, | 447 | |
450 | msg, | 448 | GNUNET_CHAT_send_message (room, msg, GNUNET_CHAT_MSG_ANONYMOUS, NULL, &seq); |
451 | GNUNET_CHAT_MSG_ANONYMOUS, | ||
452 | NULL, &seq); | ||
453 | return GNUNET_OK; | 449 | return GNUNET_OK; |
454 | } | 450 | } |
455 | 451 | ||
@@ -509,8 +505,8 @@ static struct ChatCommand commands[] = { | |||
509 | {"/help", &do_help, | 505 | {"/help", &do_help, |
510 | gettext_noop ("Use `/help command' to get help for a specific command")}, | 506 | gettext_noop ("Use `/help command' to get help for a specific command")}, |
511 | /* Add standard commands: | 507 | /* Add standard commands: |
512 | /whois (print metadata), | 508 | * /whois (print metadata), |
513 | /ignore (set flag, check on receive!) */ | 509 | * /ignore (set flag, check on receive!) */ |
514 | /* the following three commands must be last! */ | 510 | /* the following three commands must be last! */ |
515 | {"/", &do_unknown, NULL}, | 511 | {"/", &do_unknown, NULL}, |
516 | {"", &do_send, NULL}, | 512 | {"", &do_send, NULL}, |
@@ -522,41 +518,40 @@ static int | |||
522 | do_help (const char *args, const void *xtra) | 518 | do_help (const char *args, const void *xtra) |
523 | { | 519 | { |
524 | int i; | 520 | int i; |
521 | |||
525 | i = 0; | 522 | i = 0; |
526 | while ((NULL != args) && | 523 | while ((NULL != args) && |
527 | (0 != strlen (args)) && (commands[i].Action != &do_help)) | 524 | (0 != strlen (args)) && (commands[i].Action != &do_help)) |
525 | { | ||
526 | if (0 == strncasecmp (&args[1], &commands[i].command[1], strlen (args) - 1)) | ||
528 | { | 527 | { |
529 | if (0 == | 528 | fprintf (stdout, "%s\n", gettext (commands[i].helptext)); |
530 | strncasecmp (&args[1], &commands[i].command[1], strlen (args) - 1)) | 529 | return GNUNET_OK; |
531 | { | ||
532 | fprintf (stdout, "%s\n", gettext (commands[i].helptext)); | ||
533 | return GNUNET_OK; | ||
534 | } | ||
535 | i++; | ||
536 | } | 530 | } |
531 | i++; | ||
532 | } | ||
537 | i = 0; | 533 | i = 0; |
538 | fprintf (stdout, "Available commands:"); | 534 | fprintf (stdout, "Available commands:"); |
539 | while (commands[i].Action != &do_help) | 535 | while (commands[i].Action != &do_help) |
540 | { | 536 | { |
541 | fprintf (stdout, " %s", gettext (commands[i].command)); | 537 | fprintf (stdout, " %s", gettext (commands[i].command)); |
542 | i++; | 538 | i++; |
543 | } | 539 | } |
544 | fprintf (stdout, "\n"); | 540 | fprintf (stdout, "\n"); |
545 | fprintf (stdout, "%s\n", gettext (commands[i].helptext)); | 541 | fprintf (stdout, "%s\n", gettext (commands[i].helptext)); |
546 | return GNUNET_OK; | 542 | return GNUNET_OK; |
547 | } | 543 | } |
548 | 544 | ||
549 | 545 | ||
550 | static void | 546 | static void |
551 | do_stop_task (void *cls, | 547 | do_stop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
552 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
553 | { | 548 | { |
554 | GNUNET_CHAT_leave_room (room); | 549 | GNUNET_CHAT_leave_room (room); |
555 | if (handle_cmd_task != GNUNET_SCHEDULER_NO_TASK) | 550 | if (handle_cmd_task != GNUNET_SCHEDULER_NO_TASK) |
556 | { | 551 | { |
557 | GNUNET_SCHEDULER_cancel (handle_cmd_task); | 552 | GNUNET_SCHEDULER_cancel (handle_cmd_task); |
558 | handle_cmd_task = GNUNET_SCHEDULER_NO_TASK; | 553 | handle_cmd_task = GNUNET_SCHEDULER_NO_TASK; |
559 | } | 554 | } |
560 | free_user_list (); | 555 | free_user_list (); |
561 | GNUNET_CONTAINER_meta_data_destroy (meta); | 556 | GNUNET_CONTAINER_meta_data_destroy (meta); |
562 | GNUNET_free (room_name); | 557 | GNUNET_free (room_name); |
@@ -591,10 +586,9 @@ handle_command (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
591 | 586 | ||
592 | next: | 587 | next: |
593 | handle_cmd_task = | 588 | handle_cmd_task = |
594 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, | 589 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply |
595 | 100), | 590 | (GNUNET_TIME_UNIT_MILLISECONDS, 100), |
596 | &handle_command, | 591 | &handle_command, NULL); |
597 | NULL); | ||
598 | return; | 592 | return; |
599 | 593 | ||
600 | out: | 594 | out: |
@@ -614,8 +608,7 @@ out: | |||
614 | static void | 608 | static void |
615 | run (void *cls, | 609 | run (void *cls, |
616 | char *const *args, | 610 | char *const *args, |
617 | const char *cfgfile, | 611 | const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) |
618 | const struct GNUNET_CONFIGURATION_Handle *c) | ||
619 | { | 612 | { |
620 | GNUNET_HashCode me; | 613 | GNUNET_HashCode me; |
621 | char *my_name; | 614 | char *my_name; |
@@ -623,11 +616,11 @@ run (void *cls, | |||
623 | cfg = c; | 616 | cfg = c; |
624 | /* check arguments */ | 617 | /* check arguments */ |
625 | if (NULL == nickname) | 618 | if (NULL == nickname) |
626 | { | 619 | { |
627 | fprintf (stderr, _("You must specify a nickname\n")); | 620 | fprintf (stderr, _("You must specify a nickname\n")); |
628 | ret = -1; | 621 | ret = -1; |
629 | return; | 622 | return; |
630 | } | 623 | } |
631 | if (NULL == room_name) | 624 | if (NULL == room_name) |
632 | room_name = GNUNET_strdup ("gnunet"); | 625 | room_name = GNUNET_strdup ("gnunet"); |
633 | meta = GNUNET_CONTAINER_meta_data_create (); | 626 | meta = GNUNET_CONTAINER_meta_data_create (); |
@@ -636,8 +629,7 @@ run (void *cls, | |||
636 | EXTRACTOR_METATYPE_TITLE, | 629 | EXTRACTOR_METATYPE_TITLE, |
637 | EXTRACTOR_METAFORMAT_UTF8, | 630 | EXTRACTOR_METAFORMAT_UTF8, |
638 | "text/plain", | 631 | "text/plain", |
639 | nickname, | 632 | nickname, strlen (nickname) + 1); |
640 | strlen(nickname)+1); | ||
641 | room = GNUNET_CHAT_join_room (cfg, | 633 | room = GNUNET_CHAT_join_room (cfg, |
642 | nickname, | 634 | nickname, |
643 | meta, | 635 | meta, |
@@ -648,24 +640,23 @@ run (void *cls, | |||
648 | &member_list_cb, NULL, | 640 | &member_list_cb, NULL, |
649 | &confirmation_cb, NULL, &me); | 641 | &confirmation_cb, NULL, &me); |
650 | if (NULL == room) | 642 | if (NULL == room) |
651 | { | 643 | { |
652 | fprintf (stderr, _("Failed to join room `%s'\n"), room_name); | 644 | fprintf (stderr, _("Failed to join room `%s'\n"), room_name); |
653 | GNUNET_free (room_name); | 645 | GNUNET_free (room_name); |
654 | GNUNET_free (nickname); | 646 | GNUNET_free (nickname); |
655 | GNUNET_CONTAINER_meta_data_destroy (meta); | 647 | GNUNET_CONTAINER_meta_data_destroy (meta); |
656 | ret = -1; | 648 | ret = -1; |
657 | return; | 649 | return; |
658 | } | 650 | } |
659 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); | 651 | my_name = GNUNET_PSEUDONYM_id_to_name (cfg, &me); |
660 | fprintf (stdout, _("Joining room `%s' as user `%s'...\n"), room_name, my_name); | 652 | fprintf (stdout, _("Joining room `%s' as user `%s'...\n"), room_name, |
653 | my_name); | ||
661 | GNUNET_free (my_name); | 654 | GNUNET_free (my_name); |
662 | handle_cmd_task = | 655 | handle_cmd_task = |
663 | GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI, | 656 | GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI, |
664 | &handle_command, | 657 | &handle_command, NULL); |
665 | NULL); | ||
666 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, | 658 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, |
667 | &do_stop_task, | 659 | &do_stop_task, NULL); |
668 | NULL); | ||
669 | } | 660 | } |
670 | 661 | ||
671 | 662 | ||
@@ -680,6 +671,7 @@ int | |||
680 | main (int argc, char *const *argv) | 671 | main (int argc, char *const *argv) |
681 | { | 672 | { |
682 | int flags; | 673 | int flags; |
674 | |||
683 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { | 675 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { |
684 | {'n', "nick", "NAME", | 676 | {'n', "nick", "NAME", |
685 | gettext_noop ("set the nickname to use (required)"), | 677 | gettext_noop ("set the nickname to use (required)"), |