aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-10-18 12:49:23 +0000
committerChristian Grothoff <christian@grothoff.org>2015-10-18 12:49:23 +0000
commit2128c61720c9019302a1add71796c69d2ee36fc4 (patch)
treeb665fa4994da1132b6e5d85312bfacab9460d8a9 /src
parent9cd0d5068f3341fe8451a61872894f28a5ac9047 (diff)
downloadgnunet-2128c61720c9019302a1add71796c69d2ee36fc4.tar.gz
gnunet-2128c61720c9019302a1add71796c69d2ee36fc4.zip
add 'strength' argument to address suggestion request for ATS
Diffstat (limited to 'src')
-rw-r--r--src/ats/ats.h8
-rw-r--r--src/ats/ats_api_connectivity.c17
-rw-r--r--src/ats/ats_api_scheduling.c1
-rw-r--r--src/ats/gnunet-service-ats_connectivity.c13
-rw-r--r--src/include/gnunet_ats_service.h5
-rw-r--r--src/transport/gnunet-service-transport_neighbours.c3
6 files changed, 29 insertions, 18 deletions
diff --git a/src/ats/ats.h b/src/ats/ats.h
index 3a7f28a64..5c1e806b6 100644
--- a/src/ats/ats.h
+++ b/src/ats/ats.h
@@ -82,7 +82,7 @@ struct ClientStartMessage
82 82
83 83
84/** 84/**
85 * Scheduling client to ATS service: we would like to have 85 * Connectivity client to ATS service: we would like to have
86 * address suggestions for this peer. 86 * address suggestions for this peer.
87 */ 87 */
88struct RequestAddressMessage 88struct RequestAddressMessage
@@ -95,9 +95,9 @@ struct RequestAddressMessage
95 struct GNUNET_MessageHeader header; 95 struct GNUNET_MessageHeader header;
96 96
97 /** 97 /**
98 * Always zero. 98 * How "strong" is our need for an address for this peer?
99 */ 99 */
100 uint32_t reserved GNUNET_PACKED; 100 uint32_t strength GNUNET_PACKED;
101 101
102 /** 102 /**
103 * Peer to get address suggestions for. 103 * Peer to get address suggestions for.
@@ -107,7 +107,7 @@ struct RequestAddressMessage
107 107
108 108
109/** 109/**
110 * ATS client to ATS service: here is another address you can use. 110 * Scheduling client to ATS service: here is another address you can use.
111 */ 111 */
112struct AddressAddMessage 112struct AddressAddMessage
113{ 113{
diff --git a/src/ats/ats_api_connectivity.c b/src/ats/ats_api_connectivity.c
index 4099cadbd..1012e9cee 100644
--- a/src/ats/ats_api_connectivity.c
+++ b/src/ats/ats_api_connectivity.c
@@ -45,6 +45,11 @@ struct GNUNET_ATS_ConnectivitySuggestHandle
45 * Connecitivity handle this suggestion handle belongs to. 45 * Connecitivity handle this suggestion handle belongs to.
46 */ 46 */
47 struct GNUNET_ATS_ConnectivityHandle *ch; 47 struct GNUNET_ATS_ConnectivityHandle *ch;
48
49 /**
50 * How urgent is the request.
51 */
52 uint32_t strength;
48}; 53};
49 54
50 55
@@ -174,13 +179,14 @@ transmit_suggestion (void *cls,
174 void *value) 179 void *value)
175{ 180{
176 struct GNUNET_ATS_ConnectivityHandle *ch = cls; 181 struct GNUNET_ATS_ConnectivityHandle *ch = cls;
182 struct GNUNET_ATS_ConnectivitySuggestHandle *sh = value;
177 struct GNUNET_MQ_Envelope *ev; 183 struct GNUNET_MQ_Envelope *ev;
178 struct RequestAddressMessage *m; 184 struct RequestAddressMessage *m;
179 185
180 if (NULL == ch->mq) 186 if (NULL == ch->mq)
181 return GNUNET_SYSERR; 187 return GNUNET_SYSERR;
182 ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS); 188 ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS);
183 m->reserved = htonl (0); 189 m->strength = htonl (sh->strength);
184 m->peer = *peer; 190 m->peer = *peer;
185 GNUNET_MQ_send (ch->mq, ev); 191 GNUNET_MQ_send (ch->mq, ev);
186 return GNUNET_OK; 192 return GNUNET_OK;
@@ -244,7 +250,7 @@ GNUNET_ATS_connectivity_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
244 250
245 251
246/** 252/**
247 * Function called to free all `struct GNUNET_ATS_SuggestHandles` 253 * Function called to free all `struct GNUNET_ATS_ConnectivitySuggestHandle`s
248 * in the map. 254 * in the map.
249 * 255 *
250 * @param cls NULL 256 * @param cls NULL
@@ -303,11 +309,13 @@ GNUNET_ATS_connectivity_done (struct GNUNET_ATS_ConnectivityHandle *ch)
303 * 309 *
304 * @param ch handle 310 * @param ch handle
305 * @param peer identity of the peer we need an address for 311 * @param peer identity of the peer we need an address for
312 * @param strength how urgent is the need for such a suggestion
306 * @return suggest handle, NULL if a request is already pending 313 * @return suggest handle, NULL if a request is already pending
307 */ 314 */
308struct GNUNET_ATS_ConnectivitySuggestHandle * 315struct GNUNET_ATS_ConnectivitySuggestHandle *
309GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch, 316GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch,
310 const struct GNUNET_PeerIdentity *peer) 317 const struct GNUNET_PeerIdentity *peer,
318 uint32_t strength)
311{ 319{
312 struct GNUNET_ATS_ConnectivitySuggestHandle *s; 320 struct GNUNET_ATS_ConnectivitySuggestHandle *s;
313 321
@@ -317,6 +325,7 @@ GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch,
317 s = GNUNET_new (struct GNUNET_ATS_ConnectivitySuggestHandle); 325 s = GNUNET_new (struct GNUNET_ATS_ConnectivitySuggestHandle);
318 s->ch = ch; 326 s->ch = ch;
319 s->id = *peer; 327 s->id = *peer;
328 s->strength = strength;
320 if (GNUNET_OK != 329 if (GNUNET_OK !=
321 GNUNET_CONTAINER_multipeermap_put (ch->sug_requests, 330 GNUNET_CONTAINER_multipeermap_put (ch->sug_requests,
322 &s->id, 331 &s->id,
@@ -360,7 +369,7 @@ GNUNET_ATS_connectivity_suggest_cancel (struct GNUNET_ATS_ConnectivitySuggestHan
360 return; 369 return;
361 } 370 }
362 ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL); 371 ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL);
363 m->reserved = htonl (0); 372 m->strength = htonl (0);
364 m->peer = sh->id; 373 m->peer = sh->id;
365 GNUNET_MQ_send (ch->mq, ev); 374 GNUNET_MQ_send (ch->mq, ev);
366 GNUNET_free (sh); 375 GNUNET_free (sh);
diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c
index d7a5a83a1..ab8a8711d 100644
--- a/src/ats/ats_api_scheduling.c
+++ b/src/ats/ats_api_scheduling.c
@@ -247,7 +247,6 @@ find_session (struct GNUNET_ATS_SchedulingHandle *sh,
247 sizeof (struct GNUNET_PeerIdentity))) 247 sizeof (struct GNUNET_PeerIdentity)))
248 { 248 {
249 GNUNET_break (0); 249 GNUNET_break (0);
250 force_reconnect (sh);
251 return NULL; 250 return NULL;
252 } 251 }
253 return ar; 252 return ar;
diff --git a/src/ats/gnunet-service-ats_connectivity.c b/src/ats/gnunet-service-ats_connectivity.c
index 8c103a33c..7bde6e354 100644
--- a/src/ats/gnunet-service-ats_connectivity.c
+++ b/src/ats/gnunet-service-ats_connectivity.c
@@ -73,7 +73,7 @@ GAS_connectivity_has_peer (void *cls,
73 73
74 74
75/** 75/**
76 * Handle 'request address' messages from clients. 76 * Handle #GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS messages from clients.
77 * 77 *
78 * @param cls unused, NULL 78 * @param cls unused, NULL
79 * @param client client that sent the request 79 * @param client client that sent the request
@@ -90,8 +90,8 @@ GAS_handle_request_address (void *cls,
90 90
91 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 91 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
92 "Received `%s' message\n", 92 "Received `%s' message\n",
93 "REQUEST_ADDRESS"); 93 "GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS");
94 GNUNET_break (0 == ntohl (msg->reserved)); 94 /* FIXME: should not ignore "msg->strength" */
95 cr = GNUNET_new (struct ConnectionRequest); 95 cr = GNUNET_new (struct ConnectionRequest);
96 cr->client = client; 96 cr->client = client;
97 (void) GNUNET_CONTAINER_multipeermap_put (connection_requests, 97 (void) GNUNET_CONTAINER_multipeermap_put (connection_requests,
@@ -137,7 +137,8 @@ free_matching_requests (void *cls,
137 137
138 138
139/** 139/**
140 * Handle 'request address cancel' messages from clients. 140 * Handle #GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL messages
141 * from clients.
141 * 142 *
142 * @param cls unused, NULL 143 * @param cls unused, NULL
143 * @param client client that sent the request 144 * @param client client that sent the request
@@ -152,9 +153,9 @@ GAS_handle_request_address_cancel (void *cls,
152 (const struct RequestAddressMessage *) message; 153 (const struct RequestAddressMessage *) message;
153 154
154 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 155 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
155 "Received REQUEST_ADDRESS_CANCEL message for peer %s\n", 156 "Received GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL message for peer %s\n",
156 GNUNET_i2s (&msg->peer)); 157 GNUNET_i2s (&msg->peer));
157 GNUNET_break (0 == ntohl (msg->reserved)); 158 GNUNET_break (0 == ntohl (msg->strength));
158 GNUNET_CONTAINER_multipeermap_get_multiple (connection_requests, 159 GNUNET_CONTAINER_multipeermap_get_multiple (connection_requests,
159 &msg->peer, 160 &msg->peer,
160 &free_matching_requests, 161 &free_matching_requests,
diff --git a/src/include/gnunet_ats_service.h b/src/include/gnunet_ats_service.h
index 4264f22a4..32e98abd6 100644
--- a/src/include/gnunet_ats_service.h
+++ b/src/include/gnunet_ats_service.h
@@ -302,12 +302,13 @@ GNUNET_ATS_connectivity_done (struct GNUNET_ATS_ConnectivityHandle *ch);
302 * 302 *
303 * @param ch handle 303 * @param ch handle
304 * @param peer identity of the peer we need an address for 304 * @param peer identity of the peer we need an address for
305 * TODO: add argument to allow client to express 'strength's of request 305 * @param strength how urgent is the need for such a suggestion
306 * @return suggestion handle, NULL if request is already pending 306 * @return suggestion handle, NULL if request is already pending
307 */ 307 */
308struct GNUNET_ATS_ConnectivitySuggestHandle * 308struct GNUNET_ATS_ConnectivitySuggestHandle *
309GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch, 309GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch,
310 const struct GNUNET_PeerIdentity *peer); 310 const struct GNUNET_PeerIdentity *peer,
311 uint32_t strength);
311 312
312 313
313/** 314/**
diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c
index d41fa6582..07af225c1 100644
--- a/src/transport/gnunet-service-transport_neighbours.c
+++ b/src/transport/gnunet-service-transport_neighbours.c
@@ -2213,7 +2213,8 @@ setup_neighbour (const struct GNUNET_PeerIdentity *peer)
2213 n, 2213 n,
2214 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 2214 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
2215 n->suggest_handle = GNUNET_ATS_connectivity_suggest (GST_ats_connect, 2215 n->suggest_handle = GNUNET_ATS_connectivity_suggest (GST_ats_connect,
2216 peer); 2216 peer,
2217 0);
2217 2218
2218 return n; 2219 return n;
2219} 2220}