From f4113a5dfa178f1fe86c04b2f196842c83e2bffe Mon Sep 17 00:00:00 2001 From: cyBerta Date: Thu, 23 Jun 2022 00:40:11 +0200 Subject: implement simple event logging interface --- client/client.go | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) (limited to 'client') diff --git a/client/client.go b/client/client.go index 9263aac..d4a7976 100644 --- a/client/client.go +++ b/client/client.go @@ -20,11 +20,17 @@ var ( ) type Client struct { - kcp bool - socksAddr string - obfs4Cert string - server *socks5.Server - started bool + kcp bool + socksAddr string + obfs4Cert string + server *socks5.Server + started bool + EventLogger EventLogger +} + +type EventLogger interface { + Log(state string, message string) + Error(message string) } func NewClient(kcp bool, socksAddr, obfs4Cert string) *Client { @@ -36,6 +42,9 @@ func NewClient(kcp bool, socksAddr, obfs4Cert string) *Client { } func (c *Client) Start() (bool, error) { + defer func() { + c.log("STOPPED", "", nil) + } if c.started { log.Printf("Cannot start proxy server, already running") @@ -49,22 +58,22 @@ func (c *Client) Start() (bool, error) { dialer, err := obfsvpn.NewDialerFromCert(c.obfs4Cert) if err != nil { - log.Printf("Error getting dialer: %v\n", err) + c.error("Error getting dialer: %v\n", err) return false, err } if c.kcp { dialer.DialFunc = func(network, address string) (net.Conn, error) { - log.Printf("Dialing kcp://%s\n", address) + c.log("RUNNING", "Dialing kcp://%s\n", address) return kcp.Dial(address) } } c.server.Dial = dialer.Dial - fmt.Printf("[+] Starting socks5 proxy at %s\n", c.socksAddr) + c.log("RUNNING", "[+] Starting socks5 proxy at %s\n", c.socksAddr) if err := c.server.ListenAndServe(); err != nil { - log.Printf("error while listening: %v\n", err) + c.error("error while listening: %v\n", err) c.server = nil return false, err } @@ -79,7 +88,7 @@ func (c *Client) Stop() (bool, error) { } if err := c.server.Close(); err != nil { - log.Printf("error while stopping: %v\n", err) + c.error("error while stopping: %v\n", err) return false, err } @@ -88,14 +97,19 @@ func (c *Client) Stop() (bool, error) { return true, nil } -func (c *Client) Status() string { - c.mu.Lock() - defer c.mu.Unlock() +func (c *Client) log(state string, format string, a ...interface{}) { + if c.EventLogger != nil { + c.EventLogger.Log(state, fmt.Sprintf(format, a...)) + return + } + log.Printf(format, a...) + +} - switch c.started { - case true: - return "running" - default: - return "stopped" +func (c *Client) error(format string, a ...interface{}) { + if c.EventLogger != nil { + c.EventLogger.Error(fmt.Sprintf(format, a...)) + return } + log.Printf(format, a...) } -- cgit v1.2.3