/*
This file is part of GNUnet.
- Copyright (C) 2012, 2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012, 2013 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
* - PSYC defines standard variables, methods, etc. This
* library deliberately abstracts over all of these; a
* higher-level API should combine the naming system (GNS)
- * and standard methods (message, join, part, warn,
- * fail, error) and variables (action, color, time,
- * tag, etc.). However, this API does take over the
- * routing variables, specifically 'context' (channel),
- * and 'source'. We only kind-of support 'target', as
+ * and standard methods (_converse, _notice, _request,
+ * _warning, _error etc) and variables (_action, _color,
+ * _time, etc). However, this API does take over the
+ * routing variables, specifically '_context' (channel),
+ * and '_source'. We only kind-of support '_target', as
* the target is either everyone in the group or the
* origin, and never just a single member of the group;
* for such individual messages, an application needs to
* implementing defaults for standard methods and
* variables might be called 'PSYC-std' or 'PSYC-high'.
*
+ * In PSYC terminology this is simply called the "PSYC
+ * routing layer" and the abstractions, for instance in
+ * psyced, are quite similar. The higher one is called
+ * "PSYC entity layer." In the text rendering of the
+ * protocol the two are separated by an empty line. See
+ * http://about.psyc.eu/Spec:Packet and related. --lynX
+ *
* @{
*/
/**
* Byte offset of this @e fragment of the @e message.
- * FIXME: use data_offset instead
*/
uint64_t fragment_offset GNUNET_PACKED;
uint16_t name_size GNUNET_PACKED;
/**
- * enum GNUNET_ENV_Operator
+ * enum GNUNET_PSYC_Operator
*/
uint8_t oper;
*/
typedef void
(*GNUNET_PSYC_MessageCallback) (void *cls,
- uint64_t message_id,
- uint32_t flags,
const struct GNUNET_PSYC_MessageHeader *msg);
* Sequence number of the message.
* @param flags
* OR'ed GNUNET_PSYC_MessageFlags
- * @param data_offset
- * Byte offset of data, only set if @a msg has a type
- * #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA
+ * @param fragment_offset
+ * Multicast message fragment offset.
* @param msg Message part, one of the following types:
* - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_HEADER
* - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD
*/
typedef void
(*GNUNET_PSYC_MessagePartCallback) (void *cls,
- const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
- uint64_t message_id,
- uint32_t flags,
- uint64_t data_offset,
- const struct GNUNET_MessageHeader *msg);
+ const struct GNUNET_PSYC_MessageHeader *msg,
+ const struct GNUNET_MessageHeader *pmsg);
/**
GNUNET_PSYC_master_transmit_cancel (struct GNUNET_PSYC_MasterTransmitHandle *th);
+/**
+ * Relay a message
+ *
+ * @param master Handle to the PSYC channel.
+ * @param method_name Which method should be invoked.
+ * @param notify_mod Function to call to obtain modifiers.
+ * @param notify_data Function to call to obtain fragments of the data.
+ * @param notify_cls Closure for @a notify_mod and @a notify_data.
+ * @param flags Flags for the message being transmitted.
+ * @return Transmission handle, NULL on error (i.e. more than one request queued).
+ */
+struct GNUNET_PSYC_MasterTransmitHandle *
+GNUNET_PSYC_master_relay (struct GNUNET_PSYC_Master *master,
+ uint64_t message_id);
+
+
/**
* Stop a PSYC master channel.
*