CreateLengthPrefixedMessageFromPayload creates a GrpcLengthPrefixedMessage from raw payload data
(data []byte)
| 767 | |
| 768 | // CreateLengthPrefixedMessageFromPayload creates a GrpcLengthPrefixedMessage from raw payload data |
| 769 | func CreateLengthPrefixedMessageFromPayload(data []byte) models.GrpcLengthPrefixedMessage { |
| 770 | msg := models.GrpcLengthPrefixedMessage{} |
| 771 | |
| 772 | // If the body is not length prefixed, we return the default value. |
| 773 | if len(data) < 5 { |
| 774 | return msg |
| 775 | } |
| 776 | |
| 777 | // The first byte is the compression flag. |
| 778 | msg.CompressionFlag = uint(data[0]) |
| 779 | |
| 780 | // The next 4 bytes are message length. |
| 781 | msg.MessageLength = binary.BigEndian.Uint32(data[1:5]) |
| 782 | |
| 783 | // The payload could be empty. We only parse it if it is present. |
| 784 | if len(data) > 5 { |
| 785 | // Use protoscope to decode the message. |
| 786 | msg.DecodedData = protoscope.Write(data[5:], protoscope.WriterOptions{}) |
| 787 | } |
| 788 | |
| 789 | return msg |
| 790 | } |
| 791 | |
| 792 | // CreatePayloadFromLengthPrefixedMessage converts a GrpcLengthPrefixedMessage to raw payload bytes |
| 793 | func CreatePayloadFromLengthPrefixedMessage(msg models.GrpcLengthPrefixedMessage) ([]byte, error) { |
no test coverage detected