Select Git revision
protocol_v1.go
protocol_v1.go 12.61 KiB
package gossip
import (
"bytes"
"github.com/iotaledger/goshimmer/packages/accountability"
"github.com/iotaledger/goshimmer/packages/byteutils"
"github.com/iotaledger/goshimmer/packages/errors"
"github.com/iotaledger/goshimmer/packages/events"
"github.com/iotaledger/goshimmer/packages/identity"
"github.com/iotaledger/goshimmer/packages/ternary"
"github.com/iotaledger/goshimmer/packages/transaction"
"strconv"
)
// region protocolV1 ///////////////////////////////////////////////////////////////////////////////////////////////////
func protocolV1(protocol *protocol) errors.IdentifiableError {
if err := protocol.Send(accountability.OWN_ID); err != nil {
return err
}
onReceiveIdentification := events.NewClosure(func(identity *identity.Identity) {
if protocol.Neighbor == nil {
if err := protocol.Send(CONNECTION_REJECT); err != nil {
return
}
} else {
if err := protocol.Send(CONNECTION_ACCEPT); err != nil {
return
}
protocol.handshakeMutex.Lock()
defer protocol.handshakeMutex.Unlock()
protocol.sendHandshakeCompleted = true
if protocol.receiveHandshakeCompleted {
protocol.Events.HandshakeCompleted.Trigger()
}
}
})
protocol.Events.ReceiveIdentification.Attach(onReceiveIdentification)
return nil
}
func sendTransactionV1(protocol *protocol, tx *transaction.Transaction) {
if _, ok := protocol.SendState.(*dispatchStateV1); ok {
protocol.sendMutex.Lock()
defer protocol.sendMutex.Unlock()
if err := protocol.send(DISPATCH_TRANSACTION); err != nil {
return
}
if err := protocol.send(tx); err != nil {
return
}
}
}
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
// region indentificationStateV1 ///////////////////////////////////////////////////////////////////////////////////////
type indentificationStateV1 struct {
protocol *protocol
buffer []byte
offset int
}