libexosip2自定义CSeq和Call-ID
libexosip2源码中CSeq的处理办法
因工作需要研究了一下libexosip2,发现sip头中CSeq有点问题,jrequest.c 如下图:
num = osip_strdup(doing_register ? "1" : "20");
osip_cseq_set_number(cseq, num);
osip_cseq_set_method(cseq, osip_strdup(method));
解决办法
替换CSeq和Call-ID,代码如下:
static int RplaceCallIDAndCseq(osip_message_t *rqt_msg, string &callId,
string &cseq) {
if (!rqt_msg->cseq->number || !rqt_msg->call_id->number) {
return -1;
}
// FIXME 原有的cseq固定为20,此处修改为自定义
osip_free(rqt_msg->cseq->number);
rqt_msg->cseq->number = osip_strdup(cseq.c_str());
// FIXME 原有的callid长度为33,修改为自定义callid
osip_free(rqt_msg->call_id->number);
rqt_msg->call_id->number = osip_strdup(callId.c_str());
return 0;
}