From 1bb7549e07d41e88138a32942d193a9d76eea16a Mon Sep 17 00:00:00 2001 From: Remco Date: Thu, 13 Nov 2014 18:04:50 +0100 Subject: [PATCH] added support for tcp and unix sockets --- clamd.go | 28 ++++++++++++++++++++++------ conn.go | 9 +++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/clamd.go b/clamd.go index 0e8c18b..bef89ec 100644 --- a/clamd.go +++ b/clamd.go @@ -28,8 +28,9 @@ package clamd import ( "errors" "fmt" - "log" "io" + "log" + "net/url" "strings" ) @@ -47,13 +48,28 @@ type Stats struct { var EICAR = []byte(`X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*`) -func (c *Clamd) newConnection() (*CLAMDConn, error) { - conn, err := newCLAMDUnixConn(c.address) - return conn, err +func (c *Clamd) newConnection() (conn *CLAMDConn, err error) { + + var u *url.URL + + if u, err = url.Parse(c.address); err != nil { + return + } + + switch u.Scheme { + case "tcp": + conn, err = newCLAMDTcpConn(u.Host) + case "unix": + conn, err = newCLAMDUnixConn(u.Path) + default: + conn, err = newCLAMDUnixConn(c.address) + } + + return } func (c *Clamd) simpleCommand(command string) (chan string, error) { - conn, err := newCLAMDUnixConn(c.address) + conn, err := c.newConnection() if err != nil { return nil, err } @@ -245,7 +261,7 @@ func (c *Clamd) ScanStream(r io.Reader) (chan string, error) { nr, err := r.Read(buf) if nr > 0 { - log.Printf("Error %v, %v, %v", buf[0:nr], nr, err) + log.Printf("Error %v, %v, %v", buf[0:nr], nr, err) conn.sendChunk(buf[0:nr]) } diff --git a/conn.go b/conn.go index b471bb3..df83253 100644 --- a/conn.go +++ b/conn.go @@ -110,6 +110,15 @@ func (c *CLAMDConn) readResponse() (chan string, sync.WaitGroup, error) { return ch, wg, nil } +func newCLAMDTcpConn(address string) (*CLAMDConn, error) { + conn, err := net.Dial("tcp", address) + if err != nil { + return nil, err + } + + return &CLAMDConn{Conn: conn}, err +} + func newCLAMDUnixConn(address string) (*CLAMDConn, error) { conn, err := net.Dial("unix", address) if err != nil {