// 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(IP, 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
	IPv4zero = IPv4(0, 0, 0, 0);	// all zeros
)

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

// Is p all zeros?
func isZeros(p IP) 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 IPMask) 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)
}

