+ *usec = m->monotonic;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_realtime_timestamp(sd_bus_message *m, uint64_t *usec) {
+ assert_return(m, -EINVAL);
+ assert_return(usec, -EINVAL);
+ assert_return(m->realtime > 0, -ESRCH);
+
+ *usec = m->realtime;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_comm(sd_bus_message *m, const char **ret) {
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->comm, -ESRCH);
+
+ *ret = m->comm;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_tid_comm(sd_bus_message *m, const char **ret) {
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->tid_comm, -ESRCH);
+
+ *ret = m->tid_comm;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_exe(sd_bus_message *m, const char **ret) {
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->exe, -ESRCH);
+
+ *ret = m->exe;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_cgroup(sd_bus_message *m, const char **ret) {
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->cgroup, -ESRCH);
+
+ *ret = m->cgroup;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_unit(sd_bus_message *m, const char **ret) {
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->cgroup, -ESRCH);
+
+ if (!m->unit) {
+ r = cg_path_get_unit(m->cgroup, &m->unit);
+ if (r < 0)
+ return r;
+ }
+
+ *ret = m->unit;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_user_unit(sd_bus_message *m, const char **ret) {
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->cgroup, -ESRCH);
+
+ if (!m->user_unit) {
+ r = cg_path_get_user_unit(m->cgroup, &m->user_unit);
+ if (r < 0)
+ return r;
+ }
+
+ *ret = m->user_unit;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_session(sd_bus_message *m, const char **ret) {
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(ret, -EINVAL);
+ assert_return(m->cgroup, -ESRCH);
+
+ if (!m->session) {
+ r = cg_path_get_session(m->cgroup, &m->session);
+ if (r < 0)
+ return r;
+ }
+
+ *ret = m->session;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_owner_uid(sd_bus_message *m, uid_t *uid) {
+ assert_return(m, -EINVAL);
+ assert_return(uid, -EINVAL);
+ assert_return(m->cgroup, -ESRCH);
+
+ return cg_path_get_owner_uid(m->cgroup, uid);
+}
+
+_public_ int sd_bus_message_get_cmdline(sd_bus_message *m, char ***cmdline) {
+ size_t n, i;
+ const char *p;
+ bool first;
+
+ assert_return(m, -EINVAL);
+ assert_return(m->cmdline, -ESRCH);
+
+ for (p = m->cmdline, n = 0; p < m->cmdline + m->cmdline_length; p++)
+ if (*p == 0)
+ n++;
+
+ m->cmdline_array = new(char*, n + 1);
+ if (!m->cmdline_array)
+ return -ENOMEM;
+
+ for (p = m->cmdline, i = 0, first = true; p < m->cmdline + m->cmdline_length; p++) {
+ if (first)
+ m->cmdline_array[i++] = (char*) p;
+
+ first = *p == 0;
+ }
+
+ m->cmdline_array[i] = NULL;
+ *cmdline = m->cmdline_array;
+
+ return 0;
+}
+
+_public_ int sd_bus_message_get_audit_sessionid(sd_bus_message *m, uint32_t *sessionid) {
+ assert_return(m, -EINVAL);
+ assert_return(sessionid, -EINVAL);
+ assert_return(m->audit, -ESRCH);
+
+ *sessionid = m->audit->sessionid;
+ return 0;
+}
+
+_public_ int sd_bus_message_get_audit_loginuid(sd_bus_message *m, uid_t *uid) {
+ assert_return(m, -EINVAL);
+ assert_return(uid, -EINVAL);
+ assert_return(m->audit, -ESRCH);
+
+ *uid = m->audit->loginuid;
+ return 0;
+}
+
+_public_ int sd_bus_message_has_effective_cap(sd_bus_message *m, int capability) {
+ unsigned sz;
+
+ assert_return(m, -EINVAL);
+ assert_return(capability < 0, -EINVAL);
+ assert_return(!m->capability, -ESRCH);
+
+ sz = m->capability_size / 4;
+ if ((unsigned) capability >= sz*8)
+ return 0;
+
+ return !!(m->capability[2 * sz + (capability / 8)] & (1 << (capability % 8)));
+}
+
+_public_ int sd_bus_message_is_signal(sd_bus_message *m,
+ const char *interface,
+ const char *member) {
+ assert_return(m, -EINVAL);
+
+ if (m->header->type != SD_BUS_MESSAGE_SIGNAL)