#!/usr/bin/env bash
#
# `xxd` utility included into vim-common package
# It allow hex decoding/encoding
# 
# This example may broke if you request contains `null` string, you may consider using pipes instead.
# See: https://github.com/buger/gor/issues/309
# 

function log {
    if [[ -n "$GOR_TEST" ]]; then # if we are not testing
    # Logging to stderr, because stdout/stdin used for data transfer
    >&2 echo "[DEBUG][ECHO] $1"
    fi
}

while read line; do
    decoded=$(echo -e "$line" | xxd -r -p)

    header=$(echo -e "$decoded" | head -n +1)
    payload=$(echo -e "$decoded" | tail -n +2)

    encoded=$(echo -e "$header\n$payload" | xxd -p | tr -d "\\n")

    log ""
    log "==================================="

    case ${header:0:1} in
    "1")
        log "Request type: Request"
        ;;
    "2")
        log "Request type: Original Response"
        ;;
    "3")
        log "Request type: Replayed Response"
        ;;
    *)
        log "Unknown request type $header"
    esac
    echo "$encoded"

    log "==================================="

    log "Original data: $line"
    log "Decoded request: $decoded"
    log "Encoded data: $encoded"
done;
