// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// IP address manipulations
//
// IPv4 addresses are 4 bytes; IPv6 addresses are 16 bytes.
// An IPv4 address can be converted to an IPv6 address by
// adding a canonical prefix (10 zeros, 2 0xFFs).
// This library accepts either size of byte array but always
// returns 16-byte addresses.

package net

import (
	"net"
)

// IP address lengths (bytes).
const (
	IPv4len = 4;
	IPv6len = 16
)

// An IP is a single IP address, an array of bytes.
// Functions in this package accept either 4-byte (IP v4)
// or 16-byte (IP v6) arrays as input.  Unless otherwise
// specified, functions in this package always return
// IP addresses in 16-byte form using the canonical
// embedding.
//
// Note that in this documentation, referring to an
// IP address as an IPv4 address or an IPv6 address
// is a semantic property of the address, not just the
// length of the byte array: a 16-byte array can still
// be an IPv4 address.
type IP []byte;

// An IP mask is an IP address.
type IPMask []byte;

// IPv4 returns the IP address (in 16-byte form) of the
// IPv4 address a.b.c.d.
func IPv4(a, b, c, d byte) IP {
	p := make([]byte, IPv6len);
	for i := 0; i < 10; i++ {
		p[i] = 0
	}
	p[10] = 0xff;
	p[11] = 0xff;
	p[12] = a;
	p[13] = b;
	p[14] = c;
	p[15] = d;
	return p
}

// Well-known IPv4 addresses
var (
	IPv4bcast = IPv4(255, 255, 255, 255);	// broadcast
	IPv4allsys = IPv4(224, 0, 0, 1);	// all systems
	IPv4allrouter = IPv4(224, 0, 0, 2);	// all routers
)

// Well-known IPv6 addresses
var (
	IPzero = make(IP, IPv6len);	// all zeros
)

// Is p all zeros?
func isZeros(p []byte) bool {
	for i := 0; i < len(p); i++ {
		if p[i] != 0 {
			return false
		}
	}
	return true
}

// To4 converts the IPv4 address ip to a 4-byte representation.
// If ip is not an IPv4 address, To4 returns nil.
func (ip IP) To4() IP {
	if len(ip) == IPv4len {
		return ip
	}
	if len(ip) == IPv6len
	&& isZeros(ip[0:10])
	&& ip[10] == 0xff
	&& ip[11] == 0xff {
		return ip[12:16]
	}
	return nil
}

// To16 converts the IP address ip to a 16-byte representation.
// If ip is not an IP address (it is the wrong length), To16 returns nil.
func (ip IP) To16() IP {
	if len(ip) == IPv4len {
		return IPv4(ip[0], ip[1], ip[2], ip[3])
	}
	if len(ip) == IPv6len {
		return ip
	}
	return nil
}

// Default route masks for IPv4.
var (
	classAMask IPMask = IPv4(0xff, 0, 0, 0);
	classBMask IPMask = IPv4(0xff, 0xff, 0, 0);
	classCMask IPMask = IPv4(0xff, 0xff, 0xff, 0);
)

// DefaultMask returns the default IP mask for the IP address ip.
// Only IPv4 addresses have default masks; DefaultMask returns
// nil if ip is not a valid IPv4 address.
func (ip IP) DefaultMask() IPMask  {
	if ip = ip.To4(); ip == nil {
		return nil
	}
	switch true {
	case ip[0] < 0x80:
		return classAMask;
	case ip[0] < 0xC0:
		return classBMask;
	default:
		return classCMask;
	}
	return nil;	// not reached
}

// Mask returns the result of masking the IP address ip with mask.
func (ip IP) Mask(mask IPMask) IP {
	n := len(ip);
	if n != len(mask) {
		return nil
	}
	out := make(IP, n);
	for i := 0; i < n; i++ {
		out[i] = ip[i] & mask[i];
	}
	return out
}

// Convert i to decimal string.
func itod(i uint) string {
	if i == 0 {
		return "0"
	}

	// Assemble decimal in reverse order.
	var b [32]byte;
	bp := len(b);
	for ; i > 0; i /= 10 {
		bp--;
		b[bp] = byte(i%10) + '0'
	}

	return string(b[bp:len(b)])
}

// Convert i to hexadecimal string.
func itox(i uint) string {
	if i == 0 {
		return "0"
	}

	// Assemble hexadecimal in reverse order.
	var b [32]byte;
	bp := len(b);
	for ; i > 0; i /= 16 {
		bp--;
		b[bp] = "0123456789abcdef"[byte(i%16)]
	}

	return string(b[bp:len(b)])
}

// String returns the string form of the IP address ip.
// If the address is an IPv4 address, the string representation
// is dotted decimal ("74.125.19.99").  Otherwise the representation
// is IPv6 ("2001:4860:0:2001::68").
func (ip IP) String() string {
	p := ip;

	// If IPv4, use dotted notation.
	if p4 := p.To4(); len(p4) == 4 {
		return itod(uint(p4[0]))+"."
			+itod(uint(p4[1]))+"."
			+itod(uint(p4[2]))+"."
			+itod(uint(p4[3]))
	}
	if len(p) != IPv6len {
		return "?"
	}

	// Find longest run of zeros.
	e0 := -1;
	e1 := -1;
	for i := 0; i < 16; i+=2 {
		j := i;
		for j < 16 && p[j] == 0 && p[j+1] == 0 {
			j += 2
		}
		if j > i && j - i > e1 - e0 {
			e0 = i;
			e1 = j
		}
	}

	// Print with possible :: in place of run of zeros
	var s string;
	for i := 0; i < 16; i += 2 {
		if i == e0 {
			s += "::";
			i = e1;
			if i >= 16 {
				break
			}
		} else if i > 0 {
			s += ":"
		}
		s += itox((uint(p[i])<<8) | uint(p[i+1]))
	}
	return s
}

// If mask is a sequence of 1 bits followed by 0 bits,
// return the number of 1 bits.
func simpleMaskLength(mask IP) int {
	var i int;
	for i = 0; i < len(mask); i++ {
		if mask[i] != 0xFF {
			break
		}
	}
	n := 8*i;
	v := mask[i];
	for v & 0x80 != 0 {
		n++;
		v <<= 1
	}
	if v != 0 {
		return -1
	}
	for i++; i < len(mask); i++ {
		if mask[i] != 0 {
			return -1
		}
	}
	return n
}

// String returns the string representation of mask.
// If the mask is in the canonical form--ones followed by zeros--the
// string representation is just the decimal number of ones.
// If the mask is in a non-canonical form, it is formatted
// as an IP address.
func (mask IPMask) String() string {
	switch len(mask) {
	case 4:
		n := simpleMaskLength(mask);
		if n >= 0 {
			return itod(uint(n+(IPv6len-IPv4len)*8))
		}
	case 16:
		n := simpleMaskLength(mask);
		if n >= 0 {
			return itod(uint(n))
		}
	}
	return IP(mask).String();
}

// Parse IPv4 address (d.d.d.d).
func parseIPv4(s string) IP {
	var p [IPv4len]byte;
	i := 0;
	for j := 0; j < IPv4len; j++ {
		if j > 0 {
			if s[i] != '.' {
				return nil
			}
			i++;
		}
		var (
			n int;
			ok bool
		)
		n, i, ok = dtoi(s, i);
		if !ok || n > 0xFF {
			return nil
		}
		p[j] = byte(n)
	}
	if i != len(s) {
		return nil
	}
	return IPv4(p[0], p[1], p[2], p[3])
}

// Parse IPv6 address.  Many forms.
// The basic form is a sequence of eight colon-separated
// 16-bit hex numbers separated by colons,
// as in 0123:4567:89ab:cdef:0123:4567:89ab:cdef.
// Two exceptions:
//	* A run of zeros can be replaced with "::".
//	* The last 32 bits can be in IPv4 form.
// Thus, ::ffff:1.2.3.4 is the IPv4 address 1.2.3.4.
func parseIPv6(s string) IP {
	p := make(IP, 16);
	ellipsis := -1;	// position of ellipsis in p
	i := 0;	// index in string s

	// Might have leading ellipsis
	if len(s) >= 2 && s[0] == ':' && s[1] == ':' {
		ellipsis = 0;
		i = 2;
		// Might be only ellipsis
		if i == len(s) {
			return p
		}
	}

	// Loop, parsing hex numbers followed by colon.
	j := 0;
L:	for j < IPv6len {
		// Hex number.
		n, i1, ok := xtoi(s, i);
		if !ok || n > 0xFFFF {
			return nil
		}

		// If followed by dot, might be in trailing IPv4.
		if i1 < len(s) && s[i1] == '.' {
			if ellipsis < 0 && j != IPv6len - IPv4len {
				// Not the right place.
				return nil
			}
			if j+IPv4len > IPv6len {
				// Not enough room.
				return nil
			}
			p4 := parseIPv4(s[i:len(s)]);
			if p4 == nil {
				return nil
			}
			// BUG: p[j:j+4] = p4
			p[j] = p4[12];
			p[j+1] = p4[13];
			p[j+2] = p4[14];
			p[j+3] = p4[15];
			i = len(s);
			j += 4;
			break
		}

		// Save this 16-bit chunk.
		p[j] = byte(n>>8);
		p[j+1] = byte(n);
		j += 2;

		// Stop at end of string.
		i = i1;
		if i == len(s) {
			break
		}

		// Otherwise must be followed by colon and more.
		if s[i] != ':' && i+1 == len(s) {
			return nil
		}
		i++;

		// Look for ellipsis.
		if s[i] == ':' {
			if ellipsis >= 0 {	// already have one
				return nil
			}
			ellipsis = j;
			if i++; i == len(s) {	// can be at end
				break
			}
		}
	}

	// Must have used entire string.
	if i != len(s) {
		return nil
	}

	// If didn't parse enough, expand ellipsis.
	if j < IPv6len {
		if ellipsis < 0 {
			return nil
		}
		n := IPv6len - j;
		for k := j-1; k >= ellipsis; k-- {
			p[k+n] = p[k]
		}
		for k := ellipsis+n-1; k>=ellipsis; k-- {
			p[k] = 0
		}
	}
	return p
}

// ParseIP parses s as an IP address, returning the result.
// The string s can be in dotted decimal ("74.125.19.99")
// or IPv6 ("2001:4860:0:2001::68") form.
// If s is not a valid textual representation of an IP address,
// ParseIP returns nil.
func ParseIP(s string) IP {
	p := parseIPv4(s);
	if p != nil {
		return p
	}
	return parseIPv6(s)
}

