Documentation ¶
Overview ¶
Package alto implements JSON encoder and decoder for the Application-Layer Traffic Optimization (ALTO) protocol as described in http://tools.ietf.org/html/draft-ietf-alto-protocol.
Encoding at server side:
accepts := req.Header.Get("Accept") if accepts == "" { // error handling } if !strings.Contains(accepts, alto.MediaTypeDirectory) { // error handling } w.Header().Set("Content-Type", alto.MediaTypeDirectory) var dir alto.Directory if err := json.NewEncoder(w).Encode(&dir); err != nil { // error handling }
Decoding at client side:
client := &http.Client{} req, err := http.NewRequest("GET", "http://...", nil) if err != nil { // error handling } req.Header.Set("Accept", alto.MediaTypeNetworkMap+","+alto.MediaTypeError) resp, err := client.Do(req) if err != nil { // error handling } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { // error handling } nmap := alto.NewResource("networkmap") if err := json.NewDecoder(resp.Body).Decode(nmap); err != nil { // error handling }
Index ¶
- Constants
- type CostMap
- type CostType
- type Data
- type Directory
- type DirectoryResource
- type DstCosts
- type Endpoint
- type EndpointAddrGroup
- type EndpointCostMap
- type EndpointDstCosts
- type EndpointProperty
- type EndpointPropertyCapabilities
- type EndpointProps
- type Error
- type FilteredCostMapCapabilities
- type IPEndpoint
- type MACEndpoint
- type Meta
- type NetworkMap
- type ReqEndpointCostMap
- type ReqEndpointProp
- type ReqFilteredCostMap
- type ReqFilteredNetworkMap
- type Resource
Constants ¶
const ( MediaTypeCostMap = "application/alto-costmap+json" // media type for ALTO map service MediaTypeCostMapFilter = "application/alto-costmapfilter+json" // media type for ALTO map filtering service )
const ( MediaTypeEndpointCost = "application/alto-endpointcost+json" // media type for ALTO endpoint cost service MediaTypeEndpointCostParams = "application/alto-endpointcostparams+json" // media type for ALTO endpoint cost service )
const ( MediaTypeEndpointProp = "application/alto-endpointprop+json" // media type for ALTO endpoint property service MediaTypeEndpointPropParams = "application/alto-endpointpropparams+json" // media type for ALTO endpoint property service )
const ( ErrSyntax = "E_SYNTAX" ErrJSONFieldMissing = "E_JSON_FIELD_MISSING" ErrJSONValueType = "E_JSON_VALUE_TYPE" ErrInvalidCostMode = "E_INVALID_COST_MODE" ErrInvalidCostMetric = "E_INVALID_COST_METRCI" ErrInvalidPropertyType = "E_INVALID_PROPERTY_TYPE" )
const ( MediaTypeNetworkMap = "application/alto-networkmap+json" // media type for ALTO map service MediaTypeNetworkMapFilter = "application/alto-networkmapfilter+json" // media type for ALTO map filtering service )
const (
MediaTypeDirectory = "application/alto-directory+json" // media type for ALTO directory service
)
const (
MediaTypeError = "application/alto-error+json" // media type for ALTO error notification
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CostMap ¶
type CostMap struct { CostType CostType `json:"cost-type"` VersionTag string `json:"map-vtag"` Map map[string]DstCosts `json:"map"` }
A CostMap reprensents a list of path costs for each pair of source/destination provider-defined identifer (PID).
func (*CostMap) MarshalJSON ¶
MarshalJSON implements the MarshalJSON method of json.Marshaler interface.
func (*CostMap) UnmarshalJSON ¶
UnmarshalJSON implements the UnmarshalJSON method of json.Unmarshaler interface.
type CostType ¶
type CostType struct { CostMetric string `json:"cost-metric"` CostMode string `json:"cost-mode"` Description string `json:"description,omitempty"` }
A CostType represents a combination of cost type and cost mode.
type Data ¶
type Data interface {
// contains filtered or unexported methods
}
A Data represents an information resource data.
type Directory ¶
type Directory struct { Meta Meta `json:"meta"` Resources []DirectoryResource `json:"resources"` }
A Directory represents an information resource directory.
type DirectoryResource ¶
type DirectoryResource struct { URI string `json:"uri"` MediaType string `json:"media-type"` Accepts string `json:"accepts,omitempty"` Capabilities map[string]interface{} `json:"capabilities,omitempty"` }
A DirectoryResource represents a list of information resources.
type DstCosts ¶
A DstCosts represents a set of costs for the destination provider-defined identifier (PID).
type Endpoint ¶
An Endpoint represents an endpoint address or address prefix.
func ParseEndpoint ¶
ParseEndpoint parses addr as a network endpoint identifier with address type typ. Known types are "ipv4" and "ipv6".
type EndpointAddrGroup ¶
An EndpointAddrGroup represents a set of endpoints.
func (EndpointAddrGroup) MarshalJSON ¶
func (eag EndpointAddrGroup) MarshalJSON() ([]byte, error)
MarshalJSON implements the MarshalJSON method of json.Marshaler interface.
func (EndpointAddrGroup) UnmarshalJSON ¶
func (eag EndpointAddrGroup) UnmarshalJSON(b []byte) error
UnmarshalJSON implements the UnmarshalJSON method of json.Unmarshaler interface.
type EndpointCostMap ¶
type EndpointCostMap struct { CostType CostType `json:"cost-type"` Map map[string]EndpointDstCosts `json:"map"` }
An EndpointCostMap reprensents a list of endpoint cost maps.
type EndpointDstCosts ¶
type EndpointDstCosts map[string]interface{}
An EndpointDstCosts represents a set of endpoint cost maps.
type EndpointProperty ¶
type EndpointProperty struct { VersionTag string `json:"map-vtag"` Map map[string]EndpointProps `json:"map"` }
An EndpointProperty represents a list of endpoint properties.
type EndpointPropertyCapabilities ¶
type EndpointPropertyCapabilities struct {
PropTypes []string `json:"prop-types"`
}
An EndpointPropertyCapabilities reprensents a capabilities of endpoint property.
type EndpointProps ¶
type EndpointProps map[string]interface{}
An EndpointProps represents a set of endpoint properties.
type Error ¶
type Error struct {
Code string `json:"code"`
}
An Error represents an error notification.
type FilteredCostMapCapabilities ¶
type FilteredCostMapCapabilities struct { CostTypeNames []string `json:"cost-type-names"` CostConstraints bool `json:"cost-constraints"` }
A FilteredCostMapCapabilities represents a capabilities for the filtered cost map.
type IPEndpoint ¶
An IPEndpoint represents an IP address or address prefix.
func (*IPEndpoint) Network ¶
func (ep *IPEndpoint) Network() string
Network returns the endpoint's network; "ipv4" or "ipv6".
func (*IPEndpoint) String ¶
func (ep *IPEndpoint) String() string
func (*IPEndpoint) TypedString ¶
func (ep *IPEndpoint) TypedString() string
TypedString returns the literal endpoint address with network prefix followed by a colon.
type MACEndpoint ¶
type MACEndpoint net.HardwareAddr
A MACEndpoint represents a MAC address. Note that this address type is not defined in the ALTO protocol.
func (MACEndpoint) Network ¶
func (ep MACEndpoint) Network() string
Network returns the endpoint's network; "mac-48" or "mac-64".
func (MACEndpoint) String ¶
func (ep MACEndpoint) String() string
func (MACEndpoint) TypedString ¶
func (ep MACEndpoint) TypedString() string
TypedString returns the literal endpoint address with network prefix followed by a colon.
type Meta ¶
type Meta map[string]interface{}
A Meta represents a set of definitions related with the information resources.
type NetworkMap ¶
type NetworkMap struct { VersionTag string `json:"map-vtag"` Map map[string]EndpointAddrGroup `json:"map"` }
A NetworkMap represents a list of network locations within the provider-defined identifier (PID).
func (*NetworkMap) Endpoints ¶
func (nm *NetworkMap) Endpoints(pid, typ string) []Endpoint
Endpoints returns a list of endpoints which selected with provider-defined identifier (PID) name pid and address type typ. The zero value for string is treated as wildcard.
func (*NetworkMap) MarshalJSON ¶
func (nm *NetworkMap) MarshalJSON() ([]byte, error)
MarshalJSON implements the MarshalJSON method of json.Marshaler interface.
func (*NetworkMap) Set ¶
func (nm *NetworkMap) Set(pid string, ep Endpoint)
Set sets the provider-defined identifier (PID) pid to endpoiint ep. It replaces any existing endpoints.
func (*NetworkMap) UnmarshalJSON ¶
func (nm *NetworkMap) UnmarshalJSON(b []byte) error
UnmarshalJSON implements the UnmarshalJSON method of json.Unmarshaler interface.
type ReqEndpointCostMap ¶
type ReqEndpointCostMap struct { CostType CostType `json:"cost-type"` Constraints []string `json:"constraints,omitempty"` Endpoints struct { Srcs []Endpoint `json:"srcs,omitempty"` Dsts []Endpoint `json:"dsts,omitempty"` } `json:"endpoints"` }
A ReqEndpointCostMap represents input parameters for the filtered cost map.
type ReqEndpointProp ¶
type ReqEndpointProp struct { Properties []string `json:"properties"` Endpoints []Endpoint `json:"endpoints"` }
A ReqEndpointProp represents input parameters for the filtered endpoint properties.
type ReqFilteredCostMap ¶
type ReqFilteredCostMap struct { CostType CostType `json:"cost-type"` Constraints []string `json:"constraints,omitempty"` PIDs struct { Srcs []string `json:"srcs,omitempty"` Dsts []string `json:"dsts,omitempty"` } `json:"pids,omitempty"` }
A ReqFilteredCostMap represents input parameters for the filtered cost map.
type ReqFilteredNetworkMap ¶
type ReqFilteredNetworkMap struct { PIDs []string `json:"pids,omitempty"` AddrTypes []string `json:"address-types,omitempty"` }
A ReqFilteredNetworkMap represents input parameters for the filtered network map.
type Resource ¶
A Resource represents an information resource.
func NewResource ¶
NewResource returns an information resource. Known information resource types are "networkmap" and "costmap".