Lines Matching defs:item

35 /* Command queue item type. */
41 /* Command queue item. */
91 struct cmdq_item *item;
144 /* Get item name. */
146 cmdq_get_name(struct cmdq_item *item)
148 return (item->name);
151 /* Get item client. */
153 cmdq_get_client(struct cmdq_item *item)
155 return (item->client);
158 /* Get item target client. */
160 cmdq_get_target_client(struct cmdq_item *item)
162 return (item->target_client);
165 /* Get item state. */
167 cmdq_get_state(struct cmdq_item *item)
169 return (item->state);
172 /* Get item target. */
174 cmdq_get_target(struct cmdq_item *item)
176 return (&item->target);
179 /* Get item source. */
181 cmdq_get_source(struct cmdq_item *item)
183 return (&item->source);
188 cmdq_get_event(struct cmdq_item *item)
190 return (&item->state->event);
195 cmdq_get_current(struct cmdq_item *item)
197 return (&item->state->current);
202 cmdq_get_flags(struct cmdq_item *item)
204 return (item->state->flags);
286 /* Merge formats from item. */
288 cmdq_merge_formats(struct cmdq_item *item, struct format_tree *ft)
292 if (item->cmd != NULL) {
293 entry = cmd_get_entry(item->cmd);
296 if (item->state->formats != NULL)
297 format_merge(ft, item->state->formats);
300 /* Append an item. */
302 cmdq_append(struct client *c, struct cmdq_item *item)
308 next = item->next;
309 item->next = NULL;
313 item->client = c;
315 item->queue = queue;
316 TAILQ_INSERT_TAIL(&queue->list, item, entry);
317 log_debug("%s %s: %s", __func__, cmdq_name(c), item->name);
319 item = next;
320 } while (item != NULL);
324 /* Insert an item. */
326 cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item)
333 next = item->next;
334 item->next = after->next;
335 after->next = item;
339 item->client = c;
341 item->queue = queue;
342 TAILQ_INSERT_AFTER(&queue->list, after, item, entry);
344 item->name, after->name);
346 after = item;
347 item = next;
348 } while (item != NULL);
354 cmdq_insert_hook(struct session *s, struct cmdq_item *item,
357 struct cmdq_state *state = item->state;
358 struct cmd *cmd = item->cmd;
373 if (item->state->flags & CMDQ_STATE_NOHOOKS)
389 log_debug("running hook %s (parent %p)", name, item);
434 if (item != NULL)
435 item = cmdq_insert_after(item, new_item);
437 item = cmdq_append(NULL, new_item);
448 cmdq_continue(struct cmdq_item *item)
450 item->flags &= ~CMDQ_WAITING;
453 /* Remove an item. */
455 cmdq_remove(struct cmdq_item *item)
457 if (item->client != NULL)
458 server_client_unref(item->client);
459 if (item->cmdlist != NULL)
460 cmd_list_free(item->cmdlist);
461 cmdq_free_state(item->state);
463 TAILQ_REMOVE(&item->queue->list, item, entry);
465 free(item->name);
466 free(item);
469 /* Remove all subsequent items that match this item's group. */
471 cmdq_remove_group(struct cmdq_item *item)
475 if (item->group == 0)
477 this = TAILQ_NEXT(item, entry);
480 if (this->group == item->group)
488 cmdq_empty_command(__unused struct cmdq_item *item, __unused void *data)
497 struct cmdq_item *item, *first = NULL, *last = NULL;
513 item = xcalloc(1, sizeof *item);
514 xasprintf(&item->name, "[%s/%p]", entry->name, item);
515 item->type = CMDQ_COMMAND;
517 item->group = cmd_get_group(cmd);
518 item->state = cmdq_link_state(state);
520 item->cmdlist = cmdlist;
521 item->cmd = cmd;
524 log_debug("%s: %s group %u", __func__, item->name, item->group);
527 first = item;
529 last->next = item;
530 last = item;
542 cmdq_find_flag(struct cmdq_item *item, struct cmd_find_state *fs,
548 cmd_find_from_client(fs, item->target_client, 0);
552 value = args_get(cmd_get_args(item->cmd), flag->flag);
553 if (cmd_find_target(fs, item, value, flag->type, flag->flags) != 0) {
562 cmdq_add_message(struct cmdq_item *item)
564 struct client *c = item->client;
565 struct cmdq_state *state = item->state;
572 tmp = cmd_print(item->cmd);
598 cmdq_fire_command(struct cmdq_item *item)
600 const char *name = cmdq_name(item->client);
601 struct cmdq_state *state = item->state;
602 struct cmd *cmd = item->cmd;
605 struct client *tc, *saved = item->client;
612 cmdq_add_message(item);
615 log_debug("%s %s: (%u) %s", __func__, name, item->group, tmp);
620 cmdq_guard(item, "begin", flags);
622 if (item->client == NULL)
623 item->client = cmd_find_client(item, NULL, 1);
628 tc = cmd_find_client(item, args_get(args, 'c'), quiet);
634 tc = cmd_find_client(item, args_get(args, 't'), quiet);
640 tc = cmd_find_client(item, NULL, 1);
641 item->target_client = tc;
643 retval = cmdq_find_flag(item, &item->source, &entry->source);
646 retval = cmdq_find_flag(item, &item->target, &entry->target);
650 retval = entry->exec(cmd, item);
655 if (cmd_find_valid_state(&item->target))
656 fsp = &item->target;
657 else if (cmd_find_valid_state(&item->state->current))
658 fsp = &item->state->current;
659 else if (cmd_find_from_client(&fs, item->client, 0) == 0)
663 cmdq_insert_hook(fsp->s, item, fsp, "after-%s", entry->name);
667 item->client = saved;
670 if (cmd_find_valid_state(&item->target))
671 fsp = &item->target;
672 else if (cmd_find_valid_state(&item->state->current))
673 fsp = &item->state->current;
674 else if (cmd_find_from_client(&fs, item->client, 0) == 0)
676 cmdq_insert_hook(fsp != NULL ? fsp->s : NULL, item, fsp,
678 cmdq_guard(item, "error", flags);
680 cmdq_guard(item, "end", flags);
688 struct cmdq_item *item;
690 item = xcalloc(1, sizeof *item);
691 xasprintf(&item->name, "[%s/%p]", name, item);
692 item->type = CMDQ_CALLBACK;
694 item->group = 0;
695 item->state = cmdq_new_state(NULL, NULL, 0);
697 item->cb = cb;
698 item->data = data;
700 return (item);
705 cmdq_error_callback(struct cmdq_item *item, void *data)
709 cmdq_error(item, "%s", error);
724 cmdq_fire_callback(struct cmdq_item *item)
726 return (item->cb(item, item->data));
729 /* Process next item on command queue. */
735 struct cmdq_item *item;
751 item = queue->item = TAILQ_FIRST(&queue->list);
752 if (item == NULL)
755 item->name, item->type, item->flags);
758 * Any item with the waiting flag set waits until an external
762 if (item->flags & CMDQ_WAITING)
769 if (~item->flags & CMDQ_FIRED) {
770 item->time = time(NULL);
771 item->number = ++number;
773 switch (item->type) {
775 retval = cmdq_fire_command(item);
782 cmdq_remove_group(item);
785 retval = cmdq_fire_callback(item);
791 item->flags |= CMDQ_FIRED;
794 item->flags |= CMDQ_WAITING;
799 cmdq_remove(item);
801 queue->item = NULL;
811 /* Get running item if any. */
817 if (queue->item == NULL)
819 if (queue->item->flags & CMDQ_WAITING)
821 return (queue->item);
826 cmdq_guard(struct cmdq_item *item, const char *guard, int flags)
828 struct client *c = item->client;
829 long t = item->time;
830 u_int number = item->number;
838 cmdq_print_data(struct cmdq_item *item, struct evbuffer *evb)
840 server_client_print(item->client, 1, evb);
845 cmdq_print(struct cmdq_item *item, const char *fmt, ...)
858 cmdq_print_data(item, evb);
864 cmdq_error(struct cmdq_item *item, const char *fmt, ...)
866 struct client *c = item->client;
867 struct cmd *cmd = item->cmd;