aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.WebRTC
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-22 05:15:57 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-22 05:15:57 +0300
commita9b1c4cb5c4d945565e72e80ac0f938a49da3e5f (patch)
tree739307651882bce538653dc76c58c546b2d87699 /Software/Visual_Studio/Tango.WebRTC
parent7bd70fcb311c808b65b62e774755dcbd6b0d63cd (diff)
downloadTango-a9b1c4cb5c4d945565e72e80ac0f938a49da3e5f.tar.gz
Tango-a9b1c4cb5c4d945565e72e80ac0f938a49da3e5f.zip
Implemented pre-connection protocol configuration.
Improved error handling across transport layer. Improved unexpected app crash for PPC. Improved transporter request received handlers tunneling.
Diffstat (limited to 'Software/Visual_Studio/Tango.WebRTC')
-rw-r--r--Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs87
1 files changed, 54 insertions, 33 deletions
diff --git a/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs
index d6431fe60..59784fa56 100644
--- a/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs
@@ -95,7 +95,7 @@ namespace Tango.WebRTC
{
if (!completed)
{
- LogManager.Log("WebRTC Active Transport Adapter is ready.");
+ LogManager.Log($"{ComponentName}: WebRTC Active Transport Adapter is ready.");
completed = true;
State = TransportComponentState.Connected;
completionSource.SetResult(true);
@@ -104,32 +104,32 @@ namespace Tango.WebRTC
if (Mode == WebRtcTransportAdapterMode.Passive)
{
- LogManager.Log("WebRTC Passive Transport Adapter is ready.");
+ LogManager.Log($"{ComponentName}: WebRTC Passive Transport Adapter is ready.");
Ready?.Invoke(this, new EventArgs());
}
};
- LogManager.Log("Initializing WebRTC client...");
+ LogManager.Log($"{ComponentName}: Initializing WebRTC client...");
await _client.Init();
if (Mode == WebRtcTransportAdapterMode.Active)
{
- LogManager.Log("Creating WebRTC offer...");
+ LogManager.Log($"{ComponentName}: Creating WebRTC offer...");
var offer = await _client.CreateOffer();
- LogManager.Log("Sending WebRTC offer via signaling transporter...");
+ LogManager.Log($"{ComponentName}: Sending WebRTC offer via signaling transporter...");
var response = await SignalingTransporter.SendGenericRequest<OfferRequest, OfferResponse>(new OfferRequest() { Offer = offer }, new TransportRequestConfig()
{
Timeout = TimeSpan.FromSeconds(30),
});
- LogManager.Log("WebRTC offer sent and responded with an answer. Setting WebRTC answer...");
+ LogManager.Log($"{ComponentName}: WebRTC offer sent and responded with an answer. Setting WebRTC answer...");
_client.SetAnswer(response.Answer);
_answerReceived = true;
foreach (var ice in _queuedIceCandidates.ToList())
{
- LogManager.Log($"Sending existing ice candidate '{ice.Sdp}'...");
+ LogManager.Log($"{ComponentName}: Sending existing ice candidate '{ice.Sdp}'...");
try
{
@@ -140,13 +140,13 @@ namespace Tango.WebRTC
}
catch (Exception ex)
{
- LogManager.Log(ex, "Error sending ice candidate.");
+ LogManager.Log(ex, $"{ComponentName}: Error sending ice candidate.");
}
}
}
else
{
- LogManager.Log("Waiting for offer...");
+ LogManager.Log($"{ComponentName}: Waiting for offer...");
State = TransportComponentState.Connected;
if (!completed)
@@ -195,8 +195,22 @@ namespace Tango.WebRTC
{
if (EnableCompression)
{
- var decompressed = GZipHelper.Decompress(e.Data);
- OnDataAvailable(decompressed);
+ try
+ {
+ var decompressed = GZipHelper.Decompress(e.Data);
+ OnDataAvailable(decompressed);
+ }
+ catch (Exception ex)
+ {
+ if (ex.Message.Contains("GZip"))
+ {
+ //Temporarily ignore, probably switching protocol definitions...
+ }
+ else
+ {
+ //Do nothing... ?
+ }
+ }
}
else
{
@@ -208,26 +222,33 @@ namespace Tango.WebRTC
{
if (Mode == WebRtcTransportAdapterMode.Passive)
{
- var answer = await _client.CreateAnswer(request.Offer);
- await SignalingTransporter.SendGenericResponse(new OfferResponse() { Answer = answer }, token);
- _answerReceived = true;
-
- foreach (var ice in _queuedIceCandidates.ToList())
+ try
{
- LogManager.Log($"Sending existing ice candidate '{ice.Sdp}'...");
+ var answer = await _client.CreateAnswer(request.Offer);
+ await SignalingTransporter.SendGenericResponse(new OfferResponse() { Answer = answer }, token);
+ _answerReceived = true;
- try
+ foreach (var ice in _queuedIceCandidates.ToList())
{
- await SignalingTransporter.SendGenericRequest<IceCandidateRequest, IceCandidateResponse>(new IceCandidateRequest() { IceCandidate = ice }, new TransportRequestConfig()
+ LogManager.Log($"{ComponentName}: Sending existing ice candidate '{ice.Sdp}'...");
+
+ try
{
- Timeout = TimeSpan.FromSeconds(30),
- });
- }
- catch (Exception ex)
- {
- LogManager.Log(ex, "Error sending ice candidate to remote peer.");
+ await SignalingTransporter.SendGenericRequest<IceCandidateRequest, IceCandidateResponse>(new IceCandidateRequest() { IceCandidate = ice }, new TransportRequestConfig()
+ {
+ Timeout = TimeSpan.FromSeconds(30),
+ });
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"{ComponentName}: Error sending ice candidate to remote peer.");
+ }
}
}
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"{ComponentName}: Error occurred while trying to return WebRTC answer.");
+ }
}
}
@@ -237,7 +258,7 @@ namespace Tango.WebRTC
{
if (_answerReceived)
{
- LogManager.Log("New WebRTC candidate available. Sending ice to remote peer...");
+ LogManager.Log($"{ComponentName}: New WebRTC candidate available. Sending ice to remote peer...");
await SignalingTransporter.SendGenericRequest<IceCandidateRequest, IceCandidateResponse>(new IceCandidateRequest() { IceCandidate = e.IceCandidate }, new TransportRequestConfig()
{
@@ -248,11 +269,11 @@ namespace Tango.WebRTC
{
if (Mode == WebRtcTransportAdapterMode.Active)
{
- LogManager.Log("New WebRTC candidate available. Will be sent after an answer is received...");
+ LogManager.Log($"{ComponentName}: New WebRTC candidate available. Will be sent after an answer is received...");
}
else
{
- LogManager.Log("New WebRTC candidate available. Will be sent after an offer is received...");
+ LogManager.Log($"{ComponentName}: New WebRTC candidate available. Will be sent after an offer is received...");
}
_queuedIceCandidates.Add(e.IceCandidate);
@@ -260,7 +281,7 @@ namespace Tango.WebRTC
}
catch (Exception ex)
{
- LogManager.Log(ex, "Error sending ice candidate to remote peer.");
+ LogManager.Log(ex, $"{ComponentName}: Error sending ice candidate to remote peer.");
}
}
@@ -271,7 +292,7 @@ namespace Tango.WebRTC
LogManager.Log($"{ComponentName}: Ice candidate request received from the remote peer.");
await SignalingTransporter.SendGenericResponse(new IceCandidateResponse() { }, token);
- LogManager.Log($"Adding ice candidate '{request.IceCandidate.Sdp}'...");
+ LogManager.Log($"{ComponentName}: Adding ice candidate '{request.IceCandidate.Sdp}'...");
_client.AddIceCandidate(request.IceCandidate);
LogManager.Log($"{ComponentName}: Ice candidate added.");
}
@@ -296,7 +317,7 @@ namespace Tango.WebRTC
{
if (_client != null)
{
- LogManager.Log("Disposing WebRTC client...");
+ LogManager.Log($"{ComponentName}: Disposing WebRTC client...");
_client.NewIceCandidate -= WebRtc_NewIceCandidate;
_client.Disconnected -= WebRtc_Disconnected;
@@ -308,11 +329,11 @@ namespace Tango.WebRTC
_client = null;
SignalingTransporter.UnregisterRequestHandler<IceCandidateRequest>(OnIceCandidateRequestReceived);
SignalingTransporter.UnregisterRequestHandler<OfferRequest>(OnOfferRequestReceived);
- LogManager.Log("WebRTC client disposed.");
+ LogManager.Log($"{ComponentName}: WebRTC client disposed.");
}
catch (Exception ex)
{
- LogManager.Log(ex, "Error disposing WebRTC client.");
+ LogManager.Log(ex, $"{ComponentName}: Error disposing WebRTC client.");
}
}