aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses_mlp.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-02-17 15:32:23 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-02-17 15:32:23 +0000
commit847f1b045f087dac3ed2b8989a0512610b58b00d (patch)
treef6bb4b5770545082c59d1cb369b77154fd76299c /src/ats/gnunet-service-ats_addresses_mlp.c
parentdde12b107415d22cf0dbe44e2a0b88a974b59ae0 (diff)
downloadgnunet-847f1b045f087dac3ed2b8989a0512610b58b00d.tar.gz
gnunet-847f1b045f087dac3ed2b8989a0512610b58b00d.zip
- changes to ats
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses_mlp.c')
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c
index 50d1e42a2..0c9e0b328 100644
--- a/src/ats/gnunet-service-ats_addresses_mlp.c
+++ b/src/ats/gnunet-service-ats_addresses_mlp.c
@@ -1026,17 +1026,20 @@ GAS_mlp_solve_problem (struct GAS_MLP_Handle *mlp)
1026 mlpi = a->mlp_information; 1026 mlpi = a->mlp_information;
1027 1027
1028 b = glp_mip_col_val(mlp->prob, mlpi->c_b); 1028 b = glp_mip_col_val(mlp->prob, mlpi->c_b);
1029 n = glp_mip_col_val(mlp->prob, mlpi->c_n); 1029 mlpi->b = b;
1030 1030
1031 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tAddress %f %f\n", n, b); 1031 n = glp_mip_col_val(mlp->prob, mlpi->c_n);
1032 if (n == 1.0)
1033 mlpi->n = GNUNET_YES;
1034 else
1035 mlpi->n = GNUNET_NO;
1032 1036
1037 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tAddress %s %f\n",
1038 (n == 1.0) ? "[x]" : "[ ]", b);
1033 } 1039 }
1034 1040
1035 } 1041 }
1036 1042
1037
1038
1039
1040 if (mlp->mlp_task != GNUNET_SCHEDULER_NO_TASK) 1043 if (mlp->mlp_task != GNUNET_SCHEDULER_NO_TASK)
1041 { 1044 {
1042 GNUNET_SCHEDULER_cancel(mlp->mlp_task); 1045 GNUNET_SCHEDULER_cancel(mlp->mlp_task);
@@ -1416,6 +1419,41 @@ GAS_mlp_address_delete (struct GAS_MLP_Handle *mlp, struct GNUNET_CONTAINER_Mult
1416 } 1419 }
1417} 1420}
1418 1421
1422static int
1423mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *value)
1424{
1425
1426 struct ATS_Address **aa = (struct ATS_Address **)cls;
1427 struct ATS_Address *addr = value;
1428 struct MLP_information *mlpi = addr->mlp_information;
1429 if (mlpi->n == GNUNET_YES)
1430 {
1431 *aa = addr;
1432 return GNUNET_NO;
1433 }
1434 return GNUNET_YES;
1435}
1436
1437
1438/**
1439 * Get the preferred address for a specific peer
1440 *
1441 * @param mlp the MLP Handle
1442 * @param peer the peer
1443 * @return suggested address
1444 */
1445struct ATS_Address *
1446GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp,
1447 struct GNUNET_CONTAINER_MultiHashMap * addresses,
1448 const struct GNUNET_PeerIdentity *peer)
1449{
1450 struct ATS_Address * aa = NULL;
1451 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n", GNUNET_i2s (peer));
1452 GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, mlp_get_preferred_address_it, &aa);
1453 return aa;
1454}
1455
1456
1419/** 1457/**
1420 * Changes the preferences for a peer in the MLP problem 1458 * Changes the preferences for a peer in the MLP problem
1421 * 1459 *