/* * This is a utility function to create X-PIDF message body from PJSIP * presence status (pjsip_pres_status). */ PJ_DEF(pj_status_t) pjsip_pres_create_xpidf( pj_pool_t *pool, const pjsip_pres_status *status, const pj_str_t *entity, pjsip_msg_body **p_body ) { /* Note: PJSIP implementation of XPIDF is not complete! */ pjxpidf_pres *xpidf; pjsip_msg_body *body; PJ_LOG(4,(THIS_FILE, "Warning: XPIDF format is not fully supported " "by PJSIP")); /* Create XPIDF document. */ xpidf = pjxpidf_create(pool, entity); /* Set basic status. */ if (status->info_cnt > 0) pjxpidf_set_status( xpidf, status->info[0].basic_open); else pjxpidf_set_status( xpidf, PJ_FALSE); body = PJ_POOL_ZALLOC_T(pool, pjsip_msg_body); body->data = xpidf; body->content_type.type = STR_APPLICATION; body->content_type.subtype = STR_XPIDF_XML; body->print_body = &pres_print_body; body->clone_data = &xml_clone_data; *p_body = body; return PJ_SUCCESS; }
static void *xpidf_allocate_body(void *data) { struct ast_sip_exten_state_data *state_data = data; char *local = ast_strdupa(state_data->local); pjxpidf_pres *pres; pj_str_t name; pres = pjxpidf_create(state_data->pool, pj_cstr(&name, ast_strip_quoted(local, "<", ">"))); return pres; }