Commit ef404cd3 authored by François Grisez's avatar François Grisez

Add a function to prevent SIP packets to pass through tunnels

parent 32cd807f
......@@ -147,7 +147,8 @@ TunnelManager::TunnelManager(LinphoneCore* lc) :TunnelClientController()
......@@ -179,11 +180,11 @@ void TunnelManager::registration(){
if (isReady()){
sal_enable_tunnel(mCore->sal, mTunnelClient);
if(mTunnelizeSipPackets) {
sal_enable_tunnel(mCore->sal, mTunnelClient);
// tunnel was disabled
} else {
linphone_core_set_sip_transports(mCore, &mRegularTransport);
linphone_core_set_firewall_policy(mCore, mPreviousFirewallPolicy);
......@@ -243,8 +244,7 @@ void TunnelManager::enable(bool isEnable) {
ms_message("Turning tunnel [%s]", isEnable ?"on" : "off");
if (isEnable && !mEnabled){
//1 save transport and firewall policy
linphone_core_get_sip_transports(mCore, &mRegularTransport);
//1 save firewall policy
//2 unregister
......@@ -259,17 +259,9 @@ void TunnelManager::enable(bool isEnable) {
// Set empty transports to force the setting of regular transport, otherwise it is not applied
LCSipTransports lTransport;
lTransport.udp_port = 0;
lTransport.tcp_port = 0;
lTransport.tls_port = 0;
lTransport.dtls_port = 0;
linphone_core_set_sip_transports(mCore, &lTransport);
// register
// 3 register
......@@ -404,6 +396,16 @@ void TunnelManager::setHttpProxyAuthInfo(const char* username,const char* passwd
if (mTunnelClient) mTunnelClient->setHttpProxyAuthInfo(username,passwd);
void TunnelManager::tunnelizeSipPackets(bool enable){
if(enable != mTunnelizeSipPackets) {
mTunnelizeSipPackets = enable;
if(mEnabled && isReady()) {
void TunnelManager::setHttpProxy(const char *host,int port, const char *username, const char *passwd){
......@@ -33,7 +33,7 @@ class UdpMirrorClient;
* The TunnelManager class extends the LinphoneCore functionnality in order to provide an easy to use API to
* - provision tunnel servers ip addresses and ports
* - start/stop the tunneling service
* - be informed of of connection and disconnection events to the tunnel server
* - be informed of connection and disconnection events to the tunnel server
* - perform auto-detection whether tunneling is required, based on a test of sending/receiving a flow of UDP packets.
* It takes in charge automatically the SIP registration procedure when connecting or disconnecting to a tunnel server.
......@@ -91,8 +91,8 @@ class UdpMirrorClient;
void enable(bool isEnabled);
* In auto detect mode, the tunnel manager try to establish a real time rtp cummunication with the tunnel server on specified port.
*<br>In case of success, the tunnel is automatically turned off. Otherwise, if no udp commmunication is feasible, tunnel mode is turned on.
*<br> Call this method each time to run the auto detection algorithm
*<br/>In case of success, the tunnel is automatically turned off. Otherwise, if no udp commmunication is feasible, tunnel mode is turned on.
*<br/> Call this method each time to run the auto detection algorithm
void autoDetect();
......@@ -115,7 +115,22 @@ class UdpMirrorClient;
* @param passwd The password.
void setHttpProxyAuthInfo(const char* username,const char* passwd);
* Indicate to the tunnel manager whether SIP packets must pass
* through the tunnel. That featurte is automatically enabled at
* the creation of the TunnelManager instance.
* @param enable If set to TRUE, SIP packets will pass through the tunnel.
* If set to FALSE, SIP packets will pass by the configured proxies.
void tunnelizeSipPackets(bool enable = true);
* @brief Destructor
* @brief Constructor
* @param lc The LinphoneCore instance of which the TunnelManager will be associated to.
TunnelManager(LinphoneCore* lc);
* Destroy the given RtpTransport.
......@@ -161,8 +176,10 @@ class UdpMirrorClient;
void processTunnelEvent(const Event &ev);
void processUdpMirrorEvent(const Event &ev);
void postEvent(const Event &ev);
void stopClient();
LinphoneCore* mCore;
LCSipTransports mRegularTransport;
TunnelSocket *mSipSocket;
eXosip_transport_hooks_t mExosipTransport;
......@@ -175,7 +192,6 @@ class UdpMirrorClient;
UdpMirrorClientList mUdpMirrorClients;
UdpMirrorClientList::iterator mCurrentUdpMirrorClient;
TunnelClient* mTunnelClient;
void stopClient();
Mutex mMutex;
static Mutex sMutex;
bool mAutoDetectStarted;
......@@ -187,6 +203,7 @@ class UdpMirrorClient;
int mHttpProxyPort;
LinphoneFirewallPolicy mPreviousFirewallPolicy;
bool mPreviousRegistrationEnabled;
bool mTunnelizeSipPackets;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment