qbeon/webwire-go

View on GitHub
message/writeMsgSpecialRequestReply.go

Summary

Maintainability
A
45 mins
Test Coverage
package message

import (
    "fmt"
    "io"
)

// WriteMsgSpecialRequestReply writes a special request reply message to the
// given writer closing it eventually
func WriteMsgSpecialRequestReply(
    writer io.WriteCloser,
    reqType byte,
    reqIdent []byte,
) error {
    msgType := msgTypeReplyInternalError
    switch reqType {
    case MsgReplyInternalError:
    case MsgReplyMaxSessConnsReached:
        msgType = msgTypeReplyMaxSessConnsReached
    case MsgReplySessionNotFound:
        msgType = msgTypeReplySessionNotFound
    case MsgReplySessionsDisabled:
        msgType = msgTypeSessionsDisabled
    case MsgReplyShutdown:
        msgType = msgTypeReplyShutdown
    default:
        initialErr := fmt.Errorf(
            "message type (%d) doesn't represent a special reply message",
            reqType,
        )
        if err := writer.Close(); err != nil {
            return fmt.Errorf("%s: %s", initialErr, err)
        }
        return initialErr
    }

    // Write message type flag
    if _, err := writer.Write(msgType); err != nil {
        if closeErr := writer.Close(); closeErr != nil {
            return fmt.Errorf("%s: %s", err, closeErr)
        }
        return err
    }

    // Write request identifier
    if _, err := writer.Write(reqIdent); err != nil {
        if closeErr := writer.Close(); closeErr != nil {
            return fmt.Errorf("%s: %s", err, closeErr)
        }
        return err
    }

    return writer.Close()
}