+ /* Get session name (trailing argument) */
+ session_name = poptGetArg(pc);
+ DBG2("Session name: %s", session_name);
+
+ if (opt_kernel) {
+ domain.type = LTTNG_DOMAIN_KERNEL;
+ } else if (opt_userspace) {
+ DBG2("Listing userspace global domain");
+ domain.type = LTTNG_DOMAIN_UST;
+ }
+
+ handle = lttng_create_handle(session_name, &domain);
+ if (handle == NULL) {
+ goto end;
+ }
+
+ if (session_name == NULL) {
+ if (!opt_kernel && !opt_userspace) {
+ ret = list_sessions(NULL);
+ if (ret < 0) {
+ goto end;
+ }
+ }
+ if (opt_kernel) {
+ ret = list_kernel_events();
+ if (ret < 0) {
+ goto end;
+ }
+ }
+ if (opt_userspace) {
+ ret = list_ust_events();
+ if (ret < 0) {
+ goto end;
+ }
+ }
+ } else {
+ /* List session attributes */
+ ret = list_sessions(session_name);
+ if (ret < 0) {
+ goto end;
+ }
+
+ /* Domain listing */
+ if (opt_domain) {
+ ret = list_domains();
+ goto end;
+ }
+
+ if (opt_kernel) {
+ /* Channel listing */
+ ret = list_channels(opt_channel);
+ if (ret < 0) {
+ goto end;
+ }
+ } else {
+ /* We want all domain(s) */
+ nb_domain = lttng_list_domains(handle, &domains);
+ if (nb_domain < 0) {
+ ret = nb_domain;
+ goto end;
+ }
+
+ for (i = 0; i < nb_domain; i++) {
+ switch (domains[i].type) {
+ case LTTNG_DOMAIN_KERNEL:
+ MSG("=== Domain: Kernel ===\n");
+ break;
+ case LTTNG_DOMAIN_UST:
+ MSG("=== Domain: UST global ===\n");
+ break;
+ default:
+ MSG("=== Domain: Unimplemented ===\n");
+ break;
+ }
+
+ /* Clean handle before creating a new one */
+ lttng_destroy_handle(handle);
+
+ handle = lttng_create_handle(session_name, &domains[i]);
+ if (handle == NULL) {
+ goto end;
+ }
+
+ ret = list_channels(opt_channel);
+ if (ret < 0) {
+ goto end;
+ }
+ }
+ }