45 #include "asterisk/res_pjsip.h"
71 static int pjsip_endpoint_function_read(
struct ast_channel *chan,
72 const char *cmd,
char *data,
struct ast_str **buf, ssize_t len)
76 RAII_VAR(
void *, endpoint_obj, NULL, ao2_cleanup);
87 if (ast_strlen_zero(parsed_data)) {
88 ast_log(AST_LOG_ERROR,
"Cannot call %s without arguments\n", cmd);
94 if (ast_strlen_zero(args.endpoint_name)) {
95 ast_log(AST_LOG_ERROR,
"Cannot call %s without an endpoint name to query\n", cmd);
99 if (ast_strlen_zero(args.field_name)) {
100 ast_log(AST_LOG_ERROR,
"Cannot call %s with an empty field name to query\n", cmd);
104 pjsip_sorcery = ast_sip_get_sorcery();
105 if (!pjsip_sorcery) {
106 ast_log(AST_LOG_ERROR,
"Unable to retrieve PJSIP configuration: sorcery object is NULL\n");
112 ast_log(AST_LOG_WARNING,
"Failed to retrieve information for endpoint '%s'\n", args.endpoint_name);
118 ast_log(AST_LOG_WARNING,
"Failed to retrieve information for endpoint '%s': change set is NULL\n", args.endpoint_name);
122 for (it_change_set = change_set; it_change_set; it_change_set = it_change_set->
next) {
123 if (!strcmp(it_change_set->
name, args.field_name)) {
124 if (!strcmp(it_change_set->
name,
"disallow")) {
133 res = it_change_set ? 0 : 1;
135 ast_log(AST_LOG_WARNING,
"Unknown property '%s' for PJSIP endpoint\n", args.field_name);
145 .
name =
"PJSIP_ENDPOINT",
146 .read2 = pjsip_endpoint_function_read,
149 static int unload_module(
void)
154 static int load_module(
void)
159 AST_MODULE_INFO(
ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT,
"Get information about a PJSIP endpoint",
160 .support_level = AST_MODULE_SUPPORT_CORE,
162 .unload = unload_module,
163 .requires =
"res_pjsip",
struct ast_variable * next
Main Channel structure associated with a channel.
Asterisk main include file. File version handling, generic pbx functions.
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
Structure for variables, used for configurations and for channel variables.
Full structure for sorcery.
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
int ast_str_set(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Set a dynamic string using variable arguments.
General Asterisk PBX channel definitions.
#define ast_strdupa(s)
duplicate a string in memory from the stack
Data structure associated with a custom dialplan function.
Core PBX routines and definitions.
Support for dynamic strings.
#define ast_sorcery_objectset_create(sorcery, object)
Create an object set (KVP list) for an object.
#define ASTERISK_GPL_KEY
The text the key() function should return.
Asterisk module definitions.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
Application convenience functions, designed to give consistent look and feel to Asterisk apps...
#define ast_custom_function_register(acf)
Register a custom function.
Sorcery Data Access Layer API.
#define AST_APP_ARG(name)
Define an application argument.