X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fjul.h;h=1e32ea5558e9f756542c57d2a6a158c9ed03a815;hb=3c6a091f88fa6b237729cab17d6f6d227da82f59;hp=1f7f6cdcd8e0a176e31095526882c20f51fc528d;hpb=0475c50c4d3d2cea973fe4d1f17875d231dea96c;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/jul.h b/src/bin/lttng-sessiond/jul.h index 1f7f6cdcd..1e32ea555 100644 --- a/src/bin/lttng-sessiond/jul.h +++ b/src/bin/lttng-sessiond/jul.h @@ -18,9 +18,53 @@ #ifndef _JUL_H #define _JUL_H +#define _GNU_SOURCE +#include + #include #include +/* + * Hash table that contains the JUL app created upon registration indexed by + * socket. + */ +struct lttng_ht *jul_apps_ht_by_sock; + +/* + * Registration message payload from a JUL application. The PID is used to find + * back the corresponding UST app object so both socket can be linked. + */ +struct jul_register_msg { + uint32_t pid; +}; + +/* + * JUL application object created after a successful registration. This object + * is kept inside an UST app. + */ +struct jul_app { + /* + * PID sent during registration of a JUL application. + */ + pid_t pid; + + /* + * JUL TCP socket that was created upon registration. + */ + struct lttcomm_sock *sock; + + /* + * Associated UST app. socket. To get a reference to the ust application + * object corresponding to that socket, a lookup MUST be done each time + * since there is important synchronization issue for the lockless hash + * table shared accross multiple threads. + */ + int ust_app_sock; + + /* Initialized with the JUL sock value. */ + struct lttng_ht_node_ulong node; +}; + /* * Java Util Logging event representation. */ @@ -47,18 +91,46 @@ struct jul_event { * for it. */ struct jul_domain { + /* + * This indicates if that domain is being used meaning if at least one + * event has been at some point in time added to it. This is used so when + * listing domains for a session, we can tell or not if the JUL is actually + * enabled. + */ + unsigned int being_used:1; /* * Contains JUL event indexed by name. */ struct lttng_ht *events; }; +/* Initialize JUL domain subsystem. */ +int jul_init(void); + +/* Initialize an already allocated JUL domain. */ int jul_init_domain(struct jul_domain *dom); +void jul_destroy_domain(struct jul_domain *dom); + +/* JUL event API. */ struct jul_event *jul_create_event(const char *name); void jul_add_event(struct jul_event *event, struct jul_domain *dom); struct jul_event *jul_find_by_name(const char *name, struct jul_domain *dom); void jul_delete_event(struct jul_event *event, struct jul_domain *dom); void jul_destroy_event(struct jul_event *event); -void jul_destroy_domain(struct jul_domain *dom); + +/* JUL app API. */ +struct jul_app *jul_create_app(pid_t pid, struct lttcomm_sock *sock); +void jul_add_app(struct jul_app *app); +void jul_delete_app(struct jul_app *app); +struct jul_app *jul_find_app_by_sock(int sock); +void jul_attach_app(struct jul_app *japp); +void jul_detach_app(struct jul_app *app); +void jul_destroy_app(struct jul_app *app); + +/* JUL action API */ +int jul_enable_event(struct jul_event *event); +int jul_disable_event(struct jul_event *event); +void jul_update(struct jul_domain *domain, int sock); +int jul_list_events(struct lttng_event **events); #endif /* _JUL_H */