Asterisk - The Open Source Telephony Project GIT-master-a358458
parking_ui.c
Go to the documentation of this file.
1/*
2 * Asterisk -- An open source telephony toolkit.
3 *
4 * Copyright (C) 2013, Digium, Inc.
5 *
6 * Jonathan Rose <jrose@digium.com>
7 *
8 * See http://www.asterisk.org for more information about
9 * the Asterisk project. Please do not directly contact
10 * any of the maintainers of this project for assistance;
11 * the project provides a web site, mailing lists and IRC
12 * channels for your use.
13 *
14 * This program is free software, distributed under the terms of
15 * the GNU General Public License Version 2. See the LICENSE file
16 * at the top of the source tree.
17 */
18
19/*! \file
20 *
21 * \brief Call Parking CLI commands
22 *
23 * \author Jonathan Rose <jrose@digium.com>
24 */
25
26#include "asterisk.h"
27
28#include "res_parking.h"
29#include "asterisk/config.h"
31#include "asterisk/utils.h"
32#include "asterisk/module.h"
33#include "asterisk/cli.h"
34#include "asterisk/astobj2.h"
35#include "asterisk/features.h"
36#include "asterisk/manager.h"
37
38static void display_parked_call(struct parked_user *user, int fd)
39{
40 ast_cli(fd, " Space : %d\n", user->parking_space);
41 ast_cli(fd, " Channel : %s\n", ast_channel_name(user->chan));
42 ast_cli(fd, " Parker Dial String : %s\n", user->parker_dial_string);
43 ast_cli(fd, "\n");
44}
45
46static int display_parked_users_cb(void *obj, void *arg, int flags)
47{
48 int *fd = arg;
49 struct parked_user *user = obj;
51 return 0;
52}
53
54static void display_parking_lot(struct parking_lot *lot, int fd)
55{
56 ast_cli(fd, "Parking Lot: %s\n--------------------------------------------------------------------------\n", lot->name);
57 ast_cli(fd, "Parking Extension : %s\n", lot->cfg->parkext);
58 ast_cli(fd, "Parking Context : %s\n", lot->cfg->parking_con);
59 ast_cli(fd, "Parking Spaces : %d-%d\n", lot->cfg->parking_start, lot->cfg->parking_stop);
60 ast_cli(fd, "Parking Time : %u sec\n", lot->cfg->parkingtime);
61 ast_cli(fd, "Comeback to Origin : %s\n", lot->cfg->comebacktoorigin ? "yes" : "no");
62 ast_cli(fd, "Comeback Context : %s%s\n", lot->cfg->comebackcontext, lot->cfg->comebacktoorigin ? " (comebacktoorigin=yes, not used)" : "");
63 ast_cli(fd, "Comeback Dial Time : %u sec\n", lot->cfg->comebackdialtime);
64 ast_cli(fd, "MusicOnHold Class : %s\n", lot->cfg->mohclass);
65 ast_cli(fd, "Enabled : %s\n", (lot->mode == PARKINGLOT_DISABLED) ? "no" : "yes");
66 ast_cli(fd, "Dynamic : %s\n", (lot->mode == PARKINGLOT_DYNAMIC) ? "yes" : "no");
67 ast_cli(fd, "\n");
68}
69
70static int display_parking_lot_cb(void *obj, void *arg, int flags)
71{
72 int *fd = arg;
73 struct parking_lot *lot = obj;
74 display_parking_lot(lot, *fd);
75 return 0;
76}
77
78static void cli_display_parking_lot(int fd, const char *name)
79{
80 RAII_VAR(struct parking_lot *, lot, NULL, ao2_cleanup);
82
83 /* If the parking lot couldn't be found with the search, also abort. */
84 if (!lot) {
85 ast_cli(fd, "Could not find parking lot '%s'\n\n", name);
86 return;
87 }
88
89 display_parking_lot(lot, fd);
90
91 ast_cli(fd, "Parked Calls\n------------\n");
92
93 if (!ao2_container_count(lot->parked_users)) {
94 ast_cli(fd, " (none)\n");
95 ast_cli(fd, "\n\n");
96 return;
97 }
98
100 ast_cli(fd, "\n");
101}
102
103static void cli_display_parking_global(int fd)
104{
105 ast_cli(fd, "Parking General Options\n"
106 "-----------------------\n");
107 ast_cli(fd, "Dynamic Parking : %s\n", parking_dynamic_lots_enabled() ? "yes" : "no");
108 ast_cli(fd, "\n");
109}
110
112{
113 struct ao2_container *lot_container;
114
115 lot_container = get_parking_lot_container();
116
117 if (!lot_container) {
118 ast_cli(fd, "Failed to obtain parking lot list.\n\n");
119 return;
120 }
121
123 ast_cli(fd, "\n");
124}
125
127 int seeking; /*! Nth match to return. */
128 int which; /*! Which match currently on. */
129};
130
131static int complete_parking_lot_search(void *obj, void *arg, void *data, int flags)
132{
133 struct parking_lot_complete *search = data;
134 if (++search->which > search->seeking) {
135 return CMP_MATCH;
136 }
137 return 0;
138}
139
140static char *complete_parking_lot(const char *word, int seeking)
141{
142 char *ret = NULL;
143 struct parking_lot *lot;
144 struct ao2_container *global_lots = get_parking_lot_container();
145 struct parking_lot_complete search = {
146 .seeking = seeking,
147 };
148
149 lot = ao2_callback_data(global_lots, ast_strlen_zero(word) ? 0 : OBJ_PARTIAL_KEY,
150 complete_parking_lot_search, (char *) word, &search);
151
152 if (!lot) {
153 return NULL;
154 }
155
156 ret = ast_strdup(lot->name);
157 ao2_ref(lot, -1);
158 return ret;
159}
160
161/*! \brief command parking show <name> */
162static char *handle_show_parking_lot_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
163{
164 switch (cmd) {
165 case CLI_INIT:
166 e->command = "parking show";
167 e->usage =
168 "Usage: parking show [name]\n"
169 " Shows a list of parking lots or details of a specific parking lot.";
170 return NULL;
171 case CLI_GENERATE:
172 if (a->pos == 2) {
173 return complete_parking_lot(a->word, a->n);
174 }
175 return NULL;
176 }
177
178 ast_cli(a->fd, "\n");
179
180 if (a->argc == 2) {
183 return CLI_SUCCESS;
184 }
185
186 if (a->argc == 3) {
187 cli_display_parking_lot(a->fd, a->argv[2]);
188 return CLI_SUCCESS;
189 }
190
191 return CLI_SHOWUSAGE;
192}
193
195 AST_CLI_DEFINE(handle_show_parking_lot_cmd, "Show a parking lot or a list of all parking lots."),
196};
197
199{
201}
202
204{
206}
Asterisk main include file. File version handling, generic pbx functions.
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:241
@ CMP_MATCH
Definition: astobj2.h:1027
#define ao2_callback(c, flags, cb_fn, arg)
ao2_callback() is a generic function that applies cb_fn() to all objects in a container,...
Definition: astobj2.h:1693
int ao2_container_count(struct ao2_container *c)
Returns the number of elements in a container.
#define ao2_cleanup(obj)
Definition: astobj2.h:1934
#define ao2_callback_data(container, flags, cb_fn, arg, data)
Definition: astobj2.h:1723
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
#define OBJ_PARTIAL_KEY
Definition: astobj2.h:1152
@ OBJ_NODATA
Definition: astobj2.h:1044
@ OBJ_MULTIPLE
Definition: astobj2.h:1049
const char * ast_channel_name(const struct ast_channel *chan)
Standard Command Line Interface.
#define CLI_SHOWUSAGE
Definition: cli.h:45
#define CLI_SUCCESS
Definition: cli.h:44
int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
Unregister multiple commands.
Definition: clicompat.c:30
#define AST_CLI_DEFINE(fn, txt,...)
Definition: cli.h:197
void ast_cli(int fd, const char *fmt,...)
Definition: clicompat.c:6
@ CLI_INIT
Definition: cli.h:152
@ CLI_GENERATE
Definition: cli.h:153
#define ast_cli_register_multiple(e, len)
Register multiple commands.
Definition: cli.h:265
short word
Configuration option-handling.
Call Parking and Pickup API Includes code and algorithms from the Zapata library.
static const char name[]
Definition: format_mp3.c:68
Configuration File Parser.
The AMI - Asterisk Manager Interface - is a TCP protocol created to manage Asterisk with third-party ...
Asterisk module definitions.
static void cli_display_parking_global(int fd)
Definition: parking_ui.c:103
static int display_parking_lot_cb(void *obj, void *arg, int flags)
Definition: parking_ui.c:70
void unload_parking_ui(void)
Unregister CLI commands.
Definition: parking_ui.c:203
static void cli_display_parking_lot(int fd, const char *name)
Definition: parking_ui.c:78
static char * handle_show_parking_lot_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
command parking show <name>
Definition: parking_ui.c:162
static int display_parked_users_cb(void *obj, void *arg, int flags)
Definition: parking_ui.c:46
static void display_parked_call(struct parked_user *user, int fd)
Definition: parking_ui.c:38
static void display_parking_lot(struct parking_lot *lot, int fd)
Definition: parking_ui.c:54
static int complete_parking_lot_search(void *obj, void *arg, void *data, int flags)
Definition: parking_ui.c:131
int load_parking_ui(void)
Register CLI commands.
Definition: parking_ui.c:198
static struct ast_cli_entry cli_parking_lot[]
Definition: parking_ui.c:194
static char * complete_parking_lot(const char *word, int seeking)
Definition: parking_ui.c:140
static void cli_display_parking_lot_list(int fd)
Definition: parking_ui.c:111
Call Parking Resource Internal API.
struct ao2_container * get_parking_lot_container(void)
Get a pointer to the parking lot container for purposes such as iteration.
Definition: res_parking.c:597
@ PARKINGLOT_DISABLED
Definition: res_parking.h:61
@ PARKINGLOT_DYNAMIC
Definition: res_parking.h:59
struct parking_lot * parking_lot_find_by_name(const char *lot_name)
Find a parking lot based on its name.
Definition: res_parking.c:602
int parking_dynamic_lots_enabled(void)
Check global configuration to see if dynamic parking is enabled.
Definition: res_parking.c:929
#define NULL
Definition: resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
Generic container type.
descriptor for a cli entry.
Definition: cli.h:171
char * command
Definition: cli.h:186
const char * usage
Definition: cli.h:177
struct parking_lot * lot
Definition: res_parking.h:113
unsigned int comebacktoorigin
Definition: res_parking.h:74
unsigned int parkingtime
Definition: res_parking.h:69
const ast_string_field comebackcontext
Definition: res_parking.h:89
const ast_string_field mohclass
Definition: res_parking.h:89
const ast_string_field parkext
Definition: res_parking.h:89
unsigned int comebackdialtime
Definition: res_parking.h:70
const ast_string_field parking_con
Definition: res_parking.h:89
enum parking_lot_modes mode
Definition: res_parking.h:97
struct parking_lot_cfg * cfg
Definition: res_parking.h:96
const ast_string_field name
Definition: res_parking.h:102
structure to hold users read from users.conf
static struct test_val a
Utility functions.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition: utils.h:941
#define ARRAY_LEN(a)
Definition: utils.h:666