Commit ffe810454e0fdda1be1367689e3ab76aadf77425
1 parent
eddac644
优化目录xml解析;优化sipserver设置方式
Showing
6 changed files
with
267 additions
and
133 deletions
src/ai_platform/MultiSourceProcess.cpp
... | ... | @@ -228,19 +228,8 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){ |
228 | 228 | pVpcUtil->init(m_devId); |
229 | 229 | |
230 | 230 | // 初始化SIP服务器 |
231 | - ServerInfo info( | |
232 | - "SY_Sip_Server", | |
233 | - "12345678", | |
234 | - "192.168.60.179", | |
235 | - 15060, | |
236 | - "34020000002000000002", | |
237 | - "3402000000", | |
238 | - "sy123456", | |
239 | - 1800, | |
240 | - 3600); | |
241 | - | |
242 | 231 | SipServer* pSipServer = SipServer::getInstance(); |
243 | - pSipServer->Init(info); | |
232 | + pSipServer->Init(nullptr); | |
244 | 233 | |
245 | 234 | m_pAlgorthimThread = new thread([](void* arg) { |
246 | 235 | CMultiSourceProcess* process = (CMultiSourceProcess*)arg ; | ... | ... |
src/decoder/gb28181/sip/Message/CatalogParser.cpp
... | ... | @@ -557,7 +557,7 @@ std::vector< DeviceInfo > CCatalogParser::Decode( const std::vector< tinyxml2::X |
557 | 557 | return m_devices; |
558 | 558 | } |
559 | 559 | |
560 | -std::vector< DeviceInfo > CCatalogParser::Decode_Catlog(const char* body) | |
560 | +std::vector< DeviceInfo > CCatalogParser::DecodeCatlog(const char* body) | |
561 | 561 | { |
562 | 562 | std::vector< DeviceInfo > cat_list; |
563 | 563 | if (body == NULL) |
... | ... | @@ -604,14 +604,12 @@ std::vector< DeviceInfo > CCatalogParser::Decode_Catlog(const char* body) |
604 | 604 | } |
605 | 605 | |
606 | 606 | std::string sn = pSN->Value(); |
607 | - if (sn.empty()) | |
608 | - { | |
607 | + if (sn.empty()) { | |
609 | 608 | return cat_list; |
610 | 609 | } |
611 | 610 | |
612 | 611 | std::string deviceid = pDeviceID->Value(); |
613 | - if (deviceid.empty()) | |
614 | - { | |
612 | + if (deviceid.empty()) { | |
615 | 613 | return cat_list; |
616 | 614 | } |
617 | 615 | |
... | ... | @@ -622,9 +620,95 @@ std::vector< DeviceInfo > CCatalogParser::Decode_Catlog(const char* body) |
622 | 620 | cat_list = Decode(nodes); |
623 | 621 | if (cat_list.empty()) |
624 | 622 | { |
625 | - LOG_ERROR("消息体解析错误!"); | |
623 | + LOG_WARN("消息体未解析出设备!"); | |
624 | + } else { | |
625 | + // 设置 | |
626 | + for (size_t i = 0; i < cat_list.size(); i++) { | |
627 | + cat_list[i].parentid = deviceid; | |
628 | + } | |
626 | 629 | } |
627 | 630 | } |
628 | 631 | |
629 | 632 | return cat_list; |
633 | +} | |
634 | + | |
635 | +string CCatalogParser::getItemValue(tinyxml2::XMLNode *pItem) { | |
636 | + | |
637 | + tinyxml2::XMLNode *pValue = pItem->FirstChild(); | |
638 | + if( pValue == NULL ) { | |
639 | + LOG_DEBUG( "参数值没有设置" ); | |
640 | + return ""; | |
641 | + } | |
642 | + | |
643 | + const char *value = pValue->Value(); | |
644 | + if( value == NULL ) { | |
645 | + LOG_DEBUG( "参数值为空" ); | |
646 | + return ""; | |
647 | + } | |
648 | + | |
649 | + return value; | |
650 | +} | |
651 | + | |
652 | +ServerInfo CCatalogParser::DecodeServerConfig(const char* body) | |
653 | +{ | |
654 | + ServerInfo info; | |
655 | + if (body == NULL) { | |
656 | + return info; | |
657 | + } | |
658 | + | |
659 | + tinyxml2::XMLDocument doc; | |
660 | + doc.Parse(body); | |
661 | + tinyxml2::XMLElement* pRoot = doc.RootElement(); | |
662 | + if (pRoot == NULL) { | |
663 | + return info; | |
664 | + } | |
665 | + | |
666 | + for (tinyxml2::XMLNode* pNode = pRoot->FirstChild(); pNode != 0; pNode = pNode->NextSibling()) | |
667 | + { | |
668 | + std::string type = pNode->Value(); | |
669 | + if (CGBMessage::CompareNoCase( type, "Ua" )) | |
670 | + { | |
671 | + info.setUa(getItemValue(pNode)); | |
672 | + } | |
673 | + else if (CGBMessage::CompareNoCase( type, "Nonce" )) | |
674 | + { | |
675 | + info.setNonce(getItemValue(pNode)); | |
676 | + } | |
677 | + else if (CGBMessage::CompareNoCase( type, "Ip" )) | |
678 | + { | |
679 | + info.setIp(getItemValue(pNode)); | |
680 | + } | |
681 | + else if (CGBMessage::CompareNoCase( type, "Port" )) | |
682 | + { | |
683 | + string str = getItemValue(pNode); | |
684 | + int i = atoi(str.c_str()); | |
685 | + info.setPort(i); | |
686 | + } | |
687 | + else if (CGBMessage::CompareNoCase( type, "SipId" )) | |
688 | + { | |
689 | + info.setSipId(getItemValue(pNode)); | |
690 | + } | |
691 | + else if (CGBMessage::CompareNoCase( type, "SipRealm" )) | |
692 | + { | |
693 | + info.setSipRealm(getItemValue(pNode)); | |
694 | + } | |
695 | + else if (CGBMessage::CompareNoCase( type, "Password" )) | |
696 | + { | |
697 | + info.setSipPass(getItemValue(pNode)); | |
698 | + } | |
699 | + else if (CGBMessage::CompareNoCase( type, "Timeout" )) | |
700 | + { | |
701 | + string str = getItemValue(pNode); | |
702 | + int i = atoi(str.c_str()); | |
703 | + info.setTimeout(i); | |
704 | + } | |
705 | + else if (CGBMessage::CompareNoCase( type, "Expiry" )) | |
706 | + { | |
707 | + string str = getItemValue(pNode); | |
708 | + int i = atoi(str.c_str()); | |
709 | + info.setExpiry(i); | |
710 | + } | |
711 | + } | |
712 | + | |
713 | + return info; | |
630 | 714 | } |
631 | 715 | \ No newline at end of file | ... | ... |
src/decoder/gb28181/sip/Message/CatalogParser.h
... | ... | @@ -4,56 +4,8 @@ |
4 | 4 | #include "GBMessage.h" |
5 | 5 | #include <vector> |
6 | 6 | |
7 | -enum EEventType | |
8 | -{ | |
9 | - EVENT_ON = 0, // 上线 | |
10 | - EVENT_OFF, // 离线 | |
11 | - EVENT_VLOST, // 视频丢失 | |
12 | - EVENT_DEFECT, // 故障 | |
13 | - EVENT_ADD, // 增加 | |
14 | - EVENT_DEL, // 删除 | |
15 | - EVENT_UPDATE, // 更新 | |
16 | - | |
17 | - EVENT_UNKNOW, | |
18 | -}; | |
19 | - | |
20 | -struct DeviceInfo | |
21 | -{ | |
22 | - EEventType event; | |
23 | - std::string id; | |
24 | - std::string name; | |
25 | - std::string manufacturer; | |
26 | - std::string model; | |
27 | - std::string owner; | |
28 | - std::string civil; | |
29 | - std::string block; | |
30 | - std::string address; | |
31 | - std::string safetyway; | |
32 | - std::string registerway; | |
33 | - std::string certnum; | |
34 | - std::string certifiable; | |
35 | - std::string errcode; | |
36 | - std::string secrecy; | |
37 | - std::string parental; | |
38 | - std::string parentid; | |
39 | - std::string endtime; | |
40 | - std::string ip; | |
41 | - std::string port; | |
42 | - std::string password; | |
43 | - std::string status; | |
44 | - std::string longitude; | |
45 | - std::string latitude; | |
46 | - std::string ptz; | |
47 | - std::string position; | |
48 | - std::string room; | |
49 | - std::string use; | |
50 | - std::string supplylight; | |
51 | - std::string direction; | |
52 | - std::string resolution; | |
53 | - std::string businessgroup; | |
54 | -}; | |
7 | +#include "../sip_header.h" | |
55 | 8 | |
56 | -////////////////////////////////////////////////////////////////////////// | |
57 | 9 | class CCatalogParser : public CGBMessage |
58 | 10 | { |
59 | 11 | public: |
... | ... | @@ -64,7 +16,9 @@ public: |
64 | 16 | public: |
65 | 17 | bool Encode( std::string &message ); |
66 | 18 | |
67 | - std::vector< DeviceInfo > Decode_Catlog(const char* body); | |
19 | + std::vector<DeviceInfo> DecodeCatlog(const char* body); | |
20 | + | |
21 | + ServerInfo DecodeServerConfig(const char* body); | |
68 | 22 | |
69 | 23 | static std::string GetStrName(EEventType eType) |
70 | 24 | { |
... | ... | @@ -226,6 +180,7 @@ public: |
226 | 180 | |
227 | 181 | private: |
228 | 182 | std::vector< DeviceInfo > Decode(const std::vector< tinyxml2::XMLNode* >& nodes); |
183 | + string getItemValue(tinyxml2::XMLNode *pItem); | |
229 | 184 | |
230 | 185 | private: |
231 | 186 | std::string m_sn; | ... | ... |
src/decoder/gb28181/sip/SipServer.cpp
... | ... | @@ -18,6 +18,7 @@ |
18 | 18 | |
19 | 19 | #include <sstream> |
20 | 20 | #include <algorithm> |
21 | +#include <fstream> | |
21 | 22 | |
22 | 23 | using namespace std; |
23 | 24 | |
... | ... | @@ -92,8 +93,29 @@ SipServer::~SipServer() { |
92 | 93 | #endif // WIN32 |
93 | 94 | } |
94 | 95 | |
95 | -bool SipServer::Init(ServerInfo info) { | |
96 | - mInfo = info; | |
96 | +bool SipServer::Init(ServerInfo* pInfo) { | |
97 | + | |
98 | + if (pInfo == nullptr) { | |
99 | + std::ifstream cfgFile("./sip_server_cfg.xml"); | |
100 | + if(cfgFile.is_open()) { | |
101 | + string strConfig; | |
102 | + string str; | |
103 | + int char_count = 0; | |
104 | + while(cfgFile >> str) | |
105 | + { | |
106 | + strConfig += str; | |
107 | + } | |
108 | + CCatalogParser catPaser; | |
109 | + mInfo = catPaser.DecodeServerConfig(strConfig.c_str()); | |
110 | + } else { | |
111 | + LOG_ERROR("read sip server config file failed!"); | |
112 | + return false; | |
113 | + } | |
114 | + cfgFile.close(); | |
115 | + } else { | |
116 | + mInfo = *pInfo; | |
117 | + } | |
118 | + | |
97 | 119 | LOG_INFO("{}:{}", mInfo.getIp(), mInfo.getPort()); |
98 | 120 | |
99 | 121 | m_event_loop_thread = new std::thread(event_loop_thread, this); |
... | ... | @@ -121,7 +143,7 @@ int SipServer::sip_event_handle(eXosip_event_t *evtp) { |
121 | 143 | this->dump_request(evtp); |
122 | 144 | this->dump_response(evtp); |
123 | 145 | |
124 | - this->clearClientMap(); | |
146 | + // this->clearClientMap(); | |
125 | 147 | break; |
126 | 148 | case EXOSIP_MESSAGE_NEW://23 |
127 | 149 | // LOG_INFO("EXOSIP_MESSAGE_NEW type={}",evtp->type); |
... | ... | @@ -204,6 +226,7 @@ void SipServer::event_loop() { |
204 | 226 | if(this->init_sip_server() !=0 ){ |
205 | 227 | return; |
206 | 228 | } |
229 | + | |
207 | 230 | while(!mQuit) { |
208 | 231 | eXosip_event_t *evtp = eXosip_event_wait(mSipCtx, 0, 20); |
209 | 232 | if (!evtp){ |
... | ... | @@ -383,7 +406,7 @@ void SipServer::response_message(eXosip_event_t *evtp) { |
383 | 406 | this->response_message_answer(evtp,200); |
384 | 407 | // 需要根据对方的Catelog请求,做一些相应的应答请求 |
385 | 408 | CCatalogParser catPaser; |
386 | - std::vector<DeviceInfo> vec_device = catPaser.Decode_Catlog(body->body); | |
409 | + std::vector<DeviceInfo> vec_device = catPaser.DecodeCatlog(body->body); | |
387 | 410 | printDevice(vec_device); |
388 | 411 | |
389 | 412 | std::lock_guard<std::mutex> l(m_device_map_mtx); | ... | ... |
src/decoder/gb28181/sip/SipServer.h
1 | -// | |
2 | -// Created bxc on 2022/11/25. | |
3 | -// | |
4 | - | |
5 | -#ifndef BXC_SIPSERVER_SIPSERVER_H | |
6 | -#define BXC_SIPSERVER_SIPSERVER_H | |
1 | +#ifndef __SIPSERVER_H__ | |
2 | +#define __SIPSERVER_H__ | |
7 | 3 | |
8 | 4 | extern "C" { |
9 | 5 | #include <osip2/osip_mt.h> |
... | ... | @@ -17,62 +13,10 @@ extern "C" { |
17 | 13 | #include <mutex> |
18 | 14 | |
19 | 15 | #include "./Message/CatalogParser.h" |
16 | +#include "sip_header.h" | |
20 | 17 | |
21 | 18 | using namespace std; |
22 | 19 | |
23 | -class ServerInfo { | |
24 | -public: | |
25 | - ServerInfo() {} | |
26 | - | |
27 | - ServerInfo(string ua,string nonce, string ip, int port, | |
28 | - string sipId, string sipRealm, string sipPass, int sipTimeout, int sipExpiry): | |
29 | - mUa(ua), | |
30 | - mNonce(nonce),mIp(ip),mPort(port),mSipId(sipId), | |
31 | - mSipRealm(sipRealm),mSipPass(sipPass),mSipTimeout(sipTimeout), | |
32 | - mSipExpiry(sipExpiry){} | |
33 | - | |
34 | - ~ServerInfo() = default; | |
35 | -public: | |
36 | - string getUa() const{ | |
37 | - return mUa; | |
38 | - } | |
39 | - string getNonce() const{ | |
40 | - return mNonce; | |
41 | - } | |
42 | - string getIp() const{ | |
43 | - return mIp; | |
44 | - } | |
45 | - int getPort() const { | |
46 | - return mPort; | |
47 | - } | |
48 | - string getSipId() const{ | |
49 | - return mSipId; | |
50 | - } | |
51 | - string getSipRealm() const{ | |
52 | - return mSipRealm; | |
53 | - } | |
54 | - string getSipPass() const{ | |
55 | - return mSipPass; | |
56 | - } | |
57 | - int getTimeout() const { | |
58 | - return mSipTimeout; | |
59 | - } | |
60 | - int getExpiry() const { | |
61 | - return mSipExpiry; | |
62 | - } | |
63 | - | |
64 | -private: | |
65 | - string mUa; | |
66 | - string mNonce;//SIP服务随机数值 | |
67 | - string mIp;//SIP服务IP | |
68 | - int mPort;//SIP服务端口 | |
69 | - string mSipId; //SIP服务器ID | |
70 | - string mSipRealm;//SIP服务器域 | |
71 | - string mSipPass;//SIP password | |
72 | - int mSipTimeout; //SIP timeout | |
73 | - int mSipExpiry;// SIP到期 | |
74 | -}; | |
75 | - | |
76 | 20 | class Client { |
77 | 21 | public: |
78 | 22 | Client(string ip, int port, string device) : |
... | ... | @@ -135,7 +79,7 @@ public: |
135 | 79 | SipServer(); |
136 | 80 | ~SipServer(); |
137 | 81 | |
138 | - bool Init(ServerInfo info); | |
82 | + bool Init(ServerInfo* pInfo); | |
139 | 83 | |
140 | 84 | int RequestInvite_UDP(const char* dst_channel, int rtpPort); |
141 | 85 | |
... | ... | @@ -184,4 +128,4 @@ private: |
184 | 128 | }; |
185 | 129 | |
186 | 130 | |
187 | -#endif //BXC_SIPSERVER_SIPSERVER_H | |
131 | +#endif //__SIPSERVER_H__ | ... | ... |
src/decoder/gb28181/sip/sip_header.h
0 → 100644
1 | +#ifndef __SIP_HEADER_H__ | |
2 | +#define __SIP_HEADER_H__ | |
3 | + | |
4 | +#include <string> | |
5 | + | |
6 | +using namespace std; | |
7 | + | |
8 | +enum EEventType | |
9 | +{ | |
10 | + EVENT_ON = 0, // ���� | |
11 | + EVENT_OFF, // ���� | |
12 | + EVENT_VLOST, // ��Ƶ��ʧ | |
13 | + EVENT_DEFECT, // ���� | |
14 | + EVENT_ADD, // ���� | |
15 | + EVENT_DEL, // ɾ�� | |
16 | + EVENT_UPDATE, // ���� | |
17 | + | |
18 | + EVENT_UNKNOW, | |
19 | +}; | |
20 | + | |
21 | +struct DeviceInfo | |
22 | +{ | |
23 | + EEventType event; | |
24 | + std::string id; | |
25 | + std::string name; | |
26 | + std::string manufacturer; | |
27 | + std::string model; | |
28 | + std::string owner; | |
29 | + std::string civil; | |
30 | + std::string block; | |
31 | + std::string address; | |
32 | + std::string safetyway; | |
33 | + std::string registerway; | |
34 | + std::string certnum; | |
35 | + std::string certifiable; | |
36 | + std::string errcode; | |
37 | + std::string secrecy; | |
38 | + std::string parental; | |
39 | + std::string parentid; | |
40 | + std::string endtime; | |
41 | + std::string ip; | |
42 | + std::string port; | |
43 | + std::string password; | |
44 | + std::string status; | |
45 | + std::string longitude; | |
46 | + std::string latitude; | |
47 | + std::string ptz; | |
48 | + std::string position; | |
49 | + std::string room; | |
50 | + std::string use; | |
51 | + std::string supplylight; | |
52 | + std::string direction; | |
53 | + std::string resolution; | |
54 | + std::string businessgroup; | |
55 | +}; | |
56 | + | |
57 | +class ServerInfo { | |
58 | +public: | |
59 | + ServerInfo() {} | |
60 | + | |
61 | + ServerInfo(string ua,string nonce, string ip, int port, | |
62 | + string sipId, string sipRealm, string sipPass, int sipTimeout, int sipExpiry): | |
63 | + mUa(ua), | |
64 | + mNonce(nonce),mIp(ip),mPort(port),mSipId(sipId), | |
65 | + mSipRealm(sipRealm),mSipPass(sipPass),mSipTimeout(sipTimeout), | |
66 | + mSipExpiry(sipExpiry){} | |
67 | + | |
68 | + ~ServerInfo() = default; | |
69 | +public: | |
70 | + string getUa() const{ | |
71 | + return mUa; | |
72 | + } | |
73 | + void setUa(string ua) { | |
74 | + mUa = ua; | |
75 | + } | |
76 | + string getNonce() const{ | |
77 | + return mNonce; | |
78 | + } | |
79 | + void setNonce(string nonce) { | |
80 | + mNonce = nonce; | |
81 | + } | |
82 | + string getIp() const{ | |
83 | + return mIp; | |
84 | + } | |
85 | + void setIp(string s) { | |
86 | + mIp = s; | |
87 | + } | |
88 | + int getPort() const { | |
89 | + return mPort; | |
90 | + } | |
91 | + void setPort(int i) { | |
92 | + mPort = i; | |
93 | + } | |
94 | + | |
95 | + string getSipId() const{ | |
96 | + return mSipId; | |
97 | + } | |
98 | + void setSipId(string s) { | |
99 | + mSipId = s; | |
100 | + } | |
101 | + string getSipRealm() const{ | |
102 | + return mSipRealm; | |
103 | + } | |
104 | + void setSipRealm(string s) { | |
105 | + mSipRealm = s; | |
106 | + } | |
107 | + string getSipPass() const{ | |
108 | + return mSipPass; | |
109 | + } | |
110 | + void setSipPass(string s) { | |
111 | + mSipPass = s; | |
112 | + } | |
113 | + int getTimeout() const { | |
114 | + return mSipTimeout; | |
115 | + } | |
116 | + void setTimeout(int i) { | |
117 | + mSipTimeout = i; | |
118 | + } | |
119 | + int getExpiry() const { | |
120 | + return mSipExpiry; | |
121 | + } | |
122 | + void setExpiry(int i) { | |
123 | + mSipExpiry = i; | |
124 | + } | |
125 | + | |
126 | +private: | |
127 | + string mUa; | |
128 | + string mNonce;//SIP服务随机数值 | |
129 | + string mIp;//SIP服务IP | |
130 | + int mPort{0};//SIP服务端口 | |
131 | + string mSipId; //SIP服务器ID | |
132 | + string mSipRealm;//SIP服务器域 | |
133 | + string mSipPass;//SIP password | |
134 | + int mSipTimeout; //SIP timeout | |
135 | + int mSipExpiry;// SIP到期 | |
136 | +}; | |
137 | + | |
138 | + | |
139 | +#endif //__SIP_HEADER_H__ | |
0 | 140 | \ No newline at end of file | ... | ... |