-simplify logic
[oweals/gnunet.git] / src / transport / transport.h
index ceeaf9c0daeaa3384e7723cdeabcc882aa55bc0a..15cf936f7402991df67a53f7d9faf63f8958a66c 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009-2014 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
  * @param bandwidth_out outbound bandwidth in NBO
  *
  */
+typedef void
+(*NotifyConnect) (void *cls,
+                  const struct GNUNET_PeerIdentity *peer,
+                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
+                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out);
 
-typedef void (*NotifyConnect) (void *cls,
-                              const struct GNUNET_PeerIdentity *peer,
-                              struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
-                              struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out);
 
 GNUNET_NETWORK_STRUCT_BEGIN
 
@@ -89,7 +90,7 @@ struct StartMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_START
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_START
    */
   struct GNUNET_MessageHeader header;
 
@@ -117,7 +118,7 @@ struct ConnectInfoMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT
    */
   struct GNUNET_MessageHeader header;
 
@@ -146,7 +147,7 @@ struct DisconnectInfoMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT
    */
   struct GNUNET_MessageHeader header;
 
@@ -162,6 +163,7 @@ struct DisconnectInfoMessage
 
 };
 
+
 /**
  * Message type for sending a request connect message
  * to the transport service.  Must be done before transport
@@ -171,14 +173,14 @@ struct DisconnectInfoMessage
 struct TransportRequestConnectMessage
 {
   /**
-   *  Message header
+   *  Message header with type #GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_CONNECT
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Connect (GNUNET_YES) or connect (GNUNET_NO).
+   * Reserved (0).
    */
-  uint32_t connect;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
    * Identity of the peer we would like to connect to.
@@ -186,6 +188,30 @@ struct TransportRequestConnectMessage
   struct GNUNET_PeerIdentity peer;
 };
 
+
+/**
+ * Message type for sending a request connection to
+ * a peer to be torn down.
+ */
+struct TransportRequestDisconnectMessage
+{
+  /**
+   *  Message header with type #GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_DISCONNECT
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Reserved (0).
+   */
+  uint32_t reserved GNUNET_PACKED;
+
+  /**
+   * Identity of the peer we would like to connect to.
+   */
+  struct GNUNET_PeerIdentity peer;
+};
+
+
 /**
  * Message used to set a particular bandwidth quota.  Sent TO the
  * service to set an incoming quota, sent FROM the service to update
@@ -195,7 +221,7 @@ struct QuotaSetMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA
    */
   struct GNUNET_MessageHeader header;
 
@@ -220,7 +246,7 @@ struct InboundMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_RECV
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_RECV
    */
   struct GNUNET_MessageHeader header;
 
@@ -240,19 +266,18 @@ struct SendOkMessage
 {
 
   /**
-   * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SEND_OK
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * GNUNET_OK if the transmission succeeded,
-   * GNUNET_SYSERR if it failed (i.e. network disconnect);
+   * #GNUNET_OK if the transmission succeeded,
+   * #GNUNET_SYSERR if it failed (i.e. network disconnect);
    * in either case, it is now OK for this client to
    * send us another message for the given peer.
    */
   uint32_t success GNUNET_PACKED;
 
-
   /**
    * Size of message sent
    */
@@ -264,11 +289,6 @@ struct SendOkMessage
    */
   uint32_t bytes_physical GNUNET_PACKED;
 
-  /**
-   * Latency estimate.
-   */
-  struct GNUNET_TIME_RelativeNBO latency;
-
   /**
    * Which peer can send more now?
    */
@@ -448,7 +468,7 @@ struct ValidationMonitorMessage
   /**
    * One shot call or continous replies?
    */
-  uint32_t one_shot;
+  uint32_t one_shot GNUNET_PACKED;
 
   /**
    * The identity of the peer to look up.
@@ -472,7 +492,7 @@ struct PeerMonitorMessage
   /**
    * One shot call or continous replies?
    */
-  uint32_t one_shot;
+  uint32_t one_shot GNUNET_PACKED;
 
   /**
    * The identity of the peer to look up.
@@ -494,19 +514,29 @@ struct TrafficMetricMessage
   struct GNUNET_MessageHeader header;
 
   /**
-   * SEND, RECEIVE or BOTH?
+   * Always zero.
    */
-  uint16_t direction;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * Traffic metrics count
+   * The identity of the peer to look up.
    */
-  uint16_t ats_count;
+  struct GNUNET_PeerIdentity peer;
 
   /**
-   * The identity of the peer to look up.
+   * Fake properties to generate.
    */
-  struct GNUNET_PeerIdentity peer;
+  struct GNUNET_ATS_PropertiesNBO properties;
+
+  /**
+   * Fake delay to add on inbound traffic.
+   */
+  struct GNUNET_TIME_RelativeNBO delay_in;
+
+  /**
+   * Fake delay to add on outbound traffic.
+   */
+  struct GNUNET_TIME_RelativeNBO delay_out;
 };
 
 
@@ -590,6 +620,80 @@ struct BlacklistMessage
   struct GNUNET_PeerIdentity peer;
 
 };
+
+
+/**
+ * Transport-level connection status update.
+ */
+struct TransportPluginMonitorMessage
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_EVENT.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * An `enum GNUNET_TRANSPORT_SessionState` in NBO.
+   */
+  uint16_t session_state GNUNET_PACKED;
+
+  /**
+   * #GNUNET_YES if this is an inbound connection,
+   * #GNUNET_NO if this is an outbound connection,
+   * #GNUNET_SYSERR if connections of this plugin
+   *             are so fundamentally bidirectional
+   *             that they have no 'initiator'
+   * Value given in NBO.
+   */
+  int16_t is_inbound GNUNET_PACKED;
+
+  /**
+   * Number of messages waiting transmission.
+   */
+  uint32_t msgs_pending GNUNET_PACKED;
+
+  /**
+   * Number of bytes waiting for transmission.
+   */
+  uint32_t bytes_pending GNUNET_PACKED;
+
+  /**
+   * When will this transport plugin session time out?
+   */
+  struct GNUNET_TIME_AbsoluteNBO timeout;
+
+  /**
+   * Until how long is this plugin currently blocked from reading?
+   */
+  struct GNUNET_TIME_AbsoluteNBO delay;
+
+  /**
+   * Which peer is this connection for?
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /**
+   * Unique identifier for the session.
+   */
+  uint64_t session_id;
+
+  /**
+   * Length of the plugin name in bytes, including 0-termination.
+   */
+  uint16_t plugin_name_len GNUNET_PACKED;
+
+  /**
+   * Length of the plugin address in bytes.
+   */
+  uint16_t plugin_address_len GNUNET_PACKED;
+
+  /* followed by 0-terminated plugin name and
+     @e plugin_address_len bytes of plugin address */
+
+};
+
+
 GNUNET_NETWORK_STRUCT_END
 
 /* end of transport.h */