diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-10-14 13:05:32 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-10-14 13:05:32 +0000 |
commit | dde8ff327461c6eb62df698c1f059552f1a57505 (patch) | |
tree | 45a51e20de52dd92d1ab64f83622ff3823c601a7 /src/ats | |
parent | 02219049255a8612969794f661f3cd576014dc9b (diff) | |
download | gnunet-dde8ff327461c6eb62df698c1f059552f1a57505.tar.gz gnunet-dde8ff327461c6eb62df698c1f059552f1a57505.zip |
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 34 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_scheduling.c | 2 | ||||
-rw-r--r-- | src/ats/test_ats_api.conf | 1 | ||||
-rw-r--r-- | src/ats/test_ats_api_scheduling.c | 52 |
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, | |||
104 | static void | 107 | static void |
105 | merge_ats (struct ATS_Address * dest, struct ATS_Address * source) | 108 | merge_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 | ||
130 | void | 136 | void |
@@ -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] |
10 | DEBUG = YES | 10 | DEBUG = YES |
11 | #PREFIX = valgrind --leak-check=full | ||
11 | AUTOSTART = YES | 12 | AUTOSTART = YES |
12 | PORT = 12002 | 13 | PORT = 12002 |
13 | HOSTNAME = localhost | 14 | HOSTNAME = 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 | ||
47 | struct GNUNET_OS_Process * arm_proc; | 47 | struct GNUNET_OS_Process * arm_proc; |
48 | 48 | ||
49 | struct Address addr; | 49 | |
50 | struct PeerContext p; | ||
51 | struct GNUNET_TRANSPORT_ATS_Information atsi[2]; | ||
52 | 50 | ||
53 | static int ret; | 51 | static int ret; |
54 | 52 | ||
@@ -73,6 +71,9 @@ struct PeerContext | |||
73 | struct Address * addr; | 71 | struct Address * addr; |
74 | }; | 72 | }; |
75 | 73 | ||
74 | struct Address addr[2]; | ||
75 | struct PeerContext p[2]; | ||
76 | struct GNUNET_TRANSPORT_ATS_Information atsi[2]; | ||
76 | 77 | ||
77 | static void | 78 | static void |
78 | stop_arm () | 79 | stop_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 | ||
221 | int | 233 | int |