Simple accept/listen loop for the SMTP server.
authorRobert Sesek <rsesek@bluestatic.org>
Mon, 12 Dec 2016 04:35:56 +0000 (23:35 -0500)
committerRobert Sesek <rsesek@bluestatic.org>
Mon, 12 Dec 2016 04:35:58 +0000 (23:35 -0500)
mailpopbox.go
smtp.go [new file with mode: 0644]
smtp/conn.go [new file with mode: 0644]
smtp/server.go [new file with mode: 0644]

index 984acb3366469a1b7425a5923fd2313c48989de6..2765ce99290e80c8534359f56b5ab8d99d0adcd5 100644 (file)
@@ -24,4 +24,8 @@ func main() {
                os.Exit(3)
        }
        configFile.Close()
+
+       smtp := runSMTPServer(config)
+       err = <-smtp
+       fmt.Println(err)
 }
diff --git a/smtp.go b/smtp.go
new file mode 100644 (file)
index 0000000..b7131d5
--- /dev/null
+++ b/smtp.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+       "fmt"
+       "net"
+
+       "src.bluestatic.org/mailpopbox/smtp"
+)
+
+func runSMTPServer(config Config) <-chan error {
+       server := smtpServer{
+               config: config,
+               rc:     make(chan error),
+       }
+       go server.run()
+       return server.rc
+}
+
+type smtpServer struct {
+       config Config
+       rc     chan error
+}
+
+func (server *smtpServer) run() {
+       l, err := net.Listen("tcp", fmt.Sprintf(":%d", server.config.SMTPPort))
+       if err != nil {
+               server.rc <- err
+               return
+       }
+
+       for {
+               conn, err := l.Accept()
+               if err != nil {
+                       server.rc <- err
+                       return
+               }
+
+               go smtp.AcceptConnection(conn, server)
+       }
+}
+
+func (server *smtpServer) OnEHLO() error {
+       return nil
+}
+
+func (server *smtpServer) OnMessageDelivered() error {
+       return nil
+}
diff --git a/smtp/conn.go b/smtp/conn.go
new file mode 100644 (file)
index 0000000..e4734ae
--- /dev/null
@@ -0,0 +1,11 @@
+package smtp
+
+import (
+       "io"
+       "net"
+)
+
+func AcceptConnection(conn net.Conn, server Server) error {
+       conn.Close()
+       return nil
+}
diff --git a/smtp/server.go b/smtp/server.go
new file mode 100644 (file)
index 0000000..e9539e8
--- /dev/null
@@ -0,0 +1,6 @@
+package smtp
+
+type Server interface {
+       OnEHLO() error
+       OnMessageDelivered() error
+}