/ 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