WriteAddress() публичный Метод

public WriteAddress ( IPEndPoint ipEndPoint, bool publicFlag ) : void
ipEndPoint System.Net.IPEndPoint
publicFlag bool
Результат void
Пример #1
0
 public override byte PerformHandshake(byte[] tag, H2NBinaryWriter response, IPEndPoint address, byte[] peerIdWanted)
 {
     var peerIdWantedStr = peerIdWanted.BytesToString();
     var sessionWanted = Sessions.Values.SingleOrDefault(x => x.Peer.IdStr == peerIdWantedStr);
     if (_pCirrus != null)
     {
         var session = Sessions.Values.SingleOrDefault(x => x.Peer.Address.Equals(address));
         if (session == null)
         {
             FATAL("UDP Hole punching error : middle equivalence not found for session wanted");
             return 0;
         }
         var request = (session as Middle).Handshaker;
         request.Write((byte)0x22);
         request.Write((byte)0x21);
         request.Write((byte)0x0F);
         request.Write(sessionWanted == null ? peerIdWanted : (session as Middle).Peer.Id, 0, 0x20);
         request.Write(tag);
         return 0;
     }
     if (sessionWanted == null)
     {
         Debug("UDP Hole punching : session {0} wanted not found", peerIdWantedStr);
         var addresses = new List<IPEndPoint>();
         if (addresses.Count == 0) return 0;
         var first = true;
         foreach (var _address in addresses)
         {
             response.WriteAddress(_address, first);
             first = false;
         }
         return 0x71;
     }
     if (sessionWanted.Failed())
     {
         Debug("UDP Hole punching : session wanted is deleting");
         return 0;
     }
     byte result = 0x00;
     if (_middle)
     {
         if (sessionWanted.Target != null)
         {
             var attempt = HandShakeSession.GetHelloAttempt<HelloAttempt>(tag.BytesToString());
             attempt.Target = sessionWanted.Target;
             HandShakeSession.CreateCookie(response, attempt, tag, "");
             response.Write(sessionWanted.Target.PublicKey);
             result = 0x70;
         }
         else
         {
             FATAL("Peer/peer dumped exchange impossible : no corresponding 'Target' with the session wanted");
         }
     }
     if (result == 0x00)
     {
         /// Udp hole punching normal process
         var times = sessionWanted.GetHelloAttempt<Attempt>(tag.BytesToString()).Count;
         sessionWanted.P2PHandshake(address, tag, times, (times > 0 || address.Address.Equals(sessionWanted.Peer.Address.Address)) ? Sessions.Values.SingleOrDefault(x => x.Peer.Address.Equals(address)) : null);
         var first = true;
         foreach (var ipEndPoint in sessionWanted.Peer.Addresses)
         {
             if (ipEndPoint.Equals(address))
                 WARN("A client tries to connect to himself (same {0} address)", address);
             response.WriteAddress(ipEndPoint, first);
             Debug("P2P address initiator exchange, {0}:{1}", ipEndPoint.Address, ipEndPoint.Port);
             first = false;
         }
         result = 0x71;
     }
     return result;
 }