Intel® Collaboration Suite for WebRTC
Community support and discussions on the Intel® Collaboration Suite for WebRTC (Intel® CS for WebRTC).
1146 Discussions

Woogeen SDK C++ 3.2.1. Join / Leave sequence causes multiple ConferenceClientObserver callbacks for one event.

htnik_h_
Beginner
676 Views

I hve a C++ test named WoogeenJoinLeaveConsoleTest of Join/Leave conference operation (source link is below in the second nessage), which was created because this sequence caused crashes in debug verson of SDK 3.2.1. Looks like there is a bug in the woogeen library, which reveal itself in the following way.

ConferenceClient has ConferenceClientObserver attached, which monitors variuos asynchronous events. After performing Join / leave operation and then new Join, this events, monitored by ConferenceClientObserver are invoked several times, the more Join / Leave sequences performed, the more duplicate events invoked and finally crash occure. Crash may also occure on program closing.

The example log for such join leave sequence is here. Notice multiple "Server disconnected" message after each "Leave" operarion, starting from second "Leave". These messages are highlighted by bold font. This messeges produced in ConferenceClientObserver::OnServerDisconnected method.

[2016-11-29 17:56:36] [devel] endpoint constructor
[2016-11-29 17:56:36] [devel] client constructor
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: origin, content-type
Content-Type: text/html; charset=utf-8
Content-Length: 244
ETag: W/"f4-OrMA+G/E3fi6mvJ0fwdeGg"
Date: Tue, 29 Nov 2016 13:56:43 GMT
Connection: close

token = eyJ0b2tlbklkIjoiNTgzZDg5MWJhZTZkMjQ0ZjY1ZWEyN2ZlIiwiaG9zdCI6IjUyLjc4LjQwLjEwOTo4MDgwIiwic2VjdXJlIjp0cnVlLCJzaWduYXR1cmUiOiJOelUzWXpZME1UazJNamxoWVRBMVptRmhPREUzWW1Nd01UVmhNV0k1TnpVeVlXTmpNekE0T0RFM01USmtaV0psTlRNeE1tSXpOVGcxWW1KbU16azJOQT09In0=

Join...
[2016-11-29 17:56:37] [connect] Successful connection
[2016-11-29 17:56:38] [connect] WebSocket Connection 52.78.40.109:8080 v-2 "WebSocket++/0.7.0" /socket.io/?EIO=4&transport=websocket&t=1480427797 101
Connected.
On handshake,sid:y-KeWLxCrohDWq1cAABU,ping interval:25000,ping timeout60000
Received Message type (Connect)
encoded payload length:181
Received Message type (ACK)
Message length: 2
Join succeeded!
User joined, id = /#y-KeWLxCrohDWq1cAABU, name = user, role = presenter
.RemoteMixedStream added, stream id: 583679da2154e954378707ce.
Subscribing to RemoteMixedStream...
Leave...
encoded payload length:2
encoded payload length:85
Close by reason:End by user
Client Disconnected.
clear timers
Leave succeeded!
Server disconnected
[2016-11-29 17:56:40] [disconnect] Disconnect close local:[1000,End by user] remote:[1000,End by user]
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: origin, content-type
Content-Type: text/html; charset=utf-8
Content-Length: 244
ETag: W/"f4-O9hR/rbUTg1x8GfUgMiN9A"
Date: Tue, 29 Nov 2016 13:56:47 GMT
Connection: close

token = eyJ0b2tlbklkIjoiNTgzZDg5MWZhZTZkMjQ0ZjY1ZWEyN2ZmIiwiaG9zdCI6IjUyLjc4LjQwLjEwOTo4MDgwIiwic2VjdXJlIjp0cnVlLCJzaWduYXR1cmUiOiJOMlF5TlRrMVptTTFOR1U0WmpZelpESTRaR1UxTXpoak9HUXdZVEptWVdJM1pUYzNOak14WTJFMk9HVmlaV0l4WlRJeE16QTNPREJoTTJVNU5EUXpZUT09In0=

Join...
[2016-11-29 17:56:42] [connect] Successful connection
[2016-11-29 17:56:43] [connect] WebSocket Connection 52.78.40.109:8080 v-2 "WebSocket++/0.7.0" /socket.io/?EIO=4&transport=websocket&t=1480427802 101
Connected.
On handshake,sid:9Bs9te7CH9VYeupdAABV,ping interval:25000,ping timeout60000
Received Message type (Connect)
encoded payload length:181
Received Message type (ACK)
Message length: 2
Join succeeded!
User joined, id = /#9Bs9te7CH9VYeupdAABV, name = user, role = presenter
.RemoteMixedStream added, stream id: 583679da2154e954378707ce.
Subscribing to RemoteMixedStream...
Leave...
encoded payload length:2
encoded payload length:85
Close by reason:End by user
Client Disconnected.
clear timers
Leave succeeded!
Server disconnected
Server disconnected

[2016-11-29 17:56:44] [disconnect] Disconnect close local:[1000,End by user] remote:[1000,End by user]
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: origin, content-type
Content-Type: text/html; charset=utf-8
Content-Length: 244
ETag: W/"f4-trLyeTkPG9rURXkJk0445g"
Date: Tue, 29 Nov 2016 13:56:52 GMT
Connection: close

token = eyJ0b2tlbklkIjoiNTgzZDg5MjRhZTZkMjQ0ZjY1ZWEyODAwIiwiaG9zdCI6IjUyLjc4LjQwLjEwOTo4MDgwIiwic2VjdXJlIjp0cnVlLCJzaWduYXR1cmUiOiJNMlV6T0dZeU9ESTNNRFJpTkRRME1UVTRPV0U1WlRabU1qTmxNalk0WmpWbVl6UmhZakl3TVdGaE9UZG1OelF4TWpsa1pETmtOekl3TTJFM1ltSm1NZz09In0=

Join...
[2016-11-29 17:56:47] [connect] Successful connection
[2016-11-29 17:56:48] [connect] WebSocket Connection 52.78.40.109:8080 v-2 "WebSocket++/0.7.0" /socket.io/?EIO=4&transport=websocket&t=1480427807 101
Connected.
On handshake,sid:2JKr9kMNUITwgtGBAABW,ping interval:25000,ping timeout60000
Received Message type (Connect)
encoded payload length:181
Received Message type (ACK)
Message length: 2
Join succeeded!
User joined, id = /#2JKr9kMNUITwgtGBAABW, name = user, role = presenter
.RemoteMixedStream added, stream id: 583679da2154e954378707ce.
Subscribing to RemoteMixedStream...
encoded payload length:85
Leave...
encoded payload length:2
Close by reason:End by user
Client Disconnected.
clear timers
Leave succeeded!
Server disconnected
Server disconnected
Server disconnected

[2016-11-29 17:56:49] [disconnect] Disconnect close local:[1000,End by user] remote:[1000,End by user]

 

0 Kudos
2 Replies
htnik_h_
Beginner
676 Views

Here is the link to full source of this test for Visual Studio 2015:

https://www.dropbox.com/s/elisptk2m70tt5u/WoogeenJoinLeaveTest_2016_11_29.zip?dl=0

This test performs ten Join / Leave operations and finally going out of loop. Usually it crashes in debug version on program termination, for example in this location (boost library):

  std::size_t boost::asio::basic_deadline_timer::cancel()
  {
    boost::system::error_code ec;
    std::size_t s = this->service.cancel(this->implementation, ec); // !!! crash line
    boost::asio::detail::throw_error(ec, "cancel");
    return s;
  }

This solution contains sioclient_tls library built form three sources: socket.io-client-cpp, rapidjson and websocketpp, taken from:

https://github.com/socketio/socket.io-client-cpp
https://github.com/miloyip/rapidjson
https://github.com/zaphoyd/websocketpp

The library was compiled with following symbols defined:

SIO_TLS=1
NOMINMAX
_WEBSOCKETPP_CPP11_FUNCTIONAL_
_WEBSOCKETPP_CPP11_SYSTEM_ERROR_
_WEBSOCKETPP_CPP11_RANDOM_DEVICE_
_WEBSOCKETPP_CPP11_MEMORY_

Aslo, sioclient_tls uses OpenSSL 1.0.2 (the latest OpenSSL 1.1.0 lost backward compatibility) and Boost.

https://www.openssl.org/
http://www.boost.org/

The easiest way to use OpenSSL and Boost is to obtain precompiled binaries. This project exists only as 32-bit version for Visual Studio 2015, so the binaries preferred to be compiled specifically for this version of Visual Studio.

OpenSSL binary can be obtained from the following page, required package is Win32 OpenSSL v1.0.2 (about 30 MB, full, not light version):

https://slproweb.com/products/Win32OpenSSL.html

Looks like these binaries of OpenSSL compiled by VS2013, but they works. Install OpenSSL to default location, used by this project:

C:\OpenSSL-Win32

Boost binaries can be obtained here:

https://sourceforge.net/projects/boost/files/boost-binaries/

For this project I used 32-bit version 1.62.0 (the 1.63.0 beta is already available) for VS2015, specific link is

https://sourceforge.net/projects/boost/files/boost-binaries/1.62.0/boost_1_62_0-msvc-14.0-32.exe/download

The Boost library should be installed in C:\boost_1_62_0

this location is also used by this project.

Additionally, for WoogeenJoinLeaveTest Woogeen library must be placed to specific location on the hard drive:

C:\WoogeenSDKCpp

This folder must contain two subfolders, "include" and "libs". "libs" subfolder must contain two version of woogeen library, woogeen-debug.lib and woogeen-release.lib.

The SDK can be downloaded after subscription here:

https://software.intel.com/en-us/webrtc-sdk

"include" and "libs" folders are extracted from the following archive:

CS_WebRTC_Client_SDK_Windows.v3.2.1.zip

If you already have these libraries in other locations, you may edit *.vcxproj files of the project and replace

C:\OpenSSL-Win32
C:\boost_1_62_0
C:\WoogeenSDKCpp

by other paths. Also, if you use other boost library then 1.62, then you may replace 1_62 to other value in *.vcxproj files.

 

 

 

0 Kudos
Lei_Z_Intel1
Employee
676 Views

Thanks for reporting this. It is a known issue and we will provide fix in coming 3.3 release around middle January.

0 Kudos
Reply