diff --git a/main.go b/main.go index 100c1b7..fd422d3 100644 --- a/main.go +++ b/main.go @@ -15,15 +15,13 @@ func FileUploadRoute(req *server.Request) *server.Response { log.Println("[MAIN] File Upload request:", req) bytes, err := req.ExtractBytes() if err != nil { - log.Fatalln("Failed to extract bytes from payload:", err) - return server.NewStatusResponse(server.STATUS_INTERNALERR) + return server.NewErrorResponse(err) } filename := "received.bin" err = os.WriteFile(filename, bytes, 0644) if err != nil { - log.Fatalln("Failed to write packet payload into a file:", err) - return server.NewStatusResponse(server.STATUS_INTERNALERR) + return server.NewErrorResponse(err) } log.Println("Received new request from client:", req.Conn().RemoteAddr().String()) diff --git a/server/response.go b/server/response.go index 6f932a1..e58f21b 100644 --- a/server/response.go +++ b/server/response.go @@ -57,6 +57,18 @@ func NewJsonResponse(data map[string]string) (*Response, error) { }, nil } +func NewErrorResponse(err error) *Response { + return &Response{ + StatusCode: STATUS_INTERNALERR, + Format: DataFormat{ + Format: DF_TEXT, + Encoding: E_UTF8, + }, + Headers: map[string]string{}, + Payload: []byte(err.Error()), + } +} + func (res *Response) ToPacket() *Packet { headers := make(map[string]string) diff --git a/server/router.go b/server/router.go index 1ba68fc..8cd71d9 100644 --- a/server/router.go +++ b/server/router.go @@ -35,6 +35,7 @@ func (r *Router) Handle(conn net.Conn) error { // TODO: Ability to keep connection alive packet, err := dupl.ReadPacket() if err != nil { + dupl.WritePacket(NewErrorResponse(err).ToPacket()) return err } @@ -49,4 +50,3 @@ func (r *Router) Handle(conn net.Conn) error { } return errors.New("Not Found") } -