// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
// SPDX-License-Identifier: MIT

package proto

import (
	

	
)

// RequestedAddressFamily represents the REQUESTED-ADDRESS-FAMILY Attribute as
// defined in RFC 6156 Section 4.1.1.
type RequestedAddressFamily byte

const requestedFamilySize = 4

var errInvalidRequestedFamilyValue = errors.New("invalid value for requested family attribute")

// GetFrom decodes REQUESTED-ADDRESS-FAMILY from message.
func ( *RequestedAddressFamily) ( *stun.Message) error {
	,  := .Get(stun.AttrRequestedAddressFamily)
	if  != nil {
		return 
	}
	if  = stun.CheckSize(stun.AttrRequestedAddressFamily, len(), requestedFamilySize);  != nil {
		return 
	}
	switch [0] {
	case byte(RequestedFamilyIPv4), byte(RequestedFamilyIPv6):
		* = RequestedAddressFamily([0])
	default:
		return errInvalidRequestedFamilyValue
	}

	return nil
}

func ( RequestedAddressFamily) () string {
	switch  {
	case RequestedFamilyIPv4:
		return "IPv4"
	case RequestedFamilyIPv6:
		return "IPv6"
	default:
		return "unknown"
	}
}

// AddTo adds REQUESTED-ADDRESS-FAMILY to message.
func ( RequestedAddressFamily) ( *stun.Message) error {
	 := make([]byte, requestedFamilySize)
	[0] = byte()
	// b[1:4] is RFFU = 0.
	// The RFFU field MUST be set to zero on transmission and MUST be
	// ignored on reception. It is reserved for future uses.
	.Add(stun.AttrRequestedAddressFamily, )

	return nil
}

// Values for RequestedAddressFamily as defined in RFC 6156 Section 4.1.1.
const (
	RequestedFamilyIPv4 RequestedAddressFamily = 0x01
	RequestedFamilyIPv6 RequestedAddressFamily = 0x02
)