-log
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh_tunnel.h
index 1a48bf280bf25c39c2f9dfac7f599aa5a73f0c96..59f9b6657c7d49cac78b98a896edca455264a3e7 100644 (file)
@@ -64,6 +64,11 @@ enum MeshTunnel3CState
      * Peer connected and ready to accept data.
      */
   MESH_TUNNEL3_READY,
+
+  /**
+   * Tunnel being shut down, don't try to keep it alive.
+   */
+  MESH_TUNNEL3_SHUTDOWN
 };
 
 
@@ -123,6 +128,9 @@ typedef void (*GMT_sent) (void *cls,
                           struct MeshTunnel3Queue *q,
                           uint16_t type, size_t size);
 
+typedef void (*GMT_conn_iter) (void *cls, struct MeshConnection *c);
+typedef void (*GMT_chan_iter) (void *cls, struct MeshChannel *ch);
+
 
 /******************************************************************************/
 /********************************    API    ***********************************/
@@ -192,7 +200,7 @@ GMT_destroy (struct MeshTunnel3 *t);
  * @param cstate New connection state.
  */
 void
-GMT_change_cstate (struct MeshTunnel3* t, enum MeshTunnel3CState state);
+GMT_change_cstate (struct MeshTunnel3* t, enum MeshTunnel3CState cstate);
 
 
 /**
@@ -213,6 +221,15 @@ GMT_change_estate (struct MeshTunnel3* t, enum MeshTunnel3EState state);
 void
 GMT_add_connection (struct MeshTunnel3 *t, struct MeshConnection *c);
 
+/**
+ * Mark a path as no longer valid for this tunnel: has been tried and failed.
+ *
+ * @param t Tunnel to update.
+ * @param path Invalid path to remove. Is destroyed after removal.
+ */
+void
+GMT_remove_path (struct MeshTunnel3 *t, struct MeshPeerPath *path);
+
 /**
  * Remove a connection from a tunnel.
  *
@@ -316,6 +333,16 @@ GMT_count_channels (struct MeshTunnel3 *t);
 enum MeshTunnel3CState
 GMT_get_cstate (struct MeshTunnel3 *t);
 
+/**
+ * Get the encryption state of a tunnel.
+ *
+ * @param t Tunnel.
+ *
+ * @return Tunnel's encryption state.
+ */
+enum MeshTunnel3EState
+GMT_get_estate (struct MeshTunnel3 *t);
+
 /**
  * Get the maximum buffer space for a tunnel towards a local client.
  *
@@ -392,8 +419,7 @@ GMT_cancel (struct MeshTunnel3Queue *q);
  *
  * @param message Message to send. Function modifies it.
  * @param t Tunnel on which this message is transmitted.
- * @param ch Channel on which this message is transmitted.
- * @param fwd Is this a fwd message on @c ch?
+ * @param c Connection to use (autoselect if NULL).
  * @param force Force the tunnel to take the message (buffer overfill).
  * @param cont Continuation to call once message is really sent.
  * @param cont_cls Closure for @c cont.
@@ -402,9 +428,8 @@ GMT_cancel (struct MeshTunnel3Queue *q);
  */
 struct MeshTunnel3Queue *
 GMT_send_prebuilt_message (const struct GNUNET_MessageHeader *message,
-                           struct MeshTunnel3 *t,
-                           struct MeshChannel *ch, int fwd, int force,
-                           GMT_sent cont, void *cont_cls);
+                           struct MeshTunnel3 *t, struct MeshConnection *c,
+                           int force, GMT_sent cont, void *cont_cls);
 
 /**
  * Is the tunnel directed towards the local peer?
@@ -449,6 +474,51 @@ GMT_get_path_cost (const struct MeshTunnel3 *t,
 const char *
 GMT_2s (const struct MeshTunnel3 *t);
 
+/**
+ * Log all possible info about the tunnel state.
+ *
+ * @param t Tunnel to debug.
+ */
+void
+GMT_debug (const struct MeshTunnel3 *t);
+
+/**
+ * Iterate all tunnels.
+ *
+ * @param iter Iterator.
+ * @param cls Closure for @c iter.
+ */
+void
+GMT_iterate_all (GNUNET_CONTAINER_PeerMapIterator iter, void *cls);
+
+/**
+ * Count all tunnels.
+ *
+ * @return Number of tunnels to remote peers kept by this peer.
+ */
+unsigned int
+GMT_count_all (void);
+
+/**
+ * Iterate all connections of a tunnel.
+ *
+ * @param t Tunnel whose connections to iterate.
+ * @param iter Iterator.
+ * @param cls Closure for @c iter.
+ */
+void
+GMT_iterate_connections (struct MeshTunnel3 *t, GMT_conn_iter iter, void *cls);
+
+/**
+ * Iterate all channels of a tunnel.
+ *
+ * @param t Tunnel whose channels to iterate.
+ * @param iter Iterator.
+ * @param cls Closure for @c iter.
+ */
+void
+GMT_iterate_channels (struct MeshTunnel3 *t, GMT_chan_iter iter, void *cls);
+
 #if 0                           /* keep Emacsens' auto-indent happy */
 {
 #endif