monologued.go/main.go

78 lines
1.4 KiB
Go

package main
import (
"fmt"
"net"
"time"
"bufio"
"strconv"
"monologued/rfc1288"
"monologued/dotplan"
)
const PORT = 2003
func main() {
server, err := net.Listen("tcp", ":" + strconv.Itoa(PORT))
if server == nil {
if (err != nil) {
panic("couldn't start listening: " + err.Error())
}
panic("Couldn't start listening. Error undefined")
}
for {
client, err := server.Accept()
if client == nil {
fmt.Printf("Connection request failed: %s\n", err.Error())
continue
}
go Response(client)
}
}
func Response(socket net.Conn) {
defer func() {
socket.Close()
}()
timeout := time.Second * 15
socket.SetDeadline(time.Now().Add(timeout))
buffer := bufio.NewReader(socket)
line, _, err := buffer.ReadLine()
if err != nil {
socket.Write([]byte("400 Bad Request\r\n\r\n"))
return
}
err, Request := rfc1288.ParseRfc1288Request(string(line))
if err != nil {
socket.Write([]byte("400 Bad Request\r\n\r\n"))
return
}
if Request.Type == rfc1288.Remote {
socket.Write([]byte("403 Forbidden - This server does not support remote requests\r\n\r\n"))
return
}
if Request.Type == rfc1288.UserList {
socket.Write([]byte("403 Forbidden - This server does not support user lists\r\n\r\n"))
return
}
err, Data := dotplan.GetUserplan(Request.User)
if err != nil {
socket.Write([]byte(fmt.Sprintf("404 Not Found - No information for user '%s' found\r\n\r\n", *Request.User)))
return
}
socket.Write(*Data)
}