# tools.py
#
# Utility functions

import struct


def EncodeString(str):
	assert len(str)<=253

	return str


def EncodeAddress(addr):
	(a,b,c,d)=map(int, addr.split("."))
	return struct.pack("BBBB", a, b, c, d)


def EncodeInteger(num):
	return struct.pack("!I", num)


def EncodeDate(num):
	return struct.pack("!I", num)


def DecodeString(str):
	return str


def DecodeAddress(addr):
	return ".".join(map(str, struct.unpack("BBBB", addr)))


def DecodeInteger(num):
	return (struct.unpack("!I", num))[0]


def DecodeDate(num):
	return (struct.unpack("!I", num))[0]


def EncodeAttr(datatype, value):
	if datatype=="string":
		return EncodeString(value)
	elif datatype=="ipaddr":
		return EncodeAddress(value)
	elif datatype=="integer":
		return EncodeInteger(value)
	elif datatype=="date":
		return EncodeDate(value)
	else:
		return value
	

def DecodeAttr(datatype, value):
	if datatype=="string":
		return DecodeString(value)
	elif datatype=="ipaddr":
		return DecodeAddress(value)
	elif datatype=="integer":
		return DecodeInteger(value)
	elif datatype=="date":
		return DecodeDate(value)
	else:
		return value
	



syntax highlighted by Code2HTML, v. 0.9.1