// Copyright 2016 Mikio Hara. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package tcpopt

import "time"

var options = [soMax]option{
	soNodelay:   {ianaProtocolTCP, sysTCP_NODELAY, 0},
	soMaxseg:    {ianaProtocolTCP, sysTCP_MAXSEG, 0},
	soSndbuf:    {sysSOL_SOCKET, sysSO_SNDBUF, 0},
	soRcvbuf:    {sysSOL_SOCKET, sysSO_RCVBUF, 0},
	soKeepalive: {sysSOL_SOCKET, sysSO_KEEPALIVE, 0},
	soKeepidle:  {ianaProtocolTCP, sysTCP_KEEPIDLE, time.Second},
	soKeepintvl: {ianaProtocolTCP, sysTCP_KEEPINTVL, time.Second},
	soKeepcnt:   {ianaProtocolTCP, sysTCP_KEEPCNT, 0},
	soCork:      {ianaProtocolTCP, sysTCP_NOPUSH, 0},
	soError:     {sysSOL_SOCKET, sysSO_ERROR, 0},
}

var parsers = map[int64]func([]byte) (Option, error){
	ianaProtocolTCP<<32 | sysTCP_NODELAY:   parseNoDelay,
	ianaProtocolTCP<<32 | sysTCP_MAXSEG:    parseMSS,
	sysSOL_SOCKET<<32 | sysSO_SNDBUF:       parseSendBuffer,
	sysSOL_SOCKET<<32 | sysSO_RCVBUF:       parseReceiveBuffer,
	sysSOL_SOCKET<<32 | sysSO_KEEPALIVE:    parseKeepAlive,
	ianaProtocolTCP<<32 | sysTCP_KEEPIDLE:  parseKeepAliveIdleInterval,
	ianaProtocolTCP<<32 | sysTCP_KEEPINTVL: parseKeepAliveProbeInterval,
	ianaProtocolTCP<<32 | sysTCP_KEEPCNT:   parseKeepAliveProbeCount,
	ianaProtocolTCP<<32 | sysTCP_NOPUSH:    parseCork,
	sysSOL_SOCKET<<32 | sysSO_ERROR:        parseError,
}
