summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua/sip_inv.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip/src/pjsip-ua/sip_inv.c')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index eb2c20f3..94ec987e 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -750,6 +750,7 @@ PJ_DEF(pj_status_t) pjsip_inv_verify_request2(pjsip_rx_data *rdata,
pjsip_allow_hdr *allow;
pjsip_supported_hdr *sup_hdr;
pjsip_require_hdr *req_hdr;
+ pjsip_contact_hdr *c_hdr;
int code = 200;
unsigned rem_option = 0;
pj_status_t status = PJ_SUCCESS;
@@ -784,6 +785,27 @@ PJ_DEF(pj_status_t) pjsip_inv_verify_request2(pjsip_rx_data *rdata,
/* Init response header list */
pj_list_init(&res_hdr_list);
+ /* Check the Contact header */
+ c_hdr = (pjsip_contact_hdr*)
+ pjsip_msg_find_hdr(msg, PJSIP_H_CONTACT, NULL);
+ if (!c_hdr || !c_hdr->uri) {
+ /* Missing Contact header or Contact contains "*" */
+ pjsip_warning_hdr *w;
+ pj_str_t warn_text;
+
+ warn_text = pj_str("Bad/missing Contact header");
+ w = pjsip_warning_hdr_create(rdata->tp_info.pool, 399,
+ pjsip_endpt_name(endpt),
+ &warn_text);
+ if (w) {
+ pj_list_push_back(&res_hdr_list, w);
+ }
+
+ code = PJSIP_SC_BAD_REQUEST;
+ status = PJSIP_ERRNO_FROM_SIP_STATUS(code);
+ goto on_return;
+ }
+
/* Check the request body, see if it's something that we support,
* only when the body hasn't been parsed before.
*/