protected internal virtual int SendSendersReport(TransportContext context, bool force = false) { //Determine if the SendersReport can be sent. if (IsDisposed //If the context is disposed && //AND the call has not been forced AND the context IsRtcpEnabled (false == force && true == context.IsRtcpEnabled) // OR there is no RtcpSocket || context.RtcpSocket == null) { //Indicate nothing was sent return 0; } //Ensure the SynchronizationSourceIdentifier of the transportChannel is assigned context.AssignIdentity(); //First report include no blocks (No last senders report), store the report being sent context.SendersReport = TransportContext.CreateSendersReport(context, false); //Always send compound with SourceDescription for now return SendRtcpPackets(Media.Common.Extensions.Linq.LinqExtensions.Yield<RtcpPacket>(context.SendersReport).Concat(Media.Common.Extensions.Linq.LinqExtensions.Yield((context.SourceDescription = TransportContext.CreateSourceDescription(context))))); }
/// <summary> /// Send any <see cref="ReceiversReports"/>'s required by the given context immediately reguardless <see cref="MaximumRtcpBandwidth"/> /// Return the amount of bytes sent when sending the reports. /// </summary> /// <param name="context">The context</param> protected internal virtual int SendReceiversReport(TransportContext context, bool force = false) { //Determine if the ReceiversReport can be sent. if (IsDisposed //If the context is disposed && //AND the call has not been forced AND the context IsRtcpEnabled (false == force && true == context.IsRtcpEnabled) // OR there is no RtcpSocket || context.RtcpSocket == null) { //Indicate nothing was sent return 0; } //Ensure the SynchronizationSourceIdentifier of the transportContext is assigned context.AssignIdentity(); //create and store the receivers report sent context.ReceiversReport = TransportContext.CreateReceiversReport(context, false); //If the bandwidth is not exceeded also send a SourceDescription if (false == AverageRtcpBandwidthExceeded) { return SendRtcpPackets(Media.Common.Extensions.Linq.LinqExtensions.Yield<RtcpPacket>(context.ReceiversReport).Concat(Media.Common.Extensions.Linq.LinqExtensions.Yield((context.SourceDescription = TransportContext.CreateSourceDescription(context))))); } //Just send the ReceiversReport return SendRtcpPackets(Media.Common.Extensions.Linq.LinqExtensions.Yield(context.ReceiversReport)); }