117 lines
2.0 KiB
Go
117 lines
2.0 KiB
Go
package comms
|
|
|
|
import (
|
|
"encoding/gob"
|
|
"os"
|
|
"os/user"
|
|
"runtime"
|
|
"time"
|
|
)
|
|
|
|
const PROTOCOL_VERSION = 2
|
|
|
|
func init() {
|
|
RegisterEventsWithGob()
|
|
}
|
|
|
|
// Agent to server events
|
|
|
|
type AgentInfo struct {
|
|
Username string
|
|
Hostname string
|
|
Pwd string
|
|
OS string
|
|
Shell string
|
|
}
|
|
|
|
type ClientInfo struct {
|
|
ClientId string
|
|
}
|
|
|
|
type SessionInfo struct {
|
|
ClientId string
|
|
|
|
// "ssh", "sftp"
|
|
SessionType string
|
|
}
|
|
|
|
type ExpiryTimeUpdate struct {
|
|
ExpiryTime time.Time
|
|
}
|
|
|
|
type HeartBeat struct {
|
|
// Empty
|
|
}
|
|
|
|
type ProtocolVersion struct {
|
|
Version int
|
|
}
|
|
|
|
// initialization mesaage when agent connects to server
|
|
|
|
type ServerInfo struct {
|
|
}
|
|
|
|
// confirmation message when agent connects
|
|
type AgentRegistration struct {
|
|
Ok bool
|
|
Message string
|
|
// final Id assigned by the server. Usually identical to the requested id
|
|
// but if there is a conflict, a new id is chosen.
|
|
Id string
|
|
}
|
|
|
|
// Generic wrapper message required to send messages of arbitrary type
|
|
|
|
type ConvergeMessage struct {
|
|
Value interface{}
|
|
}
|
|
|
|
func NewAgentInfo(shell string) AgentInfo {
|
|
username, _ := user.Current()
|
|
host, _ := os.Hostname()
|
|
pwd, _ := os.Getwd()
|
|
return AgentInfo{
|
|
Username: username.Username,
|
|
Hostname: host,
|
|
Pwd: pwd,
|
|
OS: runtime.GOOS,
|
|
Shell: shell,
|
|
}
|
|
}
|
|
|
|
func NewSessionInfo(clientId, sessionType string) SessionInfo {
|
|
return SessionInfo{
|
|
ClientId: clientId,
|
|
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 and client
|
|
gob.Register(ProtocolVersion{})
|
|
|
|
// ConvergeServer to Client
|
|
gob.Register(ClientConnectionInfo{})
|
|
|
|
// Wrapper event.
|
|
gob.Register(ConvergeMessage{})
|
|
}
|
|
|
|
// Server to client events
|
|
|
|
type ClientConnectionInfo struct {
|
|
Ok bool
|
|
Message string
|
|
}
|