Merge branch 'master' of git+ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / transport / transport.h
index e68536bcc19496164e013135a46604aaa88a825a..c0e02c3d9ad7075078a53a313ca4e3800db6eeae 100644 (file)
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      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/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 
 /**
@@ -26,7 +28,6 @@
 
 #include "gnunet_crypto_lib.h"
 #include "gnunet_time_lib.h"
-#include "gnunet_transport_service.h"
 #include "gnunet_constants.h"
 
 #define DEBUG_TRANSPORT GNUNET_EXTRA_LOGGING
@@ -79,6 +80,7 @@ typedef void
 
 GNUNET_NETWORK_STRUCT_BEGIN
 
+
 /**
  * Message from the transport service to the library
  * asking to check if both processes agree about this
@@ -94,7 +96,7 @@ struct StartMessage
 
   /**
    * 0: no options
-   * 1: The 'self' field should be checked
+   * 1: The @e self field should be checked
    * 2: this client is interested in payload traffic
    */
   uint32_t options;
@@ -121,19 +123,14 @@ struct ConnectInfoMessage
   struct GNUNET_MessageHeader header;
 
   /**
-   * Identity of the new neighbour.
-   */
-  struct GNUNET_PeerIdentity id;
-
-  /**
-   * Current inbound quota for this peer
+   * Current outbound quota for this peer
    */
-  struct GNUNET_BANDWIDTH_Value32NBO quota_in;
+  struct GNUNET_BANDWIDTH_Value32NBO quota_out;
 
   /**
-   * Current outbound quota for this peer
+   * Identity of the new neighbour.
    */
-  struct GNUNET_BANDWIDTH_Value32NBO quota_out;
+  struct GNUNET_PeerIdentity id;
 };
 
 
@@ -226,12 +223,12 @@ struct SendOkMessage
    * in either case, it is now OK for this client to
    * send us another message for the given peer.
    */
-  uint32_t success GNUNET_PACKED;
+  uint16_t success GNUNET_PACKED;
 
   /**
    * Size of message sent
    */
-  uint32_t bytes_msg GNUNET_PACKED;
+  uint16_t bytes_msg GNUNET_PACKED;
 
   /**
    * Size of message sent over wire
@@ -246,61 +243,67 @@ struct SendOkMessage
 
 };
 
+
 /**
- * Message used to notify the transport API about an address to string
- * conversion. Message is followed by the string with the humand-readable
- * address.  For each lookup, multiple results may be returned.  The
- * last message must have a @e res of #GNUNET_OK and an @e addr_len
- * of zero.
+ * Message used to notify the transport service about a message
+ * to be transmitted to another peer.  The actual message follows.
  */
-struct AddressToStringResultMessage
+struct OutboundMessage
 {
 
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING_REPLY
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SEND
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * #GNUNET_OK if the conversion succeeded,
-   * #GNUNET_SYSERR if it failed
+   * Always zero.
    */
-  uint32_t res GNUNET_PACKED;
+  uint32_t reserved GNUNET_PACKED;
 
   /**
-   * Length of the following string, zero if @e is #GNUNET_SYSERR
+   * Allowed delay.
    */
-  uint32_t addr_len GNUNET_PACKED;
+  struct GNUNET_TIME_RelativeNBO timeout;
+
+  /**
+   * Which peer should receive the message?
+   */
+  struct GNUNET_PeerIdentity peer;
+
 };
 
 
+
+
+#if !(defined(GNUNET_TRANSPORT_COMMUNICATION_VERSION)||defined(GNUNET_TRANSPORT_CORE_VERSION))
+
+
 /**
- * Message used to notify the transport service about a message
- * to be transmitted to another peer.  The actual message follows.
+ * Message used to notify the transport API about an address to string
+ * conversion. Message is followed by the string with the humand-readable
+ * address.  For each lookup, multiple results may be returned.  The
+ * last message must have a @e res of #GNUNET_OK and an @e addr_len
+ * of zero.
  */
-struct OutboundMessage
+struct AddressToStringResultMessage
 {
 
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_SEND
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING_REPLY
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Always zero.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Allowed delay.
+   * #GNUNET_OK if the conversion succeeded,
+   * #GNUNET_SYSERR if it failed
    */
-  struct GNUNET_TIME_RelativeNBO timeout;
+  uint32_t res GNUNET_PACKED;
 
   /**
-   * Which peer should receive the message?
+   * Length of the following string, zero if @e is #GNUNET_SYSERR
    */
-  struct GNUNET_PeerIdentity peer;
-
+  uint32_t addr_len GNUNET_PACKED;
 };
 
 
@@ -404,6 +407,7 @@ struct ValidationIterateResponseMessage
   struct GNUNET_TIME_AbsoluteNBO next_validation;
 };
 
+
 /**
  * Message from the library to the transport service
  * asking for binary addresses known for a peer.
@@ -643,16 +647,31 @@ struct TransportPluginMonitorMessage
 
 };
 
+#else
 
+/* *********************** TNG messages ***************** */
 
+/**
+ * Communicator goes online.  Note which addresses it can
+ * work with.
+ */
+struct GNUNET_TRANSPORT_CommunicatorAvailableMessage
+{
 
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_NEW_COMMUNICATOR.
+   */
+  struct GNUNET_MessageHeader header;
 
+  /**
+   * NBO encoding of `enum GNUNET_TRANSPORT_CommunicatorCharacteristics`
+   */
+  uint32_t cc;
 
+  /* Followed by the address prefix of the communicator */
+};
 
 
-
-/* *********************** TNG messages ***************** */
-
 /**
  * Add address to the list.
  */
@@ -675,10 +694,10 @@ struct GNUNET_TRANSPORT_AddAddressMessage
   struct GNUNET_TIME_RelativeNBO expiration;
 
   /**
-   * An `enum GNUNET_ATS_Network_Type` in NBO.
+   * An `enum GNUNET_NetworkType` in NBO.
    */
   uint32_t nt;
-  
+
   /* followed by UTF-8 encoded, 0-terminated human-readable address */
 };
 
@@ -717,12 +736,12 @@ struct GNUNET_TRANSPORT_IncomingMessage
    * Do we use flow control or not?
    */
   uint32_t fc_on GNUNET_PACKED;
-  
+
   /**
    * 64-bit number to identify the matching ACK.
    */
   uint64_t fc_id GNUNET_PACKED;
-  
+
   /**
    * Sender identifier.
    */
@@ -748,12 +767,12 @@ struct GNUNET_TRANSPORT_IncomingMessageAck
    * Reserved (0)
    */
   uint32_t reserved GNUNET_PACKED;
-  
+
   /**
    * Which message is being ACKed?
    */
   uint64_t fc_id GNUNET_PACKED;
-  
+
   /**
    * Sender identifier of the original message.
    */
@@ -769,7 +788,7 @@ struct GNUNET_TRANSPORT_AddQueueMessage
 {
 
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADD_QUEUE.
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_SETUP.
    */
   struct GNUNET_MessageHeader header;
 
@@ -784,10 +803,20 @@ struct GNUNET_TRANSPORT_AddQueueMessage
   struct GNUNET_PeerIdentity receiver;
 
   /**
-   * An `enum GNUNET_ATS_Network_Type` in NBO.
+   * An `enum GNUNET_NetworkType` in NBO.
    */
   uint32_t nt;
-  
+
+  /**
+   * Maximum transmission unit, in NBO.  UINT32_MAX for unlimited.
+   */
+  uint32_t mtu;
+
+  /**
+   * An `enum GNUNET_TRANSPORT_ConnectionStatus` in NBO.
+   */
+  uint32_t cs;
+
   /* followed by UTF-8 encoded, 0-terminated human-readable address */
 };
 
@@ -799,7 +828,7 @@ struct GNUNET_TRANSPORT_DelQueueMessage
 {
 
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_DEL_QUEUE.
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_TEARDOWN.
    */
   struct GNUNET_MessageHeader header;
 
@@ -828,9 +857,9 @@ struct GNUNET_TRANSPORT_CreateQueue
   struct GNUNET_MessageHeader header;
 
   /**
-   * Always zero.
+   * Unique ID for the request.
    */
-  uint32_t reserved GNUNET_PACKED;
+  uint32_t request_id GNUNET_PACKED;
 
   /**
    * Receiver that can be addressed via the queue.
@@ -841,6 +870,24 @@ struct GNUNET_TRANSPORT_CreateQueue
 };
 
 
+/**
+ * Communicator tells transport how queue creation went down.
+ */
+struct GNUNET_TRANSPORT_CreateQueueResponse
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_CREATE_OK or #GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_CREATE_FAIL.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Unique ID for the request.
+   */
+  uint32_t request_id GNUNET_PACKED;
+};
+
+
 /**
  * Inform communicator about transport's desire to send a message.
  */
@@ -861,7 +908,7 @@ struct GNUNET_TRANSPORT_SendMessageTo
    * Message ID, used for flow control.
    */
   uint64_t mid GNUNET_PACKED;
-  
+
   /**
    * Receiver identifier.
    */
@@ -891,7 +938,7 @@ struct GNUNET_TRANSPORT_SendMessageToAck
    * Message ID of the original message.
    */
   uint64_t mid GNUNET_PACKED;
-  
+
   /**
    * Receiver identifier.
    */
@@ -900,6 +947,167 @@ struct GNUNET_TRANSPORT_SendMessageToAck
 };
 
 
+/**
+ * Message from communicator to transport service asking for
+ * transmission of a backchannel message with the given peer @e pid
+ * and communicator.
+ */
+struct GNUNET_TRANSPORT_CommunicatorBackchannel
+{
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_COMMUNICATOR_BACKCHANNEL
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Always zero, for alignment.
+   */
+  uint32_t reserved;
+
+  /**
+   * Target peer.
+   */
+  struct GNUNET_PeerIdentity pid;
+
+  /* Followed by a `struct GNUNET_MessageHeader` with the encapsulated
+     message to the communicator */
+
+  /* Followed by the 0-terminated string specifying the desired
+     communicator at the target (@e pid) peer */
+};
+
+
+/**
+ * Message from transport to communicator passing along a backchannel
+ * message from the given peer @e pid.
+ */
+struct GNUNET_TRANSPORT_CommunicatorBackchannelIncoming
+{
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_COMMUNICATOR_BACKCHANNEL_INCOMING
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Always zero, for alignment.
+   */
+  uint32_t reserved;
+
+  /**
+   * Origin peer.
+   */
+  struct GNUNET_PeerIdentity pid;
+
+  /* Followed by a `struct GNUNET_MessageHeader` with the encapsulated
+     message to the communicator */
+
+};
+
+
+
+/**
+ * Request to start monitoring.
+ */
+struct GNUNET_TRANSPORT_MonitorStart
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_START.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * #GNUNET_YES for one-shot montoring, #GNUNET_NO for continuous monitoring.
+   */
+  uint32_t one_shot;
+
+  /**
+   * Target identifier to monitor, all zeros for "all peers".
+   */
+  struct GNUNET_PeerIdentity peer;
+
+};
+
+
+/**
+ * Monitoring data.
+ */
+struct GNUNET_TRANSPORT_MonitorData
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_DATA.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Network type (an `enum GNUNET_NetworkType` in NBO).
+   */
+  uint32_t nt GNUNET_PACKED;
+
+  /**
+   * Target identifier.
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /**
+   * @deprecated To be discussed if we keep these...
+   */
+  struct GNUNET_TIME_AbsoluteNBO last_validation;
+  struct GNUNET_TIME_AbsoluteNBO valid_until;
+  struct GNUNET_TIME_AbsoluteNBO next_validation;
+
+  /**
+   * Current round-trip time estimate.
+   */
+  struct GNUNET_TIME_RelativeNBO rtt;
+
+  /**
+   * Connection status (in NBO).
+   */
+  uint32_t cs GNUNET_PACKED;
+
+  /**
+   * Messages pending (in NBO).
+   */
+  uint32_t num_msg_pending GNUNET_PACKED;
+
+  /**
+   * Bytes pending (in NBO).
+   */
+  uint32_t num_bytes_pending GNUNET_PACKED;
+
+  /* Followed by 0-terminated address of the peer */
+
+};
+
+
+/**
+ * Request to verify address.
+ */
+struct GNUNET_TRANSPORT_AddressToVerify
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Reserved. 0.
+   */
+  uint32_t reserved;
+
+  /**
+   * Peer the address is from.
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /* followed by variable-size raw address */
+};
+
+
+#endif
 
 GNUNET_NETWORK_STRUCT_END