reSIProcate
SIP stack, Dialog Usage Manager and related libraries
Loading...
Searching...
No Matches
SipStack.hxx
Go to the documentation of this file.
1#if !defined(RESIP_SIPSTACK_HXX)
2#define RESIP_SIPSTACK_HXX
3
4#ifdef HAVE_CONFIG_H
5#include "config.h"
6#endif
7
8#include <set>
9#include <iosfwd>
10
14#include "rutil/Mutex.hxx"
24#include "rutil/dns/DnsStub.hxx"
25
26#include <memory>
27#include <utility>
28
33#define RESIP_SIPSTACK_HAVE_FDPOLL 1
34
35namespace resip
36{
37
38class ApplicationMessage;
39class Data;
40class DnsThread;
41class Message;
42class Security;
43class SipMessage;
44class StatisticsManager;
45class Tuple;
46class Uri;
47class TransactionControllerThread;
48class TransportSelectorThread;
49class TransactionUser;
50class AsyncProcessHandler;
51class Compression;
52class FdPollGrp;
53
131
132
133
160{
161 public:
170 SipStack(const SipStackOptions& options);
171
220 SipStack(Security* security=0,
222 AsyncProcessHandler* handler = 0,
223 bool stateless=false,
224 AfterSocketCreationFuncPtr socketFunc = 0,
225 Compression *compression = 0,
226 FdPollGrp* pollGrp = 0,
227 bool useDnsVip = false);
228
229 virtual ~SipStack();
230
244 void run();
245
257 void shutdown();
258
263
272 void onReload();
273
278 void reloadCertificates();
279
285 class Exception final : public BaseException
286 {
287 public:
297 Exception(const Data& msg, const Data& file, const int line)
298 : BaseException(msg, file, line) {}
299
303 const char* name() const noexcept override { return "SipStack::Exception"; }
304 };
305
319 void setTransportSipMessageLoggingHandler(std::shared_ptr<Transport::SipMessageLoggingHandler> handler);
320
334 void addTransportSipMessageLoggingHandler(std::shared_ptr<Transport::SipMessageLoggingHandler> handler);
335
399 int port,
400 IpVersion version=V4,
402 const Data& ipInterface = Data::Empty,
403 const Data& sipDomainname = Data::Empty, // only used for TLS based stuff
404 const Data& privateKeyPassPhrase = Data::Empty,
406 unsigned transportFlags = 0,
407 const Data& certificateFilename = "",
408 const Data& privateKeyFilename = "",
410 bool useEmailAsSIP = false,
411 std::shared_ptr<WsConnectionValidator> = nullptr,
412 std::shared_ptr<WsCookieContextFactory> = nullptr,
413 const Data& netNs = Data::Empty
414 );
415
423 void addTransport(std::unique_ptr<Transport> transport);
424
431 void removeTransport(unsigned int transportKey);
432
440
453 void addAlias(const Data& domain, int port);
454
466 void removeAlias(const Data& domain, int port);
467
476 bool isMyDomain(const Data& domain, int port) const;
477
484 bool isMyPort(int port) const;
485
490 static Data getHostname();
491
496 static Data getHostAddress();
497
502 const Uri& getUri() const;
503
517 void send(const SipMessage& msg, TransactionUser* tu=0);
518
519 void send(std::unique_ptr<SipMessage> msg, TransactionUser* tu = 0);
520
523 void sendTo(std::unique_ptr<SipMessage> msg, const Uri& uri, TransactionUser* tu=0);
526 void sendTo(std::unique_ptr<SipMessage> msg, const Tuple& tuple, TransactionUser* tu=0);
527
541 void sendTo(const SipMessage& msg, const Uri& uri, TransactionUser* tu=0);
542
556 void sendTo(const SipMessage& msg, const Tuple& tuple,
557 TransactionUser* tu=0);
558
575 void sendOverExistingConnection(const SipMessage& msg, const Tuple& tuple,
576 TransactionUser* tu=0);
577
590 void post(std::unique_ptr<ApplicationMessage> message,
591 unsigned int secondsLater,
592 TransactionUser* tu=0);
593
606 void postMS(std::unique_ptr<ApplicationMessage> message,
607 unsigned int ms,
608 TransactionUser* tu=0);
609
622 void post(std::unique_ptr<ApplicationMessage> message,
623 std::chrono::duration<double> interval,
624 TransactionUser* tu=0);
625
633 void post(std::unique_ptr<ApplicationMessage> message);
634
645 void post(const ApplicationMessage& message);
646
662 void post(const ApplicationMessage& message, unsigned int secondsLater,
663 TransactionUser* tu=0);
664
680 void postMS(const ApplicationMessage& message, unsigned int ms,
681 TransactionUser* tu=0);
682
695 void post(const ApplicationMessage& message,
696 std::chrono::duration<double> interval,
697 TransactionUser* tu=0);
698
708 void abandonServerTransaction(const Data& tid);
709
721 void cancelClientInviteTransaction(const Data& tid, const Tokens* reasons);
722
731 bool hasMessage() const;
732
749
768
769 /*
770 * Handler is notified when a message is posted to the default
771 * application receive queue. (Fetching using receive() above).
772 * This handler is called from SipStack's thread, and can
773 * be used to "wake-up" the application's thread.
774 */
776
795 RESIP_DEPRECATED(virtual void buildFdSet(FdSet& fdset));
796
812 RESIP_DEPRECATED(virtual void process(FdSet& fdset));
813
852 bool process(unsigned int timeoutMs);
853
854 inline FdPollGrp* getPollGrp() {return mPollGrp;}
855
868 virtual unsigned int getTimeTillNextProcessMS();
869
879 virtual void processTimers();
880
885 void setStatisticsInterval(unsigned long seconds);
886
890 void zeroOutStatistics();
891
897 bool pollStatistics();
898
903 {
904 mStatsManager.setExternalStatsHandler(handler);
905 }
906
908 const StatisticsManager* getStatisticsManager() {return(&mStatsManager);}
909
911 EncodeStream& dump(EncodeStream& strm) const;
912
914 Security* getSecurity() const;
915
923 void registerTransactionUser(TransactionUser&, const bool front = false);
924
927
930
939 void registerMarkListener(MarkListener* listener);
940
950 void unregisterMarkListener(MarkListener* listener);
951
952 DnsStub& getDnsStub() const;
953
963 void setEnumSuffixes(const std::vector<Data>& suffixes);
964
973 void setEnumDomains(const std::map<Data,Data>& domains);
974
978 void clearDnsCache();
979
983 void logDnsCache();
984
993 void getDnsCacheDump(std::pair<unsigned long, unsigned long> key, GetDnsCacheDumpHandler* handler);
994
999 void reloadDnsServers();
1000
1010 volatile bool& statisticsManagerEnabled();
1011 const bool statisticsManagerEnabled() const;
1012
1023 {
1024 return mTransactionController->mFixBadDialogIdentifiers;
1025 }
1026
1040 void setFixBadDialogIdentifiers(bool pFixBadDialogIdentifiers)
1041 {
1042 mTransactionController->mFixBadDialogIdentifiers = pFixBadDialogIdentifiers;
1043 }
1044
1045 inline bool getFixBadCSeqNumbers() const
1046 {
1047 return mTransactionController->getFixBadCSeqNumbers();
1048 }
1049
1050 inline void setFixBadCSeqNumbers(bool pFixBadCSeqNumbers)
1051 {
1052 mTransactionController->setFixBadCSeqNumbers(pFixBadCSeqNumbers);
1053 }
1054
1055 bool setUdpOnlyOnNumeric(bool value)
1056 {
1057 return mTransactionController->transportSelector().setUdpOnlyOnNumeric(value);
1058 }
1059
1061 {
1062 return mTransactionController->transportSelector().getUdpOnlyOnNumeric();
1063 }
1064
1082 {
1084 }
1085
1128 {
1129 mTransactionController->setCongestionManager(manager);
1130 mTuSelector.setCongestionManager(manager);
1131 if(mCongestionManager)
1132 {
1133 mCongestionManager->unregisterFifo(&mTUFifo);
1134 }
1135 mCongestionManager=manager;
1136 if(mCongestionManager)
1137 {
1138 mCongestionManager->registerFifo(&mTUFifo);
1139 }
1140 }
1141
1149 CongestionManager* getCongestionManager() { return mCongestionManager; }
1150
1159 Compression &getCompression() { return *mCompression; }
1160
1161 void terminateFlow(const resip::Tuple& flow);
1162 void enableFlowTimer(const resip::Tuple& flow);
1163
1164 // Will call the AfterSocketCreationFuncPtr that was provided at SIPStack creation
1165 // time to all sockets that match the passed in type. Use UNKNOWN_TRANSPORT
1166 // in order to call for all transport types.
1167 // The stack thread(s) must be running when this is called.
1168 // Can be used to update QOS to a new value on existing sockets, without needing
1169 // to restart the SipStack.
1170 // Note: DNS sockets are not currently supported
1172
1173 private:
1175 // WATCHOUT: can only be called once (just like constructor)
1176 void init(const SipStackOptions& options);
1177
1179 void checkAsyncProcessHandler();
1180
1181 FdPollGrp* mPollGrp;
1182 bool mPollGrpIsMine;
1183
1185 Security* mSecurity;
1186
1187 DnsStub* mDnsStub;
1188 DnsThread* mDnsThread;
1189
1191 Compression* mCompression;
1192
1202 AsyncProcessHandler* mAsyncProcessHandler;
1203 bool mInterruptorIsMine;
1204
1206 SipStack(const SipStack& copy);
1207
1209 SipStack& operator=(const SipStack& rhs);
1210
1214 TimeLimitFifo<Message> mTUFifo;
1215 CongestionManager* mCongestionManager;
1216
1218 TuSelector mTuSelector;
1219
1221 mutable Mutex mAppTimerMutex;
1222
1226 TuSelectorTimerQueue mAppTimers;
1227
1229 StatisticsManager mStatsManager;
1230
1232 TransactionController* mTransactionController;
1233
1234 TransactionControllerThread* mTransactionControllerThread;
1235 TransportSelectorThread* mTransportSelectorThread;
1236 bool mInternalThreadsRunning;
1237 bool mProcessingHasStarted;
1238
1242 typedef std::unordered_map<Data, unsigned int> DomainsMap;
1243 DomainsMap mDomains; // Second item (unsigned int) is for reference counting
1244 Uri mUri;
1245 mutable Mutex mDomainsMutex; // Protects both mDomains and mUri, since they are related
1246
1249 std::map<int, unsigned int> mPorts; // Second item (unsigned int) is for reference counting
1250 mutable Mutex mPortsMutex;
1251
1252 // Used to ensure new Transport additions will always succeed without needing to ask
1253 // TransportSelector if add will be valid and introduce locking
1254 // Note: We could add a Mutex here and add thread safe accesor methods to transport pointers
1255 // as a convience to API users
1256 typedef std::map<Tuple, Transport*> NonSecureTransportMap;
1257 NonSecureTransportMap mNonSecureTransports;
1258 typedef std::map<TransportSelector::TlsTransportKey, Transport*> SecureTransportMap;
1259 SecureTransportMap mSecureTransports;
1260
1261 bool mShuttingDown;
1262 mutable Mutex mShutdownMutex;
1263 volatile bool mStatisticsManagerEnabled;
1264
1265 AfterSocketCreationFuncPtr mSocketFunc;
1266
1267 unsigned int mNextTransportKey;
1268
1269 Transport::SipMessageLoggingHandlerList mTransportSipMessageLoggingHandlers;
1270
1271 friend class Executive;
1272 friend class StatelessHandler;
1273 friend class StatisticsManager;
1274 friend class TestDnsResolver;
1275 friend class TestFSM;
1276 friend class TransactionState;
1278 friend class TuSelector;
1279};
1280
1282
1283inline void
1285 TransactionUser* tu)
1286{
1287 resip_assert(tuple.mFlowKey);
1288 Tuple tup(tuple);
1289 tup.onlyUseExistingConnection = true;
1290 sendTo(msg, tuple, tu);
1291}
1292
1293}
1294
1295#endif
1296
1297/* ====================================================================
1298 * The Vovida Software License, Version 1.0
1299 *
1300 * Copyright (c) 2026, SIP Spectrum, Inc. http://sipspectrum.com
1301 * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved.
1302 *
1303 * Redistribution and use in source and binary forms, with or without
1304 * modification, are permitted provided that the following conditions
1305 * are met:
1306 *
1307 * 1. Redistributions of source code must retain the above copyright
1308 * notice, this list of conditions and the following disclaimer.
1309 *
1310 * 2. Redistributions in binary form must reproduce the above copyright
1311 * notice, this list of conditions and the following disclaimer in
1312 * the documentation and/or other materials provided with the
1313 * distribution.
1314 *
1315 * 3. The names "VOCAL", "Vovida Open Communication Application Library",
1316 * and "Vovida Open Communication Application Library (VOCAL)" must
1317 * not be used to endorse or promote products derived from this
1318 * software without prior written permission. For written
1319 * permission, please contact vocal@vovida.org.
1320 *
1321 * 4. Products derived from this software may not be called "VOCAL", nor
1322 * may "VOCAL" appear in their name, without prior written
1323 * permission of Vovida Networks, Inc.
1324 *
1325 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
1326 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1327 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
1328 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
1329 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
1330 * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
1331 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
1332 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
1333 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
1334 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1335 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
1336 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
1337 * DAMAGE.
1338 *
1339 * ====================================================================
1340 *
1341 * This software consists of voluntary contributions made by Vovida
1342 * Networks, Inc. and many individuals on behalf of Vovida Networks,
1343 * Inc. For more information on Vovida Networks, Inc., please see
1344 * <http://www.vovida.org/>.
1345 *
1346 * vi: set shiftwidth=3 expandtab:
1347 */
#define resip_assert(x)
This file needs to work for both C and C++ code.
A base-class for messages used by applications.
The abstract base-class for all exceptions thrown by resip code.
Abstract base class that provides a basic congestion management interface.
virtual void unregisterFifo(resip::FifoStatsInterface *fifo)=0
Unregisters a fifo with the congestion manager.
virtual void registerFifo(resip::FifoStatsInterface *fifo)=0
Registers a fifo with the congestion manager.
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
Definition Data.hxx:90
static const Data Empty
Constant that represents a zero-length data.
Definition Data.hxx:882
static NameserverList EmptyNameserverList
Definition DnsStub.hxx:119
std::vector< GenericIPAddress > NameserverList
Definition DnsStub.hxx:117
Interface functor for external stats handling.
An interface class for elements that use an FdSet to watch for IO.
Object-oriented wrapper for your platform's file-descriptor set.
Definition Socket.hxx:162
A templated, threadsafe message-queue class.
Definition Fifo.hxx:16
The base-class used for message-passing.
Definition Message.hxx:21
Represents a SIP message.
static bool checkContentLength
This class holds constructor-time initialization arguments for SipStack.
Definition SipStack.hxx:112
Compression * mCompression
Definition SipStack.hxx:127
AfterSocketCreationFuncPtr mSocketFunc
Definition SipStack.hxx:126
const DnsStub::NameserverList * mExtraNameserverList
Definition SipStack.hxx:123
AsyncProcessHandler * mAsyncProcessHandler
Definition SipStack.hxx:124
thrown when the stack is unable to function.
Definition SipStack.hxx:286
const char * name() const noexcept override
what gets called instead of the pure virtual in the base
Definition SipStack.hxx:303
Exception(const Data &msg, const Data &file, const int line)
constructor
Definition SipStack.hxx:297
This is the primary point of interaction between the app-layer and the stack.
Definition SipStack.hxx:160
Fifo< TransactionMessage > & stateMacFifo()
Returns the fifo that subclasses of Transport should use for the rxFifo cons.
Definition SipStack.cxx:716
void shutdownAndJoinThreads()
Shutdown and join any threads that the SipStack is running.
Definition SipStack.cxx:294
static Data getHostname()
Get one of the names for this host (calls through to gethostbyname) and is not threadsafe.
Definition SipStack.cxx:763
Security * getSecurity() const
Returns a pointer to the embedded Security object, 0 if not set.
DnsStub & getDnsStub() const
EncodeStream & dump(EncodeStream &strm) const
output current state of the stack - for debug
virtual ~SipStack()
Definition SipStack.cxx:224
void clearDnsCache()
Clear the DNS Cache.
FdPollGrp * getPollGrp()
Definition SipStack.hxx:854
void invokeAfterSocketCreationFunc(TransportType type=UNKNOWN_TRANSPORT)
void getDnsCacheDump(std::pair< unsigned long, unsigned long > key, GetDnsCacheDumpHandler *handler)
Get a string representation of the DNS Cache.
bool isMyPort(int port) const
Returns true if port is handled by this stack.
Definition SipStack.cxx:847
void setExternalStatsHandler(ExternalStatsHandler *handler)
Installs a handler for the stacks internal StatisticsManager.
Definition SipStack.hxx:902
void send(const SipMessage &msg, TransactionUser *tu=0)
allows a TU to send a message
Definition SipStack.cxx:867
Transport * addTransport(TransportType protocol, int port, IpVersion version=V4, StunSetting stun=StunDisabled, const Data &ipInterface=Data::Empty, const Data &sipDomainname=Data::Empty, const Data &privateKeyPassPhrase=Data::Empty, SecurityTypes::SSLType sslType=SecurityTypes::DynamicTLS, unsigned transportFlags=0, const Data &certificateFilename="", const Data &privateKeyFilename="", SecurityTypes::TlsClientVerificationMode cvm=SecurityTypes::None, bool useEmailAsSIP=false, std::shared_ptr< WsConnectionValidator >=nullptr, std::shared_ptr< WsCookieContextFactory >=nullptr, const Data &netNs=Data::Empty)
Used by the application to add in a new built-in transport.
Definition SipStack.cxx:362
friend class TestDnsResolver
void cancelClientInviteTransaction(const Data &tid, const Tokens *reasons)
Tells the stack that the TU wishes to CANCEL an INVITE request.
void setFixBadCSeqNumbers(bool pFixBadCSeqNumbers)
void reloadCertificates()
reload the TLS X.509 certificates
Definition SipStack.cxx:323
void setFallbackPostNotify(AsyncProcessHandler *handler)
virtual void process(FdSet &fdset)
This allows the executive to give processing time to stack components.
bool isMyDomain(const Data &domain, int port) const
Returns true if domain is handled by this stack.
Definition SipStack.cxx:837
SipMessage * receive()
retrieve a SipMessage off the old TuFifo
void addTransportSipMessageLoggingHandler(std::shared_ptr< Transport::SipMessageLoggingHandler > handler)
Used by the application to provide a handler that will get called for all inbound and outbound SIP me...
Definition SipStack.cxx:343
void registerTransactionUser(TransactionUser &, const bool front=false)
add a TU to the TU selection chain
void removeTransport(unsigned int transportKey)
Used to remove a previously added transport.
Definition SipStack.cxx:620
static Data getHostAddress()
Get one of the IP address for this host (calls through to gethostbyname) and is not threadsafe.
Definition SipStack.cxx:794
void shutdown()
perform orderly shutdown
Definition SipStack.cxx:280
void abandonServerTransaction(const Data &tid)
Tells the stack that the TU has abandoned a server transaction.
void onReload()
reload configuration
Definition SipStack.cxx:317
bool setUdpOnlyOnNumeric(bool value)
virtual unsigned int getTimeTillNextProcessMS()
Returns time in milliseconds when process next needs to be called.
friend class TestFSM
void terminateFlow(const resip::Tuple &flow)
void logDnsCache()
Log the DNS Cache to WarningLog for Debugging.
void post(std::unique_ptr< ApplicationMessage > message, unsigned int secondsLater, TransactionUser *tu=0)
Makes the message available to the TU at some later time, specified in seconds.
void sendTo(std::unique_ptr< SipMessage > msg, const Uri &uri, TransactionUser *tu=0)
this is only if you want to send to a destination not in the route.
Definition SipStack.cxx:898
void unregisterTransactionUser(TransactionUser &)
Removes a TU from the TU selection chain.
const StatisticsManager * getStatisticsManager()
get statistics manager
Definition SipStack.hxx:908
virtual void buildFdSet(FdSet &fdset)
Build the FD set to use in a select to find out when process(FdSet&) must be called again.
void requestTransactionUserShutdown(TransactionUser &)
Queue a shutdown request to the specified TU.
void setTransportSipMessageLoggingHandler(std::shared_ptr< Transport::SipMessageLoggingHandler > handler)
Used by the application to provide a handler that will get called for all inbound and outbound SIP me...
Definition SipStack.cxx:332
bool getFixBadCSeqNumbers() const
void zeroOutStatistics()
Resets all of the cumulative statistics counters.
const Uri & getUri() const
Get one of the domains/ports that are handled by this stack in Uri form.
Definition SipStack.cxx:854
void enableFlowTimer(const resip::Tuple &flow)
void run()
Causes this SipStack object to create and run threads for carrying out processing.
Definition SipStack.cxx:258
bool pollStatistics()
Immediately polls for statistics to be logged and sent to external handlers, instead of waiting for n...
bool hasMessage() const
does the stack have new messages for the TU?
void reloadDnsServers()
Check if DnsServers list has changed, and if so reinitializes the DNS resolver (ares).
bool getUdpOnlyOnNumeric() const
void postMS(std::unique_ptr< ApplicationMessage > message, unsigned int ms, TransactionUser *tu=0)
Makes the message available to the TU at some later time, specified in milli-seconds.
void sendOverExistingConnection(const SipMessage &msg, const Tuple &tuple, TransactionUser *tu=0)
force the a message out over an existing connection
virtual void processTimers()
Check all timers.
Message * receiveAny()
retrieve a message off the old TuFifo
friend class Executive
Keeps track of various statistics on the stack's operation, and periodically issues a StatisticsMessa...
TransportSelector & transportSelector()
void setCongestionManager(CongestionManager *manager)
void setFixBadCSeqNumbers(bool pFixBadCSeqNumbers)
The base-class for an RFC 3261 Transaction User.
bool setUdpOnlyOnNumeric(bool value)
The base class for Transport classes.
Definition Transport.hxx:83
std::vector< std::shared_ptr< SipMessageLoggingHandler > > SipMessageLoggingHandlerList
void setCongestionManager(CongestionManager *manager)
Represents a network address.
Definition Tuple.hxx:59
FlowKey mFlowKey
This is a (largely) opaque key that subclasses of Transport will use to help record/find flows.
Definition Tuple.hxx:189
Represents the "SIP-URI" and "SIPS-URI" elements in the RFC 3261 grammar.
Definition Uri.hxx:22
#define RESIP_DEPRECATED(x)
Definition compat.hxx:334
void unregisterMarkListener(MarkListener *listener)
Removed a registered BlacklistListener handler from the DNS Interface for a particualr Resource Recor...
CongestionManager * getCongestionManager()
Accessor for the CongestionManager object the stack is using.
volatile bool & statisticsManagerEnabled()
Enable Statistics Manager.
void addAlias(const Data &domain, int port)
add an alias for this sip element
Definition SipStack.cxx:722
void registerMarkListener(MarkListener *listener)
Register a handler with the DNS Interface for notifications of when a Dns Resource Record has been bl...
void setEnumSuffixes(const std::vector< Data > &suffixes)
Specify which enum domains will be searched when sending.
void setFixBadDialogIdentifiers(bool pFixBadDialogIdentifiers)
Specify whether the stack should fix corrupted/changed dialog identifiers (ie, Call-Id and tags) in r...
bool getFixBadDialogIdentifiers() const
Returns whether the stack is fixing corrupted/changed dialog identifiers (ie, Call-Id and tags) in re...
void setEnumDomains(const std::map< Data, Data > &domains)
Specify which domains in the To: Uri will be subject to ENUM.
void setCongestionManager(CongestionManager *manager)
Sets the CongestionManager used by the stack.
void setContentLengthChecking(bool check)
Used to enable/disable content-length checking on datagram-based transports.
void removeAlias(const Data &domain, int port)
removes an alias from this sip element
Definition SipStack.cxx:740
void setExternalStatsHandler(ExternalStatsHandler *handler)
Allows the application to set the ExternalStatsHandler for this StatisticsManager.
void setStatisticsInterval(unsigned long seconds)
Sets the interval that determines the time between Statistics messages.
Compression & getCompression()
Accessor for the Compression object the stack is using.
SSLType
Note: Before adding to the SSLType enum, please see the comments about mTlsCtx in resip/stack/ssl/Sec...
dcm! – add UnusedChecking(_enum) below;
void(* AfterSocketCreationFuncPtr)(Socket s, int transportType, const char *file, int line)
Definition Socket.hxx:107
std::mutex Mutex
A semaphore that can be locked by only one thread at a time.
Definition Mutex.hxx:37
TransportType
An enumeration of transport protocols.
@ UNKNOWN_TRANSPORT
IpVersion
An enumeration of IP versions.
EncodeStream & operator<<(EncodeStream &strm, const BaseException &e)
#define EncodeStream
void list()
Definition userAdmin.cxx:66