/*
This file is part of GNUnet.
- Copyright (C) 2011-2015 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2011-2015 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
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
* @file ats/gnunet-service-ats_performance.c
* @brief ats service, interaction with 'performance' API
* @author Matthias Wachs
* @author Christian Grothoff
+ *
+ * TODO:
+ * - simplify functions by passing a `struct GNUNET_HELLO_Address`
*/
#include "platform.h"
#include "gnunet-service-ats.h"
* to maintain a connection to a peer;
* #GNUNET_NO if the address is not actively used;
* #GNUNET_SYSERR if this address is no longer available for ATS
- * @param atsi performance data for the address
- * @param atsi_count number of performance records in @a atsi
+ * @param prop performance data for the address
+ * @param local_address_info information about the local flags for the address
* @param bandwidth_out assigned outbound bandwidth
* @param bandwidth_in assigned inbound bandwidth
*/
const void *plugin_addr,
size_t plugin_addr_len,
int active,
- const struct GNUNET_ATS_Information *atsi,
- uint32_t atsi_count,
+ const struct GNUNET_ATS_Properties *prop,
+ enum GNUNET_HELLO_AddressInfo local_address_info,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
{
struct PeerInformationMessage *msg;
size_t plugin_name_length = strlen (plugin_name) + 1;
size_t msize =
- sizeof (struct PeerInformationMessage) +
- atsi_count * sizeof (struct GNUNET_ATS_Information) + plugin_addr_len +
- plugin_name_length;
+ sizeof (struct PeerInformationMessage) +
+ plugin_addr_len +
+ plugin_name_length;
char buf[msize] GNUNET_ALIGN;
- struct GNUNET_ATS_Information *atsp;
+ struct GNUNET_SERVER_NotificationContext **uc;
struct GNUNET_SERVER_NotificationContext *nc;
char *addrp;
+ if (NULL != prop)
+ GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != prop->scope);
GNUNET_assert (msize < GNUNET_SERVER_MAX_MESSAGE_SIZE);
- GNUNET_assert (atsi_count <
- GNUNET_SERVER_MAX_MESSAGE_SIZE /
- sizeof (struct GNUNET_ATS_Information));
msg = (struct PeerInformationMessage *) buf;
msg->header.size = htons (msize);
msg->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_PEER_INFORMATION);
msg->id = htonl (0);
- msg->ats_count = htonl (atsi_count);
msg->peer = *peer;
msg->address_length = htons (plugin_addr_len);
msg->address_active = ntohl ((uint32_t) active);
msg->plugin_name_length = htons (plugin_name_length);
msg->bandwidth_out = bandwidth_out;
msg->bandwidth_in = bandwidth_in;
- atsp = (struct GNUNET_ATS_Information *) &msg[1];
- memcpy (atsp, atsi, sizeof (struct GNUNET_ATS_Information) * atsi_count);
- addrp = (char *) &atsp[atsi_count];
+ if (NULL != prop)
+ GNUNET_ATS_properties_hton (&msg->properties,
+ prop);
+ else
+ memset (&msg->properties,
+ 0,
+ sizeof (struct GNUNET_ATS_Properties));
+ msg->address_local_info = htonl (local_address_info);
+ addrp = (char *) &msg[1];
memcpy (addrp, plugin_addr, plugin_addr_len);
strcpy (&addrp[plugin_addr_len], plugin_name);
if (NULL == client)
}
else
{
- nc = *GNUNET_SERVER_client_get_user_context (client,
+ uc = GNUNET_SERVER_client_get_user_context (client,
struct GNUNET_SERVER_NotificationContext *);
- if (NULL == nc)
+ if (NULL == uc)
{
GNUNET_break (0);
return;
}
+ nc = *uc;
GNUNET_SERVER_notification_context_unicast (nc,
client,
&msg->header,
* to maintain a connection to a peer;
* #GNUNET_NO if the address is not actively used;
* #GNUNET_SYSERR if this address is no longer available for ATS
- * @param atsi performance data for the address
- * @param atsi_count number of performance records in @a atsi
+ * @param prop performance data for the address
+ * @param local_address_info information about the local flags for the address
* @param bandwidth_out assigned outbound bandwidth
* @param bandwidth_in assigned inbound bandwidth
*/
const void *plugin_addr,
size_t plugin_addr_len,
int active,
- const struct GNUNET_ATS_Information *atsi,
- uint32_t atsi_count,
+ const struct GNUNET_ATS_Properties *prop,
+ enum GNUNET_HELLO_AddressInfo local_address_info,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
{
+ GNUNET_break ( (NULL == prop) ||
+ (GNUNET_ATS_NET_UNSPECIFIED != prop->scope) );
notify_client (NULL,
peer,
plugin_name,
plugin_addr,
plugin_addr_len,
active,
- atsi, atsi_count,
+ prop,
+ local_address_info,
bandwidth_out,
bandwidth_in);
GNUNET_STATISTICS_update (GSA_stats,
* @param plugin_addr address
* @param plugin_addr_len length of @a plugin_addr
* @param active is address actively used
- * @param atsi ats performance information
- * @param atsi_count number of ats performance elements in @a atsi
+ * @param prop performance information
+ * @param local_address_info information about the local flags for the address
* @param bandwidth_out current outbound bandwidth assigned to address
* @param bandwidth_in current inbound bandwidth assigned to address
*/
const void *plugin_addr,
size_t plugin_addr_len,
int active,
- const struct GNUNET_ATS_Information *atsi,
- uint32_t atsi_count,
+ const struct GNUNET_ATS_Properties *prop,
+ enum GNUNET_HELLO_AddressInfo local_address_info,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
{
plugin_name,
(unsigned int) ntohl (bandwidth_out.value__),
(unsigned int) ntohl (bandwidth_in.value__));
+ GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != prop->scope);
notify_client (client,
id,
plugin_name,
plugin_addr,
plugin_addr_len,
active,
- atsi, atsi_count,
+ prop,
+ local_address_info,
bandwidth_out,
bandwidth_in);
}