aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/lmtp/config.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--forged/internal/lmtp/config.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/forged/internal/lmtp/config.go b/forged/internal/lmtp/config.go
new file mode 100644
index 0000000..ce22740
--- /dev/null
+++ b/forged/internal/lmtp/config.go
@@ -0,0 +1,53 @@
+package lmtp
+
+import (
+ "fmt"
+ "net"
+
+ "go.lindenii.runxiyu.org/forge/forged/internal/misc"
+)
+
+type Pool struct {
+ socket string
+ domain string
+ maxSize int64
+ writeTimeout uint32
+ readTimeout uint32
+}
+
+type Config struct {
+ Socket string `scfg:"socket"`
+ Domain string `scfg:"domain"`
+ MaxSize int64 `scfg:"max_size"`
+ WriteTimeout uint32 `scfg:"write_timeout"`
+ ReadTimeout uint32 `scfg:"read_timeout"`
+}
+
+func New(config Config) (pool Pool) {
+ pool.socket = config.Socket
+ pool.domain = config.Domain
+ pool.maxSize = config.MaxSize
+ pool.writeTimeout = config.WriteTimeout
+ pool.readTimeout = config.ReadTimeout
+ return pool
+}
+
+func (pool *Pool) Run() error {
+ listener, _, err := misc.ListenUnixSocket(pool.socket)
+ if err != nil {
+ return fmt.Errorf("listen unix socket for LMTP: %w", err)
+ }
+
+ for {
+ conn, err := listener.Accept()
+ if err != nil {
+ return fmt.Errorf("accept conn: %w", err)
+ }
+
+ go pool.handleConn(conn)
+ }
+}
+
+func (pool *Pool) handleConn(conn net.Conn) {
+ panic("TODO: handle LMTP connection")
+}