/*
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;
* Sending slave's public key.
* Not set if the message is from the master.
*/
- struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+ struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
/* Followed by concatenated PSYC message parts:
* messages with GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_* types
uint16_t name_size GNUNET_PACKED;
/**
- * enum GNUNET_ENV_Operator
+ * enum GNUNET_PSYC_Operator
*/
uint8_t oper;
/**
* Public key of the joining slave.
*/
- struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+ struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
/* Followed by struct GNUNET_MessageHeader join_request */
};
* Only set when the master is sending the decision,
* not set when a slave is receiving it.
*/
- struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+ struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
/* Followed by struct GNUNET_MessageHeader join_response */
};
*/
typedef void
(*GNUNET_PSYC_MessageCallback) (void *cls,
- uint64_t message_id,
- uint32_t flags,
const struct GNUNET_PSYC_MessageHeader *msg);
*
* @param cls
* Closure.
- * @param slave_key
+ * @param slave_pub_key
* Public key of the slave sending the message.
* Only set for channel master.
* @param message_id
* 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_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);
/**
*
* @param cls
* Closure.
- * @param slave_key
+ * @param slave_pub_key
* Public key of the slave requesting join.
* @param join_msg
* Join message sent along with the request.
typedef void
(*GNUNET_PSYC_JoinRequestCallback) (void *cls,
const struct GNUNET_PSYC_JoinRequestMessage *req,
- const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
+ const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
const struct GNUNET_PSYC_Message *join_msg,
struct GNUNET_PSYC_JoinHandle *jh);
/**
- * Function called after connected to the PSYC service
- * and the channel master started.
+ * Function called once we are connected to the PSYC service
+ * and the channel master is started.
*
- * Also called when reconnected to the service
+ * Also called when we reconnected to the service
* after the connection closed unexpectedly.
*
* @param cls
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.
*
* Configuration to use.
* @param channel_pub_key
* ECC public key that identifies the channel we wish to join.
- * @param slave_key
+ * @param slave_pub_key
* ECC private-public key pair that identifies the slave, and
* used by multicast to sign the join request and subsequent unicast
* requests sent to the master.
struct GNUNET_PSYC_Slave *
GNUNET_PSYC_slave_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_CRYPTO_EddsaPublicKey *channel_pub_key,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_pub_key,
enum GNUNET_PSYC_SlaveJoinFlags flags,
const struct GNUNET_PeerIdentity *origin,
uint32_t relay_count,
*
* @param channel
* Channel handle.
- * @param slave_key
+ * @param slave_pub_key
* Identity of channel slave to add.
* @param announced_at
* ID of the message that announced the membership change.
*/
void
GNUNET_PSYC_channel_slave_add (struct GNUNET_PSYC_Channel *channel,
- const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
+ const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
uint64_t announced_at,
uint64_t effective_since,
GNUNET_ResultCallback result_cb,
*
* @param channel
* Channel handle.
- * @param slave_key
+ * @param slave_pub_key
* Identity of channel slave to remove.
* @param announced_at
* ID of the message that announced the membership change.
void
GNUNET_PSYC_channel_slave_remove (struct GNUNET_PSYC_Channel *channel,
const struct GNUNET_CRYPTO_EcdsaPublicKey
- *slave_key,
+ *slave_pub_key,
uint64_t announced_at,
GNUNET_ResultCallback result_cb,
void *cls);