summaryrefslogtreecommitdiff
path: root/src/irmd/registry.h
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2016-07-09 15:38:31 +0200
committerdimitri staessens <[email protected]>2016-07-11 10:47:57 +0200
commit93ed0b44a196d43771a6df24831db4ba3a60ef1b (patch)
tree743baadcf9a7659f6f7f9ff68b630afeaa280828 /src/irmd/registry.h
parenta4058de51793b7b866ad9b9f52001bb34ca57e8b (diff)
downloadouroboros-93ed0b44a196d43771a6df24831db4ba3a60ef1b.tar.gz
ouroboros-93ed0b44a196d43771a6df24831db4ba3a60ef1b.zip
irmd: Refactor of registry
Easier names for the functions.The registry now uses a single list to keep track of applications (bindings), moved the auto_exec state per binding.
Diffstat (limited to 'src/irmd/registry.h')
-rw-r--r--src/irmd/registry.h139
1 files changed, 65 insertions, 74 deletions
diff --git a/src/irmd/registry.h b/src/irmd/registry.h
index 927b2364..04ce7cf8 100644
--- a/src/irmd/registry.h
+++ b/src/irmd/registry.h
@@ -25,6 +25,7 @@
#include <ouroboros/config.h>
#include <ouroboros/list.h>
+#include <ouroboros/irm_config.h>
#include <stdint.h>
#include <stdbool.h>
@@ -32,9 +33,10 @@
#include <string.h>
#include <sys/types.h>
-#define reg_entry_has_api(e, id) (reg_entry_get_reg_instance(e, id) != NULL)
-#define reg_entry_has_ap_name(e, name) (reg_entry_get_ap_name(e, name) != NULL)
-#define reg_entry_has_ap_auto(e, name) (reg_entry_get_reg_auto(e, name) != NULL)
+#define registry_has_name(r, name) \
+ (registry_get_entry_by_name(r, name) != NULL)
+#define registry_name_has_api(r, name) \
+ (registry_get_api_by_name(r, name) != NULL)
enum reg_name_state {
REG_NAME_NULL = 0,
@@ -51,7 +53,7 @@ enum reg_i_state {
REG_I_WAKE
};
-struct reg_instance {
+struct reg_api {
struct list_head next;
pid_t api;
@@ -63,102 +65,91 @@ struct reg_instance {
/* an entry in the registry */
struct reg_entry {
- struct list_head next;
-
- /* generic name */
- char * name;
-
- /* names of the aps that can listen to this name */
- struct list_head ap_names;
-
- enum reg_name_state state;
-
- uint32_t flags;
+ struct list_head next;
+ char * name;
- /* auto execution info */
- struct list_head auto_ap_info;
+ /* DIFs in which this name is registered */
+ struct list_head difs;
+ /* names of the APs that can listen to this name */
+ struct list_head bindings;
/* known instances */
- struct list_head ap_instances;
+ struct list_head reg_apis;
- /* difs in which this name is registered */
- struct list_head difs;
-
- char * req_ae_name;
- int response;
-
- pthread_cond_t acc_signal;
- pthread_mutex_t state_lock;
+ /* flow handling information */
+ enum reg_name_state state;
+ char * req_ae_name;
+ int response;
+ pthread_cond_t acc_signal;
+ pthread_mutex_t state_lock;
};
-struct reg_auto {
- struct list_head next;
- char * ap_name;
- char ** argv;
-};
+struct reg_api * reg_api_create(pid_t api);
+void reg_api_destroy(struct reg_api * i);
+void reg_api_sleep(struct reg_api * i);
+void reg_api_wake(struct reg_api * i);
-struct reg_ap_name {
- struct list_head next;
- char * ap_name;
-};
-
-struct reg_dif_name {
- struct list_head next;
- char * dif_name;
-};
-struct reg_instance * reg_instance_create(pid_t api);
-void reg_instance_destroy(struct reg_instance * i);
-void reg_instance_sleep(struct reg_instance * i);
-void reg_instance_wake(struct reg_instance * i);
+struct reg_binding * reg_binding_create(char * apn,
+ uint32_t opts,
+ char ** argv);
+void reg_binding_destroy();
struct reg_entry * reg_entry_create();
struct reg_entry * reg_entry_init(struct reg_entry * e,
- char * name,
- char * ap_name,
- uint32_t flags);
+ char * name);
void reg_entry_destroy(struct reg_entry * e);
-struct reg_ap_name * reg_entry_get_ap_name(struct reg_entry * e,
- char * ap_name);
-struct reg_instance * reg_entry_get_reg_instance(struct reg_entry * e,
- pid_t api);
+struct reg_binding * reg_entry_get_binding(struct reg_entry * e,
+ char * apn);
+char ** reg_entry_get_auto_info(struct reg_entry * e);
+void reg_entry_del_binding(struct reg_entry * e,
+ char * apn);
+struct reg_api * reg_entry_get_reg_api(struct reg_entry * e,
+ pid_t api);
-struct reg_auto * reg_entry_get_reg_auto(struct reg_entry * e,
- char * ap_name);
pid_t reg_entry_resolve_api(struct reg_entry * e);
-char ** reg_entry_resolve_auto(struct reg_entry * e);
bool reg_entry_is_local_in_dif(struct reg_entry * e,
char * dif_name);
int reg_entry_add_local_in_dif(struct reg_entry * e,
- char * dif_name);
+ char * dif_name,
+ enum ipcp_type type);
void reg_entry_del_local_from_dif(struct reg_entry * e,
char * dif_name);
-int registry_add_entry(struct list_head * registry,
- char * name,
- char * ap_name,
- uint16_t flags);
-int registry_add_ap_auto(struct list_head * registry,
+
+struct reg_entry * registry_assign(struct list_head * registry,
+ char * name);
+void registry_deassign(struct list_head * registry,
+ char * name);
+int registry_add_binding(struct list_head * registry,
char * name,
- char * ap_name,
+ char * apn,
+ uint32_t flags,
char ** argv);
-int registry_remove_ap_auto(struct list_head * registry,
- char * name,
- char * ap_name);
-struct reg_instance * registry_add_api_name(struct list_head * registry,
+void registry_del_binding(struct list_head * registry,
+ char * name,
+ char * apn);
+struct reg_api * registry_add_api_name(struct list_head * registry,
pid_t api,
char * name);
-int registry_remove_api_name(struct list_head * registry,
- pid_t api,
+void registry_del_api(struct list_head * registry,
+ pid_t api);
+struct reg_api * registry_get_api_by_name(struct list_head * registry,
char * name);
struct reg_entry * registry_get_entry_by_name(struct list_head * registry,
char * name);
-struct reg_entry * registry_get_entry_by_ap_name(struct list_head * registry,
- char * ap_name);
-struct reg_entry * registry_get_entry_by_ap_id(struct list_head * registry,
- pid_t api);
-void registry_del_name(struct list_head * registry,
- char * name);
-
+struct reg_entry * registry_get_entry_by_apn(struct list_head * registry,
+ char * apn);
+struct reg_entry * registry_get_entry_by_api(struct list_head * registry,
+ pid_t api);
+char * registry_get_dif_for_dst(struct list_head * registry,
+ char * dst_name);
+int registry_add_name_to_dif(struct list_head * registry,
+ char * name,
+ char * dif_name,
+ enum ipcp_type type);
+void registry_del_name_from_dif(struct list_head * registry,
+ char * name,
+ char * dif_name);
#endif