2 * Copyright (C) 2017 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License, version 2.1 only,
6 * as published by the Free Software Foundation.
8 * This library is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this library; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #ifndef LTTNG_NOTIFICATION_CHANNEL_H
19 #define LTTNG_NOTIFICATION_CHANNEL_H
25 struct lttng_endpoint
;
26 struct lttng_condition
;
27 struct lttng_notification
;
28 struct lttng_notification_channel
;
30 enum lttng_notification_channel_status
{
31 LTTNG_NOTIFICATION_CHANNEL_STATUS_NOTIFICATIONS_DROPPED
= 1,
32 LTTNG_NOTIFICATION_CHANNEL_STATUS_OK
= 0,
33 LTTNG_NOTIFICATION_CHANNEL_STATUS_ERROR
= -1,
34 LTTNG_NOTIFICATION_CHANNEL_STATUS_CLOSED
= -2,
35 LTTNG_NOTIFICATION_CHANNEL_STATUS_ALREADY_SUBSCRIBED
= -3,
36 /* Condition unknown. */
37 LTTNG_NOTIFICATION_CHANNEL_STATUS_UNKNOWN_CONDITION
= -4,
38 LTTNG_NOTIFICATION_CHANNEL_STATUS_INVALID
= -5,
39 LTTNG_NOTIFICATION_CHANNEL_STATUS_UNSUPPORTED_VERSION
= -6,
43 * A notification channel is used to receive notifications from various
46 * Notification channels connect a client to an LTTng endpoint
47 * (see lttng/endpoint.h) and allows client to subscribe and unsubscribe
48 * to various types of notifications which are associated to conditions.
50 * In order to emit a notification, a condition must be associated to a
51 * notify action within a trigger. A client wishing to consume such
52 * conditions must explicitly subscribe to them by using an equivalent
57 * Create a notification channel connected to a given endpoint.
59 * The only supported endpoint, at the moment, is the
60 * lttng_session_daemon_notification_endpoint, which is a singleton
61 * declared in the lttng/endpoint.h header.
63 * Returns an lttng_notification_channel on success, NULL on failure.
64 * The returned lttng_notification_channel must be destroyed using
65 * the lttng_notification_channel_destroy() function.
67 extern struct lttng_notification_channel
*lttng_notification_channel_create(
68 struct lttng_endpoint
*endpoint
);
71 * Get the next notification received on a notification channel.
73 * This call will block until a notification is received on the notification
74 * channel or until the endpoint closes the connection.
76 * The returned notification's ownership is transferred to the caller and
77 * it must be destroyed using lttng_notification_destroy().
79 * Notifications can be dropped if a client consumes the notifications sent
80 * through the notification channel too slowly.
82 * Returns LTTNG_NOTIFICATION_CHANNEL_STATUS_OK and a notificationon success,
83 * LTTNG_NOTIFICATION_CHANNEL_STATUS_INVALID if an invalid parameter was
84 * provided, or LTTNG_NOTIFICATION_CHANNEL_STATUS_NOTIFICATIONS_DROPPED if
85 * notifications were dropped.
87 extern enum lttng_notification_channel_status
88 lttng_notification_channel_get_next_notification(
89 struct lttng_notification_channel
*channel
,
90 struct lttng_notification
**notification
);
93 * Subscribe to notifications of a condition through a notification channel.
95 * The caller retains the ownership of the condition passed through this call
96 * and it can be disposed-of at any moment after this call.
98 * An error will be reported if the client tries to subscribe to the same
99 * condition multiple times without unsubscribing.
101 * Returns LTTNG_NOTIFICATION_CHANNEL_STATUS_OK on success,
102 * LTTNG_NOTIFICATION_CHANNEL_STATUS_INVALID if an invalid parameter was
103 * provided, or LTTNG_NOTIFICATION_CHANNEL_STATUS_ALREADY_SUBSCRIBED if the
104 * client was already subscribed to the condition through this channel.
106 extern enum lttng_notification_channel_status
107 lttng_notification_channel_subscribe(
108 struct lttng_notification_channel
*channel
,
109 const struct lttng_condition
*condition
);
112 * Unsubscribe to notifications of a condition through a notification channel.
114 * The caller retains the ownership of the condition passed through this call
115 * and it can be disposed-of at any moment after this call.
117 * An error will be reported if the client tries to unsubscribe to from a
118 * conditions' notifications to which it was not previously subscribed.
120 * Returns LTTNG_NOTIFICATION_CHANNEL_STATUS_OK on success,
121 * LTTNG_NOTIFICATION_CHANNEL_STATUS_INVALID if an invalid parameter was
122 * provided, or LTTNG_NOTIFICATION_CHANNEL_STATUS_UNKNOWN_CONDITION if the
123 * client was not already subscribed to the condition through this channel.
125 extern enum lttng_notification_channel_status
126 lttng_notification_channel_unsubscribe(
127 struct lttng_notification_channel
*channel
,
128 const struct lttng_condition
*condition
);
131 * Closes and destroys (frees) a notification channel.
133 extern void lttng_notification_channel_destroy(
134 struct lttng_notification_channel
*channel
);
140 #endif /* LTTNG_NOTIFICATION_CHANNEL_H */