allocations improvements and tunnel fixes (#1248)

* reduce allocations in tunnel code

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* another allocation fix

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* allocate maps with len if it known

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>

* allocate key for send once

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2020-02-24 17:15:20 +03:00
committed by GitHub
parent 01d88601c0
commit 5b0175c2e5
13 changed files with 58 additions and 31 deletions

View File

@@ -47,6 +47,8 @@ type session struct {
link string
// the error response
errChan chan error
// key for session encryption
key string
}
// message is sent over the send channel
@@ -326,22 +328,22 @@ func (s *session) Announce() error {
// Send is used to send a message
func (s *session) Send(m *transport.Message) error {
// encrypt the transport message payload
body, err := Encrypt(m.Body, s.token+s.channel+s.session)
body, err := Encrypt(m.Body, s.key)
if err != nil {
log.Debugf("failed to encrypt message body: %v", err)
return err
}
// make copy
// make copy, without rehash and realloc
data := &transport.Message{
Header: make(map[string]string),
Header: make(map[string]string, len(m.Header)),
Body: body,
}
// encrypt all the headers
for k, v := range m.Header {
// encrypt the transport message payload
val, err := Encrypt([]byte(v), s.token+s.channel+s.session)
val, err := Encrypt([]byte(v), s.key)
if err != nil {
log.Debugf("failed to encrypt message header %s: %v", k, err)
return err
@@ -387,14 +389,14 @@ func (s *session) Recv(m *transport.Message) error {
default:
}
//log.Tracef("Received %+v from recv backlog", msg)
log.Tracef("Received %+v from recv backlog", msg)
key := s.token + s.channel + msg.session
// decrypt the received payload using the token
// we have to used msg.session because multicast has a shared
// session id of "multicast" in this session struct on
// the listener side
body, err := Decrypt(msg.data.Body, s.token+s.channel+msg.session)
body, err := Decrypt(msg.data.Body, key)
if err != nil {
log.Debugf("failed to decrypt message body: %v", err)
return err
@@ -410,7 +412,7 @@ func (s *session) Recv(m *transport.Message) error {
return err
}
// encrypt the transport message payload
val, err := Decrypt([]byte(h), s.token+s.channel+msg.session)
val, err := Decrypt([]byte(h), key)
if err != nil {
log.Debugf("failed to decrypt message header %s: %v", k, err)
return err