transport

package
v0.0.0-...-3192b2a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2022 License: MIT Imports: 16 Imported by: 0

README

[ParingSession]
TransportBase(TransportDelegate)UDP -----------[raw]
->TransportManager ->SessionManager(SessionDelegate) ---- [transports]
->ExchangeManager-> [messaging]

Documentation

Index

Constants

View Source
const (
	KSessionRoleInitiator = iota
	KSessionRoleResponder
)
View Source
const (
	MessageCounterTypeGlobalUnencrypted = iota
	MessageCounterTypeGlobalEncrypted
	MessageCounterTypeSession
)
View Source
const (
	PayloadIsEncrypted uint8 = iota
	PayloadIsUnencrypted
)

Variables

View Source
var (
	ConfigSecureSessionRefCountLogging     = true
	ConfigMaxFabrice                   int = 16
)

Functions

func BuildNonce

func BuildNonce(secFlags uint8, messageCounter uint32, nodeId lib.NodeId) []byte

BuildNonce 使用SecFlags,messageCounter,nodeId三个字段生成Nonce(用于AES加解密的初始化向量),Len == 13

func Decrypt

func Decrypt(context *CryptoContext, nonce []byte, packetHeader *raw.PacketHeader, msg *system.PacketBufferHandle) (*raw.PayloadHeader, error)

func Encrypt

func Encrypt(context *CryptoContext, nonce []byte, payloadHeader *raw.PayloadHeader, header *raw.PacketHeader, buf *bytes.Buffer) (err error)

Types

type CryptoContext

type CryptoContext struct {
	// contains filtered or unexported fields
}

func (*CryptoContext) Decrypt

func (c *CryptoContext) Decrypt(msg *system.PacketBufferHandle, nonce []byte, header *raw.PacketHeader, mac *raw.MessageAuthenticationCode)

func (*CryptoContext) Encrypt

func (c *CryptoContext) Encrypt(plainText []byte, nonce []byte, header *raw.PacketHeader) (cipherTag []byte, err error)

func (*CryptoContext) GetAdditionalAuthData

func (c *CryptoContext) GetAdditionalAuthData(header *raw.PacketHeader) ([]byte, error)

type CryptoKey

type CryptoKey [crypto.AESCCM128KeyLength]byte

type EncryptedPacketBufferHandle

type EncryptedPacketBufferHandle struct {
	*system.PacketBufferHandle
}

func (*EncryptedPacketBufferHandle) MarkEncrypted

func (*EncryptedPacketBufferHandle) MessageCounter

func (e *EncryptedPacketBufferHandle) MessageCounter() uint32

type GlobalUnencryptedMessageCounter

type GlobalUnencryptedMessageCounter struct {
}

func NewGlobalUnencryptedMessageCounterImpl

func NewGlobalUnencryptedMessageCounterImpl() *GlobalUnencryptedMessageCounter

func (*GlobalUnencryptedMessageCounter) Init

func (*GlobalUnencryptedMessageCounter) QueueReceivedMessageAndStartSync

func (g *GlobalUnencryptedMessageCounter) QueueReceivedMessageAndStartSync(header *raw.PacketHeader, handle *SessionHandle, state uint8, peerAdders netip.AddrPort, buf *system.PacketBufferHandle) error

func (*GlobalUnencryptedMessageCounter) StartSync

func (g *GlobalUnencryptedMessageCounter) StartSync(handle *SessionHandle, session *session.Secure) error

type GroupFabric

type GroupFabric struct {
}

type GroupOutgoingCounters

type GroupOutgoingCounters struct {
	// contains filtered or unexported fields
}

func NewGroupOutgoingCounters

func NewGroupOutgoingCounters() *GroupOutgoingCounters

func (*GroupOutgoingCounters) GetCounter

func (g *GroupOutgoingCounters) GetCounter(isControl bool) uint32

func (*GroupOutgoingCounters) IncrementCounter

func (g *GroupOutgoingCounters) IncrementCounter(isControl bool) error

func (*GroupOutgoingCounters) Init

type GroupPeerTable

type GroupPeerTable struct {
	// contains filtered or unexported fields
}

func NewGroupPeerTable

func NewGroupPeerTable(size int) *GroupPeerTable

func (*GroupPeerTable) FabricRemoved

func (g *GroupPeerTable) FabricRemoved(fabricIndex lib.FabricIndex) error

func (*GroupPeerTable) FindOrAddPeer

func (g *GroupPeerTable) FindOrAddPeer(fabricIndex lib.FabricIndex, nodeId lib.NodeId, isControl bool) (*session.PeerMessageCounter, error)

func (*GroupPeerTable) RemovePeer

func (g *GroupPeerTable) RemovePeer(fabricIndex lib.FabricIndex, nodeId lib.NodeId, isControl bool) error

type GroupSender

type GroupSender struct {
}

type KeyUsage

type KeyUsage uint8

type LocalSessionMessageCounter

type LocalSessionMessageCounter struct {
}

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager impl ManagerBase

func NewManager

func NewManager(transports ...raw.TransportBase) *Manager

func (*Manager) Close

func (t *Manager) Close()

func (*Manager) Disconnect

func (t *Manager) Disconnect(addr netip.Addr)

func (*Manager) GetImplAtIndex

func (t *Manager) GetImplAtIndex(index int) raw.TransportBase

func (*Manager) GetUpdImpl

func (t *Manager) GetUpdImpl() raw.UDPTransportBase

func (*Manager) HandleMessageReceived

func (t *Manager) HandleMessageReceived(peerAddress netip.AddrPort, buf *system.PacketBufferHandle)

func (*Manager) MulticastGroupJoinLeave

func (t *Manager) MulticastGroupJoinLeave(addr netip.Addr, join bool) error

func (*Manager) SendMessage

func (t *Manager) SendMessage(port netip.AddrPort, msg []byte) error

func (*Manager) SetSessionManager

func (t *Manager) SetSessionManager(sessionManager MgrDelegate)

type MessageCounter

type MessageCounter interface {
}

type MessageCounterManagerBase

type MessageCounterManagerBase interface {
	StartSync(handle *SessionHandle, session *session.Secure) error
	QueueReceivedMessageAndStartSync(
		packetHeader *raw.PacketHeader,
		session *SessionHandle,
		state *session.Secure,
		peerAdders netip.AddrPort,
		buf *system.PacketBufferHandle,
	) error
}

type MgrBase

type MgrBase interface {
	raw.Delegate
	SetSessionManager(sessionManager MgrDelegate)
	SendMessage(port netip.AddrPort, msg []byte) error
	Close()
	Disconnect(addr netip.Addr)
	MulticastGroupJoinLeave(addr netip.Addr, join bool) error
}

MgrBase this is the delegate for TransportBase,

type MgrDelegate

type MgrDelegate interface {
	OnMessageReceived(peerAddress netip.AddrPort, buf *system.PacketBufferHandle)
}

MgrDelegate 这个实例为 SessionManagerBase

type NewSessionHandlingPolicy

type NewSessionHandlingPolicy uint8
const (
	ShiftToNewSession NewSessionHandlingPolicy = 0
	StayAtOldSession  NewSessionHandlingPolicy = 1
)

type SecureSessionTable

type SecureSessionTable struct {
	// contains filtered or unexported fields
}

func NewSecureSessionTable

func NewSecureSessionTable() *SecureSessionTable

func (*SecureSessionTable) CreateSecureSession

func (t *SecureSessionTable) CreateSecureSession(sessionType session.SecureType, sessionId uint16) *session.Secure

func (*SecureSessionTable) FindSecureSessionByLocalKey

func (t *SecureSessionTable) FindSecureSessionByLocalKey(id uint16) *SessionHandle

FindSecureSessionByLocalKey 遍历所有的SecureSession,如果SessionId相同,则取出来

func (*SecureSessionTable) Init

func (t *SecureSessionTable) Init()

func (*SecureSessionTable) ReleaseSession

func (t *SecureSessionTable) ReleaseSession(session *session.Secure)

type SessionDelegate

type SessionDelegate interface {
	OnSessionReleased()
	OnSessionHang()
	GetNewSessionHandlingPolicy() NewSessionHandlingPolicy
}

type SessionHandle

type SessionHandle struct {
	session.Session
}

func NewSessionHandle

func NewSessionHandle(session session.Session) *SessionHandle

type SessionHolder

type SessionHolder struct {
	session.Session
	*lib.ReferenceCounted
}

func NewSessionHolder

func NewSessionHolder(session session.Session) *SessionHolder

func (*SessionHolder) Contains

func (s *SessionHolder) Contains(session *SessionHandle) bool

func (*SessionHolder) GrabPairingSession

func (s *SessionHolder) GrabPairingSession(ss *SessionHandle) bool

func (*SessionHolder) GrabUnchecked

func (s *SessionHolder) GrabUnchecked(session *SessionHandle)

func (*SessionHolder) Grad

func (s *SessionHolder) Grad(session *SessionHandle) bool

func (*SessionHolder) Release

func (s *SessionHolder) Release()

func (*SessionHolder) SessionHandler

func (s *SessionHolder) SessionHandler() *SessionHandle

func (*SessionHolder) SessionReleased

func (s *SessionHolder) SessionReleased()

func (*SessionHolder) ShiftToSession

func (s *SessionHolder) ShiftToSession(session *SessionHandle)

type SessionHolderWithDelegate

type SessionHolderWithDelegate struct {
	*SessionHolder
	// contains filtered or unexported fields
}

func NewSessionHolderWithDelegateImpl

func NewSessionHolderWithDelegateImpl(delegate session.Delegate) *SessionHolderWithDelegate

func (*SessionHolderWithDelegate) DispatchSessionEvent

func (s *SessionHolderWithDelegate) DispatchSessionEvent(event session.DelegateEvent)

func (*SessionHolderWithDelegate) Release

func (s *SessionHolderWithDelegate) Release()

func (*SessionHolderWithDelegate) SessionReleased

func (s *SessionHolderWithDelegate) SessionReleased()

func (*SessionHolderWithDelegate) ShiftToSession

func (s *SessionHolderWithDelegate) ShiftToSession(session SessionHandle)

type SessionManager

type SessionManager struct {
	// contains filtered or unexported fields
}

func NewSessionManager

func NewSessionManager() *SessionManager

func (*SessionManager) AllocateSession

func (s *SessionManager) AllocateSession(sessionType session.SecureType, sessionEvictionHint lib.ScopedNodeId) *SessionHandle

func (*SessionManager) CreateUnauthenticatedSession

func (s *SessionManager) CreateUnauthenticatedSession(peerAddress netip.AddrPort, config *messageing.ReliableMessageProtocolConfig) *SessionHandle

func (*SessionManager) ExpireAllSessions

func (s *SessionManager) ExpireAllSessions(node *lib.ScopedNodeId)

func (*SessionManager) ExpireAllSessionsForFabric

func (s *SessionManager) ExpireAllSessionsForFabric(fabricIndex lib.FabricIndex)

func (*SessionManager) ExpireAllSessionsOnLogicalFabric

func (s *SessionManager) ExpireAllSessionsOnLogicalFabric(node *lib.ScopedNodeId)

func (*SessionManager) FabricRemoved

func (s *SessionManager) FabricRemoved(fabricId lib.FabricIndex)

func (*SessionManager) FabricTable

func (s *SessionManager) FabricTable() *credentials.FabricTable

func (*SessionManager) FabricWillBeRemoved

func (s *SessionManager) FabricWillBeRemoved(table *credentials.FabricTable, index lib.FabricIndex)

func (*SessionManager) FindSecureSessionForNode

func (s *SessionManager) FindSecureSessionForNode(nodeId *lib.ScopedNodeId, sessionType session.SecureType) *SessionHandle

func (*SessionManager) Init

func (s *SessionManager) Init(systemLay system.Layer, transportMgr MgrBase, counter MessageCounterManagerBase, storage store.PersistentStorageDelegate, table *credentials.FabricTable) error

func (*SessionManager) OnFabricCommitted

func (s *SessionManager) OnFabricCommitted(table *credentials.FabricTable, index lib.FabricIndex)

func (*SessionManager) OnFabricRemoved

func (s *SessionManager) OnFabricRemoved(table *credentials.FabricTable, index lib.FabricIndex)

func (*SessionManager) OnFabricUpdated

func (s *SessionManager) OnFabricUpdated(table *credentials.FabricTable, index lib.FabricIndex)

func (*SessionManager) OnMessageReceived

func (s *SessionManager) OnMessageReceived(srcAddr netip.AddrPort, msg *system.PacketBufferHandle)

func (*SessionManager) PrepareMessage

func (s *SessionManager) PrepareMessage(sessionHandle *SessionHandle,
	payloadHeader *raw.PayloadHeader,
	message []byte) (msg []byte, err error)

func (*SessionManager) SecureGroupMessageDispatch

func (s *SessionManager) SecureGroupMessageDispatch(packetHeader *raw.PacketHeader, peerAddress netip.AddrPort, msg *system.PacketBufferHandle)

SecureGroupMessageDispatch 处理加密的组播消息

func (*SessionManager) SecureUnicastMessageDispatch

func (s *SessionManager) SecureUnicastMessageDispatch(packetHeader *raw.PacketHeader, peerAddress netip.AddrPort, msg *system.PacketBufferHandle)

SecureUnicastMessageDispatch 处理分支,加密的单播消息

func (*SessionManager) SendPreparedMessage

func (s *SessionManager) SendPreparedMessage(session *SessionHandle, preparedMessage *EncryptedPacketBufferHandle) error

func (*SessionManager) SetMessageDelegate

func (s *SessionManager) SetMessageDelegate(delegate SessionMessageDelegate)

func (*SessionManager) Shutdown

func (s *SessionManager) Shutdown()

func (*SessionManager) SystemLayer

func (s *SessionManager) SystemLayer() system.Layer

func (*SessionManager) UnauthenticatedMessageDispatch

func (s *SessionManager) UnauthenticatedMessageDispatch(packetHeader *raw.PacketHeader, peerAddress netip.AddrPort, msg *system.PacketBufferHandle)

UnauthenticatedMessageDispatch 处理没有加密码的消息

type SessionManagerBase

type SessionManagerBase interface {
	credentials.FabricTableDelegate
	MgrDelegate
	// SecureGroupMessageDispatch  handle the kSecure group messages
	SecureGroupMessageDispatch(header *raw.PacketHeader, addr netip.AddrPort, buf *system.PacketBufferHandle)
	// SecureUnicastMessageDispatch  handle the unsecure messages
	SecureUnicastMessageDispatch(header *raw.PacketHeader, addr netip.AddrPort, buf *system.PacketBufferHandle)
	// UnauthenticatedMessageDispatch handle the unauthenticated(未经认证的) messages
	UnauthenticatedMessageDispatch(header *raw.PacketHeader, addr netip.AddrPort, buf *system.PacketBufferHandle)

	SendPreparedMessage(session *SessionHandle, preparedMessage *EncryptedPacketBufferHandle) error
	AllocateSession(sessionType session.SecureType, sessionEvictionHint lib.ScopedNodeId) *SessionHandle

	ExpireAllSessions(node *lib.ScopedNodeId)
	ExpireAllSessionsForFabric(fabricIndex lib.FabricIndex)
	ExpireAllSessionsOnLogicalFabric(node *lib.ScopedNodeId)

	FabricTable() *credentials.FabricTable

	CreateUnauthenticatedSession(peerAddress netip.AddrPort, config *messageing.ReliableMessageProtocolConfig) *SessionHandle
	FindSecureSessionForNode(nodeId *lib.ScopedNodeId, sessionType session.SecureType) *SessionHandle

	SetMessageDelegate(cb SessionMessageDelegate)
	SystemLayer() system.Layer
}

SessionManagerBase The delegate for TransportManager and FabricTable TransportBaseDelegate is the indirect delegate for TransportManager

type SessionMessageDelegate

type SessionMessageDelegate interface {
	OnMessageReceived(packetHeader *raw.PacketHeader, payloadHeader *raw.PayloadHeader, session *SessionHandle, isDuplicate bool, buf *system.PacketBufferHandle)
}

SessionMessageDelegate 这里的delegate实例为ExchangeManager

type UnauthenticatedSessionTable

type UnauthenticatedSessionTable struct {
	// contains filtered or unexported fields
}

func NewUnauthenticatedSessionTable

func NewUnauthenticatedSessionTable() *UnauthenticatedSessionTable

func (*UnauthenticatedSessionTable) FindInitiator

func (t *UnauthenticatedSessionTable) FindInitiator(ephemeralInitiatorNodeID lib.NodeId) *SessionHandle

func (*UnauthenticatedSessionTable) FindOrAllocateResponder

func (t *UnauthenticatedSessionTable) FindOrAllocateResponder(ephemeralInitiatorNodeId lib.NodeId, config *messageing.ReliableMessageProtocolConfig) (*SessionHandle, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL