aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_plugins.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-02-05 21:41:58 +0000
committerChristian Grothoff <christian@grothoff.org>2015-02-05 21:41:58 +0000
commitb8d5c4c9220576e85b4eec4c7ffa0390ba887fb5 (patch)
treef93ff7c7d94c81f5182e1c4bc7fd829f4fc9a609 /src/ats/gnunet-service-ats_plugins.c
parentd4cb0035c1248e050d906e9018d36a9f5d19eb73 (diff)
downloadgnunet-b8d5c4c9220576e85b4eec4c7ffa0390ba887fb5.tar.gz
gnunet-b8d5c4c9220576e85b4eec4c7ffa0390ba887fb5.zip
first pass at cleaning up ATS plugin API
Diffstat (limited to 'src/ats/gnunet-service-ats_plugins.c')
-rw-r--r--src/ats/gnunet-service-ats_plugins.c73
1 files changed, 26 insertions, 47 deletions
diff --git a/src/ats/gnunet-service-ats_plugins.c b/src/ats/gnunet-service-ats_plugins.c
index 47761fc14..7e03a1a7e 100644
--- a/src/ats/gnunet-service-ats_plugins.c
+++ b/src/ats/gnunet-service-ats_plugins.c
@@ -39,12 +39,12 @@
39static int ats_mode; 39static int ats_mode;
40 40
41/** 41/**
42 * Solver handle. FIXME: TYPE!? 42 * Solver handle.
43 */ 43 */
44static void *solver; 44static struct GNUNET_ATS_SolverFunctions *sf;
45 45
46/** 46/**
47 * Solver functions. FIXME. 47 * Solver environment.
48 */ 48 */
49static struct GNUNET_ATS_PluginEnvironment env; 49static struct GNUNET_ATS_PluginEnvironment env;
50 50
@@ -67,7 +67,7 @@ GAS_normalized_preference_changed (const struct GNUNET_PeerIdentity *peer,
67 double pref_rel) 67 double pref_rel)
68{ 68{
69 /* Tell solver about update */ 69 /* Tell solver about update */
70 env.sf.s_pref (solver, peer, kind, pref_rel); 70 sf->s_pref (sf->cls, peer, kind, pref_rel);
71} 71}
72 72
73 73
@@ -88,11 +88,11 @@ GAS_normalized_property_changed (struct ATS_Address *address,
88 GNUNET_ATS_print_property_type (type), 88 GNUNET_ATS_print_property_type (type),
89 GNUNET_i2s (&address->peer), 89 GNUNET_i2s (&address->peer),
90 prop_rel); 90 prop_rel);
91 env.sf.s_address_update_property (solver, 91 sf->s_address_update_property (sf->cls,
92 address, 92 address,
93 type, 93 type,
94 0, 94 0,
95 prop_rel); 95 prop_rel);
96} 96}
97 97
98 98
@@ -453,14 +453,11 @@ GAS_plugins_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
453 } 453 }
454 454
455 load_quotas (cfg, quotas_out, quotas_in, GNUNET_ATS_NetworkTypeCount); 455 load_quotas (cfg, quotas_out, quotas_in, GNUNET_ATS_NetworkTypeCount);
456 env.cls = NULL;
456 env.info_cb = &solver_info_cb; 457 env.info_cb = &solver_info_cb;
457 env.info_cb_cls = NULL;
458 env.bandwidth_changed_cb = &bandwidth_changed_cb; 458 env.bandwidth_changed_cb = &bandwidth_changed_cb;
459 env.bw_changed_cb_cls = NULL;
460 env.get_preferences = &GAS_normalization_get_preferences_by_peer; 459 env.get_preferences = &GAS_normalization_get_preferences_by_peer;
461 env.get_preference_cls = NULL;
462 env.get_property = &GAS_normalization_get_properties; 460 env.get_property = &GAS_normalization_get_properties;
463 env.get_property_cls = NULL;
464 env.cfg = cfg; 461 env.cfg = cfg;
465 env.stats = GSA_stats; 462 env.stats = GSA_stats;
466 env.addresses = GSA_addresses; 463 env.addresses = GSA_addresses;
@@ -495,31 +492,13 @@ GAS_plugins_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
495 "Initializing solver `%s '`%s'\n", 492 "Initializing solver `%s '`%s'\n",
496 plugin_short, 493 plugin_short,
497 plugin); 494 plugin);
498 if (NULL == (solver = GNUNET_PLUGIN_load (plugin, &env))) 495 if (NULL == (sf = GNUNET_PLUGIN_load (plugin, &env)))
499 { 496 {
500 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 497 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
501 _("Failed to initialize solver `%s'!\n"), 498 _("Failed to initialize solver `%s'!\n"),
502 plugin); 499 plugin);
503 return GNUNET_SYSERR; 500 return GNUNET_SYSERR;
504 } 501 }
505
506
507 GNUNET_assert (NULL != env.sf.s_add);
508 GNUNET_assert (NULL != env.sf.s_address_update_property);
509 GNUNET_assert (NULL != env.sf.s_get);
510 GNUNET_assert (NULL != env.sf.s_get_stop);
511 GNUNET_assert (NULL != env.sf.s_pref);
512 GNUNET_assert (NULL != env.sf.s_feedback);
513 GNUNET_assert (NULL != env.sf.s_del);
514 GNUNET_assert (NULL != env.sf.s_bulk_start);
515 GNUNET_assert (NULL != env.sf.s_bulk_stop);
516
517 if (NULL == solver)
518 {
519 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
520 _("Failed to initialize solver!\n"));
521 return GNUNET_SYSERR;
522 }
523 return GNUNET_OK; 502 return GNUNET_OK;
524} 503}
525 504
@@ -531,8 +510,8 @@ void
531GAS_plugins_done () 510GAS_plugins_done ()
532{ 511{
533 GNUNET_PLUGIN_unload (plugin, 512 GNUNET_PLUGIN_unload (plugin,
534 solver); 513 sf);
535 solver = NULL; 514 sf = NULL;
536 GNUNET_free (plugin); 515 GNUNET_free (plugin);
537 plugin = NULL; 516 plugin = NULL;
538} 517}
@@ -544,12 +523,12 @@ GAS_plugin_new_address (struct ATS_Address *new_address,
544 const struct GNUNET_ATS_Information *atsi, 523 const struct GNUNET_ATS_Information *atsi,
545 uint32_t atsi_count) 524 uint32_t atsi_count)
546{ 525{
547 env.sf.s_add (solver, new_address, addr_net); 526 sf->s_add (sf->cls, new_address, addr_net);
548 env.sf.s_bulk_start (solver); 527 sf->s_bulk_start (sf->cls);
549 GAS_normalization_normalize_property (new_address, 528 GAS_normalization_normalize_property (new_address,
550 atsi, 529 atsi,
551 atsi_count); 530 atsi_count);
552 env.sf.s_bulk_stop (solver); 531 sf->s_bulk_stop (sf->cls);
553} 532}
554 533
555 534
@@ -558,18 +537,18 @@ GAS_plugin_update_address (struct ATS_Address *address,
558 const struct GNUNET_ATS_Information *atsi, 537 const struct GNUNET_ATS_Information *atsi,
559 uint32_t atsi_count) 538 uint32_t atsi_count)
560{ 539{
561 env.sf.s_bulk_start (solver); 540 sf->s_bulk_start (sf->cls);
562 GAS_normalization_normalize_property (address, 541 GAS_normalization_normalize_property (address,
563 atsi, 542 atsi,
564 atsi_count); 543 atsi_count);
565 env.sf.s_bulk_stop (solver); 544 sf->s_bulk_stop (sf->cls);
566} 545}
567 546
568 547
569void 548void
570GAS_plugin_delete_address (struct ATS_Address *address) 549GAS_plugin_delete_address (struct ATS_Address *address)
571{ 550{
572 env.sf.s_del (solver, address, GNUNET_NO); 551 sf->s_del (sf->cls, address, GNUNET_NO);
573} 552}
574 553
575 554
@@ -579,10 +558,10 @@ GAS_plugin_update_preferences (void *client,
579 enum GNUNET_ATS_PreferenceKind kind, 558 enum GNUNET_ATS_PreferenceKind kind,
580 float score_abs) 559 float score_abs)
581{ 560{
582 env.sf.s_bulk_start (solver); 561 sf->s_bulk_start (sf->cls);
583 /* Tell normalization about change, normalization will call callback if preference changed */ 562 /* Tell normalization about change, normalization will call callback if preference changed */
584 GAS_normalization_normalize_preference (client, peer, kind, score_abs); 563 GAS_normalization_normalize_preference (client, peer, kind, score_abs);
585 env.sf.s_bulk_stop (solver); 564 sf->s_bulk_stop (sf->cls);
586} 565}
587 566
588 567
@@ -593,7 +572,7 @@ GAS_plugin_preference_feedback (void *application,
593 enum GNUNET_ATS_PreferenceKind kind, 572 enum GNUNET_ATS_PreferenceKind kind,
594 float score_abs) 573 float score_abs)
595{ 574{
596 env.sf.s_feedback (solver, 575 sf->s_feedback (sf->cls,
597 application, 576 application,
598 peer, 577 peer,
599 scope, 578 scope,
@@ -605,14 +584,14 @@ GAS_plugin_preference_feedback (void *application,
605void 584void
606GAS_plugin_solver_lock () 585GAS_plugin_solver_lock ()
607{ 586{
608 env.sf.s_bulk_start (solver); 587 sf->s_bulk_start (sf->cls);
609} 588}
610 589
611 590
612void 591void
613GAS_plugin_solver_unlock () 592GAS_plugin_solver_unlock ()
614{ 593{
615 env.sf.s_bulk_start (solver); 594 sf->s_bulk_start (sf->cls);
616} 595}
617 596
618 597
@@ -621,7 +600,7 @@ GAS_plugin_request_connect_start (const struct GNUNET_PeerIdentity *pid)
621{ 600{
622 const struct ATS_Address *aa; 601 const struct ATS_Address *aa;
623 602
624 aa = env.sf.s_get (solver, pid); 603 aa = sf->s_get (sf->cls, pid);
625 if (NULL == aa) 604 if (NULL == aa)
626 { 605 {
627 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 606 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -648,7 +627,7 @@ GAS_plugin_request_connect_start (const struct GNUNET_PeerIdentity *pid)
648void 627void
649GAS_plugin_request_connect_stop (const struct GNUNET_PeerIdentity *pid) 628GAS_plugin_request_connect_stop (const struct GNUNET_PeerIdentity *pid)
650{ 629{
651 env.sf.s_get_stop (solver, pid); 630 sf->s_get_stop (sf->cls, pid);
652} 631}
653 632
654 633