construct scp command to be executed on the server via ssh. append -v -r -p -d flags as appropriate. Resulting command stored in cmd variable
call toremote() if destination is remote; tolocal() if destination is local (handles 'remote to local' and 'local to local' cases)
for 'remote to local' case, append '-f <src>' to scp command to be run on the server
call do_cmd() to run assembled scp command on the server
do_cmd() forks a child which executes (via execvp()) “ssh -p <port> -l <remuser> — <host> <cmd>” scp command on the server. Connect parent and child via pipes. Parent accesses child's pipes via remin & remout. do_cmd_pid contains child's PID.
tolocal()→sink() receives file from child via remin & remout and stores it to the local destination
finaly wait for child to finish, check for errors, close remin & remout and exit