]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/client_conn.go
Fix io.Reader implementations and wrap more errors
[rbdr/mobius] / hotline / client_conn.go
index f73265d6f7a0f8643384dc53331bc2d1ae0236ff..c886dfcc712e88eed55b99dc3a80c2d22aced448 100644 (file)
@@ -60,7 +60,7 @@ func (cc *ClientConn) handleTransaction(transaction Transaction) error {
                        field := transaction.GetField(reqField.ID)
 
                        // Validate that required field is present
-                       if field.ID == nil {
+                       if field.ID == [2]byte{0, 0} {
                                cc.logger.Error(
                                        "Missing required field",
                                        "RequestType", handler.Name, "FieldID", reqField.ID,
@@ -81,7 +81,7 @@ func (cc *ClientConn) handleTransaction(transaction Transaction) error {
 
                transactions, err := handler.Handler(cc, &transaction)
                if err != nil {
-                       return err
+                       return fmt.Errorf("error handling transaction: %w", err)
                }
                for _, t := range transactions {
                        cc.Server.outbox <- t
@@ -166,8 +166,7 @@ func (cc *ClientConn) notifyOthers(t Transaction) (trans []Transaction) {
 
 // NewReply returns a reply Transaction with fields for the ClientConn
 func (cc *ClientConn) NewReply(t *Transaction, fields ...Field) Transaction {
-       reply := Transaction{
-               Flags:     0x00,
+       return Transaction{
                IsReply:   0x01,
                Type:      []byte{0x00, 0x00},
                ID:        t.ID,
@@ -175,15 +174,12 @@ func (cc *ClientConn) NewReply(t *Transaction, fields ...Field) Transaction {
                ErrorCode: []byte{0, 0, 0, 0},
                Fields:    fields,
        }
-
-       return reply
 }
 
 // NewErrReply returns an error reply Transaction with errMsg
 func (cc *ClientConn) NewErrReply(t *Transaction, errMsg string) Transaction {
        return Transaction{
                clientID:  cc.ID,
-               Flags:     0x00,
                IsReply:   0x01,
                Type:      []byte{0, 0},
                ID:        t.ID,