/* Presence */ PJ_DEF(void) pjpidf_pres_construct(pj_pool_t *pool, pjpidf_pres *pres, const pj_str_t *entity) { pj_xml_attr *attr; xml_init_node(pool, pres, &PRESENCE, NULL); attr = xml_create_attr(pool, &ENTITY, entity); pj_xml_add_attr(pres, attr); attr = xml_create_attr(pool, &XMLNS, &PIDF_XMLNS); pj_xml_add_attr(pres, attr); }
PJ_DEF(pjxpidf_pres*) pjxpidf_create(pj_pool_t *pool, const pj_str_t *uri_cstr) { pjxpidf_pres *pres; pj_xml_node *presentity; pj_xml_node *atom; pj_xml_node *addr; pj_xml_node *status; pj_xml_attr *attr; pj_str_t uri; pj_str_t tmp; /* <presence> */ pres = xml_create_node(pool, &STR_PRESENCE, NULL); /* <presentity> */ presentity = xml_create_node(pool, &STR_PRESENTITY, NULL); pj_xml_add_node(pres, presentity); /* uri attribute */ uri.ptr = (char*) pj_pool_alloc(pool, uri_cstr->slen + STR_SUBSCRIBE_PARAM.slen); pj_strcpy( &uri, uri_cstr); pj_strcat( &uri, &STR_SUBSCRIBE_PARAM); attr = xml_create_attr(pool, &STR_URI, &uri); pj_xml_add_attr(presentity, attr); /* <atom> */ atom = xml_create_node(pool, &STR_ATOM, NULL); pj_xml_add_node(pres, atom); /* atom id */ pj_create_unique_string(pool, &tmp); attr = xml_create_attr(pool, &STR_ATOMID, &tmp); pj_xml_add_attr(atom, attr); /* address */ addr = xml_create_node(pool, &STR_ADDRESS, NULL); pj_xml_add_node(atom, addr); /* address'es uri */ attr = xml_create_attr(pool, &STR_URI, uri_cstr); pj_xml_add_attr(addr, attr); /* status */ status = xml_create_node(pool, &STR_STATUS, NULL); pj_xml_add_node(addr, status); /* status attr */ attr = xml_create_attr(pool, &STR_STATUS, &STR_OPEN); pj_xml_add_attr(status, attr); return pres; }
/* Tuple */ PJ_DEF(void) pjpidf_tuple_construct(pj_pool_t *pool, pjpidf_tuple *t, const pj_str_t *id) { pj_xml_attr *attr; pjpidf_status *st; xml_init_node(pool, t, &TUPLE, NULL); attr = xml_create_attr(pool, &ID, id); pj_xml_add_attr(t, attr); st = PJ_POOL_ALLOC_T(pool, pjpidf_status); pjpidf_status_construct(pool, st); pj_xml_add_node(t, st); }
PJ_DECL(void) pjdialog_info_dialog_set_direction(pj_pool_t *pool, pjdialog_info_dialog *dialog, const pj_str_t *direction) { pj_xml_attr *attr = pj_xml_find_attr(dialog, &DIRECTION, NULL); if (!attr) { attr = xml_create_attr(pool, &DIRECTION, direction); pj_xml_add_attr(dialog, attr); } else pj_strdup(pool, &attr->value, direction); }
PJ_DECL(void) pjdialog_info_dialog_set_local_tag(pj_pool_t *pool, pjdialog_info_dialog *dialog, const pj_str_t *local_tag) { pj_xml_attr *attr = pj_xml_find_attr(dialog, &LOCAL_TAG, NULL); if (!attr) { attr = xml_create_attr(pool, &LOCAL_TAG, local_tag); pj_xml_add_attr(dialog, attr); } else pj_strdup(pool, &attr->value, local_tag); }
PJ_DECL(void) pjdialog_info_dialog_set_call_id(pj_pool_t *pool, pjdialog_info_dialog *dialog, const pj_str_t *call_id) { pj_xml_attr *attr = pj_xml_find_attr(dialog, &CALL_ID, NULL); if (!attr) { attr = xml_create_attr(pool, &CALL_ID, call_id); pj_xml_add_attr(dialog, attr); } else pj_strdup(pool, &attr->value, call_id); }
/* Dialog-Info */ PJ_DECL(void) pjdialog_info_dialog_info_construct(pj_pool_t *pool, pjdialog_info_dialog_info *dialog_info, const pj_str_t *version, const pj_str_t *state, const pj_str_t* entity) { pj_xml_attr *attr; pjdialog_info_dialog *dialog; xml_init_node(pool, dialog_info, &DIALOG_INFO, NULL); attr = xml_create_attr(pool, &VERSION, version); pj_xml_add_attr(dialog_info, attr); attr = xml_create_attr(pool, &STATE, state); pj_xml_add_attr(dialog_info, attr); attr = xml_create_attr(pool, &ENTITY, entity); pj_xml_add_attr(dialog_info, attr); dialog = PJ_POOL_ALLOC_T(pool, pjdialog_info_dialog); pjdialog_info_local_construct(pool, dialog); pj_xml_add_node(dialog_info, dialog); }
PJ_DECL(void) pjdialog_info_dialog_set_state_code(pj_pool_t *pool, pjdialog_info_dialog *dialog, const pj_str_t *state_code) { pj_xml_node *node = pj_xml_find_node((pj_xml_node*)dialog, &STATE); pj_assert(node); pj_xml_attr *attr = pj_xml_find_attr(node, &CODE, NULL); if (!attr) { attr = xml_create_attr(pool, &CODE, state_code); pj_xml_add_attr(node, attr); } else pj_strdup(pool, &attr->value, state_code); }
PJ_DEF(void) pjpidf_tuple_set_contact_prio(pj_pool_t *pool, pjpidf_tuple *t, const pj_str_t *prio) { pj_xml_node *node = pj_xml_find_node(t, &CONTACT); pj_xml_attr *attr; if (!node) { node = PJ_POOL_ALLOC_T(pool, pj_xml_node); xml_init_node(pool, node, &CONTACT, NULL); pj_xml_add_node(t, node); } attr = pj_xml_find_attr(node, &PRIORITY, NULL); if (!attr) { attr = xml_create_attr(pool, &PRIORITY, prio); pj_xml_add_attr(node, attr); } else { pj_strdup(pool, &attr->value, prio); } }
/* Dialog */ PJ_DECL(void) pjdialog_info_dialog_construct(pj_pool_t *pool, pjdialog_info_dialog *dialog, const pj_str_t *id) { pj_xml_attr *attr; pjdialog_info_local *local; pjdialog_info_remote *remote; xml_init_node(pool, dialog, &DIALOG, NULL); attr = xml_create_attr(pool, &ID, id); pj_xml_add_attr(dialog, attr); local = PJ_POOL_ALLOC_T(pool, pjdialog_info_local); pjdialog_info_local_construct(pool, local); pj_xml_add_node(dialog, local); remote = PJ_POOL_ALLOC_T(pool, pjdialog_info_remote); pjdialog_info_remote_construct(pool, remote); pj_xml_add_node(dialog, remote); }
PJ_DECL(void) pjdialog_info_local_set_target_uri(pj_pool_t *pool, pjdialog_info_local *local, const pj_str_t * target_uri) { pj_xml_node *node = pj_xml_find_node((pj_xml_node*)local, &TARGET); pj_xml_attr *attr; if (!node) { node = PJ_POOL_ALLOC_T(pool, pj_xml_node); xml_init_node(pool, node, &TARGET, NULL); pj_xml_add_node(local, node); } attr = pj_xml_find_attr(node, &URI, NULL); if (!attr) { attr = xml_create_attr(pool, &URI, target_uri); pj_xml_add_attr(node, attr); } else { pj_strdup(pool, &attr->value, target_uri); } }
PJ_DECL(void) pjdialog_info_local_set_identity_display(pj_pool_t *pool, pjdialog_info_local *local, const pj_str_t *identity_display) { pj_xml_node *node = pj_xml_find_node((pj_xml_node*)local, &IDENTITY); pj_xml_attr *attr; if (!node) { node = PJ_POOL_ALLOC_T(pool, pj_xml_node); xml_init_node(pool, node, &IDENTITY, NULL); pj_xml_add_node(local, node); } attr = pj_xml_find_attr(node, &DISPLAY, NULL); if (!attr) { attr = xml_create_attr(pool, &DISPLAY, identity_display); pj_xml_add_attr(node, attr); } else { pj_strdup(pool, &attr->value, identity_display); } }