#!/bin/bash

# writed by Pascal Pucci - www.pascalou.org - Mars 2011 - pascal.pucci@pascalou.org

usage() {

    echo 
    echo " Usage :"
    echo 
    echo "-f	file to send"
    echo "-h	host to send file"
    echo "-d	destination path"
    echo "-c	compresser to use : lzma, lzop, gzip, bzip2 (default gzip)"
    echo "-m	md5sum check : 'yes' to enable"
    echo "-u	user for ssh client server"
    echo "-p	port to use for ssh server"
    echo "-l	compression level -1..-9 (default -9)"
    echo 
    echo " ex : $0 -h 192.168.5.3 -f /tmp/file -c lzma -u root -d /tmp/ -m yes"
    echo 
    exit 1
}
    echo 

compresser=
server=
port=
check=
level=
file=
path=
while getopts ":m:c:h:p:u:d:f:l:" opt; do
  case $opt in
    m)
      [ $OPTARG = 'yes' ] && check=1
    ;;
    f)
      file=$OPTARG
    ;;
    c)
      compresser=$OPTARG
    ;;
    u)
      user=$OPTARG
    ;;
    h)
      server=$OPTARG
    ;;
    d)
      path=$OPTARG
    ;;
    p)
      port=$OPTARG
    ;;
    l)
      level=$OPTARG
    ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      usage
    ;;
    esac
done

md5sum=md5sum
[ -z $compresser ] && compresser=gzip
[ $compresser != 'lzop' -a $compresser != 'gzip' -a $compresser != 'bzip2' -a $compresser != 'lzma' ] && echo "compressor not supported" && usage
[ ! -z $port ] && [ $port -gt 0 ] && portcmd="-p $port"
[ -z $server ] && echo "Server missing : use -h server" && usage
[ -z $file ] && echo "File to transfert missing : use -f file" && usage
[ ! -f $file ] && echo "File $file not correct" && usage
[ ! -z $user ] && namecmd="$user@"
servercmd="$namecmd$server"
[ -z $level ] && level="-9"
ssh="ssh -x -c arcfour"
[ ! -z $path ] && path="$path/"
type $compresser > /dev/null 2>&1 || echo "Compresser $compresser not present" 
type $compresser > /dev/null 2>&1 || usage 255

echo "BEGIN transfert : `du -sh $file` : `date`"

case $compresser in
  lzop)
	  cat $file | lzop $level | $ssh -o "Compression no" -o "CheckHostIP no" -o "StrictHostKeyChecking no" $portcmd $servercmd "lzop -d > $path${file##*/}"
    res=$?
  ;;

  gzip)
	  cat $file | gzip $level | $ssh -o "Compression no" -o "CheckHostIP no" -o "StrictHostKeyChecking no" $portcmd $servercmd "gunzip > $path${file##*/}"
    res=$?
  ;;

  bzip2)
	  cat $file | bzip2 $level | $ssh -o "Compression no" -o "CheckHostIP no" -o "StrictHostKeyChecking no" $portcmd $servercmd "bunzip2 > $path${file##*/}"
    res=$?
  ;;

  lzma)
	  cat $file | lzma $level | $ssh -o "Compression no" -o "CheckHostIP no" -o "StrictHostKeyChecking no" $portcmd $servercmd "lzma -d > $path${file##*/}"
    res=$?
  ;;
esac

echo "END transfert  : `du -sh $file` : `date`"

if [ $check = 1 ]; then
  type $md5sum > /dev/null 2>&1 || echo "md5sum not present"
  type $md5sum > /dev/null 2>&1 || usage 255
  localmd5=$($md5sum $file |tr " " "\n" |head -1)
  distantmd5=$($ssh -o "Compression no" -o "CheckHostIP no" -o "StrictHostKeyChecking no" $portcmd $servercmd "$md5sum $path${file##*/} |tr ' ' '\n' |head -1")
  [ $distantmd5 != $localmd5 ] && echo "Transfert failed !" && exit || echo "Tranfert check : OK"
fi

[ $res = 0 ] && echo "Transfert ended with success."  || echo "Something failed, please check !" 
echo

exit 0

# writed by Pascal Pucci - www.pascalou.org - Mars 2011 - pascal.pucci@pascalou.org

