/*
This file is part of GNUnet.
- Copyright (C) 2012 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012 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
else
{
/* Not an error, can happen with CONNECTION_BROKEN messages. */
- return "";
+ return "\???";
}
}
+
+/**
+ * Test if @a bigger is larger than @a smaller.
+ * Considers the case that @a bigger just overflowed
+ * and is thus tiny while @a smaller is still below
+ * `UINT32_MAX`.
+ */
int
-GC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
+GC_is_pid_bigger (uint32_t bigger,
+ uint32_t smaller)
{
- return (GNUNET_YES == PID_OVERFLOW (smaller, bigger) ||
- (bigger > smaller && GNUNET_NO == PID_OVERFLOW (bigger, smaller)));
+ return (PID_OVERFLOW (smaller, bigger) ||
+ ( (bigger > smaller) &&
+ (! PID_OVERFLOW (bigger, smaller))) );
}
}
-const struct GNUNET_HashCode *
-GC_h2hc (const struct GNUNET_CADET_Hash *id)
+/**
+ * Allocate a string with a hexdump of any binary data.
+ *
+ * @param bin Arbitrary binary data.
+ * @param len Length of @a bin in bytes.
+ * @param output Where to write the output (if *output be NULL it's allocated).
+ *
+ * @return The size of the output.
+ */
+size_t
+GC_bin2s (void *bin, unsigned int len, char **output)
{
- static struct GNUNET_HashCode hc;
- memcpy (&hc, id, sizeof (*id));
-
- return &hc;
-}
+ char *data = bin;
+ char *buf;
+ unsigned int s_len;
+ unsigned int i;
+ s_len = 2 * len + 1;
+ if (NULL == *output)
+ *output = GNUNET_malloc (s_len);
+ buf = *output;
-const char *
-GC_h2s (const struct GNUNET_CADET_Hash *id)
-{
- static char s[53];
-
- memcpy (s, GNUNET_h2s_full (GC_h2hc (id)), 52);
- s[52] = '\0';
+ for (i = 0; i < len; i++)
+ {
+ SPRINTF (&buf[2 * i], "%2X", data[i]);
+ }
+ buf[s_len - 1] = '\0';
- return s;
+ return s_len;
}
{
static char buf[2][16];
static int idx;
- const char *t;
+ const char *s;
idx = (idx + 1) % 2;
switch (m)
* Used to mark the "payload" of a non-payload message.
*/
case 0:
- return "";
+ s = "retransmit";
+ break;
/**
* Request the creation of a path
*/
case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_CREATE:
- t = "CONN_CREATE";
+ s = "CONN_CREAT";
break;
/**
* Request the modification of an existing path
*/
- case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_ACK:
- t = "CONN_ACK";
+ case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_CREATE_ACK:
+ s = "CONN_ACK";
break;
/**
* Notify that a connection of a path is no longer valid
*/
case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_BROKEN:
- t = "CONN_BROKEN";
+ s = "CONN_BRKN";
break;
/**
* At some point, the route will spontaneously change
*/
- case GNUNET_MESSAGE_TYPE_CADET_PATH_CHANGED:
- t = "PATH_CHANGED";
+ case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_PATH_CHANGED_UNIMPLEMENTED:
+ s = "PATH_CHNGD";
break;
/**
* Transport payload data.
*/
- case GNUNET_MESSAGE_TYPE_CADET_DATA:
- t = "DATA";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_APP_DATA:
+ s = "DATA";
break;
/**
* Confirm receipt of payload data.
*/
- case GNUNET_MESSAGE_TYPE_CADET_DATA_ACK:
- t = "DATA_ACK";
- break;
-
- /**
- * Key exchange encapsulation.
- */
- case GNUNET_MESSAGE_TYPE_CADET_KX:
- t = "KX";
- break;
-
- /**
- * Axolotl key exchange message.
- */
- case GNUNET_MESSAGE_TYPE_CADET_AX_KX:
- t = "AX_KX";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_APP_DATA_ACK:
+ s = "DATA_ACK";
break;
/**
- * New ephemeral key.
+ * Key exchange message.
*/
- case GNUNET_MESSAGE_TYPE_CADET_KX_EPHEMERAL:
- t = "KX_EPHEMERAL";
+ case GNUNET_MESSAGE_TYPE_CADET_TUNNEL_KX:
+ s = "KX";
break;
/**
- * Answer to session key challenge.
+ * Encrypted.
*/
- case GNUNET_MESSAGE_TYPE_CADET_KX_PONG:
- t = "KX_PONG";
+ case GNUNET_MESSAGE_TYPE_CADET_TUNNEL_ENCRYPTED:
+ s = "ENCRYPTED";
break;
/**
* Request the destuction of a path
*/
case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_DESTROY:
- t = "CONN_DESTROY";
+ s = "CONN_DSTRY";
break;
/**
* ACK for a data packet.
*/
- case GNUNET_MESSAGE_TYPE_CADET_ACK:
- t = "ACK";
+ case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_HOP_BY_HOP_ENCRYPTED_ACK:
+ s = "ACK";
break;
/**
* POLL for ACK.
*/
- case GNUNET_MESSAGE_TYPE_CADET_POLL:
- t = "POLL";
+ case GNUNET_MESSAGE_TYPE_CADET_TUNNEL_ENCRYPTED_POLL:
+ s = "POLL";
break;
/**
* Announce origin is still alive.
*/
- case GNUNET_MESSAGE_TYPE_CADET_KEEPALIVE:
- t = "KEEPALIVE";
- break;
-
- /**
- * Connect to the cadet service, specifying subscriptions
- */
- case GNUNET_MESSAGE_TYPE_CADET_LOCAL_CONNECT:
- t = "LOCAL_CONNECT";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_KEEPALIVE:
+ s = "KEEPALIVE";
break;
/**
- * Ask the cadet service to create a new tunnel
+ * Open port
*/
- case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_CREATE:
- t = "CHAN_CREATE";
+ case GNUNET_MESSAGE_TYPE_CADET_LOCAL_PORT_OPEN:
+ s = "OPEN_PORT";
break;
/**
- * Ask the cadet service to destroy a tunnel
+ * Close port
*/
- case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY:
- t = "CHAN_DESTROY";
+ case GNUNET_MESSAGE_TYPE_CADET_LOCAL_PORT_CLOSE:
+ s = "CLOSE_PORT";
break;
/**
- * Confirm the creation of a channel.
+ * Ask the cadet service to create a new tunnel
*/
- case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_ACK:
- t = "CHAN_ACK";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_OPEN:
+ s = "CHAN_CREAT";
break;
/**
- * Confirm the creation of a channel.
+ * Ask the cadet service to destroy a tunnel
*/
- case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_NACK:
- t = "CHAN_NACK";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY:
+ s = "CHAN_DSTRY";
break;
/**
- * OTR encrypted payload.
+ * Confirm the creation of a channel.
*/
- case GNUNET_MESSAGE_TYPE_CADET_ENCRYPTED:
- t = "OTR";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_OPEN_ACK:
+ s = "CHAN_ACK";
break;
/**
- * Axolotl encrypted payload.
+ * Confirm the creation of a channel.
*/
- case GNUNET_MESSAGE_TYPE_CADET_AX:
- t = "AX";
+ case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_OPEN_NACK_DEPRECATED:
+ s = "CHAN_NACK";
break;
/**
* Local payload traffic
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_DATA:
- t = "LOCAL_DATA";
+ s = "LOC_DATA";
break;
/**
* Local ACK for data.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_ACK:
- t = "LOCAL_ACK";
+ s = "LOC_ACK";
break;
/**
* Local monitoring of channels.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNELS:
- t = "INFO_CHANS";
+ s = "INFO_CHANS";
break;
/**
* Local monitoring of a channel.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL:
- t = "INFO_CHAN";
+ s = "INFO_CHAN";
break;
/**
* Local monitoring of service.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNELS:
- t = "INFO_TUNS";
+ s = "INFO_TUNS";
break;
/**
* Local monitoring of service.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNEL:
- t = "INFO_TUN";
+ s = "INFO_TUN";
break;
/**
* Local information about all connections of service.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CONNECTIONS:
- t = "INFO_CONNS";
+ s = "INFO_CONNS";
break;
/**
* Local information of service about a specific connection.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CONNECTION:
- t = "INFO_CONN";
+ s = "INFO_CONN";
break;
/**
* Local information about all peers known to the service.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS:
- t = "INFO_PEERS";
+ s = "INFO_PEERS";
break;
/**
* Local information of service about a specific peer.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER:
- t = "INFO_PEER";
+ s = "INFO_PEER";
break;
/**
* Traffic (net-cat style) used by the Command Line Interface.
*/
case GNUNET_MESSAGE_TYPE_CADET_CLI:
- t = "CLI";
+ s = "CLI";
break;
/**
* Debug request.
*/
case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_DUMP:
- t = "INFO_DUMP";
+ s = "INFO_DUMP";
break;
+ /**
+ * Used to mark the "payload" of a non-payload message.
+ */
+ case UINT16_MAX:
+ s = " N/A";
+ break;
+
+
default:
- SPRINTF(buf[idx], "%u (UNKNOWN)", m);
+ SPRINTF (buf[idx], "{UNK: %5u}", m);
return buf[idx];
}
- SPRINTF(buf[idx], "{%13s}", t);
+ SPRINTF (buf[idx], "{%10s}", s);
return buf[idx];
}
#else