32 KiB
sam3
-- import "github.com/go-i2p/sam3"
Library for I2Ps SAMv3 bridge (https://geti2p.com)
Usage
const (
Sig_NONE = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
Sig_DSA_SHA1 = "SIGNATURE_TYPE=DSA_SHA1"
Sig_ECDSA_SHA256_P256 = "SIGNATURE_TYPE=ECDSA_SHA256_P256"
Sig_ECDSA_SHA384_P384 = "SIGNATURE_TYPE=ECDSA_SHA384_P384"
Sig_ECDSA_SHA512_P521 = "SIGNATURE_TYPE=ECDSA_SHA512_P521"
Sig_EdDSA_SHA512_Ed25519 = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
)
var (
// Suitable options if you are shuffling A LOT of traffic. If unused, this
// will waste your resources.
Options_Humongous = []string{"inbound.length=3", "outbound.length=3",
"inbound.lengthVariance=1", "outbound.lengthVariance=1",
"inbound.backupQuantity=3", "outbound.backupQuantity=3",
"inbound.quantity=6", "outbound.quantity=6"}
// Suitable for shuffling a lot of traffic.
Options_Large = []string{"inbound.length=3", "outbound.length=3",
"inbound.lengthVariance=1", "outbound.lengthVariance=1",
"inbound.backupQuantity=1", "outbound.backupQuantity=1",
"inbound.quantity=4", "outbound.quantity=4"}
// Suitable for shuffling a lot of traffic quickly with minimum
// anonymity. Uses 1 hop and multiple tunnels.
Options_Wide = []string{"inbound.length=1", "outbound.length=1",
"inbound.lengthVariance=1", "outbound.lengthVariance=1",
"inbound.backupQuantity=2", "outbound.backupQuantity=2",
"inbound.quantity=3", "outbound.quantity=3"}
// Suitable for shuffling medium amounts of traffic.
Options_Medium = []string{"inbound.length=3", "outbound.length=3",
"inbound.lengthVariance=1", "outbound.lengthVariance=1",
"inbound.backupQuantity=0", "outbound.backupQuantity=0",
"inbound.quantity=2", "outbound.quantity=2"}
// Sensible defaults for most people
Options_Default = []string{"inbound.length=3", "outbound.length=3",
"inbound.lengthVariance=0", "outbound.lengthVariance=0",
"inbound.backupQuantity=1", "outbound.backupQuantity=1",
"inbound.quantity=1", "outbound.quantity=1"}
// Suitable only for small dataflows, and very short lasting connections:
// You only have one tunnel in each direction, so if any of the nodes
// through which any of your two tunnels pass through go offline, there will
// be a complete halt in the dataflow, until a new tunnel is built.
Options_Small = []string{"inbound.length=3", "outbound.length=3",
"inbound.lengthVariance=1", "outbound.lengthVariance=1",
"inbound.backupQuantity=0", "outbound.backupQuantity=0",
"inbound.quantity=1", "outbound.quantity=1"}
// Does not use any anonymization, you connect directly to others tunnel
// endpoints, thus revealing your identity but not theirs. Use this only
// if you don't care.
Options_Warning_ZeroHop = []string{"inbound.length=0", "outbound.length=0",
"inbound.lengthVariance=0", "outbound.lengthVariance=0",
"inbound.backupQuantity=0", "outbound.backupQuantity=0",
"inbound.quantity=2", "outbound.quantity=2"}
)
Examples and suggestions for options when creating sessions.
var PrimarySessionSwitch string = PrimarySessionString()
var SAM_HOST = getEnv("sam_host", "127.0.0.1")
var SAM_PORT = getEnv("sam_port", "7656")
func ExtractDest
func ExtractDest(input string) string
func ExtractPairInt
func ExtractPairInt(input, value string) int
func ExtractPairString
func ExtractPairString(input, value string) string
func GenerateOptionString
func GenerateOptionString(opts []string) string
func GetSAM3Logger
func GetSAM3Logger() *logrus.Logger
GetSAM3Logger returns the initialized logger
func IgnorePortError
func IgnorePortError(err error) error
func InitializeSAM3Logger
func InitializeSAM3Logger()
func PrimarySessionString
func PrimarySessionString() string
func RandString
func RandString() string
func SAMDefaultAddr
func SAMDefaultAddr(fallforward string) string
func SetAccessList
func SetAccessList(s []string) func(*SAMEmit) error
SetAccessList tells the system to treat the AccessList as a whitelist
func SetAccessListType
func SetAccessListType(s string) func(*SAMEmit) error
SetAccessListType tells the system to treat the AccessList as a whitelist
func SetAllowZeroIn
func SetAllowZeroIn(b bool) func(*SAMEmit) error
SetAllowZeroIn tells the tunnel to accept zero-hop peers
func SetAllowZeroOut
func SetAllowZeroOut(b bool) func(*SAMEmit) error
SetAllowZeroOut tells the tunnel to accept zero-hop peers
func SetCloseIdle
func SetCloseIdle(b bool) func(*SAMEmit) error
SetCloseIdle tells the connection to close it's tunnels during extended idle time.
func SetCloseIdleTime
func SetCloseIdleTime(u int) func(*SAMEmit) error
SetCloseIdleTime sets the time to wait before closing tunnels to idle levels
func SetCloseIdleTimeMs
func SetCloseIdleTimeMs(u int) func(*SAMEmit) error
SetCloseIdleTimeMs sets the time to wait before closing tunnels to idle levels in milliseconds
func SetCompress
func SetCompress(b bool) func(*SAMEmit) error
SetCompress tells clients to use compression
func SetEncrypt
func SetEncrypt(b bool) func(*SAMEmit) error
SetEncrypt tells the router to use an encrypted leaseset
func SetFastRecieve
func SetFastRecieve(b bool) func(*SAMEmit) error
SetFastRecieve tells clients to use compression
func SetInBackups
func SetInBackups(u int) func(*SAMEmit) error
SetInBackups sets the inbound tunnel backups
func SetInLength
func SetInLength(u int) func(*SAMEmit) error
SetInLength sets the number of hops inbound
func SetInQuantity
func SetInQuantity(u int) func(*SAMEmit) error
SetInQuantity sets the inbound tunnel quantity
func SetInVariance
func SetInVariance(i int) func(*SAMEmit) error
SetInVariance sets the variance of a number of hops inbound
func SetLeaseSetKey
func SetLeaseSetKey(s string) func(*SAMEmit) error
SetLeaseSetKey sets the host of the SAMEmit's SAM bridge
func SetLeaseSetPrivateKey
func SetLeaseSetPrivateKey(s string) func(*SAMEmit) error
SetLeaseSetPrivateKey sets the host of the SAMEmit's SAM bridge
func SetLeaseSetPrivateSigningKey
func SetLeaseSetPrivateSigningKey(s string) func(*SAMEmit) error
SetLeaseSetPrivateSigningKey sets the host of the SAMEmit's SAM bridge
func SetMessageReliability
func SetMessageReliability(s string) func(*SAMEmit) error
SetMessageReliability sets the host of the SAMEmit's SAM bridge
func SetName
func SetName(s string) func(*SAMEmit) error
SetName sets the host of the SAMEmit's SAM bridge
func SetOutBackups
func SetOutBackups(u int) func(*SAMEmit) error
SetOutBackups sets the inbound tunnel backups
func SetOutLength
func SetOutLength(u int) func(*SAMEmit) error
SetOutLength sets the number of hops outbound
func SetOutQuantity
func SetOutQuantity(u int) func(*SAMEmit) error
SetOutQuantity sets the outbound tunnel quantity
func SetOutVariance
func SetOutVariance(i int) func(*SAMEmit) error
SetOutVariance sets the variance of a number of hops outbound
func SetReduceIdle
func SetReduceIdle(b bool) func(*SAMEmit) error
SetReduceIdle tells the connection to reduce it's tunnels during extended idle time.
func SetReduceIdleQuantity
func SetReduceIdleQuantity(u int) func(*SAMEmit) error
SetReduceIdleQuantity sets minimum number of tunnels to reduce to during idle time
func SetReduceIdleTime
func SetReduceIdleTime(u int) func(*SAMEmit) error
SetReduceIdleTime sets the time to wait before reducing tunnels to idle levels
func SetReduceIdleTimeMs
func SetReduceIdleTimeMs(u int) func(*SAMEmit) error
SetReduceIdleTimeMs sets the time to wait before reducing tunnels to idle levels in milliseconds
func SetSAMAddress
func SetSAMAddress(s string) func(*SAMEmit) error
SetSAMAddress sets the SAM address all-at-once
func SetSAMHost
func SetSAMHost(s string) func(*SAMEmit) error
SetSAMHost sets the host of the SAMEmit's SAM bridge
func SetSAMPort
func SetSAMPort(s string) func(*SAMEmit) error
SetSAMPort sets the port of the SAMEmit's SAM bridge using a string
func SetType
func SetType(s string) func(*SAMEmit) error
SetType sets the type of the forwarder server
func SplitHostPort
func SplitHostPort(hostport string) (string, string, error)
type DatagramSession
type DatagramSession struct {
}
The DatagramSession implements net.PacketConn. It works almost like ordinary UDP, except that datagrams may be at most 31kB large. These datagrams are also end-to-end encrypted, signed and includes replay-protection. And they are also built to be surveillance-resistant (yey!).
func (*DatagramSession) Accept
func (s *DatagramSession) Accept() (net.Conn, error)
func (*DatagramSession) Addr
func (s *DatagramSession) Addr() net.Addr
func (*DatagramSession) B32
func (s *DatagramSession) B32() string
func (*DatagramSession) Close
func (s *DatagramSession) Close() error
Closes the DatagramSession. Implements net.PacketConn
func (*DatagramSession) Dial
func (s *DatagramSession) Dial(net string, addr string) (*DatagramSession, error)
func (*DatagramSession) DialI2PRemote
func (s *DatagramSession) DialI2PRemote(net string, addr net.Addr) (*DatagramSession, error)
func (*DatagramSession) DialRemote
func (s *DatagramSession) DialRemote(net, addr string) (net.PacketConn, error)
func (*DatagramSession) LocalAddr
func (s *DatagramSession) LocalAddr() net.Addr
Implements net.PacketConn
func (*DatagramSession) LocalI2PAddr
func (s *DatagramSession) LocalI2PAddr() i2pkeys.I2PAddr
Returns the I2P destination of the DatagramSession.
func (*DatagramSession) Lookup
func (s *DatagramSession) Lookup(name string) (a net.Addr, err error)
func (*DatagramSession) Read
func (s *DatagramSession) Read(b []byte) (n int, err error)
func (*DatagramSession) ReadFrom
func (s *DatagramSession) ReadFrom(b []byte) (n int, addr net.Addr, err error)
Reads one datagram sent to the destination of the DatagramSession. Returns the number of bytes read, from what address it was sent, or an error. implements net.PacketConn
func (*DatagramSession) RemoteAddr
func (s *DatagramSession) RemoteAddr() net.Addr
func (*DatagramSession) SetDeadline
func (s *DatagramSession) SetDeadline(t time.Time) error
Sets read and write deadlines for the DatagramSession. Implements net.PacketConn and does the same thing. Setting write deadlines for datagrams is seldom done.
func (*DatagramSession) SetReadDeadline
func (s *DatagramSession) SetReadDeadline(t time.Time) error
Sets read deadline for the DatagramSession. Implements net.PacketConn
func (*DatagramSession) SetWriteBuffer
func (s *DatagramSession) SetWriteBuffer(bytes int) error
func (*DatagramSession) SetWriteDeadline
func (s *DatagramSession) SetWriteDeadline(t time.Time) error
Sets the write deadline for the DatagramSession. Implements net.Packetconn.
func (*DatagramSession) Write
func (s *DatagramSession) Write(b []byte) (int, error)
func (*DatagramSession) WriteTo
func (s *DatagramSession) WriteTo(b []byte, addr net.Addr) (n int, err error)
Sends one signed datagram to the destination specified. At the time of writing, maximum size is 31 kilobyte, but this may change in the future. Implements net.PacketConn.
type I2PConfig
type I2PConfig struct {
SamHost string
SamPort string
TunName string
SamMin string
SamMax string
Fromport string
Toport string
Style string
TunType string
DestinationKeys i2pkeys.I2PKeys
SigType string
EncryptLeaseSet string
LeaseSetKey string
LeaseSetPrivateKey string
LeaseSetPrivateSigningKey string
LeaseSetKeys i2pkeys.I2PKeys
InAllowZeroHop string
OutAllowZeroHop string
InLength string
OutLength string
InQuantity string
OutQuantity string
InVariance string
OutVariance string
InBackupQuantity string
OutBackupQuantity string
FastRecieve string
UseCompression string
MessageReliability string
CloseIdle string
CloseIdleTime string
ReduceIdle string
ReduceIdleTime string
ReduceIdleQuantity string
LeaseSetEncryption string
//Streaming Library options
AccessListType string
AccessList []string
}
I2PConfig is a struct which manages I2P configuration options
func NewConfig
func NewConfig(opts ...func(*I2PConfig) error) (*I2PConfig, error)
func (*I2PConfig) Accesslist
func (f *I2PConfig) Accesslist() string
Accesslist generates the I2CP access list configuration string based on the configured access list
func (*I2PConfig) Accesslisttype
func (f *I2PConfig) Accesslisttype() string
Accesslisttype returns the I2CP access list configuration string based on the AccessListType setting
func (*I2PConfig) Close
func (f *I2PConfig) Close() string
Close returns I2CP close-on-idle configuration settings as a string if enabled
func (*I2PConfig) DestinationKey
func (f *I2PConfig) DestinationKey() string
DestinationKey returns the DESTINATION configuration string for the SAM bridge If destination keys are set, returns them as a string, otherwise returns "TRANSIENT"
func (*I2PConfig) DoZero
func (f *I2PConfig) DoZero() string
DoZero returns the zero hop and fast receive configuration string settings
func (*I2PConfig) EncryptLease
func (f *I2PConfig) EncryptLease() string
EncryptLease returns the lease set encryption configuration string Returns "i2cp.encryptLeaseSet=true" if encryption is enabled, empty string otherwise
func (*I2PConfig) FromPort
func (f *I2PConfig) FromPort() string
FromPort returns the FROM_PORT configuration string for SAM bridges >= 3.1 Returns an empty string if SAM version < 3.1 or if fromport is "0"
func (*I2PConfig) ID
func (f *I2PConfig) ID() string
ID returns the tunnel name as a formatted string. If no tunnel name is set, generates a random 12-character name using lowercase letters.
func (*I2PConfig) LeaseSetEncryptionType
func (f *I2PConfig) LeaseSetEncryptionType() string
LeaseSetEncryptionType returns the I2CP lease set encryption type configuration string. If no encryption type is set, returns default value "4,0". Validates that all encryption types are valid integers.
func (*I2PConfig) Leasesetsettings
func (f *I2PConfig) Leasesetsettings() (string, string, string)
Leasesetsettings returns the lease set configuration strings for I2P Returns three strings: lease set key, private key, and private signing key settings
func (*I2PConfig) MaxSAM
func (f *I2PConfig) MaxSAM() string
MaxSAM returns the maximum SAM version supported as a string If no maximum version is set, returns default value "3.1"
func (*I2PConfig) MinSAM
func (f *I2PConfig) MinSAM() string
MinSAM returns the minimum SAM version supported as a string If no minimum version is set, returns default value "3.0"
func (*I2PConfig) Print
func (f *I2PConfig) Print() []string
Print returns a slice of strings containing all the I2P configuration settings
func (*I2PConfig) Reduce
func (f *I2PConfig) Reduce() string
Reduce returns I2CP reduce-on-idle configuration settings as a string if enabled
func (*I2PConfig) Reliability
func (f *I2PConfig) Reliability() string
Reliability returns the message reliability configuration string for the SAM bridge If a reliability setting is specified, returns formatted i2cp.messageReliability setting
func (*I2PConfig) Sam
func (f *I2PConfig) Sam() string
Sam returns the SAM bridge address as a string in the format "host:port"
func (*I2PConfig) SessionStyle
func (f *I2PConfig) SessionStyle() string
SessionStyle returns the SAM session style configuration string If no style is set, defaults to "STREAM"
func (*I2PConfig) SetSAMAddress
func (f *I2PConfig) SetSAMAddress(addr string)
SetSAMAddress sets the SAM bridge host and port from a combined address string addr format can be either "host" or "host:port"
func (*I2PConfig) SignatureType
func (f *I2PConfig) SignatureType() string
SignatureType returns the SIGNATURE_TYPE configuration string for SAM bridges >= 3.1 Returns empty string if SAM version < 3.1 or if no signature type is set
func (*I2PConfig) ToPort
func (f *I2PConfig) ToPort() string
ToPort returns the TO_PORT configuration string for SAM bridges >= 3.1 Returns an empty string if SAM version < 3.1 or if toport is "0"
type Option
type Option func(*SAMEmit) error
Option is a SAMEmit Option
type Options
type Options map[string]string
options map
func (Options) AsList
func (opts Options) AsList() (ls []string)
obtain sam options as list of strings
type PrimarySession
type PrimarySession struct {
Timeout time.Duration
Deadline time.Time
Config SAMEmit
}
Represents a primary session.
func (*PrimarySession) Addr
func (ss *PrimarySession) Addr() i2pkeys.I2PAddr
Returns the I2P destination (the address) of the stream session
func (*PrimarySession) Close
func (ss *PrimarySession) Close() error
func (*PrimarySession) Dial
func (sam *PrimarySession) Dial(network, addr string) (net.Conn, error)
func (*PrimarySession) DialTCP
func (sam *PrimarySession) DialTCP(network string, laddr, raddr net.Addr) (net.Conn, error)
DialTCP implements x/dialer
func (*PrimarySession) DialTCPI2P
func (sam *PrimarySession) DialTCPI2P(network string, laddr, raddr string) (net.Conn, error)
func (*PrimarySession) DialUDP
func (sam *PrimarySession) DialUDP(network string, laddr, raddr net.Addr) (net.PacketConn, error)
DialUDP implements x/dialer
func (*PrimarySession) DialUDPI2P
func (sam *PrimarySession) DialUDPI2P(network, laddr, raddr string) (*DatagramSession, error)
func (*PrimarySession) From
func (ss *PrimarySession) From() string
func (*PrimarySession) ID
func (ss *PrimarySession) ID() string
Returns the local tunnel name of the I2P tunnel used for the stream session
func (*PrimarySession) Keys
func (ss *PrimarySession) Keys() i2pkeys.I2PKeys
Returns the keys associated with the stream session
func (*PrimarySession) LocalAddr
func (ss *PrimarySession) LocalAddr() net.Addr
func (*PrimarySession) Lookup
func (s *PrimarySession) Lookup(name string) (a net.Addr, err error)
func (*PrimarySession) NewDatagramSubSession
func (s *PrimarySession) NewDatagramSubSession(id string, udpPort int) (*DatagramSession, error)
Creates a new datagram session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.
func (*PrimarySession) NewRawSubSession
func (s *PrimarySession) NewRawSubSession(id string, udpPort int) (*RawSession, error)
Creates a new raw session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.
func (*PrimarySession) NewStreamSubSession
func (sam *PrimarySession) NewStreamSubSession(id string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*PrimarySession) NewStreamSubSessionWithPorts
func (sam *PrimarySession) NewStreamSubSessionWithPorts(id, from, to string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*PrimarySession) NewUniqueStreamSubSession
func (sam *PrimarySession) NewUniqueStreamSubSession(id string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*PrimarySession) Resolve
func (sam *PrimarySession) Resolve(network, addr string) (net.Addr, error)
func (*PrimarySession) ResolveTCPAddr
func (sam *PrimarySession) ResolveTCPAddr(network, dest string) (net.Addr, error)
func (*PrimarySession) ResolveUDPAddr
func (sam *PrimarySession) ResolveUDPAddr(network, dest string) (net.Addr, error)
func (*PrimarySession) SignatureType
func (ss *PrimarySession) SignatureType() string
func (*PrimarySession) To
func (ss *PrimarySession) To() string
type RawSession
type RawSession struct {
}
The RawSession provides no authentication of senders, and there is no sender address attached to datagrams, so all communication is anonymous. The messages send are however still endpoint-to-endpoint encrypted. You need to figure out a way to identify and authenticate clients yourself, iff that is needed. Raw datagrams may be at most 32 kB in size. There is no overhead of authentication, which is the reason to use this..
func (*RawSession) Close
func (s *RawSession) Close() error
Closes the RawSession.
func (*RawSession) LocalAddr
func (s *RawSession) LocalAddr() i2pkeys.I2PAddr
Returns the local I2P destination of the RawSession.
func (*RawSession) Read
func (s *RawSession) Read(b []byte) (n int, err error)
Reads one raw datagram sent to the destination of the DatagramSession. Returns the number of bytes read. Who sent the raw message can not be determined at this layer - you need to do it (in a secure way!).
func (*RawSession) SetDeadline
func (s *RawSession) SetDeadline(t time.Time) error
func (*RawSession) SetReadDeadline
func (s *RawSession) SetReadDeadline(t time.Time) error
func (*RawSession) SetWriteDeadline
func (s *RawSession) SetWriteDeadline(t time.Time) error
func (*RawSession) WriteTo
func (s *RawSession) WriteTo(b []byte, addr i2pkeys.I2PAddr) (n int, err error)
Sends one raw datagram to the destination specified. At the time of writing, maximum size is 32 kilobyte, but this may change in the future.
type SAM
type SAM struct {
Config SAMEmit
}
Used for controlling I2Ps SAMv3.
func NewSAM
func NewSAM(address string) (*SAM, error)
Creates a new controller for the I2P routers SAM bridge.
func (*SAM) Close
func (sam *SAM) Close() error
close this sam session
func (*SAM) EnsureKeyfile
func (sam *SAM) EnsureKeyfile(fname string) (keys i2pkeys.I2PKeys, err error)
if keyfile fname does not exist
func (*SAM) Keys
func (sam *SAM) Keys() (k *i2pkeys.I2PKeys)
func (*SAM) Lookup
func (sam *SAM) Lookup(name string) (i2pkeys.I2PAddr, error)
Performs a lookup, probably this order: 1) routers known addresses, cached addresses, 3) by asking peers in the I2P network.
func (*SAM) NewDatagramSession
func (s *SAM) NewDatagramSession(id string, keys i2pkeys.I2PKeys, options []string, udpPort int) (*DatagramSession, error)
Creates a new datagram session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.
func (*SAM) NewKeys
func (sam *SAM) NewKeys(sigType ...string) (i2pkeys.I2PKeys, error)
Creates the I2P-equivalent of an IP address, that is unique and only the one who has the private keys can send messages from. The public keys are the I2P desination (the address) that anyone can send messages to.
func (*SAM) NewPrimarySession
func (sam *SAM) NewPrimarySession(id string, keys i2pkeys.I2PKeys, options []string) (*PrimarySession, error)
Creates a new PrimarySession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*SAM) NewPrimarySessionWithSignature
func (sam *SAM) NewPrimarySessionWithSignature(id string, keys i2pkeys.I2PKeys, options []string, sigType string) (*PrimarySession, error)
Creates a new PrimarySession with the I2CP- and PRIMARYinglib options as specified. See the I2P documentation for a full list of options.
func (*SAM) NewRawSession
func (s *SAM) NewRawSession(id string, keys i2pkeys.I2PKeys, options []string, udpPort int) (*RawSession, error)
Creates a new raw session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.
func (*SAM) NewStreamSession
func (sam *SAM) NewStreamSession(id string, keys i2pkeys.I2PKeys, options []string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*SAM) NewStreamSessionWithSignature
func (sam *SAM) NewStreamSessionWithSignature(id string, keys i2pkeys.I2PKeys, options []string, sigType string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*SAM) NewStreamSessionWithSignatureAndPorts
func (sam *SAM) NewStreamSessionWithSignatureAndPorts(id, from, to string, keys i2pkeys.I2PKeys, options []string, sigType string) (*StreamSession, error)
Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.
func (*SAM) ReadKeys
func (sam *SAM) ReadKeys(r io.Reader) (err error)
read public/private keys from an io.Reader
type SAMConn
type SAMConn struct {
}
Implements net.Conn
func (*SAMConn) Close
func (sc *SAMConn) Close() error
Implements net.Conn
func (*SAMConn) LocalAddr
func (sc *SAMConn) LocalAddr() net.Addr
func (*SAMConn) Read
func (sc *SAMConn) Read(buf []byte) (int, error)
Implements net.Conn
func (*SAMConn) RemoteAddr
func (sc *SAMConn) RemoteAddr() net.Addr
func (*SAMConn) SetDeadline
func (sc *SAMConn) SetDeadline(t time.Time) error
Implements net.Conn
func (*SAMConn) SetReadDeadline
func (sc *SAMConn) SetReadDeadline(t time.Time) error
Implements net.Conn
func (*SAMConn) SetWriteDeadline
func (sc *SAMConn) SetWriteDeadline(t time.Time) error
Implements net.Conn
func (*SAMConn) Write
func (sc *SAMConn) Write(buf []byte) (int, error)
Implements net.Conn
type SAMEmit
type SAMEmit struct {
I2PConfig
}
func NewEmit
func NewEmit(opts ...func(*SAMEmit) error) (*SAMEmit, error)
func (*SAMEmit) Accept
func (e *SAMEmit) Accept() string
func (*SAMEmit) AcceptBytes
func (e *SAMEmit) AcceptBytes() []byte
func (*SAMEmit) Connect
func (e *SAMEmit) Connect(dest string) string
func (*SAMEmit) ConnectBytes
func (e *SAMEmit) ConnectBytes(dest string) []byte
func (*SAMEmit) Create
func (e *SAMEmit) Create() string
func (*SAMEmit) CreateBytes
func (e *SAMEmit) CreateBytes() []byte
func (*SAMEmit) GenerateDestination
func (e *SAMEmit) GenerateDestination() string
func (*SAMEmit) GenerateDestinationBytes
func (e *SAMEmit) GenerateDestinationBytes() []byte
func (*SAMEmit) Hello
func (e *SAMEmit) Hello() string
func (*SAMEmit) HelloBytes
func (e *SAMEmit) HelloBytes() []byte
func (*SAMEmit) Lookup
func (e *SAMEmit) Lookup(name string) string
func (*SAMEmit) LookupBytes
func (e *SAMEmit) LookupBytes(name string) []byte
func (*SAMEmit) SamOptionsString
func (e *SAMEmit) SamOptionsString() string
type SAMResolver
type SAMResolver struct {
*SAM
}
func NewFullSAMResolver
func NewFullSAMResolver(address string) (*SAMResolver, error)
func NewSAMResolver
func NewSAMResolver(parent *SAM) (*SAMResolver, error)
func (*SAMResolver) Resolve
func (sam *SAMResolver) Resolve(name string) (i2pkeys.I2PAddr, error)
Performs a lookup, probably this order: 1) routers known addresses, cached addresses, 3) by asking peers in the I2P network.
type StreamListener
type StreamListener struct {
}
func (*StreamListener) Accept
func (l *StreamListener) Accept() (net.Conn, error)
implements net.Listener
func (*StreamListener) AcceptI2P
func (l *StreamListener) AcceptI2P() (*SAMConn, error)
accept a new inbound connection
func (*StreamListener) Addr
func (l *StreamListener) Addr() net.Addr
get our address implements net.Listener
func (*StreamListener) Close
func (l *StreamListener) Close() error
implements net.Listener
func (*StreamListener) From
func (l *StreamListener) From() string
func (*StreamListener) To
func (l *StreamListener) To() string
type StreamSession
type StreamSession struct {
Timeout time.Duration
Deadline time.Time
}
Represents a streaming session.
func (*StreamSession) Addr
func (s *StreamSession) Addr() i2pkeys.I2PAddr
Returns the I2P destination (the address) of the stream session
func (*StreamSession) Close
func (s *StreamSession) Close() error
func (*StreamSession) Dial
func (s *StreamSession) Dial(n, addr string) (c net.Conn, err error)
implement net.Dialer
func (*StreamSession) DialContext
func (s *StreamSession) DialContext(ctx context.Context, n, addr string) (net.Conn, error)
context-aware dialer, eventually...
func (*StreamSession) DialContextI2P
func (s *StreamSession) DialContextI2P(ctx context.Context, n, addr string) (*SAMConn, error)
context-aware dialer, eventually...
func (*StreamSession) DialI2P
func (s *StreamSession) DialI2P(addr i2pkeys.I2PAddr) (*SAMConn, error)
Dials to an I2P destination and returns a SAMConn, which implements a net.Conn.
func (*StreamSession) From
func (s *StreamSession) From() string
func (*StreamSession) ID
func (s *StreamSession) ID() string
Returns the local tunnel name of the I2P tunnel used for the stream session
func (*StreamSession) Keys
func (s *StreamSession) Keys() i2pkeys.I2PKeys
Returns the keys associated with the stream session
func (*StreamSession) Listen
func (s *StreamSession) Listen() (*StreamListener, error)
create a new stream listener to accept inbound connections
func (*StreamSession) LocalAddr
func (s *StreamSession) LocalAddr() net.Addr
func (*StreamSession) Lookup
func (s *StreamSession) Lookup(name string) (i2pkeys.I2PAddr, error)
lookup name, convenience function
func (*StreamSession) Read
func (s *StreamSession) Read(buf []byte) (int, error)
Read reads data from the stream.
func (*StreamSession) SetDeadline
func (s *StreamSession) SetDeadline(t time.Time) error
func (*StreamSession) SetReadDeadline
func (s *StreamSession) SetReadDeadline(t time.Time) error
func (*StreamSession) SetWriteDeadline
func (s *StreamSession) SetWriteDeadline(t time.Time) error
func (*StreamSession) SignatureType
func (s *StreamSession) SignatureType() string
func (*StreamSession) To
func (s *StreamSession) To() string
func (*StreamSession) Write
func (s *StreamSession) Write(data []byte) (int, error)
Write sends data over the stream.