diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-03-19 16:48:38 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-03-19 16:48:38 +0000 |
commit | cc3c044d1d00227473409f3125fc6a1bb90ebf8c (patch) | |
tree | d519ac3d655fc8e7bef34064aa676d234deec87e /src/ats | |
parent | e2cd40becaf2dda615712d4a0577d6750ad3c8e7 (diff) | |
download | gnunet-cc3c044d1d00227473409f3125fc6a1bb90ebf8c.tar.gz gnunet-cc3c044d1d00227473409f3125fc6a1bb90ebf8c.zip |
changes
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 25 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_performance.c | 18 |
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 | ||