EtherGuard-VPN/mtypes/metamessage.go

204 lines
4.3 KiB
Go
Raw Normal View History

2021-12-02 18:13:48 +01:00
package mtypes
2021-08-20 19:32:50 +02:00
import (
"bytes"
"encoding/gob"
"fmt"
2021-08-21 16:54:24 +02:00
"strconv"
2021-08-20 19:32:50 +02:00
"time"
2021-12-02 18:13:48 +01:00
"github.com/golang-jwt/jwt"
2021-08-20 19:32:50 +02:00
)
func GetByte(structIn interface{}) (bb []byte, err error) {
var b bytes.Buffer
e := gob.NewEncoder(&b)
if err := e.Encode(structIn); err != nil {
panic(err)
}
bb = b.Bytes()
return
}
2021-12-09 08:46:15 +01:00
const Infinity = float64(99999)
2021-08-20 19:32:50 +02:00
type RegisterMsg struct {
2021-12-04 03:32:59 +01:00
Node_id Vertex
Version string
PeerStateHash string
NhStateHash string
SuperParamStateHash string
JWTSecret JWTSecret
HttpPostCount uint64
}
2021-12-12 09:29:05 +01:00
func Hash2Str(h string) string {
n := 10
if len(h) > n-3 {
return h[:n] + "..."
}
2021-12-12 09:29:05 +01:00
return "\"" + h + "\""
2021-08-20 19:32:50 +02:00
}
2021-08-21 16:54:24 +02:00
func (c *RegisterMsg) ToString() string {
2021-12-12 09:29:05 +01:00
return fmt.Sprint("RegisterMsg Node_id:"+c.Node_id.ToString(), " Version:"+c.Version, " PeerHash:"+Hash2Str(c.PeerStateHash), " NhHash:"+Hash2Str(c.NhStateHash), " SuperParamHash:"+Hash2Str(c.SuperParamStateHash))
2021-08-21 16:54:24 +02:00
}
func ParseRegisterMsg(bin []byte) (StructPlace RegisterMsg, err error) {
2021-08-20 19:32:50 +02:00
var b bytes.Buffer
2021-08-21 16:54:24 +02:00
b.Write(bin)
2021-08-20 19:32:50 +02:00
d := gob.NewDecoder(&b)
2021-08-21 16:54:24 +02:00
err = d.Decode(&StructPlace)
return
2021-08-20 19:32:50 +02:00
}
2021-12-02 18:13:48 +01:00
type ServerCommand int
const (
2021-12-02 18:13:48 +01:00
NoAction ServerCommand = iota
2021-09-20 22:20:00 +02:00
Shutdown
2021-12-02 18:13:48 +01:00
ThrowError
Panic
2021-12-04 03:32:59 +01:00
UpdatePeer
UpdateNhTable
UpdateSuperParams
)
2021-12-02 18:13:48 +01:00
func (a *ServerCommand) ToString() string {
2021-12-04 03:32:59 +01:00
switch *a {
case Shutdown:
2021-12-02 18:13:48 +01:00
return "Shutdown"
2021-12-04 03:32:59 +01:00
case ThrowError:
2021-12-02 18:13:48 +01:00
return "ThrowError"
2021-12-04 03:32:59 +01:00
case Panic:
2021-12-02 18:13:48 +01:00
return "Panic"
2021-12-04 03:32:59 +01:00
case UpdatePeer:
return "UpdatePeer"
case UpdateNhTable:
return "UpdateNhTable"
case UpdateSuperParams:
return "UpdateSuperParams"
default:
return "Unknown"
}
}
2021-12-04 03:32:59 +01:00
type ServerUpdateMsg struct {
Node_id Vertex
Action ServerCommand
Code int
Params string
}
2021-12-04 03:32:59 +01:00
func ParseServerUpdateMsg(bin []byte) (StructPlace ServerUpdateMsg, err error) {
var b bytes.Buffer
b.Write(bin)
d := gob.NewDecoder(&b)
err = d.Decode(&StructPlace)
return
}
2021-12-04 03:32:59 +01:00
func (c *ServerUpdateMsg) ToString() string {
return "ServerUpdateMsg Node_id:" + c.Node_id.ToString() + " Action:" + c.Action.ToString() + " Code:" + strconv.Itoa(int(c.Code)) + " Params: " + c.Params
2021-08-20 19:32:50 +02:00
}
type PingMsg struct {
RequestID uint32
2021-12-02 18:13:48 +01:00
Src_nodeID Vertex
Time time.Time
RequestReply int
2021-08-21 16:54:24 +02:00
}
func (c *PingMsg) ToString() string {
2021-08-25 10:13:53 +02:00
return "PingMsg SID:" + c.Src_nodeID.ToString() + " Time:" + c.Time.String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
2021-08-20 19:32:50 +02:00
}
2021-08-21 16:54:24 +02:00
func ParsePingMsg(bin []byte) (StructPlace PingMsg, err error) {
2021-08-20 19:32:50 +02:00
var b bytes.Buffer
2021-08-21 16:54:24 +02:00
b.Write(bin)
2021-08-20 19:32:50 +02:00
d := gob.NewDecoder(&b)
2021-08-21 16:54:24 +02:00
err = d.Decode(&StructPlace)
return
2021-08-20 19:32:50 +02:00
}
type PongMsg struct {
2021-10-27 03:02:44 +02:00
RequestID uint32
2021-12-02 18:13:48 +01:00
Src_nodeID Vertex
Dst_nodeID Vertex
Timediff float64
TimeToAlive float64
2021-10-27 03:02:44 +02:00
AdditionalCost float64
2021-08-21 16:54:24 +02:00
}
func (c *PongMsg) ToString() string {
2021-12-02 18:13:48 +01:00
return "PongMsg SID:" + c.Src_nodeID.ToString() + " DID:" + c.Dst_nodeID.ToString() + " Timediff:" + S2TD(c.Timediff).String() + " TTL:" + S2TD(c.TimeToAlive).String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
2021-08-20 19:32:50 +02:00
}
2021-08-21 16:54:24 +02:00
func ParsePongMsg(bin []byte) (StructPlace PongMsg, err error) {
2021-08-20 19:32:50 +02:00
var b bytes.Buffer
2021-08-21 16:54:24 +02:00
b.Write(bin)
2021-08-20 19:32:50 +02:00
d := gob.NewDecoder(&b)
2021-08-21 16:54:24 +02:00
err = d.Decode(&StructPlace)
return
2021-08-20 19:32:50 +02:00
}
2021-08-23 18:39:04 +02:00
type QueryPeerMsg struct {
Request_ID uint32
2021-08-21 16:54:24 +02:00
}
2021-08-23 18:39:04 +02:00
func (c *QueryPeerMsg) ToString() string {
return "QueryPeerMsg Request_ID:" + strconv.Itoa(int(c.Request_ID))
2021-08-20 19:32:50 +02:00
}
2021-08-23 18:39:04 +02:00
func ParseQueryPeerMsg(bin []byte) (StructPlace QueryPeerMsg, err error) {
2021-08-20 19:32:50 +02:00
var b bytes.Buffer
2021-08-21 16:54:24 +02:00
b.Write(bin)
2021-08-20 19:32:50 +02:00
d := gob.NewDecoder(&b)
2021-08-21 16:54:24 +02:00
err = d.Decode(&StructPlace)
return
2021-08-20 19:32:50 +02:00
}
type BoardcastPeerMsg struct {
Request_ID uint32
2021-12-02 18:13:48 +01:00
NodeID Vertex
PubKey [32]byte
2021-08-21 16:54:24 +02:00
ConnURL string
2021-08-20 19:32:50 +02:00
}
2021-08-21 16:54:24 +02:00
func (c *BoardcastPeerMsg) ToString() string {
2021-08-25 10:13:53 +02:00
return "BoardcastPeerMsg Request_ID:" + strconv.Itoa(int(c.Request_ID)) + " NodeID:" + c.NodeID.ToString() + " ConnURL:" + c.ConnURL
2021-08-21 16:54:24 +02:00
}
func ParseBoardcastPeerMsg(bin []byte) (StructPlace BoardcastPeerMsg, err error) {
2021-08-20 19:32:50 +02:00
var b bytes.Buffer
2021-08-21 16:54:24 +02:00
b.Write(bin)
2021-08-20 19:32:50 +02:00
d := gob.NewDecoder(&b)
2021-08-21 16:54:24 +02:00
err = d.Decode(&StructPlace)
return
2021-08-20 19:32:50 +02:00
}
2021-12-02 18:13:48 +01:00
type API_report_peerinfo struct {
Pongs []PongMsg
LocalV4s map[string]float64
LocalV6s map[string]float64
}
func ParseAPI_report_peerinfo(bin []byte) (StructPlace API_report_peerinfo, err error) {
var b bytes.Buffer
b.Write(bin)
d := gob.NewDecoder(&b)
err = d.Decode(&StructPlace)
return
}
type API_report_peerinfo_jwt_claims struct {
PostCount uint64
BodyHash string
jwt.StandardClaims
}
2021-08-20 19:32:50 +02:00
type SUPER_Events struct {
2021-10-27 03:02:44 +02:00
Event_server_pong chan PongMsg
Event_server_register chan RegisterMsg
2021-08-20 19:32:50 +02:00
}