diff --git a/hsp-go b/hsp-go deleted file mode 100755 index 2f47dec..0000000 Binary files a/hsp-go and /dev/null differ diff --git a/hsp/response.go b/hsp/response.go index 7bca506..ffd82b6 100644 --- a/hsp/response.go +++ b/hsp/response.go @@ -12,9 +12,9 @@ import ( type Response struct { StatusCode int - Format DataFormat - Headers map[string]string - Payload []byte + Format DataFormat + Headers map[string]string + Payload []byte } func NewPacketResponse(packet *Packet) *Response { @@ -49,9 +49,9 @@ func NewPacketResponse(packet *Packet) *Response { func NewStatusResponse(status int) *Response { return &Response{ StatusCode: status, - Headers: make(map[string]string), + Headers: make(map[string]string), Format: DataFormat{ - Format: DF_BYTES, + Format: DF_BYTES, Encoding: "", }, Payload: make([]byte, 0), @@ -61,9 +61,9 @@ func NewStatusResponse(status int) *Response { func NewTextResponse(text string) *Response { return &Response{ StatusCode: STATUS_SUCCESS, - Headers: make(map[string]string), + Headers: make(map[string]string), Format: DataFormat{ - Format: DF_TEXT, + Format: DF_TEXT, Encoding: E_UTF8, }, Payload: []byte(text), @@ -78,21 +78,37 @@ func NewJsonResponse(data map[string]string) (*Response, error) { return &Response{ StatusCode: STATUS_SUCCESS, - Headers: make(map[string]string), + Headers: make(map[string]string), Format: DataFormat{ - Format: DF_JSON, + Format: DF_JSON, Encoding: E_UTF8, }, Payload: jsonBytes, }, 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) maps.Copy(headers, res.Headers) - headers[H_DATA_FORMAT] = fmt.Sprintf("%s:%s", res.Format.Format, res.Format.Encoding) + if res.Format.Format == DF_BYTES { + headers[H_DATA_FORMAT] = DF_BYTES + } else { + headers[H_DATA_FORMAT] = fmt.Sprintf("%s:%s", res.Format.Format, res.Format.Encoding) + } headers[H_STATUS] = strconv.Itoa(res.StatusCode) return BuildPacket(headers, res.Payload) @@ -117,4 +133,3 @@ func (res *Response) Write(p []byte) (int, error) { return n, err } - diff --git a/hsp/server/router.go b/hsp/server/router.go index 35989f6..0d9c002 100644 --- a/hsp/server/router.go +++ b/hsp/server/router.go @@ -37,6 +37,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 } @@ -51,4 +52,3 @@ func (r *Router) Handle(conn net.Conn) error { } return errors.New("Not Found") } - diff --git a/received.bin b/received.bin deleted file mode 100644 index d7a7acf..0000000 --- a/received.bin +++ /dev/null @@ -1,2 +0,0 @@ -Hello, everyone! -I'm a txt file