fix bad free
[oweals/gnunet.git] / src / include / gnunet_psyc_service.h
index 16be33b15697d9b26c62364a04b0c3e6f1de7f89..f31de0e67b5c1695ff7a31c8e601e6a8e2d36fc2 100644 (file)
@@ -2,20 +2,18 @@
      This file is part of GNUnet.
      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
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
  * - 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
+ *
  * @{
  */
 
@@ -311,7 +316,7 @@ struct GNUNET_PSYC_MessageModifier
   uint16_t name_size GNUNET_PACKED;
 
   /**
-   * enum GNUNET_ENV_Operator
+   * enum GNUNET_PSYC_Operator
    */
   uint8_t oper;
 
@@ -533,8 +538,6 @@ struct GNUNET_PSYC_JoinHandle;
  */
 typedef void
 (*GNUNET_PSYC_MessageCallback) (void *cls,
-                                uint64_t message_id,
-                                uint32_t flags,
                                 const struct GNUNET_PSYC_MessageHeader *msg);
 
 
@@ -562,11 +565,8 @@ typedef void
  */
 typedef void
 (*GNUNET_PSYC_MessagePartCallback) (void *cls,
-                                    const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                                    uint64_t message_id,
-                                    uint32_t flags,
-                                    uint64_t fragment_offset,
-                                    const struct GNUNET_MessageHeader *msg);
+                                    const struct GNUNET_PSYC_MessageHeader *msg,
+                                    const struct GNUNET_MessageHeader *pmsg);
 
 
 /**
@@ -629,10 +629,10 @@ struct GNUNET_PSYC_Master;
 
 
 /**
- * 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
@@ -828,6 +828,22 @@ void
 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.
  *