encryption + helpers + contact card compression + server routing start
This commit is contained in:
@ -76,7 +76,7 @@ func (id *Identity) AsymDecryptMessage(ClientPublicKey string, Message []byte, S
|
||||
}
|
||||
|
||||
// Decode decrypted ToServerMessage
|
||||
func (id *Identity) DecodeToServerMessage(toServerMessage []byte) (*meowlib.ToServerMessage, error) {
|
||||
func (id *Identity) DeserializeToServerMessage(toServerMessage []byte) (*meowlib.ToServerMessage, error) {
|
||||
tsmsg := &meowlib.ToServerMessage{}
|
||||
if err := proto.Unmarshal(toServerMessage, tsmsg); err != nil {
|
||||
return nil, err
|
||||
@ -97,7 +97,7 @@ func (id *Identity) ProcessInbound(message []byte) (*meowlib.ToServerMessage, er
|
||||
return nil, err
|
||||
}
|
||||
// Decode msg
|
||||
srv_msg, err := id.DecodeToServerMessage(srv_clear)
|
||||
srv_msg, err := id.DeserializeToServerMessage(srv_clear)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -115,7 +115,7 @@ func (id *Identity) BuildSimpleAckResponseMessage(uuidToAck string) (fromServerM
|
||||
return &msg, nil
|
||||
}
|
||||
|
||||
func (id *Identity) EncodeFromServerMessage(msg *meowlib.FromServerMessage) (encodedFromServerMessage []byte, err error) {
|
||||
func (id *Identity) SerializeFromServerMessage(msg *meowlib.FromServerMessage) (encodedFromServerMessage []byte, err error) {
|
||||
out, err := proto.Marshal(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -147,7 +147,7 @@ func (id *Identity) PackForSending(encryptedMessage []byte, signature []byte) (f
|
||||
|
||||
// Outbound helper function
|
||||
func (id *Identity) ProcessOut(peerPublicKey string, msg *meowlib.FromServerMessage) (fromServerMessage []byte, err error) {
|
||||
encoded_srv_fromServerMessage, err := id.EncodeFromServerMessage(msg)
|
||||
encoded_srv_fromServerMessage, err := id.SerializeFromServerMessage(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
61
server/router.go
Normal file
61
server/router.go
Normal file
@ -0,0 +1,61 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"forge.redroom.link/yves/meowlib"
|
||||
"github.com/go-redis/redis"
|
||||
)
|
||||
|
||||
type RedisRouter struct {
|
||||
Name string
|
||||
ServerIdentity *Identity
|
||||
Client *redis.Client
|
||||
Context context.Context
|
||||
}
|
||||
|
||||
func NewRedisRouter(server *Identity, url string, password string, db int) *RedisRouter {
|
||||
var r RedisRouter
|
||||
r.ServerIdentity = server
|
||||
r.Name = "Redis"
|
||||
r.Client = redis.NewClient(&redis.Options{
|
||||
Addr: url,
|
||||
Password: password,
|
||||
DB: db,
|
||||
})
|
||||
r.Context = context.Background()
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) *meowlib.FromServerMessage {
|
||||
var from_server meowlib.FromServerMessage
|
||||
if len(msg.Messages) > 0 { // user message
|
||||
for _, usrmsg := range msg.Messages {
|
||||
r.Client.ZAdd(usrmsg.Destination, redis.Z{float64(time.Now().Unix()), usrmsg.Payload})
|
||||
}
|
||||
from_server.UuidAck = msg.Uuid
|
||||
}
|
||||
if len(msg.PullRequest) > 0 {
|
||||
for _, rq := range msg.PullRequest {
|
||||
msgcnt := r.Client.ZCount(rq.LookupKey, "-inf", "+inf")
|
||||
r.Client.ZPopMin(rq.LookupKey, msgcnt.Val())
|
||||
}
|
||||
}
|
||||
/*
|
||||
case "q": // query messages
|
||||
break
|
||||
|
||||
case "s": // servers list
|
||||
break
|
||||
|
||||
case "m": // matriochka
|
||||
break
|
||||
case "b": // broadcast
|
||||
break
|
||||
case "a": // admin
|
||||
break
|
||||
}
|
||||
*/
|
||||
return &from_server
|
||||
}
|
Reference in New Issue
Block a user