diff options
author | Gabor X Toth <*@tg-x.net> | 2016-05-11 22:11:06 +0000 |
---|---|---|
committer | Gabor X Toth <*@tg-x.net> | 2016-05-11 22:11:06 +0000 |
commit | d22568f1f9147e3d8ea96f2c4592985702b2eab9 (patch) | |
tree | f6e829e31d18d49fe2a73b91449ee35b8450a68b /src/social/gnunet-social.c | |
parent | df87fe209a93062875caa4ea78a601bed0777db0 (diff) | |
download | gnunet-d22568f1f9147e3d8ea96f2c4592985702b2eab9.tar.gz gnunet-d22568f1f9147e3d8ea96f2c4592985702b2eab9.zip |
social cli: --host-assign option
Diffstat (limited to 'src/social/gnunet-social.c')
-rw-r--r-- | src/social/gnunet-social.c | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/src/social/gnunet-social.c b/src/social/gnunet-social.c index 97c6d7bda..fcf75d595 100644 --- a/src/social/gnunet-social.c +++ b/src/social/gnunet-social.c | |||
@@ -52,6 +52,9 @@ static int op_host_leave; | |||
52 | /** --host-announce */ | 52 | /** --host-announce */ |
53 | static int op_host_announce; | 53 | static int op_host_announce; |
54 | 54 | ||
55 | /** --host-assign */ | ||
56 | static int op_host_assign; | ||
57 | |||
55 | /** --guest-enter */ | 58 | /** --guest-enter */ |
56 | static int op_guest_enter; | 59 | static int op_guest_enter; |
57 | 60 | ||
@@ -106,9 +109,9 @@ static int opt_deny; | |||
106 | /** --method */ | 109 | /** --method */ |
107 | static char *opt_method; | 110 | static char *opt_method; |
108 | 111 | ||
109 | /** --body */ | 112 | /** --data */ |
110 | // FIXME: should come from STDIN | 113 | // FIXME: should come from STDIN |
111 | static char *opt_body; | 114 | static char *opt_data; |
112 | 115 | ||
113 | /** --name */ | 116 | /** --name */ |
114 | static char *opt_name; | 117 | static char *opt_name; |
@@ -283,7 +286,7 @@ guest_leave () | |||
283 | } | 286 | } |
284 | 287 | ||
285 | 288 | ||
286 | /* ANNOUNCE / TALK */ | 289 | /* ANNOUNCE / ASSIGN / TALK */ |
287 | 290 | ||
288 | 291 | ||
289 | struct TransmitClosure | 292 | struct TransmitClosure |
@@ -310,7 +313,7 @@ notify_data (void *cls, uint16_t *data_size, void *data) | |||
310 | 313 | ||
311 | if (0 == tmit->size) | 314 | if (0 == tmit->size) |
312 | { | 315 | { |
313 | if (op_host_announce || op_guest_talk) | 316 | if (op_host_announce || op_host_assign || op_guest_talk) |
314 | { | 317 | { |
315 | exit_success (); | 318 | exit_success (); |
316 | } | 319 | } |
@@ -339,6 +342,19 @@ host_announce (const char *method, const char *data, size_t data_size) | |||
339 | GNUNET_SOCIAL_ANNOUNCE_NONE); | 342 | GNUNET_SOCIAL_ANNOUNCE_NONE); |
340 | } | 343 | } |
341 | 344 | ||
345 | static void | ||
346 | host_assign (const char *name, const char *data, size_t data_size) | ||
347 | { | ||
348 | struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create (); | ||
349 | GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN, | ||
350 | name, data, data_size); | ||
351 | |||
352 | tmit = (struct TransmitClosure) {}; | ||
353 | GNUNET_SOCIAL_host_announce (hst, "_assign", env, | ||
354 | notify_data, &tmit, | ||
355 | GNUNET_SOCIAL_ANNOUNCE_NONE); | ||
356 | } | ||
357 | |||
342 | 358 | ||
343 | static void | 359 | static void |
344 | guest_talk (const char *method, | 360 | guest_talk (const char *method, |
@@ -727,6 +743,11 @@ host_enter () | |||
727 | static void | 743 | static void |
728 | place_reconnected () | 744 | place_reconnected () |
729 | { | 745 | { |
746 | static int first_run = GNUNET_YES; | ||
747 | if (GNUNET_NO == first_run) | ||
748 | return; | ||
749 | first_run = GNUNET_NO; | ||
750 | |||
730 | if (op_replay) { | 751 | if (op_replay) { |
731 | history_replay (opt_start, opt_until, opt_method); | 752 | history_replay (opt_start, opt_until, opt_method); |
732 | } | 753 | } |
@@ -754,7 +775,10 @@ host_reconnected (void *cls, int result, | |||
754 | host_leave (); | 775 | host_leave (); |
755 | } | 776 | } |
756 | else if (op_host_announce) { | 777 | else if (op_host_announce) { |
757 | host_announce (opt_method, opt_body, strlen (opt_body)); | 778 | host_announce (opt_method, opt_data, strlen (opt_data)); |
779 | } | ||
780 | else if (op_host_assign) { | ||
781 | host_assign (opt_name, opt_data, strlen (opt_data) + 1); | ||
758 | } | 782 | } |
759 | else { | 783 | else { |
760 | place_reconnected (); | 784 | place_reconnected (); |
@@ -774,7 +798,7 @@ guest_reconnected (void *cls, int result, | |||
774 | guest_leave (); | 798 | guest_leave (); |
775 | } | 799 | } |
776 | else if (op_guest_talk) { | 800 | else if (op_guest_talk) { |
777 | guest_talk (opt_method, opt_body, strlen (opt_body)); | 801 | guest_talk (opt_method, opt_data, strlen (opt_data)); |
778 | } | 802 | } |
779 | else { | 803 | else { |
780 | place_reconnected (); | 804 | place_reconnected (); |
@@ -841,7 +865,7 @@ app_recv_host (void *cls, | |||
841 | "Host: %s\n", host_pub_str); | 865 | "Host: %s\n", host_pub_str); |
842 | GNUNET_free (host_pub_str); | 866 | GNUNET_free (host_pub_str); |
843 | 867 | ||
844 | if ((op_host_reconnect || op_host_leave || op_host_announce | 868 | if ((op_host_reconnect || op_host_leave || op_host_announce || op_host_assign |
845 | || op_replay || op_replay_latest | 869 | || op_replay || op_replay_latest |
846 | || op_look_at || op_look_for) | 870 | || op_look_at || op_look_for) |
847 | && 0 == memcmp (&place_pub_key, host_pub_key, sizeof (*host_pub_key))) | 871 | && 0 == memcmp (&place_pub_key, host_pub_key, sizeof (*host_pub_key))) |
@@ -942,14 +966,16 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
942 | 966 | ||
943 | if (!opt_method) | 967 | if (!opt_method) |
944 | opt_method = "message"; | 968 | opt_method = "message"; |
945 | if (!opt_body) | 969 | if (!opt_data) |
946 | opt_body = ""; | 970 | opt_data = ""; |
947 | if (!opt_name) | 971 | if (!opt_name) |
948 | opt_name = ""; | 972 | opt_name = ""; |
949 | 973 | ||
950 | if (! (op_status | 974 | if (! (op_status |
951 | || op_host_enter || op_host_reconnect || op_host_leave || op_host_announce | 975 | || op_host_enter || op_host_reconnect || op_host_leave |
952 | || op_guest_enter || op_guest_reconnect || op_guest_leave || op_guest_talk | 976 | || op_host_announce || op_host_assign |
977 | || op_guest_enter || op_guest_reconnect | ||
978 | || op_guest_leave || op_guest_talk | ||
953 | || op_replay || op_replay_latest | 979 | || op_replay || op_replay_latest |
954 | || op_look_at || op_look_for)) | 980 | || op_look_at || op_look_for)) |
955 | { | 981 | { |
@@ -961,7 +987,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
961 | timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, timeout, NULL); | 987 | timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, timeout, NULL); |
962 | } | 988 | } |
963 | 989 | ||
964 | if ((op_host_reconnect || op_host_leave || op_host_announce | 990 | if ((op_host_reconnect || op_host_leave || op_host_announce || op_host_assign |
965 | || op_guest_reconnect || (op_guest_enter && !opt_gns) | 991 | || op_guest_reconnect || (op_guest_enter && !opt_gns) |
966 | || op_guest_leave || op_guest_talk | 992 | || op_guest_leave || op_guest_talk |
967 | || op_replay || op_replay_latest | 993 | || op_replay || op_replay_latest |
@@ -1013,6 +1039,10 @@ main (int argc, char *const *argv) | |||
1013 | 1039 | ||
1014 | /* operations */ | 1040 | /* operations */ |
1015 | 1041 | ||
1042 | { 'A', "host-assign", NULL, | ||
1043 | gettext_noop ("assign --name in state to --data"), | ||
1044 | GNUNET_NO, &GNUNET_GETOPT_set_one, &op_host_assign }, | ||
1045 | |||
1016 | { 'B', "guest-leave", NULL, | 1046 | { 'B', "guest-leave", NULL, |
1017 | gettext_noop ("say good-bye and leave somebody else's place"), | 1047 | gettext_noop ("say good-bye and leave somebody else's place"), |
1018 | GNUNET_NO, &GNUNET_GETOPT_set_one, &op_guest_leave }, | 1048 | GNUNET_NO, &GNUNET_GETOPT_set_one, &op_guest_leave }, |
@@ -1072,9 +1102,9 @@ main (int argc, char *const *argv) | |||
1072 | gettext_noop ("application ID to use when connecting"), | 1102 | gettext_noop ("application ID to use when connecting"), |
1073 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_app }, | 1103 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_app }, |
1074 | 1104 | ||
1075 | { 'b', "body", "MESSAGE_BODY", | 1105 | { 'd', "data", "DATA", |
1076 | gettext_noop ("message body to transmit"), | 1106 | gettext_noop ("message body or state value"), |
1077 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_body }, | 1107 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_data }, |
1078 | 1108 | ||
1079 | { 'e', "ego", "NAME|PUBKEY", | 1109 | { 'e', "ego", "NAME|PUBKEY", |
1080 | gettext_noop ("name or public key of ego"), | 1110 | gettext_noop ("name or public key of ego"), |
@@ -1093,7 +1123,7 @@ main (int argc, char *const *argv) | |||
1093 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_peer }, | 1123 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_peer }, |
1094 | 1124 | ||
1095 | { 'k', "name", "VAR_NAME", | 1125 | { 'k', "name", "VAR_NAME", |
1096 | gettext_noop ("state variable name (key) to query"), | 1126 | gettext_noop ("name (key) to query from state"), |
1097 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_name }, | 1127 | GNUNET_YES, &GNUNET_GETOPT_set_string, &opt_name }, |
1098 | 1128 | ||
1099 | { 'm', "method", "METHOD_NAME", | 1129 | { 'm', "method", "METHOD_NAME", |
@@ -1138,17 +1168,19 @@ main (int argc, char *const *argv) | |||
1138 | "gnunet-social --host-enter --ego <NAME or PUBKEY> [--follow] [--welcome | --deny]\n" | 1168 | "gnunet-social --host-enter --ego <NAME or PUBKEY> [--follow] [--welcome | --deny]\n" |
1139 | "gnunet-social --host-reconnect --place <PUBKEY> [--follow] [--welcome | --deny]\n" | 1169 | "gnunet-social --host-reconnect --place <PUBKEY> [--follow] [--welcome | --deny]\n" |
1140 | "gnunet-social --host-leave --place <PUBKEY>\n" | 1170 | "gnunet-social --host-leave --place <PUBKEY>\n" |
1141 | "gnunet-social --host-announce --place <PUBKEY> --method <METHOD_NAME> --body <MESSAGE_BODY>\n" | 1171 | "gnunet-social --host-announce --place <PUBKEY> --method <METHOD_NAME> --data <MESSAGE_BODY>\n" |
1142 | "\n" | 1172 | "\n" |
1143 | "gnunet-social --guest-enter --place <PUBKEY> --peer <PEERID> --ego <NAME or PUBKEY> [--follow]\n" | 1173 | "gnunet-social --guest-enter --place <PUBKEY> --peer <PEERID> --ego <NAME or PUBKEY> [--follow]\n" |
1144 | "gnunet-social --guest-enter --gns <GNS_NAME> --ego <NAME or PUBKEY> [--follow]\n" | 1174 | "gnunet-social --guest-enter --gns <GNS_NAME> --ego <NAME or PUBKEY> [--follow]\n" |
1145 | "gnunet-social --guest-reconnect --place <PUBKEY> [--follow]\n" | 1175 | "gnunet-social --guest-reconnect --place <PUBKEY> [--follow]\n" |
1146 | "gnunet-social --guest-leave --place <PUBKEY>\n" | 1176 | "gnunet-social --guest-leave --place <PUBKEY>\n" |
1147 | "gnunet-social --guest-talk --place <PUBKEY> --method <METHOD_NAME> --body <MESSAGE_BODY>\n" | 1177 | "gnunet-social --guest-talk --place <PUBKEY> --method <METHOD_NAME> --data <MESSAGE_BODY>\n" |
1148 | "\n" | 1178 | "\n" |
1149 | "gnunet-social --history-replay --place <PUBKEY> --start <MSGID> --until <MSGID> [--method <METHOD_PREFIX>]\n" | 1179 | "gnunet-social --history-replay --place <PUBKEY> --start <MSGID> --until <MSGID> [--method <METHOD_PREFIX>]\n" |
1150 | "gnunet-social --history-replay-latest --place <PUBKEY> --limit <MSG_LIMIT> [--method <METHOD_PREFIX>]\n" | 1180 | "gnunet-social --history-replay-latest --place <PUBKEY> --limit <MSG_LIMIT> [--method <METHOD_PREFIX>]\n" |
1151 | "\n" | 1181 | "\n" |
1182 | "gnunet-social --set --place <PUBKEY> --name <NAME> --data <VALUE>\n" | ||
1183 | "\n" | ||
1152 | "gnunet-social --look-at --place <PUBKEY> --name <FULL_NAME>\n" | 1184 | "gnunet-social --look-at --place <PUBKEY> --name <FULL_NAME>\n" |
1153 | "gnunet-social --look-for --place <PUBKEY> --name <NAME_PREFIX>\n"; | 1185 | "gnunet-social --look-for --place <PUBKEY> --name <NAME_PREFIX>\n"; |
1154 | 1186 | ||