diff --git a/res/res_pjsip/presence_xml.c b/res/res_pjsip/presence_xml.c index 1aca307e5a..3cea79e984 100644 --- a/res/res_pjsip/presence_xml.c +++ b/res/res_pjsip/presence_xml.c @@ -89,7 +89,7 @@ void ast_sip_presence_exten_state_to_str(int state, char **statestring, char **p case AST_EXTENSION_RINGING: *statestring = "early"; *local_state = NOTIFY_INUSE; - *pidfstate = "busy"; + *pidfstate = "on-the-phone"; *pidfnote = "Ringing"; break; case (AST_EXTENSION_INUSE | AST_EXTENSION_RINGING): @@ -99,31 +99,31 @@ void ast_sip_presence_exten_state_to_str(int state, char **statestring, char **p *statestring = "confirmed"; } *local_state = NOTIFY_INUSE; - *pidfstate = "busy"; + *pidfstate = "on-the-phone"; *pidfnote = "Ringing"; break; case AST_EXTENSION_INUSE: *statestring = "confirmed"; *local_state = NOTIFY_INUSE; - *pidfstate = "busy"; + *pidfstate = "on-the-phone"; *pidfnote = "On the phone"; break; case AST_EXTENSION_BUSY: *statestring = "confirmed"; - *local_state = NOTIFY_CLOSED; - *pidfstate = "busy"; + *local_state = NOTIFY_INUSE; + *pidfstate = "on-the-phone"; *pidfnote = "On the phone"; break; case AST_EXTENSION_UNAVAILABLE: *statestring = "terminated"; *local_state = NOTIFY_CLOSED; - *pidfstate = "away"; + *pidfstate = "--"; *pidfnote = "Unavailable"; break; case AST_EXTENSION_ONHOLD: *statestring = "confirmed"; - *local_state = NOTIFY_CLOSED; - *pidfstate = "busy"; + *local_state = NOTIFY_INUSE; + *pidfstate = "on-the-phone"; *pidfnote = "On hold"; break; case AST_EXTENSION_NOT_INUSE: diff --git a/res/res_pjsip_pidf_body_generator.c b/res/res_pjsip_pidf_body_generator.c index cc10082ad3..29c9e6be2f 100644 --- a/res/res_pjsip_pidf_body_generator.c +++ b/res/res_pjsip_pidf_body_generator.c @@ -75,7 +75,7 @@ static int pidf_generate_body_content(void *body, void *data) pjpidf_tuple_set_contact(state_data->pool, tuple, pj_cstr(&contact, sanitized)); pjpidf_tuple_set_contact_prio(state_data->pool, tuple, pj_cstr(&priority, "1")); pjpidf_status_set_basic_open(pjpidf_tuple_get_status(tuple), - local_state == NOTIFY_OPEN); + local_state == NOTIFY_OPEN || local_state == NOTIFY_INUSE); return 0; } diff --git a/res/res_pjsip_pidf_eyebeam_body_supplement.c b/res/res_pjsip_pidf_eyebeam_body_supplement.c index a0f50fddee..40470840c0 100644 --- a/res/res_pjsip_pidf_eyebeam_body_supplement.c +++ b/res/res_pjsip_pidf_eyebeam_body_supplement.c @@ -46,30 +46,28 @@ */ static void add_eyebeam(pj_pool_t *pool, pj_xml_node *node, const char *pidfstate) { - static const char *XMLNS_PP = "xmlns:pp"; - static const char *XMLNS_PERSON = "urn:ietf:params:xml:ns:pidf:person"; + static const char *XMLNS_DM_PREFIX = "xmlns:dm"; + static const char *XMLNS_DM = "urn:ietf:params:xml:ns:pidf:data-model"; - static const char *XMLNS_ES = "xmlns:es"; - static const char *XMLNS_RPID_STATUS = "urn:ietf:params:xml:ns:pidf:rpid:status:rpid-status"; + static const char *XMLNS_RPID_PREFIX = "xmlns:rpid"; + static const char *XMLNS_RPID = "urn:ietf:params:xml:ns:pidf:rpid"; - static const char *XMLNS_EP = "xmlns:ep"; - static const char *XMLNS_RPID_PERSON = "urn:ietf:params:xml:ns:pidf:rpid:rpid-person"; - - pj_xml_node *person = ast_sip_presence_xml_create_node(pool, node, "pp:person"); - pj_xml_node *status = ast_sip_presence_xml_create_node(pool, person, "status"); + pj_xml_node *person = ast_sip_presence_xml_create_node(pool, node, "dm:person"); if (pidfstate[0] != '-') { - pj_xml_node *activities = ast_sip_presence_xml_create_node(pool, status, "ep:activities"); - size_t str_size = sizeof("ep:") + strlen(pidfstate); + pj_xml_node *activities = ast_sip_presence_xml_create_node(pool, person, "rpid:activities"); + size_t str_size = sizeof("rpid:") + strlen(pidfstate); + char *act_str = ast_alloca(str_size); + + /* Safe */ + strcpy(act_str, "rpid:"); + strcat(act_str, pidfstate); - activities->content.ptr = pj_pool_alloc(pool, str_size); - activities->content.slen = pj_ansi_snprintf(activities->content.ptr, str_size, - "ep:%s", pidfstate); + ast_sip_presence_xml_create_node(pool, activities, act_str); } - ast_sip_presence_xml_create_attr(pool, node, XMLNS_PP, XMLNS_PERSON); - ast_sip_presence_xml_create_attr(pool, node, XMLNS_ES, XMLNS_RPID_STATUS); - ast_sip_presence_xml_create_attr(pool, node, XMLNS_EP, XMLNS_RPID_PERSON); + ast_sip_presence_xml_create_attr(pool, node, XMLNS_DM_PREFIX, XMLNS_DM); + ast_sip_presence_xml_create_attr(pool, node, XMLNS_RPID_PREFIX, XMLNS_RPID); } static int pidf_supplement_body(void *body, void *data)