aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabor X Toth <*@tg-x.net>2013-07-15 07:25:13 +0000
committerGabor X Toth <*@tg-x.net>2013-07-15 07:25:13 +0000
commitb9f677a21cc21b3554b68e74f16c5fac6358c97b (patch)
treeca88507d8ce3405c3418afd56fb2f0b32ff2e78c /src
parent87093621a5223dd1f0d48ded2c41821af7def6f7 (diff)
downloadgnunet-b9f677a21cc21b3554b68e74f16c5fac6358c97b.tar.gz
gnunet-b9f677a21cc21b3554b68e74f16c5fac6358c97b.zip
PSYC/social: use an Environment for setting variables / state operations
Diffstat (limited to 'src')
-rw-r--r--src/include/gnunet_env_lib.h (renamed from src/include/gnunet_psyc_lib.h)120
-rw-r--r--src/include/gnunet_psyc_service.h57
-rw-r--r--src/include/gnunet_social_service.h45
3 files changed, 109 insertions, 113 deletions
diff --git a/src/include/gnunet_psyc_lib.h b/src/include/gnunet_env_lib.h
index 50f346048..5ff5c22db 100644
--- a/src/include/gnunet_psyc_lib.h
+++ b/src/include/gnunet_env_lib.h
@@ -19,9 +19,9 @@
19*/ 19*/
20 20
21/** 21/**
22 * @file include/gnunet_psyc_lib.h 22 * @file include/gnunet_env_lib.h
23 * @brief Library for common PSYC functionality: 23 * @brief Library providing operations for the @e environment of PSYC and Social messages,
24 * types, variable (de)serialization. 24 * and for (de)serializing variable values.
25 * @author Gabor X Toth 25 * @author Gabor X Toth
26 */ 26 */
27 27
@@ -29,63 +29,63 @@
29/** 29/**
30 * Possible operations on PSYC state (persistent) and transient variables (per message). 30 * Possible operations on PSYC state (persistent) and transient variables (per message).
31 */ 31 */
32enum GNUNET_PSYC_Operator 32enum GNUNET_ENV_Operator
33{ 33{
34 /** 34 /**
35 * Set value of a transient variable. 35 * Set value of a transient variable.
36 */ 36 */
37 GNUNET_PSYC_OP_SET = ':', 37 GNUNET_ENV_OP_SET = ':',
38 38
39 /** 39 /**
40 * Assign value for a persistent state variable. 40 * Assign value for a persistent state variable.
41 * 41 *
42 * If an assigned value is NULL, the variable is deleted. 42 * If an assigned value is NULL, the variable is deleted.
43 */ 43 */
44 GNUNET_PSYC_OP_ASSIGN = '=', 44 GNUNET_ENV_OP_ASSIGN = '=',
45 45
46 /** 46 /**
47 * Augment state variable. 47 * Augment state variable.
48 * 48 *
49 * Used for appending strings, adding numbers, and adding new items to a list or dictionary. 49 * Used for appending strings, adding numbers, and adding new items to a list or dictionary.
50 */ 50 */
51 GNUNET_PSYC_OP_AUGMENT = '+', 51 GNUNET_ENV_OP_AUGMENT = '+',
52 52
53 /** 53 /**
54 * Diminish state variable. 54 * Diminish state variable.
55 * 55 *
56 * Used for subtracting numbers, and removing items from a list or dictionary. 56 * Used for subtracting numbers, and removing items from a list or dictionary.
57 */ 57 */
58 GNUNET_PSYC_OP_DIMINISH = '-', 58 GNUNET_ENV_OP_DIMINISH = '-',
59 59
60 /** 60 /**
61 * Update state variable. 61 * Update state variable.
62 * 62 *
63 * Used for modifying a single item of a list or dictionary. 63 * Used for modifying a single item of a list or dictionary.
64 */ 64 */
65 GNUNET_PSYC_OP_UPDATE = '@', 65 GNUNET_ENV_OP_UPDATE = '@',
66}; 66};
67 67
68 68
69/** 69/**
70 * PSYC variable types. 70 * PSYC variable types.
71 */ 71 */
72enum GNUNET_PSYC_Type 72enum GNUNET_ENV_Type
73{ 73{
74 GNUNET_PSYC_TYPE_DATA = 0, 74 GNUNET_ENV_TYPE_DATA = 0,
75 GNUNET_PSYC_TYPE_NUMBER, 75 GNUNET_ENV_TYPE_NUMBER,
76 GNUNET_PSYC_TYPE_LIST, 76 GNUNET_ENV_TYPE_LIST,
77 GNUNET_PSYC_TYPE_DICT 77 GNUNET_ENV_TYPE_DICT
78}; 78};
79 79
80 80
81/** 81/**
82 * PSYC state modifier. 82 * PSYC state modifier.
83 */ 83 */
84struct GNUNET_PSYC_Modifier { 84struct GNUNET_ENV_Modifier {
85 /** 85 /**
86 * State operation. 86 * State operation.
87 */ 87 */
88 GNUNET_PSYC_Operator oper; 88 GNUNET_ENV_Operator oper;
89 89
90 /** 90 /**
91 * Variable name. 91 * Variable name.
@@ -104,6 +104,78 @@ struct GNUNET_PSYC_Modifier {
104}; 104};
105 105
106 106
107/**
108 * Environment for a message.
109 *
110 * Contains modifiers.
111 */
112struct GNUNET_ENV_Environment;
113
114
115/**
116 * Create an environment.
117 *
118 * @return A newly allocated environment.
119 */
120struct GNUNET_ENV_Environment *
121GNUNET_ENV_environment_create ();
122
123
124/**
125 * Add an operation on a variable to the environment.
126 *
127 * @param env The environment.
128 * @param oper Operation to perform.
129 * @param name Name of the variable.
130 * @param value_size Size of @a value.
131 * @param value Value of the variable.
132 *
133 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error.
134 */
135int
136GNUNET_ENV_environment_operation (struct GNUNET_ENV_Environment *env,
137 enum GNUNET_ENV_Operator oper,
138 const char *name,
139 size_t value_size, const void *value);
140
141
142/**
143 * Get all modifiers in the environment.
144 *
145 * @param env The environment.
146 * @param[out] modifiers_length Set to the number of returned modifiers.
147 *
148 * @return Array of modifiers.
149 */
150struct GNUNET_ENV_Modifier *
151GNUNET_ENV_environment_get_modifiers (const struct GNUNET_ENV_Environment *env,
152 size_t *modifiers_length);
153
154
155/**
156 * Add list of modifiers to the environment.
157 *
158 * @param env The environment.
159 * @param modifiers_length Number of @a modifiers.
160 * @param modifiers Array of modifiers to add.
161 *
162 * @return
163 */
164int
165GNUNET_ENV_environment_set_modifiers (const struct GNUNET_ENV_Environment *env,
166 size_t modifiers_length,
167 const struct GNUNET_ENV_Modifier *modifiers);
168
169
170/**
171 * Destroy an environment.
172 *
173 * @param env The environment to destroy.
174 */
175void
176GNUNET_ENV_environment_destroy (struct GNUNET_ENV_Environment *env);
177
178
107/** 179/**
108 * Get the type of variable. 180 * Get the type of variable.
109 * 181 *
@@ -111,8 +183,8 @@ struct GNUNET_PSYC_Modifier {
111 * 183 *
112 * @return Variable type. 184 * @return Variable type.
113 */ 185 */
114enum GNUNET_PSYC_Type 186enum GNUNET_ENV_Type
115GNUNET_PSYC_var_get_type (char *name); 187GNUNET_ENV_var_get_type (char *name);
116 188
117 189
118/** 190/**
@@ -125,7 +197,7 @@ GNUNET_PSYC_var_get_type (char *name);
125 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid). 197 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid).
126 */ 198 */
127int 199int
128GNUNET_PSYC_value_to_number (size_t size, const void *value, int64_t *number); 200GNUNET_ENV_value_to_number (size_t size, const void *value, int64_t *number);
129 201
130 202
131/** 203/**
@@ -138,7 +210,7 @@ GNUNET_PSYC_value_to_number (size_t size, const void *value, int64_t *number);
138 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid). 210 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid).
139 */ 211 */
140int 212int
141GNUNET_PSYC_value_to_list (size_t size, const void *value, GNUNET_CONTAINER_SList **list); 213GNUNET_ENV_value_to_list (size_t size, const void *value, GNUNET_CONTAINER_SList **list);
142 214
143 215
144/** 216/**
@@ -151,7 +223,7 @@ GNUNET_PSYC_value_to_list (size_t size, const void *value, GNUNET_CONTAINER_SLis
151 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid). 223 * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid).
152 */ 224 */
153int 225int
154GNUNET_PSYC_value_to_dict (size_t size, const void *value, GNUNET_CONTAINER_MultiHashMap **dict); 226GNUNET_ENV_value_to_dict (size_t size, const void *value, GNUNET_CONTAINER_MultiHashMap **dict);
155 227
156 228
157/** 229/**
@@ -163,7 +235,7 @@ GNUNET_PSYC_value_to_dict (size_t size, const void *value, GNUNET_CONTAINER_Mult
163 * @return A newly allocated value or NULL on error. 235 * @return A newly allocated value or NULL on error.
164 */ 236 */
165void * 237void *
166GNUNET_PSYC_value_from_number (int64_t number, size_t *value_size); 238GNUNET_ENV_value_from_number (int64_t number, size_t *value_size);
167 239
168 240
169/** 241/**
@@ -175,7 +247,7 @@ GNUNET_PSYC_value_from_number (int64_t number, size_t *value_size);
175 * @return A newly allocated value or NULL on error. 247 * @return A newly allocated value or NULL on error.
176 */ 248 */
177void * 249void *
178GNUNET_PSYC_value_from_list (GNUNET_CONTAINER_SList *list, size_t *value_size); 250GNUNET_ENV_value_from_list (GNUNET_CONTAINER_SList *list, size_t *value_size);
179 251
180 252
181/** 253/**
@@ -187,4 +259,4 @@ GNUNET_PSYC_value_from_list (GNUNET_CONTAINER_SList *list, size_t *value_size);
187 * @return A newly allocated value or NULL on error. 259 * @return A newly allocated value or NULL on error.
188 */ 260 */
189void * 261void *
190GNUNET_PSYC_value_from_dict (GNUNET_CONTAINER_MultiHashMap *dict, size_t *value_size); 262GNUNET_ENV_value_from_dict (GNUNET_CONTAINER_MultiHashMap *dict, size_t *value_size);
diff --git a/src/include/gnunet_psyc_service.h b/src/include/gnunet_psyc_service.h
index da8da9221..0f41c3b12 100644
--- a/src/include/gnunet_psyc_service.h
+++ b/src/include/gnunet_psyc_service.h
@@ -151,7 +151,7 @@ struct GNUNET_PSYC_PartHandle;
151 * specific than the registered method name due to try-and-slice matching). 151 * specific than the registered method name due to try-and-slice matching).
152 * FIXME: no try-and-slice for methods defined here. 152 * FIXME: no try-and-slice for methods defined here.
153 * @param header_length Number of modifiers in header. 153 * @param header_length Number of modifiers in header.
154 * @param header Modifiers present in the message. 154 * @param header Modifiers present in the message. FIXME: use environment instead?
155 * @param data_offset Byte offset of @a data in the overall data of the method. 155 * @param data_offset Byte offset of @a data in the overall data of the method.
156 * @param data_size Number of bytes in @a data. 156 * @param data_size Number of bytes in @a data.
157 * @param data Data stream given to the method (might not be zero-terminated 157 * @param data Data stream given to the method (might not be zero-terminated
@@ -163,7 +163,7 @@ typedef int (*GNUNET_PSYC_Method)(void *cls,
163 uint64_t message_id, 163 uint64_t message_id,
164 const char *method_name, 164 const char *method_name,
165 size_t header_length, 165 size_t header_length,
166 GNUNET_PSYC_Modifier *header, 166 GNUNET_PSYC_Modifier *header,
167 uint64_t data_offset, 167 uint64_t data_offset,
168 size_t data_size, 168 size_t data_size,
169 const void *data, 169 const void *data,
@@ -224,6 +224,7 @@ typedef int (*GNUNET_PSYC_PartCallback)(void *cls,
224 * @param is_admitted #GNUNET_YES if joining is approved, 224 * @param is_admitted #GNUNET_YES if joining is approved,
225 * #GNUNET_NO if it is disapproved 225 * #GNUNET_NO if it is disapproved
226 * @param method_name Method name for the message transmitted with the response. 226 * @param method_name Method name for the message transmitted with the response.
227 * @param env Environment: transient variables for the message.
227 * @param data_size Size of @a data. 228 * @param data_size Size of @a data.
228 * @param data Data of the message. 229 * @param data Data of the message.
229 */ 230 */
@@ -231,6 +232,7 @@ void
231GNUNET_PSYC_join_decision (struct GNUNET_PSYC_JoinHandle *jh, 232GNUNET_PSYC_join_decision (struct GNUNET_PSYC_JoinHandle *jh,
232 int is_admitted, 233 int is_admitted,
233 const char *method_name, 234 const char *method_name,
235 const struct GNUNET_ENV_Environment *env,
234 size_t data_size, 236 size_t data_size,
235 const void *data); 237 const void *data);
236 238
@@ -290,32 +292,6 @@ GNUNET_PSYC_channel_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
290 292
291 293
292/** 294/**
293 * Modify channel state (or set a transient variable).
294 *
295 * The state of a channel must fit into the memory of each member (and the
296 * channel); large values that require streaming must only be passed as the
297 * stream arguments to methods. State modifications might not be transmitted to
298 * group members until the next call to GNUNET_PSYC_channel_transmit().
299 * Variable updates must be given just before the call to the respective method
300 * that needs the variables.
301 *
302 * @param channel Handle to the PSYC group / channel.
303 * @param oper Kind of update operation (add, remove, replace, delete).
304 * @param name Name of the state or transient variable to modify.
305 * @param value_size Number of bytes in @a value.
306 * @param value Value of state variable.
307 * @return #GNUNET_OK on success, #GNUNET_SYSERR on internal error
308 * (i.e. state too large).
309 */
310int
311GNUNET_PSYC_channel_state_modify (struct GNUNET_PSYC_Channel *channel,
312 enum GNUNET_PSYC_Operator oper,
313 const char *name,
314 size_t value_size,
315 const void *value);
316
317
318/**
319 * Function called to provide data for a transmission via PSYC. 295 * Function called to provide data for a transmission via PSYC.
320 * 296 *
321 * Note that returning #GNUNET_OK or #GNUNET_SYSERR (but not #GNUNET_NO) 297 * Note that returning #GNUNET_OK or #GNUNET_SYSERR (but not #GNUNET_NO)
@@ -352,6 +328,7 @@ struct GNUNET_PSYC_ChannelTransmitHandle;
352 * @param increment_group_generation #GNUNET_YES if we need to increment 328 * @param increment_group_generation #GNUNET_YES if we need to increment
353 * the group generation counter after transmitting this message. 329 * the group generation counter after transmitting this message.
354 * @param method_name Which method should be invoked. 330 * @param method_name Which method should be invoked.
331 * @param env Environment: state operations and transient variables for the message.
355 * @param notify Function to call to obtain the arguments. 332 * @param notify Function to call to obtain the arguments.
356 * @param notify_cls Closure for @a notify. 333 * @param notify_cls Closure for @a notify.
357 * @return Transmission handle, NULL on error (i.e. more than one request queued). 334 * @return Transmission handle, NULL on error (i.e. more than one request queued).
@@ -360,6 +337,7 @@ struct GNUNET_PSYC_ChannelTransmitHandle *
360GNUNET_PSYC_channel_transmit (struct GNUNET_PSYC_Channel *channel, 337GNUNET_PSYC_channel_transmit (struct GNUNET_PSYC_Channel *channel,
361 int increment_group_generation, 338 int increment_group_generation,
362 const char *method_name, 339 const char *method_name,
340 const struct GNUNET_ENV_Environment *env,
363 GNUNET_PSYC_ChannelReadyNotify notify, 341 GNUNET_PSYC_ChannelReadyNotify notify,
364 void *notify_cls); 342 void *notify_cls);
365 343
@@ -544,6 +522,7 @@ struct GNUNET_PSYC_MemberTransmitHandle;
544 * 522 *
545 * @param member Membership handle. 523 * @param member Membership handle.
546 * @param method_name Which (PSYC) method should be invoked (on host). 524 * @param method_name Which (PSYC) method should be invoked (on host).
525 * @param env Environment: transient variables for the message.
547 * @param notify Function to call when we are allowed to transmit (to get data). 526 * @param notify Function to call when we are allowed to transmit (to get data).
548 * @param notify_cls Closure for @a notify. 527 * @param notify_cls Closure for @a notify.
549 * @return Transmission handle, NULL on error (i.e. more than one request queued). 528 * @return Transmission handle, NULL on error (i.e. more than one request queued).
@@ -551,32 +530,12 @@ struct GNUNET_PSYC_MemberTransmitHandle;
551struct GNUNET_PSYC_MemberTransmitHandle * 530struct GNUNET_PSYC_MemberTransmitHandle *
552GNUNET_PSYC_member_to_origin (struct GNUNET_PSYC_Member *member, 531GNUNET_PSYC_member_to_origin (struct GNUNET_PSYC_Member *member,
553 const char *method_name, 532 const char *method_name,
533 const struct GNUNET_ENV_Environment *env,
554 GNUNET_PSYC_MemberReadyNotify notify, 534 GNUNET_PSYC_MemberReadyNotify notify,
555 void *notify_cls); 535 void *notify_cls);
556 536
557 537
558/** 538/**
559 * Set a (temporary, ":") variable for the next message being transmitted
560 * via GNUNET_PSYC_member_to_origin().
561 *
562 * If GNUNET_PSYC_member_to_origin() is called and then cancelled, all
563 * variables that were set using this function will be unset (lost/forgotten).
564 * To clear a variable state after setting it, you can also call this function
565 * again with NULL/0 for the @a value.
566 *
567 * @param member Membership handle.
568 * @param name Name of the variable to set.
569 * @param value_size Number of bytes in @a value.
570 * @param value Value to set for the given variable.
571 */
572uint64_t
573GNUNET_PSYC_member_variable_set (struct GNUNET_PSYC_Member *member,
574 const char *name,
575 size_t value_size,
576 const void *value);
577
578
579/**
580 * Abort transmission request to origin. 539 * Abort transmission request to origin.
581 * 540 *
582 * @param th Handle of the request that is being aborted. 541 * @param th Handle of the request that is being aborted.
diff --git a/src/include/gnunet_social_service.h b/src/include/gnunet_social_service.h
index d4d9c437c..2a2108828 100644
--- a/src/include/gnunet_social_service.h
+++ b/src/include/gnunet_social_service.h
@@ -85,7 +85,7 @@ struct GNUNET_SOCIAL_Slicer;
85 * (unique only in combination with the given sender for 85 * (unique only in combination with the given sender for
86 * this channel). 86 * this channel).
87 * @param header_length Number of modifiers in header. 87 * @param header_length Number of modifiers in header.
88 * @param header Modifiers present in the message. 88 * @param header Modifiers present in the message. FIXME: use environment instead?
89 * @param data_offset Byte offset of @a data in the overall data of the method. 89 * @param data_offset Byte offset of @a data in the overall data of the method.
90 * @param data_size Number of bytes in @a data. 90 * @param data_size Number of bytes in @a data.
91 * @param data Data stream given to the method (might not be zero-terminated 91 * @param data Data stream given to the method (might not be zero-terminated
@@ -323,27 +323,6 @@ GNUNET_SOCIAL_home_advertise (struct GNUNET_SOCIAL_Home *home,
323 GNUNET_TIME_Relative expiration_time); 323 GNUNET_TIME_Relative expiration_time);
324 324
325 325
326
327/**
328 * (Re)decorate the home by changing objects in it.
329 *
330 * If the operation is #GNUNET_PSYC_OP_SET then the decoration only
331 * applies to the next announcement by the home owner.
332 *
333 * @param home The home to decorate.
334 * @param operation Operation to perform on the object.
335 * @param object_name Name of the object to modify.
336 * @param object_value_size Size of the given @a object_value.
337 * @param object_value Value to use for the modification.
338 */
339void
340GNUNET_SOCIAL_home_decorate (struct GNUNET_SOCIAL_Home *home,
341 enum GNUNET_PSYC_Operator operation,
342 const char *object_name,
343 size_t object_value_size,
344 const void *object_value);
345
346
347/** 326/**
348 * Handle for an announcement request. 327 * Handle for an announcement request.
349 */ 328 */
@@ -365,6 +344,7 @@ struct GNUNET_SOCIAL_Announcement;
365struct GNUNET_SOCIAL_Announcement * 344struct GNUNET_SOCIAL_Announcement *
366GNUNET_SOCIAL_home_announce (struct GNUNET_SOCIAL_Home *home, 345GNUNET_SOCIAL_home_announce (struct GNUNET_SOCIAL_Home *home,
367 const char *method_name, 346 const char *method_name,
347 const struct GNUNET_ENV_Environment *env,
368 GNUNET_PSYC_OriginReadyNotify notify, 348 GNUNET_PSYC_OriginReadyNotify notify,
369 void *notify_cls); 349 void *notify_cls);
370 350
@@ -429,6 +409,7 @@ struct GNUNET_SOCIAL_Place *
429GNUNET_SOCIAL_place_enter (const struct GNUNET_CONFIGURATION_Handle *cfg, 409GNUNET_SOCIAL_place_enter (const struct GNUNET_CONFIGURATION_Handle *cfg,
430 struct GNUNET_SOCIAL_Ego *ego, 410 struct GNUNET_SOCIAL_Ego *ego,
431 char *address, 411 char *address,
412 const struct GNUNET_ENV_Environment *env,
432 size_t msg_size, 413 size_t msg_size,
433 const void *msg, 414 const void *msg,
434 struct GNUNET_SOCIAL_Slicer *slicer); 415 struct GNUNET_SOCIAL_Slicer *slicer);
@@ -451,6 +432,7 @@ GNUNET_SOCIAL_place_enter2 (const struct GNUNET_CONFIGURATION_Handle *cfg,
451 struct GNUNET_HashCode *crypto_address, 432 struct GNUNET_HashCode *crypto_address,
452 struct GNUNET_PeerIdentity *peer, 433 struct GNUNET_PeerIdentity *peer,
453 struct GNUNET_SOCIAL_Slicer *slicer, 434 struct GNUNET_SOCIAL_Slicer *slicer,
435 const struct GNUNET_ENV_Environment *env,
454 size_t msg_size, 436 size_t msg_size,
455 const void *msg); 437 const void *msg);
456 438
@@ -542,24 +524,6 @@ GNUNET_SOCIAL_place_look_at (struct GNUNET_SOCIAL_Place *place,
542 524
543 525
544/** 526/**
545 * Frame the (next) talk by setting some variables for it.
546 *
547 * FIXME: use a TalkFrame struct instead that can be passed to
548 * place_talk, nym_talk and home_reject_entry.
549 *
550 * @param place Place to talk in.
551 * @param variable_name Name of variable to set.
552 * @param value_size Number of bytes in @a value.
553 * @param value Value of variable.
554 */
555void
556GNUNET_SOCIAL_place_frame_talk (struct GNUNET_SOCIAL_Place *place,
557 const char *variable_name,
558 size_t value_size,
559 const void *value);
560
561
562/**
563 * A talk request. 527 * A talk request.
564 */ 528 */
565struct GNUNET_SOCIAL_TalkRequest; 529struct GNUNET_SOCIAL_TalkRequest;
@@ -577,6 +541,7 @@ struct GNUNET_SOCIAL_TalkRequest;
577struct GNUNET_SOCIAL_TalkRequest * 541struct GNUNET_SOCIAL_TalkRequest *
578GNUNET_SOCIAL_place_talk (struct GNUNET_SOCIAL_Place *place, 542GNUNET_SOCIAL_place_talk (struct GNUNET_SOCIAL_Place *place,
579 const char *method_name, 543 const char *method_name,
544 const struct GNUNET_ENV_Environment *env,
580 GNUNET_PSYC_OriginReadyNotify cb, 545 GNUNET_PSYC_OriginReadyNotify cb,
581 void *cb_cls); 546 void *cb_cls);
582 547