Example #1
0
        /// <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, '.'));
        }