#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
Include dependency graph for func_groupcount.c:

Go to the source code of this file.
Functions | |
| AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Channel group dialplan functions") | |
| static int | group_count_function_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) |
| static int | group_function_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) |
| static int | group_function_write (struct ast_channel *chan, char *cmd, char *data, const char *value) |
| static int | group_list_function_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) |
| static int | group_match_count_function_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) |
| static int | load_module (void) |
| static int | unload_module (void) |
Variables | |
| static struct ast_custom_function | group_count_function |
| static struct ast_custom_function | group_function |
| static struct ast_custom_function | group_list_function |
| static struct ast_custom_function | group_match_count_function |
Definition in file func_groupcount.c.
| AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
| "Channel group dialplan functions" | ||||
| ) |
| static int group_count_function_read | ( | struct ast_channel * | chan, | |
| char * | cmd, | |||
| char * | data, | |||
| char * | buf, | |||
| size_t | len | |||
| ) | [static] |
Definition at line 39 of file func_groupcount.c.
References ast_app_group_get_count(), ast_app_group_list_head(), ast_app_group_list_lock(), ast_app_group_list_unlock(), ast_app_group_split_group(), AST_LIST_NEXT, ast_log(), ast_strlen_zero(), ast_group_info::category, ast_group_info::chan, ast_group_info::group, group, and LOG_NOTICE.
00041 { 00042 int ret = -1; 00043 int count = -1; 00044 char group[80] = "", category[80] = ""; 00045 00046 ast_app_group_split_group(data, group, sizeof(group), category, 00047 sizeof(category)); 00048 00049 /* If no group has been provided let's find one */ 00050 if (ast_strlen_zero(group)) { 00051 struct ast_group_info *gi = NULL; 00052 00053 ast_app_group_list_lock(); 00054 for (gi = ast_app_group_list_head(); gi; gi = AST_LIST_NEXT(gi, list)) { 00055 if (gi->chan != chan) 00056 continue; 00057 if (ast_strlen_zero(category) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category))) 00058 break; 00059 } 00060 if (gi) { 00061 ast_copy_string(group, gi->group, sizeof(group)); 00062 if (!ast_strlen_zero(gi->category)) 00063 ast_copy_string(category, gi->category, sizeof(category)); 00064 } 00065 ast_app_group_list_unlock(); 00066 } 00067 00068 if ((count = ast_app_group_get_count(group, category)) == -1) { 00069 ast_log(LOG_NOTICE, "No group could be found for channel '%s'\n", chan->name); 00070 } else { 00071 snprintf(buf, len, "%d", count); 00072 ret = 0; 00073 } 00074 00075 return ret; 00076 }
| static int group_function_read | ( | struct ast_channel * | chan, | |
| char * | cmd, | |||
| char * | data, | |||
| char * | buf, | |||
| size_t | len | |||
| ) | [static] |
Definition at line 120 of file func_groupcount.c.
References ast_app_group_list_head(), ast_app_group_list_lock(), ast_app_group_list_unlock(), AST_LIST_NEXT, ast_strlen_zero(), ast_group_info::category, ast_group_info::chan, and ast_group_info::group.
00122 { 00123 int ret = -1; 00124 struct ast_group_info *gi = NULL; 00125 00126 ast_app_group_list_lock(); 00127 00128 for (gi = ast_app_group_list_head(); gi; gi = AST_LIST_NEXT(gi, list)) { 00129 if (gi->chan != chan) 00130 continue; 00131 if (ast_strlen_zero(data)) 00132 break; 00133 if (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, data)) 00134 break; 00135 } 00136 00137 if (gi) { 00138 ast_copy_string(buf, gi->group, len); 00139 ret = 0; 00140 } 00141 00142 ast_app_group_list_unlock(); 00143 00144 return ret; 00145 }
| static int group_function_write | ( | struct ast_channel * | chan, | |
| char * | cmd, | |||
| char * | data, | |||
| const char * | value | |||
| ) | [static] |
Definition at line 147 of file func_groupcount.c.
References ast_app_group_set_channel(), ast_log(), ast_strlen_zero(), ast_group_info::chan, and LOG_WARNING.
00149 { 00150 char grpcat[256]; 00151 00152 if (!ast_strlen_zero(data)) { 00153 snprintf(grpcat, sizeof(grpcat), "%s@%s", value, data); 00154 } else { 00155 ast_copy_string(grpcat, value, sizeof(grpcat)); 00156 } 00157 00158 if (ast_app_group_set_channel(chan, grpcat)) 00159 ast_log(LOG_WARNING, 00160 "Setting a group requires an argument (group name)\n"); 00161 00162 return 0; 00163 }
| static int group_list_function_read | ( | struct ast_channel * | chan, | |
| char * | cmd, | |||
| char * | data, | |||
| char * | buf, | |||
| size_t | len | |||
| ) | [static] |
Definition at line 174 of file func_groupcount.c.
References ast_app_group_list_head(), ast_app_group_list_lock(), ast_app_group_list_unlock(), AST_LIST_NEXT, ast_strlen_zero(), ast_group_info::category, ast_group_info::chan, and ast_group_info::group.
00176 { 00177 struct ast_group_info *gi = NULL; 00178 char tmp1[1024] = ""; 00179 char tmp2[1024] = ""; 00180 00181 if (!chan) 00182 return -1; 00183 00184 ast_app_group_list_lock(); 00185 00186 for (gi = ast_app_group_list_head(); gi; gi = AST_LIST_NEXT(gi, list)) { 00187 if (gi->chan != chan) 00188 continue; 00189 if (!ast_strlen_zero(tmp1)) { 00190 ast_copy_string(tmp2, tmp1, sizeof(tmp2)); 00191 if (!ast_strlen_zero(gi->category)) 00192 snprintf(tmp1, sizeof(tmp1), "%s %s@%s", tmp2, gi->group, gi->category); 00193 else 00194 snprintf(tmp1, sizeof(tmp1), "%s %s", tmp2, gi->group); 00195 } else { 00196 if (!ast_strlen_zero(gi->category)) 00197 snprintf(tmp1, sizeof(tmp1), "%s@%s", gi->group, gi->category); 00198 else 00199 snprintf(tmp1, sizeof(tmp1), "%s", gi->group); 00200 } 00201 } 00202 00203 ast_app_group_list_unlock(); 00204 00205 ast_copy_string(buf, tmp1, len); 00206 00207 return 0; 00208 }
| static int group_match_count_function_read | ( | struct ast_channel * | chan, | |
| char * | cmd, | |||
| char * | data, | |||
| char * | buf, | |||
| size_t | len | |||
| ) | [static] |
Definition at line 88 of file func_groupcount.c.
References ast_app_group_match_get_count(), ast_app_group_split_group(), ast_strlen_zero(), and group.
00091 { 00092 int count; 00093 char group[80] = ""; 00094 char category[80] = ""; 00095 00096 ast_app_group_split_group(data, group, sizeof(group), category, 00097 sizeof(category)); 00098 00099 if (!ast_strlen_zero(group)) { 00100 count = ast_app_group_match_get_count(group, category); 00101 snprintf(buf, len, "%d", count); 00102 return 0; 00103 } 00104 00105 return -1; 00106 }
| static int load_module | ( | void | ) | [static] |
Definition at line 231 of file func_groupcount.c.
References ast_custom_function_register(), group_count_function, group_function, group_list_function, and group_match_count_function.
00232 { 00233 int res = 0; 00234 00235 res |= ast_custom_function_register(&group_count_function); 00236 res |= ast_custom_function_register(&group_match_count_function); 00237 res |= ast_custom_function_register(&group_list_function); 00238 res |= ast_custom_function_register(&group_function); 00239 00240 return res; 00241 }
| static int unload_module | ( | void | ) | [static] |
Definition at line 219 of file func_groupcount.c.
References ast_custom_function_unregister(), group_count_function, group_function, group_list_function, and group_match_count_function.
00220 { 00221 int res = 0; 00222 00223 res |= ast_custom_function_unregister(&group_count_function); 00224 res |= ast_custom_function_unregister(&group_match_count_function); 00225 res |= ast_custom_function_unregister(&group_list_function); 00226 res |= ast_custom_function_unregister(&group_function); 00227 00228 return res; 00229 }
struct ast_custom_function group_count_function [static] |
struct ast_custom_function group_function [static] |
struct ast_custom_function group_list_function [static] |
struct ast_custom_function group_match_count_function [static] |
1.5.1