Heartbeat mechanism from client to server over the custom connection for sending events to guarantee that the connectoin stays up.
79 lines
1.3 KiB
Go
79 lines
1.3 KiB
Go
package comms
|
|
|
|
import (
|
|
"encoding/gob"
|
|
"os"
|
|
"os/user"
|
|
"runtime"
|
|
"time"
|
|
)
|
|
|
|
// Client to server events
|
|
|
|
type AgentInfo struct {
|
|
Username string
|
|
Hostname string
|
|
Pwd string
|
|
OS string
|
|
}
|
|
|
|
type SessionInfo struct {
|
|
// "ssh", "sftp"
|
|
SessionType string
|
|
}
|
|
|
|
type ExpiryTimeUpdate struct {
|
|
ExpiryTime time.Time
|
|
}
|
|
|
|
type HeartBeat struct {
|
|
// Empty
|
|
}
|
|
|
|
// Message sent from converge server to agent
|
|
|
|
type UserPassword struct {
|
|
Username string
|
|
Password string
|
|
}
|
|
|
|
// Generic wrapper message required to send messages of arbitrary type
|
|
|
|
type ConvergeMessage struct {
|
|
Value interface{}
|
|
}
|
|
|
|
func NewAgentInfo() AgentInfo {
|
|
username, _ := user.Current()
|
|
host, _ := os.Hostname()
|
|
pwd, _ := os.Getwd()
|
|
return AgentInfo{
|
|
Username: username.Username,
|
|
Hostname: host,
|
|
Pwd: pwd,
|
|
OS: runtime.GOOS,
|
|
}
|
|
}
|
|
|
|
func NewSessionInfo(sessionType string) SessionInfo {
|
|
return SessionInfo{SessionType: sessionType}
|
|
}
|
|
|
|
func NewExpiryTimeUpdate(expiryTime time.Time) ExpiryTimeUpdate {
|
|
return ExpiryTimeUpdate{ExpiryTime: expiryTime}
|
|
}
|
|
|
|
func RegisterEventsWithGob() {
|
|
// Agent to ConvergeServer
|
|
gob.Register(AgentInfo{})
|
|
gob.Register(SessionInfo{})
|
|
gob.Register(ExpiryTimeUpdate{})
|
|
gob.Register(HeartBeat{})
|
|
|
|
// ConvergeServer to Agent
|
|
gob.Register(UserPassword{})
|
|
|
|
// Wrapper event.
|
|
gob.Register(ConvergeMessage{})
|
|
}
|