+Sun May 2 13:49:10 CEST 2010
+ Fixed problem with platform-dependence of format for IP addresses
+ in HELLOs for TCP and UDP transport.
+ Reduced address length field in HELLOs to 16 bit (was 32 bit).
+ These changes break transport compatibility.
+
Fri Apr 16 18:19:05 CEST 2010
Nearly complete rewrite and new overall architecture. Many
features are still missing, but basic system seems to be
* the format:
*
* 1) transport-name (0-terminated)
- * 2) address-length (uint32_t, network byte order; possibly
+ * 2) address-length (uint16_t, network byte order; possibly
* unaligned!)
* 3) address expiration (GNUNET_TIME_AbsoluteNBO); possibly
* unaligned!)
GNUNET_HELLO_add_address (const char *tname,
struct GNUNET_TIME_Absolute expiration,
const void *addr,
- size_t addr_len, char *target, size_t max)
+ uint16_t addr_len, char *target, size_t max)
{
- uint32_t alen;
+ uint16_t alen;
size_t slen;
struct GNUNET_TIME_AbsoluteNBO exp;
slen = strlen (tname) + 1;
- if (slen + sizeof (uint32_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO) +
+ if (slen + sizeof (uint16_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO) +
addr_len > max)
return 0;
exp = GNUNET_TIME_absolute_hton (expiration);
- alen = htonl ((uint32_t) addr_len);
+ alen = htons (addr_len);
memcpy (target, tname, slen);
- memcpy (&target[slen], &alen, sizeof (uint32_t));
- slen += sizeof (uint32_t);
+ memcpy (&target[slen], &alen, sizeof (uint16_t));
+ slen += sizeof (uint16_t);
memcpy (&target[slen], &exp, sizeof (struct GNUNET_TIME_AbsoluteNBO));
slen += sizeof (struct GNUNET_TIME_AbsoluteNBO);
memcpy (&target[slen], addr, addr_len);
* @return size of the entry, or 0 if max is not large enough
*/
static size_t
-get_hello_address_size (const char *buf, size_t max, uint32_t * ralen)
+get_hello_address_size (const char *buf, size_t max, uint16_t * ralen)
{
const char *pos;
- uint32_t alen;
+ uint16_t alen;
size_t left;
size_t slen;
return 0;
}
pos++;
- if (left < sizeof (uint32_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO))
+ if (left < sizeof (uint16_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO))
{
/* not enough space for addrlen */
GNUNET_break_op (0);
return 0;
}
- memcpy (&alen, pos, sizeof (uint32_t));
- alen = ntohl (alen);
+ memcpy (&alen, pos, sizeof (uint16_t));
+ alen = ntohs (alen);
*ralen = alen;
- slen += alen + sizeof (uint32_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO);
+ slen += alen + sizeof (uint16_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO);
if (max < slen)
{
/* not enough space for addr */
size_t esize;
size_t wpos;
char *woff;
- uint32_t alen;
+ uint16_t alen;
struct GNUNET_TIME_AbsoluteNBO expire;
int iret;
{
const void *addr;
const char *tname;
- size_t addrlen;
+ uint16_t addrlen;
int found;
struct GNUNET_TIME_Absolute expiration;
};
get_match_exp (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct ExpireContext *ec = cls;
copy_latest (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct MergeContext *mc = cls;
struct ExpireContext ec;
delta_match (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct DeltaContext *dc = cls;
int ret;
struct GNUNET_TIME_Absolute expiration;
- size_t addrlen;
-
int found;
+
+ uint16_t addrlen;
+
};
find_other_matching (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct EqualsContext *ec = cls;
find_matching (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct EqualsContext *ec = cls;
check_has_addr (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr,
+ uint16_t addrlen)
{
int *arg = cls;
GNUNET_HELLO_add_address (const char *tname,
struct GNUNET_TIME_Absolute expiration,
const void *addr,
- size_t addr_len, char *target, size_t max);
+ uint16_t addr_len, char *target, size_t max);
/**
(*GNUNET_HELLO_AddressIterator) (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen);
+ const void *addr,
+ uint16_t addrlen);
/**
count_address (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct PrintContext *pc = cls;
pc->off++;
print_address (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
struct PrintContext *pc = cls;
GNUNET_TRANSPORT_address_lookup (sched,
discard_expired (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr, uint16_t addrlen)
{
const struct GNUNET_TIME_Absolute *now = cls;
if (now->value > expiration.value)
address_iterator (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr,
+ uint16_t addrlen)
{
int *flag = cls;
*flag = GNUNET_YES;
*/
GNUNET_SCHEDULER_TaskIdentifier revalidate_task;
- /**
- * Length of addr.
- */
- size_t addrlen;
-
/**
* The address.
*/
*/
uint32_t distance;
+ /**
+ * Length of addr.
+ */
+ uint16_t addrlen;
+
/**
* Have we ever estimated the latency of this address? Used to
* ensure that the first time we add an address, we immediately
/**
* Length of addr.
*/
- size_t addrlen;
+ uint16_t addrlen;
};
/**
* Size of address appended to this message
*/
- size_t addrlen;
+ uint16_t addrlen;
};
struct Session *session;
/**
- * Length of addr.
+ * Challenge number we used.
*/
- size_t addrlen;
+ uint32_t challenge;
/**
- * Challenge number we used.
+ * Length of addr.
*/
- uint32_t challenge;
+ uint16_t addrlen;
};
static const char*
a2s (const char *plugin,
const void *addr,
- size_t addr_len)
+ uint16_t addr_len)
{
struct TransportPlugin *p;
plugin_env_notify_address (void *cls,
const char *name,
const void *addr,
- size_t addrlen,
+ uint16_t addrlen,
struct GNUNET_TIME_Relative expires)
{
struct TransportPlugin *p = cls;
const char *tname,
struct Session *session,
const char *addr,
- size_t addrlen)
+ uint16_t addrlen)
{
struct ReadyList *head;
struct ForeignAddressList *pos;
const char *tname,
struct Session *session,
const char *addr,
- size_t addrlen)
+ uint16_t addrlen)
{
struct ReadyList *head;
struct ForeignAddressList *ret;
struct Session *session;
/**
- * Length of addr.
+ * Set to GNUNET_YES if the address exists.
*/
- size_t addrlen;
+ int exists;
/**
- * Set to GNUNET_YES if the address exists.
+ * Length of addr.
*/
- int exists;
+ uint16_t addrlen;
+
};
add_to_foreign_address_list (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr,
+ uint16_t addrlen)
{
struct NeighbourList *n = cls;
struct ForeignAddressList *fal;
run_validation (void *cls,
const char *tname,
struct GNUNET_TIME_Absolute expiration,
- const void *addr, size_t addrlen)
+ const void *addr,
+ uint16_t addrlen)
{
struct CheckHelloValidatedContext *chvc = cls;
struct GNUNET_PeerIdentity id;
handle_ping(void *cls, const struct GNUNET_MessageHeader *message,
const struct GNUNET_PeerIdentity *peer,
const char *sender_address,
- size_t sender_address_len)
+ uint16_t sender_address_len)
{
struct TransportPlugin *plugin = cls;
struct TransportPingMessage *ping;
uint32_t distance,
struct Session *session,
const char *sender_address,
- size_t sender_address_len)
+ uint16_t sender_address_len)
{
struct TransportPlugin *plugin = cls;
struct ReadyList *service_context;
uint32_t distance,
struct Session *session,
const char *sender_address,
- size_t sender_address_len);
+ uint16_t sender_address_len);
/**
typedef void (*GNUNET_TRANSPORT_AddressNotification) (void *cls,
const char *name,
const void *addr,
- size_t addrlen,
+ uint16_t addrlen,
struct
GNUNET_TIME_Relative
expires);
uint32_t distance,
struct Session *session,
const char *sender_address,
- size_t sender_address_len)
+ uint16_t sender_address_len)
{
/* do nothing */
return GNUNET_TIME_UNIT_ZERO;
notify_address (void *cls,
const char *name,
const void *addr,
- size_t addrlen, struct GNUNET_TIME_Relative expires)
+ uint16_t addrlen,
+ struct GNUNET_TIME_Relative expires)
{
}