Merge branch 'tapir-peer' of cwtch.im/cwtch into master

This commit is contained in:
Dan Ballard 2019-08-06 15:52:16 -07:00 committed by Gogs
commit ae2e717f76
2 changed files with 23 additions and 7 deletions

View File

@ -135,6 +135,10 @@ func (e *engine) eventHandler() {
func (e *engine) createPeerTemplate() *PeerApp {
peerAppTemplate := new(PeerApp)
peerAppTemplate.IsBlocked = func(onion string) bool {
_, blocked := e.blocked.Load(onion)
return blocked
}
peerAppTemplate.MessageHandler = e.handlePeerMessage
peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown2(e.peerAck)
peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed)
@ -163,11 +167,14 @@ func (e *engine) Shutdown() {
// peerWithOnion is the entry point for cwtchPeer relationships
// needs to be run in a goroutine as will block on Open.
func (e *engine) peerWithOnion(onion string) {
e.ignoreOnShutdown(e.peerConnecting)(onion)
connected, err := e.service.Connect(onion, e.createPeerTemplate())
// Only issue a disconnected error if we are disconnected (Connect will fail if a connection already exists)
if !connected && err != nil {
e.ignoreOnShutdown(e.peerDisconnected)(onion)
_, blocked := e.blocked.Load(onion)
if !blocked {
e.ignoreOnShutdown(e.peerConnecting)(onion)
connected, err := e.service.Connect(onion, e.createPeerTemplate())
// Only issue a disconnected error if we are disconnected (Connect will fail if a connection already exists)
if !connected && err != nil {
e.ignoreOnShutdown(e.peerDisconnected)(onion)
}
}
}

View File

@ -13,6 +13,7 @@ type PeerApp struct {
applications.AuthApp
connection *tapir.Connection
MessageHandler func(string, string, []byte)
IsBlocked func(string) bool
OnAcknowledgement func(string, string)
OnAuth func(string)
OnClose func(string)
@ -30,6 +31,7 @@ type PeerMessage struct {
func (pa PeerApp) NewInstance() tapir.Application {
newApp := new(PeerApp)
newApp.MessageHandler = pa.MessageHandler
newApp.IsBlocked = pa.IsBlocked
newApp.OnAcknowledgement = pa.OnAcknowledgement
newApp.OnAuth = pa.OnAuth
newApp.OnClose = pa.OnClose
@ -44,9 +46,16 @@ func (pa *PeerApp) Init(connection *tapir.Connection) {
pa.AuthApp.Init(connection)
if connection.HasCapability(applications.AuthCapability) {
pa.connection = connection
pa.OnAuth(connection.Hostname)
go pa.listen()
if pa.IsBlocked(connection.Hostname) {
pa.connection.Close()
pa.OnClose(connection.Hostname)
} else {
pa.OnAuth(connection.Hostname)
go pa.listen()
}
} else {
pa.OnClose(connection.Hostname)
}