/// <summary> /// Find route "mac" address /// </summary> /// <param name="ip"></param> public unsafe static bool FindRoute(byte[] ip) { if (InLocalNetwork(ip)) { return(ARP.IpExists(ip)); } return(true); }
/// <summary> /// Connection to IP /// </summary> /// <param name="ip">IP</param> /// <param name="port">Port</param> /// <returns></returns> public static unsafe TCPConnection Connect(byte[] ip, ushort port) { ushort inPort = RequestPort(); int startSeq = Random.Rand(); if (!ARP.IpExists(ip)) { byte[] mac = new byte[6]; for (int i = 0; i < 6; i++) { mac[i] = 0xFF; } ARP.ArpSend(ARP.OP_REQUEST, mac, ip); Heap.Free(mac); } while (!ARP.IpExists(ip)) { Tasking.Yield(); } TCPConnection con = new TCPConnection(); con.DestPort = port; con.InPort = inPort; con.State = TCPConnectionState.CLOSED; con.XID = Random.Rand(); con.SequenceNumber = (uint)startSeq; con.NextSequenceNumber = Byte.ReverseBytes(Byte.ReverseBytes(con.SequenceNumber) + 1); con.Type = TCPConnectionType.CONNECTION; con.ReceiveQueue = new Queue(); for (int i = 0; i < 4; i++) { con.IP[i] = ip[i]; } m_connections[inPort] = con; handleConnection(con, null, null, 0); return(con); }