diff options
| author | Jeff Carr <[email protected]> | 2025-03-12 07:54:03 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-03-12 07:54:03 -0500 |
| commit | a024c9ece14d3097b3f72f2dc831444afd695d86 (patch) | |
| tree | 30f7a5ea7c40b81e3c7e57605ff5d0a8e733217f /main.go | |
| parent | c2f796de1e07e59bb379fa4e0a222bc13dcfe571 (diff) | |
attempting to pass off the socket
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 90 |
1 files changed, 90 insertions, 0 deletions
@@ -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) +} |
