diff --git a/src/decoder/gb28181/sip/Message/CatalogParser.cpp b/src/decoder/gb28181/sip/Message/CatalogParser.cpp index e401c4f..b56865c 100644 --- a/src/decoder/gb28181/sip/Message/CatalogParser.cpp +++ b/src/decoder/gb28181/sip/Message/CatalogParser.cpp @@ -688,25 +688,28 @@ ServerInfo CCatalogParser::DecodeServerConfig(const char* body) { info.setSipId(getItemValue(pNode)); } - else if (CGBMessage::CompareNoCase( type, "SipRealm" )) - { + else if (CGBMessage::CompareNoCase( type, "SipRealm" )) { info.setSipRealm(getItemValue(pNode)); } - else if (CGBMessage::CompareNoCase( type, "Password" )) - { + else if (CGBMessage::CompareNoCase( type, "Password" )) { info.setSipPass(getItemValue(pNode)); } - else if (CGBMessage::CompareNoCase( type, "Timeout" )) - { + else if (CGBMessage::CompareNoCase( type, "Timeout" )) { string str = getItemValue(pNode); int i = atoi(str.c_str()); info.setTimeout(i); - } - else if (CGBMessage::CompareNoCase( type, "Expiry" )) - { + } else if (CGBMessage::CompareNoCase( type, "Expiry" )) { string str = getItemValue(pNode); int i = atoi(str.c_str()); info.setExpiry(i); + } else if (CGBMessage::CompareNoCase( type, "MinRtpPort" )) { + string str = getItemValue(pNode); + int i = atoi(str.c_str()); + info.setMinRtpPort(i); + } else if (CGBMessage::CompareNoCase( type, "MaxRtpPort" )) { + string str = getItemValue(pNode); + int i = atoi(str.c_str()); + info.setMaxRtpPort(i); } } diff --git a/src/decoder/gb28181/sip/SipServer.cpp b/src/decoder/gb28181/sip/SipServer.cpp index 1a1d995..e505485 100644 --- a/src/decoder/gb28181/sip/SipServer.cpp +++ b/src/decoder/gb28181/sip/SipServer.cpp @@ -38,7 +38,7 @@ static void timing_getcatlog_thread(void* arg) { _this->timing_getcatlog(); } else { - LOG_ERROR("event_loop线程启动失败 !"); + LOG_ERROR("timing_getcatlog 线程启动失败 !"); } } @@ -123,6 +123,14 @@ bool SipServer::Init(ServerInfo* pInfo) { return true; } +int SipServer::GetMinRtpPort(){ + return mInfo.getMinRtpPort(); +} + +int SipServer::GetMaxRtpPort(){ + return mInfo.getMaxRtpPort(); +} + int SipServer::sip_event_handle(eXosip_event_t *evtp) { switch(evtp->type) { @@ -226,6 +234,8 @@ void SipServer::event_loop() { if(this->init_sip_server() !=0 ){ return; } + + thread* timing_getcatlog_threadptr = new std::thread(timing_getcatlog_thread, this); while(!mQuit) { eXosip_event_t *evtp = eXosip_event_wait(mSipCtx, 0, 20); @@ -238,10 +248,24 @@ void SipServer::event_loop() { this->sip_event_handle(evtp); eXosip_event_free(evtp); } + + mQuit = true; + if (timing_getcatlog_threadptr) { + timing_getcatlog_threadptr->join(); + delete timing_getcatlog_threadptr; + timing_getcatlog_threadptr = nullptr; + } } -void SipServer::close() { +void SipServer::Close() { mQuit = true; + + if (m_event_loop_thread) { + m_event_loop_thread->join(); + delete m_event_loop_thread; + m_event_loop_thread = nullptr; + } + } void SipServer::timing_getcatlog() { diff --git a/src/decoder/gb28181/sip/SipServer.h b/src/decoder/gb28181/sip/SipServer.h index d1f2cc4..9a9b390 100644 --- a/src/decoder/gb28181/sip/SipServer.h +++ b/src/decoder/gb28181/sip/SipServer.h @@ -85,7 +85,11 @@ public: int RequestInvite_TCP_a(const char* dst_channel, int rtpPort); - void close(); + void Close(); + + int GetMinRtpPort(); + + int GetMaxRtpPort(); public: void event_loop(); @@ -124,7 +128,7 @@ private: std::map m_device_map; mutex m_device_map_mtx; - thread* m_event_loop_thread; + thread* m_event_loop_thread{nullptr}; }; diff --git a/src/decoder/gb28181/sip/sip_header.h b/src/decoder/gb28181/sip/sip_header.h index 8cc80a8..9533156 100644 --- a/src/decoder/gb28181/sip/sip_header.h +++ b/src/decoder/gb28181/sip/sip_header.h @@ -59,11 +59,10 @@ public: ServerInfo() {} ServerInfo(string ua,string nonce, string ip, int port, - string sipId, string sipRealm, string sipPass, int sipTimeout, int sipExpiry): - mUa(ua), - mNonce(nonce),mIp(ip),mPort(port),mSipId(sipId), + string sipId, string sipRealm, string sipPass, int sipTimeout, int sipExpiry, int minRtpPort, int maxRtpPort): + mUa(ua),mNonce(nonce),mIp(ip),mPort(port),mSipId(sipId), mSipRealm(sipRealm),mSipPass(sipPass),mSipTimeout(sipTimeout), - mSipExpiry(sipExpiry){} + mSipExpiry(sipExpiry),mMinRtpPort(minRtpPort),mMaxRtpPort(maxRtpPort){} ~ServerInfo() = default; public: @@ -122,6 +121,18 @@ public: void setExpiry(int i) { mSipExpiry = i; } + int getMinRtpPort() const { + return mMinRtpPort; + } + void setMinRtpPort(int i) { + mMinRtpPort = i; + } + int getMaxRtpPort() const { + return mMaxRtpPort; + } + void setMaxRtpPort(int i) { + mMaxRtpPort = i; + } private: string mUa; @@ -133,6 +144,8 @@ private: string mSipPass;//SIP password int mSipTimeout; //SIP timeout int mSipExpiry;// SIP到期 + int mMinRtpPort; + int mMaxRtpPort; };