MT#62181 use deque to contain sockets and servers

No functional changes.

Change-Id: I8accc263c101c3bc74ce35130851b3e51e953eee
mr13.5
Richard Fuchs 1 year ago
parent 69a9abd271
commit daf2f95c8b

@ -61,18 +61,6 @@
bool _SipCtrlInterface::log_parsed_messages = true;
int _SipCtrlInterface::udp_rcvbuf = -1;
int _SipCtrlInterface::alloc_udp_structs()
{
udp_sockets = new udp_trsp_socket*[ AmConfig::SIP_Ifs.size() ];
udp_servers = new udp_trsp* [ AmConfig::SIPServerThreads
* AmConfig::SIP_Ifs.size() ];
if(udp_sockets && udp_servers)
return 0;
return -1;
}
int _SipCtrlInterface::init_udp_servers(int if_num)
{
udp_trsp_socket* udp_socket =
@ -103,30 +91,16 @@ int _SipCtrlInterface::init_udp_servers(int if_num)
}
trans_layer::instance()->register_transport(udp_socket);
udp_sockets[if_num] = udp_socket;
udp_sockets.push_back(udp_socket);
inc_ref(udp_socket);
nr_udp_sockets++;
for(int j=0; j<AmConfig::SIPServerThreads;j++){
udp_servers[if_num * AmConfig::SIPServerThreads + j] =
new udp_trsp(udp_socket);
nr_udp_servers++;
udp_servers.push_back(new udp_trsp(udp_socket));
}
return 0;
}
int _SipCtrlInterface::alloc_tcp_structs()
{
tcp_sockets = new tcp_server_socket*[ AmConfig::SIP_Ifs.size() ];
tcp_servers = new tcp_trsp* [ AmConfig::SIP_Ifs.size() ];
if(tcp_sockets && tcp_servers)
return 0;
return -1;
}
int _SipCtrlInterface::init_tcp_servers(int if_num)
{
tcp_server_socket* tcp_socket = new tcp_server_socket(if_num);
@ -153,12 +127,10 @@ int _SipCtrlInterface::init_tcp_servers(int if_num)
tcp_socket->add_threads(AmConfig::SIPServerThreads);
trans_layer::instance()->register_transport(tcp_socket);
tcp_sockets[if_num] = tcp_socket;
tcp_sockets.push_back(tcp_socket);
inc_ref(tcp_socket);
nr_tcp_sockets++;
tcp_servers[if_num] = new tcp_trsp(tcp_socket);
nr_tcp_servers++;
tcp_servers.push_back(new tcp_trsp(tcp_socket));
return 0;
}
@ -222,11 +194,6 @@ int _SipCtrlInterface::load()
DBG("assuming SIP default settings.\n");
}
if(alloc_udp_structs() < 0) {
ERROR("no enough memory to alloc UDP structs");
return -1;
}
// Init UDP transport instances
for(unsigned int i=0; i<AmConfig::SIP_Ifs.size();i++) {
if(init_udp_servers(i) < 0) {
@ -234,11 +201,6 @@ int _SipCtrlInterface::load()
}
}
if(alloc_tcp_structs() < 0) {
ERROR("no enough memory to alloc TCP structs");
return -1;
}
// Init TCP transport instances
for(unsigned int i=0; i<AmConfig::SIP_Ifs.size();i++) {
if(init_tcp_servers(i) < 0) {
@ -250,11 +212,7 @@ int _SipCtrlInterface::load()
}
_SipCtrlInterface::_SipCtrlInterface()
: stopped(false),
udp_servers(NULL), udp_sockets(NULL),
nr_udp_sockets(0), nr_udp_servers(0),
tcp_servers(NULL), tcp_sockets(NULL),
nr_tcp_sockets(0), nr_tcp_servers(0)
: stopped(false)
{
trans_layer::instance()->register_ua(this);
}
@ -376,19 +334,14 @@ int _SipCtrlInterface::run(SdNotifier& sd)
DBG("Starting SIP control interface\n");
wheeltimer::instance()->start();
if (NULL != udp_servers) {
for(int i=0; i<nr_udp_servers;i++){
udp_servers[i]->start(sd);
}
}
for (auto it = udp_servers.begin(); it != udp_servers.end(); it++)
(*it)->start(sd);
if (NULL != tcp_servers) {
for(int i=0; i<nr_tcp_servers;i++){
tcp_servers[i]->start(sd);
}
}
for (auto it = tcp_servers.begin(); it != tcp_servers.end(); it++)
(*it)->start(sd);
DBG("SIP control interface ending\n");
return 0;
}
@ -401,52 +354,28 @@ void _SipCtrlInterface::cleanup()
{
DBG("Stopping SIP control interface threads\n");
if (NULL != udp_servers) {
for(int i=0; i<nr_udp_servers;i++){
udp_servers[i]->stop();
udp_servers[i]->join();
delete udp_servers[i];
}
delete [] udp_servers;
udp_servers = NULL;
nr_udp_servers = 0;
for (auto it = udp_servers.begin(); it != udp_servers.end(); it++) {
(*it)->stop();
(*it)->join();
delete *it;
}
if (NULL != tcp_servers) {
for(int i=0; i<nr_tcp_servers;i++){
tcp_servers[i]->stop();
tcp_servers[i]->join();
delete tcp_servers[i];
}
delete [] tcp_servers;
tcp_servers = NULL;
nr_tcp_servers = 0;
for (auto it = tcp_servers.begin(); it != tcp_servers.end(); it++) {
(*it)->stop();
(*it)->join();
delete *it;
}
trans_layer::instance()->clear_transports();
if (NULL != udp_sockets) {
for(int i=0; i<nr_udp_sockets;i++){
DBG("dec_ref(%p)",udp_sockets[i]);
dec_ref(udp_sockets[i]);
}
delete [] udp_sockets;
udp_sockets = NULL;
nr_udp_sockets = 0;
for (auto it = udp_sockets.begin(); it != udp_sockets.end(); it++) {
DBG("dec_ref(%p)", *it);
dec_ref(*it);
}
if (NULL != tcp_sockets) {
for(int i=0; i<nr_tcp_sockets;i++){
DBG("dec_ref(%p)",tcp_sockets[i]);
dec_ref(tcp_sockets[i]);
}
delete [] tcp_sockets;
tcp_sockets = NULL;
nr_tcp_sockets = 0;
for (auto it = tcp_sockets.begin(); it != tcp_sockets.end(); it++) {
DBG("dec_ref(%p)", *it);
dec_ref(*it);
}
wheeltimer::instance()->stop();

@ -34,8 +34,10 @@
#include <string>
#include <list>
#include <deque>
using std::string;
using std::list;
using std::deque;
class AmSipRequest;
class AmSipReply;
@ -64,22 +66,12 @@ class _SipCtrlInterface:
AmCondition stopped;
unsigned short nr_udp_sockets;
udp_trsp_socket** udp_sockets;
deque<udp_trsp_socket*> udp_sockets;
deque<udp_trsp*> udp_servers;
deque<tcp_server_socket*> tcp_sockets;
deque<tcp_trsp*> tcp_servers;
unsigned short nr_udp_servers;
udp_trsp** udp_servers;
unsigned short nr_tcp_sockets;
tcp_server_socket** tcp_sockets;
unsigned short nr_tcp_servers;
tcp_trsp** tcp_servers;
int alloc_udp_structs();
int init_udp_servers(int if_num);
int alloc_tcp_structs();
int init_tcp_servers(int if_num);
public:

Loading…
Cancel
Save