102{
  105    char *contact_name;
  108    int res = 0;
  109 
  113    );
  114 
  115    
  118        return -1;
  119    }
  120 
  122 
  125        return -1;
  126    }
  127 
  130        return -1;
  131    }
  132 
  134    if (!pjsip_sorcery) {
  136        return -1;
  137    }
  138 
  139    
  140    if ((contact_name = strstr(
args.contact_name, 
"@@"))) {
 
  141        size_t aor_name_len = contact_name - 
args.contact_name;
 
  142        char aor_name[aor_name_len + 1];
  144 
  145        
  146        strncpy(aor_name, 
args.contact_name, aor_name_len);
 
  147        aor_name[aor_name_len] = '\0';
  148 
  150        if (!aor_obj) {
  152            return -1;
  153        }
  154 
  156    } else {
  158    }
  159 
  160    if (!contact_obj) {
  162        return -1;
  163    }
  164 
  166 
  167    if (!strcmp(
args.field_name, 
"status")) {
 
  169    } 
else if (!strcmp(
args.field_name, 
"rtt")) {
 
  170        if (!contact_status || contact_status->status != 
AVAILABLE) {
 
  172        } else {
  174        }
  175    } else {
  178 
  180 
  181        if (!change_set) {
  183            return -1;
  184        }
  185 
  186        for (it_change_set = change_set; it_change_set; it_change_set = it_change_set->
next) {
 
  187            if (!strcmp(it_change_set->
name, 
args.field_name)) {
 
  189                break;
  190            }
  191        }
  192 
  193        if (!it_change_set) {
  195 
  196            res = 1;
  197        }
  198 
  200    }
  201 
  202    return res;
  203}
#define ast_strdupa(s)
duplicate a string in memory from the stack
#define ao2_callback(c, flags, cb_fn, arg)
ao2_callback() is a generic function that applies cb_fn() to all objects in a container,...
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
#define AST_APP_ARG(name)
Define an application argument.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
struct ast_sorcery * ast_sip_get_sorcery(void)
Get a pointer to the SIP sorcery structure.
struct ast_sip_contact_status * ast_sip_get_contact_status(const struct ast_sip_contact *contact)
Retrieve the current status for a contact.
const char * ast_sip_get_contact_status_label(const enum ast_sip_contact_status_type status)
translate ast_sip_contact_status_type to character string.
#define ast_sorcery_objectset_create(sorcery, object)
Create an object set (KVP list) for an object.
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
static force_inline int attribute_pure ast_strlen_zero(const char *s)
int ast_str_set(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Set a dynamic string using variable arguments.
Full structure for sorcery.
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.