50 lines
805 B
Go
50 lines
805 B
Go
package server
|
|
|
|
import (
|
|
"bufio"
|
|
"log"
|
|
"net"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type wrapper struct {
|
|
net.Conn
|
|
r *bufio.Reader
|
|
}
|
|
|
|
func (w *wrapper) cmd(code int64, msgs ...string) error {
|
|
for i, msg := range msgs {
|
|
sep := "-"
|
|
if i == len(msgs)-1 {
|
|
sep = " "
|
|
}
|
|
err := w.send(strconv.FormatInt(code, 10) + sep + msg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (w *wrapper) send(message string) error {
|
|
log.Println("+", message)
|
|
// fuck some MTAs
|
|
_, err := w.Write([]byte(message + "\r\n"))
|
|
return err
|
|
}
|
|
|
|
func (w *wrapper) recv() (string, error) {
|
|
if w.r == nil {
|
|
w.r = bufio.NewReader(w)
|
|
}
|
|
//log.Println("* recv called")
|
|
msg, err := w.r.ReadString('\n')
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
msg = strings.TrimRight(msg, " \t\r\n")
|
|
log.Println("-", msg)
|
|
return msg, nil
|
|
}
|