attempting to pass off the socket
This commit is contained in:
parent
c2f796de1e
commit
a024c9ece1
3
Makefile
3
Makefile
|
@ -4,7 +4,8 @@ VERSION = $(shell git describe --tags)
|
|||
BUILDTIME = $(shell date +%Y.%m.%d_%H%M)
|
||||
|
||||
all: proto build
|
||||
./gus --config /etc/gus/gus.text
|
||||
@#./gus --config /etc/gus/gus.text
|
||||
./gus --me
|
||||
|
||||
gocui: build
|
||||
./gus --gui gocui --config /etc/gus/gus.text >/tmp/gocui.log 2>&1
|
||||
|
|
5
argv.go
5
argv.go
|
@ -17,6 +17,7 @@ var argv args
|
|||
type args struct {
|
||||
Verbose bool `arg:"--verbose" help:"talk more"`
|
||||
Daemon bool `arg:"--daemon" default:"false" help:"run in daemon mode"`
|
||||
UseME bool `arg:"--me" help:"use /me to connect"`
|
||||
Port int `arg:"--port" default:"2522" help:"port to run on"`
|
||||
URL string `arg:"--url" help:"url to use"`
|
||||
Config string `arg:"--config" help:"config file (default is ~/.config/cloud/gus.text"`
|
||||
|
@ -28,7 +29,9 @@ func (args) Version() string {
|
|||
|
||||
func (a args) Description() string {
|
||||
return `
|
||||
this daemon talks to zookeeper
|
||||
"Phantastic Gus" your network squirrel
|
||||
|
||||
* Meet [the Phantastic squirrel Gus](https://www.youtube.com/watch?v=hFZFjoX2cGg)
|
||||
`
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
|
||||
// Use of this source code is governed by the GPL 3.0
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"go.wit.com/log"
|
||||
)
|
||||
|
||||
func okExit(note string) {
|
||||
if note != "" {
|
||||
log.Info("gus exit:", note, "ok")
|
||||
}
|
||||
me.myGui.Close()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func badExit(err error) {
|
||||
log.Info("gus failed: ", err)
|
||||
me.myGui.Close()
|
||||
os.Exit(-1)
|
||||
}
|
90
main.go
90
main.go
|
@ -40,6 +40,12 @@ func main() {
|
|||
|
||||
me = new(gusconf)
|
||||
me.pollDelay = 10 * time.Second
|
||||
|
||||
if argv.UseME {
|
||||
connectME()
|
||||
okExit("")
|
||||
}
|
||||
|
||||
me.portmaps = ConfigLoad()
|
||||
me.events = EventLoad()
|
||||
|
||||
|
@ -252,3 +258,87 @@ func ioCopy(clientConn, targetConn net.Conn) {
|
|||
|
||||
wg.Wait() // Wait for both copies to complete
|
||||
}
|
||||
|
||||
func connectME() {
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return
|
||||
}
|
||||
log.Println("Hostname:", hostname)
|
||||
if fqdn, err := getFQDN(hostname); err == nil {
|
||||
hostname = fqdn
|
||||
} else {
|
||||
log.Printf("Your hostname (%s) is not in DNS correctly: %v\n", hostname, err)
|
||||
}
|
||||
|
||||
localport := "25910"
|
||||
// where := "104.48.38.253:25910"
|
||||
where := "104.48.38.253:8081"
|
||||
dest, err := net.Dial("tcp", where)
|
||||
if err != nil {
|
||||
log.Printf("Failed to connect to %s %v\n", where, err)
|
||||
return
|
||||
}
|
||||
defer dest.Close()
|
||||
|
||||
// make a new event from this new connection
|
||||
log.Printf("Connected on port %s from client: %s to where = %s\n", localport, "tbd", where)
|
||||
|
||||
reader := bufio.NewReader(dest)
|
||||
|
||||
// Read one line
|
||||
line, err := reader.ReadString('\n')
|
||||
if err != nil {
|
||||
log.Info("Error reading line:", err)
|
||||
return
|
||||
}
|
||||
log.Info("gus Received:", line)
|
||||
|
||||
fmt.Fprintf(dest, "/me hostname %s\n", hostname)
|
||||
|
||||
// Read one line
|
||||
line, err = reader.ReadString('\n')
|
||||
if err != nil {
|
||||
log.Info("Error reading line:", err)
|
||||
return
|
||||
}
|
||||
log.Info("gus Received:", line)
|
||||
|
||||
// Listen on local port
|
||||
s := fmt.Sprintf("0.0.0.0:%s", localport)
|
||||
listener, err := net.Listen("tcp", s)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to listen on %s: %v", s, err)
|
||||
}
|
||||
defer listener.Close()
|
||||
log.Info("Listening on ", s)
|
||||
log.Printf("Try: remmina -c spice://localhost:%s\n", localport)
|
||||
|
||||
// Accept incoming connection
|
||||
src, err := listener.Accept()
|
||||
if err != nil {
|
||||
log.Printf("Failed to accept client connection: %v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Client connected: %s\n", src.RemoteAddr())
|
||||
ioCopy(src, dest)
|
||||
}
|
||||
|
||||
func getFQDN(hostname string) (string, error) {
|
||||
// Perform a reverse lookup to get the FQDN
|
||||
addrs, err := net.LookupAddr(hostname)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to resolve FQDN: %w", err)
|
||||
}
|
||||
|
||||
// Choose the first valid result
|
||||
for _, addr := range addrs {
|
||||
if strings.HasSuffix(addr, ".") { // FQDNs often end with a dot
|
||||
return strings.TrimSuffix(addr, "."), nil
|
||||
}
|
||||
return addr, nil
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("no FQDN found for hostname: %s", hostname)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue