check
[oweals/gnunet.git] / src / include / gnunet_mesh_service.h
index 1ff5e3becf081e2f89630c5f0ae0162d382f9fd9..2835d0abd7a71b40e1a87fa111bd05cff868e016 100644 (file)
@@ -61,6 +61,7 @@ struct GNUNET_MESH_Tunnel;
  * @param cls closure (set from GNUNET_MESH_connect)
  * @param tunnel connection to the other end
  * @param tunnel_ctx place to store local state associated with the tunnel
+ * @param sender who sent the message
  * @param message the actual message
  * @param atsi performance data for the connection
  * @return GNUNET_OK to keep the connection open,
@@ -70,6 +71,7 @@ typedef int
   (*GNUNET_MESH_MessageCallback) (void *cls,
                                   struct GNUNET_MESH_Tunnel *tunnel,
                                  void **tunnel_ctx,
+                                 const struct GNUNET_PeerIdentity *sender,
                                   const struct GNUNET_MessageHeader *message,
                                  const struct GNUNET_TRANSPORT_ATS_Information *atsi);
 
@@ -114,7 +116,13 @@ typedef void (GNUNET_MESH_TunnelEndHandler)(void *cls,
 
 
 /**
- * Connect to the mesh service.  
+ * Type for an application.  Values defined in gnunet_applications.h
+ */
+typedef uint32_t GNUNET_MESH_ApplicationType;
+
+
+/**
+ * Connect to the mesh service.
  *
  * @param cfg configuration to use
  * @param cls closure for the various callbacks that follow (including handlers in the handlers array)
@@ -130,8 +138,8 @@ struct GNUNET_MESH_Handle *
 GNUNET_MESH_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
                      void *cls,
                     GNUNET_MESH_TunnelEndHandler cleaner,
-                     const struct GNUNET_MESH_MessageHandler *handlers);
-
+                     const struct GNUNET_MESH_MessageHandler *handlers
+                    const GNUNET_MESH_ApplicationType *stypes);
 
 /**
  * Get the peer on the other side of this tunnel if it is just one. Return NULL otherwise
@@ -190,7 +198,7 @@ struct GNUNET_MESH_PeerRequestHandle;
  *
  * @param h mesh handle
  * @param timeout how long to try to establish a connection
- * @param num_peers length of the peers arrray
+ * @param num_peers length of the peers array
  * @param peers list of candidates to connect to
  * @param connect_handler function to call on successful connect (or timeout)
  * @param disconnect_handler function to call on disconnect
@@ -213,7 +221,7 @@ GNUNET_MESH_peer_request_connect_any (struct GNUNET_MESH_Handle *h,
  *
  * @param h mesh handle
  * @param timeout how long to try to establish a connection
- * @param num_peers length of the peers arrray
+ * @param num_peers length of the peers array
  * @param peers list of candidates to connect to
  * @param connect_handler function to call on successful connect (or timeout);
  *                will be called for EACH of the peers in the list and
@@ -248,13 +256,25 @@ GNUNET_MESH_peer_request_connect_add (struct GNUNET_MESH_Tunnel *tunnel,
                                      const struct GNUNET_PeerIdentity *peer);
 
 
+/**
+ * Request that a peer should be removed from the tunnel.  The existing
+ * disconnect handler will be called ONCE if we were connected.
+ *
+ * @param tunnel handle to existing tunnel
+ * @param peer peer to remove
+ */
+void
+GNUNET_MESH_peer_request_connect_del (struct GNUNET_MESH_Tunnel *tunnel,
+                                     const struct GNUNET_PeerIdentity *peer);
+
+
 /**
  * Request that the mesh should try to connect to a peer supporting the given
  * message type.
  *
  * @param h mesh handle
  * @param timeout how long to try to establish a connection
- * @param message_type message type that must be supported by the peer (MESH should
+ * @param app_type application type that must be supported by the peer (MESH should
  *                discover peer in proximity handling this type)
  * @param connect_handler function to call on successful connect (or timeout);
  *                will be called for EACH of the peers in the list and
@@ -268,7 +288,7 @@ GNUNET_MESH_peer_request_connect_add (struct GNUNET_MESH_Tunnel *tunnel,
 struct GNUNET_MESH_Tunnel *
 GNUNET_MESH_peer_request_connect_by_type (struct GNUNET_MESH_Handle *h,
                                          struct GNUNET_TIME_Relative timeout,
-                                         uint16_t message_type,
+                                         GNUNET_MESH_ApplicationType app_type,
                                          GNUNET_MESH_TunnelConnectHandler connect_handler,
                                          GNUNET_MESH_TunnelDisconnectHandler disconnect_handler,
                                          void *handler_cls);
@@ -300,6 +320,7 @@ struct GNUNET_MESH_TransmitHandle;
  * @param cork is corking allowed for this transmission?
  * @param priority how important is the message?
  * @param maxdelay how long can the message wait?
+ * @param target destination for the message, NULL for multicast to all tunnel targets 
  * @param notify_size how many bytes of buffer space does notify want?
  * @param notify function to call when buffer space is available;
  *        will be called with NULL on timeout or if the overall queue
@@ -319,6 +340,7 @@ GNUNET_MESH_notify_transmit_ready (struct
                                   struct
                                   GNUNET_TIME_Relative
                                   maxdelay,
+                                  const struct GNUNET_PeerIdentity *target,
                                   size_t
                                   notify_size,
                                   GNUNET_CONNECTION_TransmitReadyNotify