/// <summary> /// Maps IP address to Brunet address. /// </summary> /// <param name="ip">IP address to map</param> /// <param name="addr">Brunet address to map</param> /// <returns>IP string of the allocated IP</returns> public string AddIPMapping(string ip, Address addr) { MemBlock ip_bytes; lock (_sync) { if (ip == null || ip == String.Empty) { do { ip_bytes = MemBlock.Reference(_dhcp.RandomIPAddress()); } while (_ip_addr.ContainsKey(ip_bytes)); } else { ip_bytes = MemBlock.Reference(Utils.StringToBytes(ip, '.')); if (!_dhcp.ValidIP(ip_bytes)) { throw new Exception("Invalid IP"); } } if (_ip_addr.ContainsValue(addr) || _addr_ip.ContainsValue(ip_bytes)) { throw new Exception("IP/P2P address is already found"); } _ip_addr.Add(ip_bytes, addr); _addr_ip.Add(addr, ip_bytes); mcast_addr.Add(addr); } return(Utils.BytesToString(ip_bytes, '.')); }