public RdpeudpPacket ExpectSynPacket(TimeSpan timeout)
{
if (Connected) return null;
DateTime endtime = DateTime.Now + timeout;
while (DateTime.Now < endtime)
{
lock (unProcessedPacketBuffer)
{
for (int i=0; i < unProcessedPacketBuffer.Count; i++)
{
RdpeudpPacket eudpPacket = unProcessedPacketBuffer[i];
RDPUDP_FLAG expectFlag = RDPUDP_FLAG.RDPUDP_FLAG_SYN;
if (this.TransMode == TransportMode.Lossy)
{
expectFlag |= RDPUDP_FLAG.RDPUDP_FLAG_SYNLOSSY;
}
if (eudpPacket.fecHeader.uFlags.HasFlag(expectFlag))
{
unProcessedPacketBuffer.RemoveAt(i);
// Analyse the SYN packet.
ProcessSynPacket(eudpPacket);
return eudpPacket;
}
}
}
// If not receive a Packet, wait a while
Thread.Sleep(RdpeudpSocketConfig.ReceivingInterval);
}
return null;
}