最近在对接大华28181相机平台,在注册的时候发现已经注册上了,但是大华相机红色图标却没有变绿,抓包看的时候发现,如下:
最后有一个0 bindings
后来问同事发现原来是注册回复200OK的时候忘了expire这个头域了:
这是没有加expire头域的情况
REGISTER sip:34020000002000000099@192.168.1.215:25060 SIP/2.0
Call-ID: 9addd2a85e08716f4a7974783e3b91be
Contact: <sip:34020000001320000003@192.168.1.108:15060>
Content-Length: 0
CSeq: 1 REGISTER
Expires: 3600
From: <sip:34020000001320000003@192.168.1.108:15060>;tag=025f438da1c4607d4b574fa9ae6b7d7c
Max-Forwards: 70
Route: <sip:34020000001320000003@192.168.1.215:25060;lr>
To: <sip:34020000001320000003@192.168.1.108:15060>
User-Agent: SIP UAS V3.0.0.799029
Via: SIP/2.0/UDP 192.168.1.108:15060;rport;branch=z9hG4bKc7cd91cae5b6eccd26c39bb2f9ab9b08
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.108:15060;rport=15060;branch=z9hG4bKc7cd91cae5b6eccd26c39bb2f9ab9b08
From: <sip:34020000001320000003@192.168.1.108:15060>;tag=025f438da1c4607d4b574fa9ae6b7d7c
To: <sip:34020000001320000003@192.168.1.108:15060>;tag=279519764
Call-ID: 9addd2a85e08716f4a7974783e3b91be
CSeq: 1 REGISTER
User-Agent: ShenYanAI
Date: 2021-11-18T21:16:09:000
Content-Length: 0
正常注册的时候是:
REGISTER sip:34020000002000000099@192.168.1.215:25060 SIP/2.0
Call-ID: 3753989c4809910f26d58af021c7d652
Contact: <sip:34020000001320000003@192.168.1.108:15060>
Content-Length: 0
CSeq: 1 REGISTER
Expires: 3600
From: <sip:34020000001320000003@192.168.1.108:15060>;tag=840787920cfeda053bb87dc4c72d83fd
Max-Forwards: 70
Route: <sip:34020000001320000003@192.168.1.215:25060;lr>
To: <sip:34020000001320000003@192.168.1.108:15060>
User-Agent: SIP UAS V3.0.0.799029
Via: SIP/2.0/UDP 192.168.1.108:15060;rport;branch=z9hG4bK2e38412b2e61ebfe89ad6cf581b323b5
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.108:15060;rport=15060;branch=z9hG4bK2e38412b2e61ebfe89ad6cf581b323b5
From: <sip:34020000001320000003@192.168.1.108:15060>;tag=840787920cfeda053bb87dc4c72d83fd
To: <sip:34020000001320000003@192.168.1.108:15060>;tag=203761805
Call-ID: 3753989c4809910f26d58af021c7d652
CSeq: 1 REGISTER
Contact: <sip:34020000001320000003@192.168.1.108:15060>
User-Agent: ShenYanAI
Date: 2021-11-19T09:25:37:000
Expires: 3600
Content-Length: 0
这里说明一点,我上面的注册过程把authn给取消了,为啥取消,时间太急了,后面慢慢补充。
至于怎么加expire和contact:
我用的是exosip
void UA::responseOK(eXosip_event_t *ev, int code, std::string bingding) {
eXosip_event_t *event_ = ev;
auto tid = event_->tid;
osip_message_t *msg = nullptr;
int ret;
ret = eXosip_message_build_answer(m_context, tid, code, &msg);
if (0 != ret) {
LOG_INFO("build sip call response failed\n");
eXosip_message_send_answer(m_context, event_->tid, 400, nullptr);
return;
}
char time[64] = {0};
std::time_t t = std::time(nullptr);
if (std::strftime(time, sizeof(time), "%FT%T:000", std::localtime(&t))) {
LOG_INFO("Send Message Resp time: ", time);
}
osip_message_set_date(msg, time);
if (!bingding.empty()) {
osip_message_set_expires(msg, "3600");
//这里binding就是contact
//sip:34020000001320000003@192.168.1.108:15060
osip_message_set_contact(msg, bingding.c_str());
}
ret = eXosip_message_send_answer(m_context, tid, code, msg);
if (0 != ret) {
LOG_INFO("call send response ring failed");
return;
}
return;
}