在使用eXosip对gb28181编程时,遇到一个奇怪的问题,最后发现是eXosip内部在生成cseq时产生的number值始终为20引起的,我想要这个值递增
在jrequest.c文件里的_eXosip_generating_request_out_of_dialog函数:
i = osip_cseq_init (&cseq);
if (i != 0) {
osip_message_free (request);
return i;
}
num = osip_strdup (doing_register ? "1" : "20");
osip_cseq_set_number (cseq, num);
osip_cseq_set_method (cseq, osip_strdup (method));
request->cseq = cseq;
虽然协议里对这个值是使用者自定义,但是在这里我需要他变化,因此,在使用时需要我们自己来修改这个值,使他递增
...
osip_message_t *pInvite = NULL;
int err = eXosip_call_build_initial_invite(m_jtgbsipctx, &pInvite, CTo, CFrom, CRoute, NULL); //"This is a call for xy"
if(err)
{
jtprintf("[%s]eXosip_call_build_initial_invite err %d\n", __FUNCTION__, err);
eXosip_unlock (m_jtgbsipctx);
return -1;
}
jtprintf("eXosip_call_build_initial_invite 1, Seq %s, method %s, DeviceId %s\n"
, pInvite->cseq->number, pInvite->cseq->method, DeviceId.c_str());
osip_free(pInvite->cseq->number);
// osip内部产生的number始终是20, 没有递增!!!!!!!!!!!!!!!!!! 重新赋值
stringstream convertstream;
convertstream << m_SN++;
string strSN;
convertstream>>strSN;
pInvite->cseq->number = osip_strdup(strSN.c_str());
...
ps: 在和国内某大厂做gb28181对接时,发现对方的invite请求始终都时20值,没有变化处理