diff options
Diffstat (limited to 'src/set/gnunet-set.c')
-rw-r--r-- | src/set/gnunet-set.c | 115 |
1 files changed, 107 insertions, 8 deletions
diff --git a/src/set/gnunet-set.c b/src/set/gnunet-set.c index c49b60dfd..d665fce11 100644 --- a/src/set/gnunet-set.c +++ b/src/set/gnunet-set.c | |||
@@ -36,6 +36,53 @@ static struct GNUNET_HashCode app_id; | |||
36 | static struct GNUNET_SET_Handle *set1; | 36 | static struct GNUNET_SET_Handle *set1; |
37 | static struct GNUNET_SET_Handle *set2; | 37 | static struct GNUNET_SET_Handle *set2; |
38 | static struct GNUNET_SET_ListenHandle *listen_handle; | 38 | static struct GNUNET_SET_ListenHandle *listen_handle; |
39 | const static struct GNUNET_CONFIGURATION_Handle *config; | ||
40 | |||
41 | int num_done; | ||
42 | |||
43 | |||
44 | static void | ||
45 | result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, | ||
46 | enum GNUNET_SET_Status status) | ||
47 | { | ||
48 | switch (status) | ||
49 | { | ||
50 | case GNUNET_SET_STATUS_OK: | ||
51 | printf ("set 1: got element\n"); | ||
52 | break; | ||
53 | case GNUNET_SET_STATUS_FAILURE: | ||
54 | printf ("set 1: failure\n"); | ||
55 | break; | ||
56 | case GNUNET_SET_STATUS_DONE: | ||
57 | printf ("set 1: done\n"); | ||
58 | GNUNET_SET_destroy (set1); | ||
59 | break; | ||
60 | default: | ||
61 | GNUNET_assert (0); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | |||
66 | static void | ||
67 | result_cb_set2 (void *cls, struct GNUNET_SET_Element *element, | ||
68 | enum GNUNET_SET_Status status) | ||
69 | { | ||
70 | switch (status) | ||
71 | { | ||
72 | case GNUNET_SET_STATUS_OK: | ||
73 | printf ("set 2: got element\n"); | ||
74 | break; | ||
75 | case GNUNET_SET_STATUS_FAILURE: | ||
76 | printf ("set 2: failure\n"); | ||
77 | break; | ||
78 | case GNUNET_SET_STATUS_DONE: | ||
79 | printf ("set 2: done\n"); | ||
80 | GNUNET_SET_destroy (set2); | ||
81 | break; | ||
82 | default: | ||
83 | GNUNET_assert (0); | ||
84 | } | ||
85 | } | ||
39 | 86 | ||
40 | 87 | ||
41 | static void | 88 | static void |
@@ -45,13 +92,67 @@ listen_cb (void *cls, | |||
45 | struct GNUNET_SET_Request *request) | 92 | struct GNUNET_SET_Request *request) |
46 | { | 93 | { |
47 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); | 94 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); |
95 | GNUNET_SET_listen_cancel (listen_handle); | ||
96 | |||
97 | GNUNET_SET_accept (request, set2, GNUNET_TIME_UNIT_FOREVER_REL, | ||
98 | GNUNET_SET_RESULT_ADDED, result_cb_set2, NULL); | ||
48 | } | 99 | } |
49 | 100 | ||
101 | |||
102 | /** | ||
103 | * Start the set operation. | ||
104 | * | ||
105 | * @param cls closure, unused | ||
106 | */ | ||
50 | static void | 107 | static void |
51 | result_cb (void *cls, struct GNUNET_SET_Element *element, | 108 | start (void *cls) |
52 | enum GNUNET_SET_Status status) | 109 | { |
110 | listen_handle = GNUNET_SET_listen (config, GNUNET_SET_OPERATION_UNION, | ||
111 | &app_id, listen_cb, NULL); | ||
112 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, | ||
113 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_SET_RESULT_ADDED, | ||
114 | result_cb_set1, NULL); | ||
115 | } | ||
116 | |||
117 | |||
118 | /** | ||
119 | * Initialize the second set, continue | ||
120 | * | ||
121 | * @param cls closure, unused | ||
122 | */ | ||
123 | static void | ||
124 | init_set2 (void *cls) | ||
53 | { | 125 | { |
54 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got result\n"); | 126 | struct GNUNET_SET_Element element; |
127 | |||
128 | |||
129 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initializing set 2\n"); | ||
130 | |||
131 | element.data = "hello"; | ||
132 | element.size = strlen(element.data); | ||
133 | GNUNET_SET_add_element (set2, &element, NULL, NULL); | ||
134 | element.data = "quux"; | ||
135 | element.size = strlen(element.data); | ||
136 | GNUNET_SET_add_element (set2, &element, start, NULL); | ||
137 | } | ||
138 | |||
139 | |||
140 | /** | ||
141 | * Initialize the first set, continue. | ||
142 | */ | ||
143 | static void | ||
144 | init_set1 (void) | ||
145 | { | ||
146 | struct GNUNET_SET_Element element; | ||
147 | |||
148 | element.data = "hello"; | ||
149 | element.size = strlen(element.data); | ||
150 | GNUNET_SET_add_element (set1, &element, NULL, NULL); | ||
151 | element.data = "bar"; | ||
152 | element.size = strlen(element.data); | ||
153 | GNUNET_SET_add_element (set1, &element, init_set2, NULL); | ||
154 | |||
155 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized set 1\n"); | ||
55 | } | 156 | } |
56 | 157 | ||
57 | 158 | ||
@@ -69,6 +170,8 @@ run (void *cls, char *const *args, | |||
69 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 170 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
70 | { | 171 | { |
71 | static const char* app_str = "gnunet-set"; | 172 | static const char* app_str = "gnunet-set"; |
173 | |||
174 | config = cfg; | ||
72 | 175 | ||
73 | GNUNET_CRYPTO_hash (app_str, strlen (app_str), &app_id); | 176 | GNUNET_CRYPTO_hash (app_str, strlen (app_str), &app_id); |
74 | 177 | ||
@@ -76,12 +179,8 @@ run (void *cls, char *const *args, | |||
76 | 179 | ||
77 | set1 = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION); | 180 | set1 = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION); |
78 | set2 = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION); | 181 | set2 = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION); |
79 | listen_handle = GNUNET_SET_listen (cfg, GNUNET_SET_OPERATION_UNION, | ||
80 | &app_id, listen_cb, NULL); | ||
81 | 182 | ||
82 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, | 183 | init_set1 (); |
83 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_SET_RESULT_ADDED, | ||
84 | result_cb, NULL); | ||
85 | } | 184 | } |
86 | 185 | ||
87 | 186 | ||