struct GNUNET_CRYPTO_HashAsciiEncoded s_pid;
struct GNUNET_HashCode serv_desc;
struct GNUNET_CRYPTO_HashAsciiEncoded s_sd;
+ char* pos;
+ size_t len = (sizeof (uint32_t) * 2) + (sizeof (struct GNUNET_HashCode) * 2);
/* We cancel here as to not include the ns lookup in the timeout */
if (rh->timeout_task != GNUNET_SCHEDULER_NO_TASK)
}
/* Extracting VPN information FIXME rd parsing with NS API?*/
- if (4 != SSCANF ((char*)rd, "%d:%d:%s:%s", &af, &proto,
- (char*)&s_pid, (char*)&s_sd))
+ if (len != rd->data_size)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"GNS_PHASE_REC_VPN-%llu: Error parsing VPN RR!\n",
return;
}
+ pos = (char*)rd;
+ memcpy (&af, pos, sizeof (uint32_t));
+ pos += sizeof (uint32_t);
+ memcpy (&proto, pos, sizeof (uint32_t));
+ pos += sizeof (uint32_t);
+ memcpy (&s_pid, pos, sizeof (struct GNUNET_HashCode));
+ pos += sizeof (struct GNUNET_HashCode);
+ memcpy (&s_sd, pos, sizeof (struct GNUNET_HashCode));
+
+
if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_pid, &peer_id)) ||
(GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_sd, &serv_desc)))
{
uint32_t soa_retry;
uint32_t soa_expire;
uint32_t soa_min;
+ uint32_t *af;
+ uint32_t *proto;
+ char* vpn_str;
+ struct GNUNET_HashCode *h_peer;
+ struct GNUNET_HashCode *h_serv;
+ struct GNUNET_CRYPTO_HashAsciiEncoded s_peer;
+ struct GNUNET_CRYPTO_HashAsciiEncoded s_serv;
switch (type)
{
case GNUNET_NAMESTORE_TYPE_LEHO:
return GNUNET_strndup (data, data_size);
case GNUNET_NAMESTORE_TYPE_VPN:
- return GNUNET_strndup (data, data_size);
+ af = (uint32_t*)data;
+ proto = (uint32_t*)((char*)af + sizeof (uint32_t));
+ h_peer = (struct GNUNET_HashCode*)((char*)proto + sizeof (struct GNUNET_HashCode));
+ h_serv = (struct GNUNET_HashCode*)((char*)h_peer + sizeof (struct GNUNET_HashCode));
+
+ GNUNET_CRYPTO_hash_to_enc (h_peer, &s_peer);
+ GNUNET_CRYPTO_hash_to_enc (h_serv, &s_serv);
+ if (GNUNET_OK != GNUNET_asprintf (&vpn_str, "%d:%d:%s:%s", af, proto, (char*)&s_peer, (char*)&s_serv))
+ return NULL;
+ return vpn_str;
default:
GNUNET_break (0);
}
uint32_t soa_retry;
uint32_t soa_expire;
uint32_t soa_min;
- struct GNUNET_HashCode hash;
+ struct GNUNET_HashCode *h_peer;
+ struct GNUNET_HashCode *h_serv;
struct GNUNET_CRYPTO_HashAsciiEncoded s_peer;
struct GNUNET_CRYPTO_HashAsciiEncoded s_serv;
- int af;
- int proto;
+ uint32_t* af;
+ uint32_t* proto;
switch (type)
{
*data_size = strlen (s);
return GNUNET_OK;
case GNUNET_NAMESTORE_TYPE_VPN:
+
+ *data_size = sizeof (uint32_t) * 2;
+ *data_size += sizeof (struct GNUNET_HashCode) * 2;
+ *data = GNUNET_malloc (*data_size);
+ af = (uint32_t*)(*data);
+ proto = (uint32_t*) ((char*)af + sizeof (uint32_t));
+ h_peer = (struct GNUNET_HashCode*)((char*)proto + sizeof (uint32_t));
+ h_serv = (struct GNUNET_HashCode*)((char*)h_peer + sizeof (struct GNUNET_HashCode));
+
if (4 != SSCANF (s,"%d:%d:%s:%s",
- &af, &proto, (char*)&s_peer, (char*)&s_serv))
+ af, proto, (char*)&s_peer, (char*)&s_serv))
{
return GNUNET_SYSERR;
}
- if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_peer, &hash)) ||
- (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_serv, &hash)))
+ if ((GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_peer, h_peer)) ||
+ (GNUNET_OK != GNUNET_CRYPTO_hash_from_string ((char*)&s_serv, h_serv)))
{
+ GNUNET_free (*data);
return GNUNET_SYSERR;
}
- *data = GNUNET_strdup (s);
- *data_size = strlen (s);
return GNUNET_OK;
default:
GNUNET_break (0);