public bool Send(byte[] data)
{
if (!Connected) return false;
List<byte> dataList = new List<byte>(data);
int payloadLength = 0;
byte[] packetData;
RdpeudpPacket packet;
do
{
packet = new RdpeudpPacket(); // Fill in the common header.
packet.fecHeader.snSourceAck = SnSourceAck;
packet.fecHeader.uReceiveWindowSize = UReceiveWindowSize;
packet.fecHeader.uFlags = RDPUDP_FLAG.RDPUDP_FLAG_DATA | RDPUDP_FLAG.RDPUDP_FLAG_ACK;
packet.ackVectorHeader = CreateAckVectorHeader();
packet.sourceHeader = CreateSourcePayloadHeader(); // Generate SourceHeader.
packetData = PduMarshaler.Marshal(packet, false); // Measure the header lenght to figure out payload length.
payloadLength = Math.Min(UUpStreamMtu - packetData.Length, dataList.Count);
packet.payload = new byte[payloadLength];
dataList.CopyTo(0, packet.payload, 0, payloadLength); // Copy the data in to packet payload.
string str = System.Text.Encoding.ASCII.GetString(packet.payload);
SendPacket(packet);
dataList.RemoveRange(0, payloadLength);
} while (dataList.Count > 0);
return true;
}