예제 #1
0
 /// <summary>
 /// Verify RDP RTT Measure Response packet
 /// </summary>
 /// <param name="rttResponse">RDP RTT Measure Response packet</param>
 /// <param name="sequenceNumber">The sequence Number</param>
 private void VerifyTunnelDataPdu_RTTResponse(RDP_RTT_RESPONSE rttResponse, ushort sequenceNumber)
 {
     if (rttResponse == null)
     {
         Site.Assert.Fail("Not get Bandwidth Measure Result");
     }
     if (rttResponse.sequenceNumber != sequenceNumber)
     {
         Site.Assert.Fail("Expect sequence Number is {0}, but receive sequence Number: {1}", sequenceNumber, rttResponse.sequenceNumber);
     }
 }
예제 #2
0
        /// <summary>
        /// Wait for a Tunnel Data PDU with RDP_RTT_RESPONSE and check its sequenceNumber.
        /// </summary>
        /// <param name="requestedProtocol">Which tunnel to be used, reliable or lossy</param>
        /// <param name="sequenceNumber"></param>
        /// <param name="timeout"></param>
        private void WaitForAndCheckTunnelDataPdu_RTTResponse(Multitransport_Protocol_value requestedProtocol, ushort sequenceNumber, TimeSpan timeout)
        {
            bool             isReceived    = false;
            TimeSpan         leftTime      = timeout;
            DateTime         expiratedTime = DateTime.Now + timeout;
            RDP_RTT_RESPONSE rttResponse   = null;

            RdpemtServer rdpemtServer = rdpemtServerR;

            if (requestedProtocol == Multitransport_Protocol_value.INITITATE_REQUEST_PROTOCOL_UDPFECL)
            {
                rdpemtServer = rdpemtServerL;
            }

            while (!isReceived && leftTime.CompareTo(new TimeSpan(0)) > 0)
            {
                try
                {
                    RDP_TUNNEL_DATA tunnelData = rdpemtServer.ExpectTunnelData(leftTime);

                    if (tunnelData != null)
                    {
                        RDP_TUNNEL_SUBHEADER[] SubHeaders = tunnelData.TunnelHeader.SubHeaders;
                        if (SubHeaders != null)
                        {
                            foreach (RDP_TUNNEL_SUBHEADER subHeader in SubHeaders)
                            {
                                if (subHeader.SubHeaderType == RDP_TUNNEL_SUBHEADER_TYPE_Values.TYPE_ID_AUTODETECT_RESPONSE)
                                {
                                    NETWORK_DETECTION_RESPONSE detectRsp = rdpbcgrServer.ParseNetworkDetectionResponse(subHeader.SubHeaderData, true);
                                    {
                                        if (detectRsp.responseType == AUTO_DETECT_RESPONSE_TYPE.RDP_RTT_RESPONSE)
                                        {
                                            rttResponse = (RDP_RTT_RESPONSE)detectRsp;
                                            isReceived  = true;
                                            rttDataStore.responseTime = DateTime.Now;
                                            Site.Log.Add(LogEntryKind.Comment, "RequestTime: {0}\tResponseTime: {1}", rttDataStore.responseTime.Ticks, rttDataStore.responseTime.Ticks);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                catch (TimeoutException)
                {
                    Site.Assert.Fail("Timeout when expecting a Tunnel Data PDU with RDP_RTT_RESULTS");
                }
                catch (InvalidOperationException ex)
                {
                    //break;
                    Site.Log.Add(LogEntryKind.Warning, "Exception thrown out when receiving client PDUs {0}.", ex.Message);
                }
                finally
                {
                    System.Threading.Thread.Sleep(100);//Wait some time for next packet.
                    leftTime = expiratedTime - DateTime.Now;
                }
            }
            if (isReceived)
            {
                VerifyTunnelDataPdu_RTTResponse(rttResponse, sequenceNumber);
            }
            else
            {
                Site.Assert.Fail("Timeout when expecting a Tunnel Data PDU with RDP_RTT_RESULTS");
            }
        }