85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/go-i2p/sam3/common"
|
|
)
|
|
|
|
type SessionOptions struct {
|
|
NickName string
|
|
Style string
|
|
SigType string
|
|
InFromPort string
|
|
OutToPort string
|
|
Protocol string
|
|
UDPPort int
|
|
SamHost string
|
|
SamPort string
|
|
SamMin string
|
|
SamMax string
|
|
}
|
|
|
|
func (f *SessionOptions) samMax() float64 {
|
|
i, err := strconv.Atoi(f.SamMax)
|
|
if err != nil {
|
|
log.WithError(err).Warn("Failed to parse SamMax, using default 3.1")
|
|
return 3.1
|
|
}
|
|
log.WithField("samMax", float64(i)).Debug("SAM max version parsed")
|
|
return float64(i)
|
|
}
|
|
|
|
// SignatureType returns the signature type setting in the form of "SIGNATURE_TYPE=type"
|
|
func (f *SessionOptions) SignatureType() string {
|
|
if f.samMax() < common.SAM31Version.Number {
|
|
log.Debug("SAM version < 3.1, SignatureType not applicable")
|
|
return ""
|
|
}
|
|
if f.SigType != "" {
|
|
log.WithField("sigType", f.SigType).Debug("Signature type set")
|
|
return fmt.Sprintf(" SIGNATURE_TYPE=%s ", f.SigType)
|
|
}
|
|
log.Debug("Signature type not set")
|
|
return ""
|
|
}
|
|
|
|
// FromPort returns the from port setting in the form of "FROM_PORT=port"
|
|
func (f *SessionOptions) FromPort() string {
|
|
if f.samMax() < common.SAM31Version.Number {
|
|
log.Debug("SAM version < 3.1, FromPort not applicable")
|
|
return ""
|
|
}
|
|
if f.InFromPort != "0" {
|
|
log.WithField("fromPort", f.InFromPort).Debug("FromPort set")
|
|
return fmt.Sprintf(" FROM_PORT=%s ", f.InFromPort)
|
|
}
|
|
log.Debug("FromPort not set")
|
|
return ""
|
|
}
|
|
|
|
// ToPort returns the to port setting in the form of "TO_PORT=port"
|
|
func (f *SessionOptions) ToPort() string {
|
|
if f.samMax() < common.SAM31Version.Number {
|
|
log.Debug("SAM version < 3.1, ToPort not applicable")
|
|
return ""
|
|
}
|
|
if f.OutToPort != "0" {
|
|
log.WithField("toPort", f.OutToPort).Debug("ToPort set")
|
|
return fmt.Sprintf(" TO_PORT=%s ", f.OutToPort)
|
|
}
|
|
log.Debug("ToPort not set")
|
|
return ""
|
|
}
|
|
|
|
// SessionStyle returns the session style setting in the form of "STYLE=style"
|
|
func (f *SessionOptions) SessionStyle() string {
|
|
if f.Style != "" {
|
|
log.WithField("style", f.Style).Debug("Session style set")
|
|
return fmt.Sprintf(" STYLE=%s ", f.Style)
|
|
}
|
|
log.Debug("Using default STREAM style")
|
|
return " STYLE=STREAM "
|
|
}
|