aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-03-19 16:48:38 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-03-19 16:48:38 +0000
commitcc3c044d1d00227473409f3125fc6a1bb90ebf8c (patch)
treed519ac3d655fc8e7bef34064aa676d234deec87e /src/ats
parente2cd40becaf2dda615712d4a0577d6750ad3c8e7 (diff)
downloadgnunet-cc3c044d1d00227473409f3125fc6a1bb90ebf8c.tar.gz
gnunet-cc3c044d1d00227473409f3125fc6a1bb90ebf8c.zip
changes
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c25
-rw-r--r--src/ats/gnunet-service-ats_performance.c18
2 files changed, 43 insertions, 0 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 05ff2bc9d..8ff9b2a5e 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -399,39 +399,56 @@ disassemble_ats_information (const struct GNUNET_ATS_Information *src,
399 struct ATS_Address *dest) 399 struct ATS_Address *dest)
400{ 400{
401 int i; 401 int i;
402 int change = GNUNET_NO;
402 int res = 0; 403 int res = 0;
403 for (i = 0; i < ats_count; i++) 404 for (i = 0; i < ats_count; i++)
404 switch (ntohl (src[i].type)) 405 switch (ntohl (src[i].type))
405 { 406 {
406 case GNUNET_ATS_UTILIZATION_UP: 407 case GNUNET_ATS_UTILIZATION_UP:
408 if (dest->atsp_utilization_out.value__ != src[i].value)
409 change = GNUNET_YES;
407 dest->atsp_utilization_out.value__ = src[i].value; 410 dest->atsp_utilization_out.value__ = src[i].value;
408 res ++; 411 res ++;
409 break; 412 break;
410 case GNUNET_ATS_UTILIZATION_DOWN: 413 case GNUNET_ATS_UTILIZATION_DOWN:
414 if (dest->atsp_utilization_in.value__ != src[i].value)
415 change = GNUNET_YES;
411 dest->atsp_utilization_in.value__ = src[i].value; 416 dest->atsp_utilization_in.value__ = src[i].value;
412 res ++; 417 res ++;
413 break; 418 break;
414 case GNUNET_ATS_QUALITY_NET_DELAY: 419 case GNUNET_ATS_QUALITY_NET_DELAY:
420 if (dest->atsp_latency.rel_value != src[i].value)
421 change = GNUNET_YES;
415 dest->atsp_latency.rel_value = ntohl (src[i].value); 422 dest->atsp_latency.rel_value = ntohl (src[i].value);
416 res ++; 423 res ++;
417 break; 424 break;
418 case GNUNET_ATS_QUALITY_NET_DISTANCE: 425 case GNUNET_ATS_QUALITY_NET_DISTANCE:
426 if (dest->atsp_distance!= src[i].value)
427 change = GNUNET_YES;
419 dest->atsp_distance = ntohl (src[i].value); 428 dest->atsp_distance = ntohl (src[i].value);
420 res ++; 429 res ++;
421 break; 430 break;
422 case GNUNET_ATS_COST_WAN: 431 case GNUNET_ATS_COST_WAN:
432 if (dest->atsp_cost_wan != src[i].value)
433 change = GNUNET_YES;
423 dest->atsp_cost_wan = ntohl (src[i].value); 434 dest->atsp_cost_wan = ntohl (src[i].value);
424 res ++; 435 res ++;
425 break; 436 break;
426 case GNUNET_ATS_COST_LAN: 437 case GNUNET_ATS_COST_LAN:
438 if (dest->atsp_cost_lan != src[i].value)
439 change = GNUNET_YES;
427 dest->atsp_cost_lan = ntohl (src[i].value); 440 dest->atsp_cost_lan = ntohl (src[i].value);
428 res ++; 441 res ++;
429 break; 442 break;
430 case GNUNET_ATS_COST_WLAN: 443 case GNUNET_ATS_COST_WLAN:
444 if (dest->atsp_cost_wlan != src[i].value)
445 change = GNUNET_YES;
431 dest->atsp_cost_wlan = ntohl (src[i].value); 446 dest->atsp_cost_wlan = ntohl (src[i].value);
432 res ++; 447 res ++;
433 break; 448 break;
434 case GNUNET_ATS_NETWORK_TYPE: 449 case GNUNET_ATS_NETWORK_TYPE:
450 if (dest->atsp_network_type != src[i].value)
451 change = GNUNET_YES;
435 dest->atsp_network_type = ntohl (src[i].value); 452 dest->atsp_network_type = ntohl (src[i].value);
436 res ++; 453 res ++;
437 break; 454 break;
@@ -443,6 +460,14 @@ disassemble_ats_information (const struct GNUNET_ATS_Information *src,
443 GNUNET_break (0); 460 GNUNET_break (0);
444 break; 461 break;
445 } 462 }
463 if (GNUNET_YES == change)
464 {
465 struct GNUNET_ATS_Information *destats;
466 int ats_count;
467 ats_count = assemble_ats_information (dest, &destats);
468 GAS_handle_performance_update (&dest->peer, destats, ats_count);
469 GNUNET_free (destats);
470 }
446 return res; 471 return res;
447} 472}
448 473
diff --git a/src/ats/gnunet-service-ats_performance.c b/src/ats/gnunet-service-ats_performance.c
index e82613471..a6760b368 100644
--- a/src/ats/gnunet-service-ats_performance.c
+++ b/src/ats/gnunet-service-ats_performance.c
@@ -532,11 +532,29 @@ GAS_handle_performance_update (struct GNUNET_PeerIdentity *peer,
532 struct PerformanceClient *cur; 532 struct PerformanceClient *cur;
533 struct PerformanceMonitorClient *curm; 533 struct PerformanceMonitorClient *curm;
534 struct MonitorResponseMessage *mrm; 534 struct MonitorResponseMessage *mrm;
535 size_t msglen;
536
537
538 msglen = sizeof (struct MonitorResponseMessage) +
539 ats_count * sizeof (struct GNUNET_ATS_Information);
540 mrm = GNUNET_malloc (msglen);
541
542 mrm->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_MONITOR_RESPONSE);
543 mrm->header.size = htons (msglen);
544 mrm->ats_count = htonl (ats_count);
545 mrm->peer = *peer;
546
535 for (cur = pc_head; NULL != cur; cur = cur->next) 547 for (cur = pc_head; NULL != cur; cur = cur->next)
536 for (curm = cur->pm_head; NULL != curm; curm = curm->next) 548 for (curm = cur->pm_head; NULL != curm; curm = curm->next)
537 { 549 {
538 /* Notify client about update */ 550 /* Notify client about update */
551 mrm->id = curm->id;
552 GNUNET_SERVER_notification_context_unicast (nc,
553 cur->client,
554 (struct GNUNET_MessageHeader *) &mrm,
555 GNUNET_YES);
539 } 556 }
557 GNUNET_free (mrm);
540} 558}
541 559
542 560