diff -ru pjproject-2.8/pjsip/src/pjsip-ua/sip_inv.c pjproject-2.8_mod/pjsip/src/pjsip-ua/sip_inv.c --- pjproject-2.8/pjsip/src/pjsip-ua/sip_inv.c 2018-08-01 11:22:26.000000000 +0200 +++ pjproject-2.8_mod/pjsip/src/pjsip-ua/sip_inv.c 2018-11-26 14:21:54.000000000 +0100 @@ -4185,6 +4185,32 @@ if (tsx->status_code != 100) { + if (inv->role == PJSIP_ROLE_UAC) { + pjsip_rx_data *rdata = e->body.tsx_state.src.rdata; + pjsip_allow_hdr *allow = NULL; + pjsip_msg *msg = NULL; + msg = rdata->msg_info.msg; + if (msg) { + allow = (pjsip_allow_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_ALLOW, + NULL); + } + if (allow) { + unsigned i; + const pj_str_t STR_UPDATE = { "UPDATE", 6 }; + + for (i=0; icount; ++i) { + if (pj_stricmp(&allow->values[i], &STR_UPDATE)==0) + break; + } + if (i != allow->count) { + /* UPDATE is present in Allow */ + inv->options |= PJSIP_INV_SUPPORT_UPDATE; + } + + } + } + + if (dlg->remote.info->tag.slen) inv_set_state(inv, PJSIP_INV_STATE_EARLY, e);