func SimpleRequestXML(vals ...string) []byte {
	var buf bytes.Buffer
	buf.WriteString(`<?xml version="1.0" encoding="UTF-8"?>`)
	buf.WriteString("\n<request>\n")
	buf.Write(xmlPairs("  ", vals...))
	buf.WriteString("</request>\n")
	return buf.Bytes()
}
SimpleRequestXML creates an XML string from value pairs.

Unfortunately the XML parser (or whatever underyling code) included with the
WebUI on Hilink devices expects parameters in a specific order. This makes
packages like mxj or other map based solutions not feasible for use, as Go
has random key ordering for maps.

On another note, XML sucks.
package hilink
import (
	"bytes"
	"strconv"
	"github.com/clbanning/mxj"
)
type Error string
const (
	ErrBadStatusCode Error = "bad status code"
	ErrInvalidResponse Error = "invalid response"
	ErrInvalidError Error = "invalid error"
	ErrInvalidValue Error = "invalid value"
	ErrInvalidXML Error = "invalid xml"
	ErrMissingRootElement Error = "missing root element"
	ErrMessageTooLong Error = "message too long"
)
func (err Error) Error() string {
	return string(err)
}
type SmsBoxType uint
const (
	SmsBoxTypeInbox SmsBoxType = iota + 1
	SmsBoxTypeOutbox
	SmsBoxTypeDraft
)
type PinType int
const (
	PinTypeEnter PinType = iota
	PinTypeActivate
	PinTypeDeactivate
	PinTypeChange
	PinTypeEnterPuk
)
type UssdState int
const (
	UssdStateNone UssdState = iota
	UssdStateActive
	UssdStateWaiting
)
type XMLData mxj.Map