aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-10-14 13:05:32 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-10-14 13:05:32 +0000
commitdde8ff327461c6eb62df698c1f059552f1a57505 (patch)
tree45a51e20de52dd92d1ab64f83622ff3823c601a7 /src/ats
parent02219049255a8612969794f661f3cd576014dc9b (diff)
downloadgnunet-dde8ff327461c6eb62df698c1f059552f1a57505.tar.gz
gnunet-dde8ff327461c6eb62df698c1f059552f1a57505.zip
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c34
-rw-r--r--src/ats/gnunet-service-ats_scheduling.c2
-rw-r--r--src/ats/test_ats_api.conf1
-rw-r--r--src/ats/test_ats_api_scheduling.c52
4 files changed, 57 insertions, 32 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 8a79889f3..213b43124 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -77,8 +77,11 @@ compare_address_it (void *cls,
77 77
78 if (0 == strcmp(aa->plugin, cac->search->plugin)) 78 if (0 == strcmp(aa->plugin, cac->search->plugin))
79 { 79 {
80 if ((aa->addr_len == cac->search->addr_len) && 80 if (aa->addr_len != cac->search->addr_len)
81 (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))) 81 return GNUNET_YES;
82 if (aa->addr_len == 0)
83 return GNUNET_YES;
84 if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
82 cac->result = aa; 85 cac->result = aa;
83 return GNUNET_NO; 86 return GNUNET_NO;
84 } 87 }
@@ -104,13 +107,17 @@ find_address (const struct GNUNET_PeerIdentity *peer,
104static void 107static void
105merge_ats (struct ATS_Address * dest, struct ATS_Address * source) 108merge_ats (struct ATS_Address * dest, struct ATS_Address * source)
106{ 109{
107 /*
108 int c_src = 0; 110 int c_src = 0;
109 int c_dest = 0; 111 int c_dest = 0;
110 struct GNUNET_TRANSPORT_ATS_Information * a_src = source->ats; 112 struct GNUNET_TRANSPORT_ATS_Information * a_src = source->ats;
111 struct GNUNET_TRANSPORT_ATS_Information * a_dest = dest->ats; 113 struct GNUNET_TRANSPORT_ATS_Information * a_dest = dest->ats;
114 struct ATS_Address * bigger = NULL;
112 115
113 int new_entries = dest->ats_count; 116 bigger = (dest->ats_count > source->ats_count) ? dest : source;
117 int new_entries = bigger->ats_count;
118
119 if (new_entries == 0)
120 return;
114 121
115 for (c_dest = 0; c_dest < dest->ats_count; c_dest ++) 122 for (c_dest = 0; c_dest < dest->ats_count; c_dest ++)
116 { 123 {
@@ -122,9 +129,8 @@ merge_ats (struct ATS_Address * dest, struct ATS_Address * source)
122 } 129 }
123 130
124 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 131 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
125 "Have %u new entries\n", 132 "Have %u entries to update and %u new entries\n",bigger->ats_count,
126 new_entries); 133 new_entries);
127*/
128} 134}
129 135
130void 136void
@@ -139,8 +145,7 @@ GAS_address_update (const struct GNUNET_PeerIdentity *peer,
139 struct ATS_Address * aa; 145 struct ATS_Address * aa;
140 struct ATS_Address * old; 146 struct ATS_Address * old;
141 147
142 aa = GNUNET_malloc (sizeof (struct ATS_Address) + 148 aa = GNUNET_malloc (sizeof (struct ATS_Address) + plugin_addr_len);
143 plugin_addr_len);
144 aa->ats = GNUNET_malloc(atsi_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information)); 149 aa->ats = GNUNET_malloc(atsi_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information));
145 150
146 aa->peer = *peer; 151 aa->peer = *peer;
@@ -148,7 +153,7 @@ GAS_address_update (const struct GNUNET_PeerIdentity *peer,
148 aa->ats_count = atsi_count; 153 aa->ats_count = atsi_count;
149 memcpy (aa->ats, atsi, atsi_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information)); 154 memcpy (aa->ats, atsi, atsi_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information));
150 aa->addr = &aa[1]; 155 aa->addr = &aa[1];
151 memcpy (&aa->addr, plugin_addr, plugin_addr_len); 156 memcpy (aa->addr, plugin_addr, plugin_addr_len);
152 aa->plugin = GNUNET_strdup (plugin_name); 157 aa->plugin = GNUNET_strdup (plugin_name);
153 aa->session_client = session_client; 158 aa->session_client = session_client;
154 aa->session_id = session_id; 159 aa->session_id = session_id;
@@ -172,6 +177,7 @@ GAS_address_update (const struct GNUNET_PeerIdentity *peer,
172 "Updated existing address for peer `%s' %X \n", 177 "Updated existing address for peer `%s' %X \n",
173 GNUNET_i2s (peer), old); 178 GNUNET_i2s (peer), old);
174 GNUNET_free (aa->ats); 179 GNUNET_free (aa->ats);
180 GNUNET_free (aa->plugin);
175 GNUNET_free (aa); 181 GNUNET_free (aa);
176 } 182 }
177 183
@@ -201,9 +207,13 @@ GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer,
201 aa->session_id = session_id; 207 aa->session_id = session_id;
202 208
203 res = find_address (peer, aa); 209 res = find_address (peer, aa);
210 GNUNET_assert (res != 0);
211
212 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
213 "Deleting address for peer `%s'\n",
214 GNUNET_i2s (peer));
204 215
205 GNUNET_break (GNUNET_YES == 216 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
206 GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
207 GNUNET_free (res->plugin); 217 GNUNET_free (res->plugin);
208 GNUNET_free_non_null (res->ats); 218 GNUNET_free_non_null (res->ats);
209 GNUNET_free (res); 219 GNUNET_free (res);
@@ -248,6 +258,8 @@ free_address_it (void *cls,
248 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 258 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
249 "Freeing address for peer `%s' %X\n", 259 "Freeing address for peer `%s' %X\n",
250 GNUNET_i2s (&aa->peer), aa); 260 GNUNET_i2s (&aa->peer), aa);
261 GNUNET_free (aa->plugin);
262 GNUNET_free_non_null (aa->ats);
251 GNUNET_free (aa); 263 GNUNET_free (aa);
252 return GNUNET_OK; 264 return GNUNET_OK;
253} 265}
diff --git a/src/ats/gnunet-service-ats_scheduling.c b/src/ats/gnunet-service-ats_scheduling.c
index 76c192107..066096bc2 100644
--- a/src/ats/gnunet-service-ats_scheduling.c
+++ b/src/ats/gnunet-service-ats_scheduling.c
@@ -317,7 +317,7 @@ GAS_handle_address_destroyed (void *cls, struct GNUNET_SERVER_Client *client,
317 plugin_name = &address[address_length]; 317 plugin_name = &address[address_length];
318 if ( (address_length + 318 if ( (address_length +
319 plugin_name_length + 319 plugin_name_length +
320 sizeof (struct AddressSuggestionMessage) != ntohs (message->size)) || 320 sizeof (struct AddressDestroyedMessage) != ntohs (message->size)) ||
321 (plugin_name[plugin_name_length - 1] != '\0') ) 321 (plugin_name[plugin_name_length - 1] != '\0') )
322 { 322 {
323 GNUNET_break (0); 323 GNUNET_break (0);
diff --git a/src/ats/test_ats_api.conf b/src/ats/test_ats_api.conf
index c2bb1942d..79e92af49 100644
--- a/src/ats/test_ats_api.conf
+++ b/src/ats/test_ats_api.conf
@@ -8,6 +8,7 @@ UNIXPATH = /tmp/test-ats-scheduling-arm.sock
8 8
9[ats] 9[ats]
10DEBUG = YES 10DEBUG = YES
11#PREFIX = valgrind --leak-check=full
11AUTOSTART = YES 12AUTOSTART = YES
12PORT = 12002 13PORT = 12002
13HOSTNAME = localhost 14HOSTNAME = localhost
diff --git a/src/ats/test_ats_api_scheduling.c b/src/ats/test_ats_api_scheduling.c
index 4ed68ba87..efc252380 100644
--- a/src/ats/test_ats_api_scheduling.c
+++ b/src/ats/test_ats_api_scheduling.c
@@ -46,9 +46,7 @@ static struct GNUNET_ATS_SchedulingHandle *ats;
46 46
47struct GNUNET_OS_Process * arm_proc; 47struct GNUNET_OS_Process * arm_proc;
48 48
49struct Address addr; 49
50struct PeerContext p;
51struct GNUNET_TRANSPORT_ATS_Information atsi[2];
52 50
53static int ret; 51static int ret;
54 52
@@ -73,6 +71,9 @@ struct PeerContext
73 struct Address * addr; 71 struct Address * addr;
74}; 72};
75 73
74struct Address addr[2];
75struct PeerContext p[2];
76struct GNUNET_TRANSPORT_ATS_Information atsi[2];
76 77
77static void 78static void
78stop_arm () 79stop_arm ()
@@ -139,11 +140,11 @@ address_suggest_cb (void *cls,
139{ 140{
140 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS suggests address `%s'\n", GNUNET_i2s (peer)); 141 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS suggests address `%s'\n", GNUNET_i2s (peer));
141 142
142 GNUNET_assert (0 == memcmp (peer, &p.id, sizeof (struct GNUNET_PeerIdentity))); 143 GNUNET_assert (0 == memcmp (peer, &p[0].id, sizeof (struct GNUNET_PeerIdentity)));
143 GNUNET_assert (0 == strcmp (plugin_name, addr.plugin)); 144 GNUNET_assert (0 == strcmp (plugin_name, addr[0].plugin));
144 GNUNET_assert (plugin_addr_len == addr.addr_len); 145 GNUNET_assert (plugin_addr_len == addr[0].addr_len);
145 GNUNET_assert (0 == memcmp (plugin_addr, addr.plugin, plugin_addr_len)); 146 GNUNET_assert (0 == memcmp (plugin_addr, addr[0].plugin, plugin_addr_len));
146 GNUNET_assert (addr.session == session); 147 GNUNET_assert (addr[0].session == session);
147 148
148 149
149 /* TODO ats merge 150 /* TODO ats merge
@@ -189,22 +190,29 @@ check (void *cls, char *const *args, const char *cfgfile,
189 } 190 }
190 191
191 /* set up peer */ 192 /* set up peer */
192 GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &p.id.hashPubKey); 193 GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &p[0].id.hashPubKey);
194 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", GNUNET_i2s (&p[0].id));
195
196 GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &p[1].id.hashPubKey);
197 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", GNUNET_i2s (&p[1].id));
193 198
199 addr[0].plugin = "test";
200 addr[0].session = NULL;
201 addr[0].addr = strdup("test");
202 addr[0].addr_len = 4;
194 203
195 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", GNUNET_i2s (&p.id)); 204 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testing address creation\n");
196 p.addr = &addr;
197 addr.plugin = "test";
198 addr.session = NULL;
199 addr.addr = NULL;
200 addr.addr_len = 0;
201 205
202 GNUNET_ATS_address_update(ats, &p.id, addr.plugin, addr.addr, addr.addr_len, addr.session, NULL, 0); 206 GNUNET_ATS_address_update(ats, &p[0].id, addr[0].plugin, addr[0].addr, addr[0].addr_len, addr[0].session, NULL, 0);
207
208 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testing ATS info creation\n");
203 209
204 atsi[0].type = htons (1); 210 atsi[0].type = htons (1);
205 atsi[0].type = htons (1); 211 atsi[0].type = htons (1);
206 212
207 GNUNET_ATS_address_update(ats, &p.id, addr.plugin, addr.addr, addr.addr_len, addr.session, atsi, 1); 213 GNUNET_ATS_address_update(ats, &p[0].id, addr[0].plugin, addr[0].addr, addr[0].addr_len, addr[0].session, atsi, 1);
214
215 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testing ATS info merging\n");
208 216
209 atsi[0].type = htons (1); 217 atsi[0].type = htons (1);
210 atsi[0].type = htons (2); 218 atsi[0].type = htons (2);
@@ -212,10 +220,14 @@ check (void *cls, char *const *args, const char *cfgfile,
212 atsi[1].type = htons (2); 220 atsi[1].type = htons (2);
213 atsi[1].type = htons (2); 221 atsi[1].type = htons (2);
214 222
215 GNUNET_ATS_address_update(ats, &p.id, addr.plugin, addr.addr, addr.addr_len, addr.session, atsi, 2); 223 GNUNET_ATS_address_update(ats, &p[0].id, addr[0].plugin, addr[0].addr, addr[0].addr_len, addr[0].session, atsi, 2);
224
225 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testing manual address deletion \n");
226 GNUNET_ATS_address_update(ats, &p[1].id, addr[0].plugin, addr[0].addr, addr[0].addr_len, addr[0].session, NULL, 0);
227 GNUNET_ATS_address_destroyed (ats, &p[1].id, addr[0].plugin, addr[0].addr, addr[0].addr_len, addr[0].session );
216 228
217 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requesting peer `%s'\n", GNUNET_i2s (&p.id)); 229 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requesting peer `%s'\n", GNUNET_i2s (&p[0].id));
218 GNUNET_ATS_suggest_address(ats, &p.id); 230 GNUNET_ATS_suggest_address(ats, &p[0].id);
219} 231}
220 232
221int 233int