Asterisk - The Open Source Telephony Project  21.4.1
func_callcompletion.c
Go to the documentation of this file.
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2010, Digium, Inc.
5  *
6  * Mark Michelson <mmichelson@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  * \brief Call Completion Supplementary Services implementation
21  * \author Mark Michelson <mmichelson@digium.com>
22  */
23 
24 /*** MODULEINFO
25  <support_level>core</support_level>
26  ***/
27 
28 #include "asterisk.h"
29 
30 #include "asterisk/module.h"
31 #include "asterisk/channel.h"
32 #include "asterisk/ccss.h"
33 #include "asterisk/pbx.h"
34 
35 /*** DOCUMENTATION
36  <function name="CALLCOMPLETION" language="en_US">
37  <synopsis>
38  Get or set a call completion configuration parameter for a channel.
39  </synopsis>
40  <syntax>
41  <parameter name="option" required="true">
42  <para>The allowable options are:</para>
43  <enumlist>
44  <enum name="cc_agent_policy" />
45  <enum name="cc_monitor_policy" />
46  <enum name="cc_offer_timer" />
47  <enum name="ccnr_available_timer" />
48  <enum name="ccbs_available_timer" />
49  <enum name="cc_recall_timer" />
50  <enum name="cc_max_agents" />
51  <enum name="cc_max_monitors" />
52  <enum name="cc_agent_dialstring" />
53  </enumlist>
54  </parameter>
55  </syntax>
56  <description>
57  <para>The CALLCOMPLETION function can be used to get or set a call
58  completion configuration parameter for a channel. Note that setting
59  a configuration parameter will only change the parameter for the
60  duration of the call.
61 
62  For more information see <filename>doc/AST.pdf</filename>.
63  For more information on call completion parameters, see <filename>configs/ccss.conf.sample</filename>.</para>
64  </description>
65  </function>
66  ***/
67 
68 static int acf_cc_read(struct ast_channel *chan, const char *name, char *data,
69  char *buf, size_t buf_len)
70 {
71  struct ast_cc_config_params *cc_params;
72  int res;
73 
74  if (!chan) {
75  ast_log(LOG_WARNING, "No channel was provided to %s function.\n", name);
76  return -1;
77  }
78 
79  ast_channel_lock(chan);
80  if (!(cc_params = ast_channel_get_cc_config_params(chan))) {
81  ast_channel_unlock(chan);
82  return -1;
83  }
84 
85  res = ast_cc_get_param(cc_params, data, buf, buf_len);
86  ast_channel_unlock(chan);
87  return res;
88 }
89 
90 static int acf_cc_write(struct ast_channel *chan, const char *cmd, char *data,
91  const char *value)
92 {
93  struct ast_cc_config_params *cc_params;
94  int res;
95 
96  if (!chan) {
97  ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd);
98  return -1;
99  }
100 
101  ast_channel_lock(chan);
102  if (!(cc_params = ast_channel_get_cc_config_params(chan))) {
103  ast_channel_unlock(chan);
104  return -1;
105  }
106 
107  res = ast_cc_set_param(cc_params, data, value);
108  ast_channel_unlock(chan);
109  return res;
110 }
111 
112 static struct ast_custom_function cc_function = {
113  .name = "CALLCOMPLETION",
114  .read = acf_cc_read,
115  .write = acf_cc_write,
116 };
117 
118 static int unload_module(void)
119 {
120  return ast_custom_function_unregister(&cc_function);
121 }
122 
123 static int load_module(void)
124 {
126 }
127 
128 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Call Control Configuration Function",
129  .support_level = AST_MODULE_SUPPORT_CORE,
130  .load = load_module,
131  .unload = unload_module,
132  .requires = "ccss",
133 );
const char * name
Definition: pbx.h:119
Main Channel structure associated with a channel.
Asterisk main include file. File version handling, generic pbx functions.
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.
struct ast_cc_config_params * ast_channel_get_cc_config_params(struct ast_channel *chan)
Get the CCSS parameters from a channel.
Definition: channel.c:10474
General Asterisk PBX channel definitions.
Data structure associated with a custom dialplan function.
Definition: pbx.h:118
int ast_cc_get_param(struct ast_cc_config_params *params, const char *const name, char *buf, size_t buf_len)
get a CCSS configuration parameter, given its name
Definition: ccss.c:758
int ast_cc_set_param(struct ast_cc_config_params *params, const char *const name, const char *value)
set a CCSS configuration parameter, given its name
Definition: ccss.c:801
Core PBX routines and definitions.
Call Completion Supplementary Services API.
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
Asterisk module definitions.
#define ast_custom_function_register(acf)
Register a custom function.
Definition: pbx.h:1558