示例#1
0
 private void Accept(DTLSSession session, byte[] message)
 {
     try {
         session.Accept(_udpChannel, message);
     }
     catch (Exception e) {
         lock (_sessionList) {
             _sessionList.Remove(session);
         }
     }
 }
示例#2
0
        private void ReceiveData(Object sender, DataReceivedEventArgs e)
        {
            lock (_sessionList) {
                foreach (DTLSSession session in _sessionList)
                {
                    if (e.EndPoint.Equals(session.EndPoint))
                    {
                        session.ReceiveData(sender, e);

                        return;
                    }
                }

                DTLSSession sessionNew = new DTLSSession((IPEndPoint)e.EndPoint, DataReceived, _serverKeys, _userKeys);
                _sessionList.Add(sessionNew);
                new Thread(() => Accept(sessionNew, e.Data)).Start();
            }
        }
示例#3
0
        public void Send(byte[] data, System.Net.EndPoint ep)
        {
            try {
                IPEndPoint ipEP = (IPEndPoint)ep;

                DTLSSession session = FindSession(ipEP);
                if (session == null)
                {
                    session = new DTLSSession(ipEP, DataReceived, _serverKeys, _userKeys);
                    AddSession(session);
                    session.Connect(_udpChannel);
                }
                session.Queue.Enqueue(new QueueItem(null, data));
                session.WriteData();
            }
            catch (Exception e) {
                Console.WriteLine("Error in DTLSClientChannel Sending - " + e.ToString());
            }
        }
示例#4
0
 private static void AddSession(DTLSSession session)
 {
     lock (_sessionList) {
         _sessionList.Add(session);
     }
 }