/ tea2adt_source / mmack.sh
mmack.sh
  1  #!/bin/bash
  2  
  3  # message types
  4  ###############
  5  : '
  6      [init]
  7      [init_ack_chat]
  8      [init_ack_shell]
  9      [init_ack_llm]
 10      [init_ack_file]
 11      [keepalive]
 12      <probe>
 13      <start_msg>
 14      <end_msg>
 15                      <preamble> <seq_tx><seq_rx>[ack]                                       <trailer>
 16                      <preamble> <seq_tx><seq_rx>[data]<input_data>                          <trailer>
 17                      <preamble> <seq_tx><seq_rx>[file_name]<file_name>[file]<file_data>     <trailer>
 18                      <preamble> <seq_tx><seq_rx>[file_name]<file_name>[file_end]<file_data> <trailer>
 19                                 \_______________ _________________________________________/
 20                                                 V
 21                                             encrypted
 22  '
 23  
 24  # configuration
 25  ###############
 26  TMP_PATH=$(head -n 1 cfg/tmp_path)
 27  END_MSG=$(head -n 1 ${HOME}${TMP_PATH}/cfg/end_msg)
 28  START_MSG=$(head -n 1 ${HOME}${TMP_PATH}/cfg/start_msg)
 29  TRAILER=$(head -n 1 ${HOME}${TMP_PATH}/cfg/trailer)
 30  PREAMBLE=$(head -n 1 ${HOME}${TMP_PATH}/cfg/preamble)
 31  CIPHER_ALGO=$(head -n 1 ${HOME}${TMP_PATH}/cfg/cipher_algo)
 32  ARMOR=$(head -n 1 ${HOME}${TMP_PATH}/cfg/armor)
 33  BAUD=$(head -n 1 ${HOME}${TMP_PATH}/cfg/baud)
 34  SYNCBYTE=$(head -n 1 ${HOME}${TMP_PATH}/cfg/syncbyte)
 35  NEED_ACK=$(head -n 1 ${HOME}${TMP_PATH}/cfg/need_ack)
 36  VERBOSE=$(head -n 1 ${HOME}${TMP_PATH}/cfg/verbose)
 37  HALF_DUPLEX=$(head -n 1 ${HOME}${TMP_PATH}/cfg/half_duplex)
 38  MSGFILE="${HOME}${TMP_PATH}/tmp/msgtx.gpg"
 39  TMPFILE="${HOME}${TMP_PATH}/tmp/out.txt"
 40  INVALID_SEQ_NR=200
 41  
 42  # state
 43  #######
 44  SEQ_TX_FILE="${HOME}${TMP_PATH}/state/seq_tx"
 45  SEQ_RX_FILE="${HOME}${TMP_PATH}/state/seq_rx"
 46  SEQ_TX_ACKED_FILE="${HOME}${TMP_PATH}/state/seq_tx_acked"
 47  SEQ_TX=$(head -n 1 ${SEQ_TX_FILE})
 48  SEQ_TX_ACKED=$(head -n 1 ${SEQ_TX_ACKED_FILE})
 49  SEQ_RX_NEW=$(head -n 1 ${SEQ_RX_FILE})            
 50  if [[ ${SEQ_RX_NEW} != ${INVALID_SEQ_NR} ]] ; then
 51      # we don't clean state, that will be done in mmsessionout.sh     
 52      SEQ_RX=${SEQ_RX_NEW}
 53  else
 54      if [ "${VERBOSE}" == true ] ; then
 55          echo "WARNING: mmack.sh called but SEQ_RX = INVALID_SEQ_NR. Defaulting to 0!"
 56      fi
 57      SEQ_RX=0 # default is different to 1 which is the first value to be received
 58  fi
 59  seq_tx=$((SEQ_TX+33))
 60  seq_rx=$((SEQ_RX+33))
 61  seq_tx_ascii=$(printf "\x$(printf %x $seq_tx)") 
 62  seq_rx_ascii=$(printf "\x$(printf %x $seq_rx)") 
 63  
 64  # the first argument is the password
 65  PASSWORD="$1"
 66                                    
 67  # send ACK
 68  ##########
 69  if [ "${NEED_ACK}" == "true" ] ; then
 70      if [[ ${SEQ_RX} != ${INVALID_SEQ_NR} ]] && [[ ${SEQ_RX_NEW} != ${INVALID_SEQ_NR} ]] ; then
 71          # SEQ_RX to be acknowledged in ACK message
 72          # we don't clean state, that will be done in mmsessionout.sh
 73          SEQ_RX=${SEQ_RX_NEW}
 74          seq_rx=$((SEQ_RX+33))
 75          seq_rx_ascii=$(printf "\x$(printf %x $seq_rx)")        
 76          # send ACK without data          
 77          if [[ ${PREAMBLE} == "" && ${TRAILER} == "" ]] ; then
 78              echo "${seq_tx_ascii}${seq_rx_ascii}[ack]" | source gpg.src
 79          else
 80              echo -n ${PREAMBLE} > ${MSGFILE}
 81              echo "${seq_tx_ascii}${seq_rx_ascii}[ack]" | source gpgappend.src
 82              if [ "${TRAILER}" != "" ] ; then
 83                  echo ${TRAILER} >> ${MSGFILE}
 84              fi
 85          fi
 86          if [ "${VERBOSE}" == true ] ; then
 87              echo "> ack[${SEQ_TX},${SEQ_RX}]"
 88          fi
 89          # send start_msg?
 90          if [ "${START_MSG}" != "" ] ; then
 91              echo "${START_MSG}" | source tx.src
 92          fi
 93          # send message with encrypted data
 94          cat ${MSGFILE} | source tx.src
 95          # add end_msg?
 96          if [ "${END_MSG}" != "" ] ; then
 97              echo "${END_MSG}" | source tx.src
 98          fi            
 99      else
100          if [ "${VERBOSE}" == true ] ; then
101              echo "FAILED to send: ack[${SEQ_TX},${SEQ_RX},${SEQ_RX_NEW}]"
102          fi            
103      fi
104  fi