shithub: riscv

ref: ffb120199a951396f7e99aeca453715dc4e65601
dir: /rc/bin/hget/

View raw version
#!/bin/rc
rfork e
argv0=$0
fn usage {
	echo usage: $argv0 '[ -v ] [ -l | -o file] [ -p body | -P ] [ -r header ] [ -m method ] [ -b baseurl ] url' >[1=2]
	exit usage
}
s=0
o=()
p=()
P=()
r=()
m=()
b=()
l=()
v=()
while(~ $1 -*){
	switch($1){
	case -o
		o=$2
		shift
	case -p
		p=$2
		shift
	case -P
		P=1
	case -r
		r=($r $2)
		shift
	case -l
		l=1
	case -m
		m=$2
		shift
	case -b
		b=$2
		shift
	case -v
		v=1
	case *
		usage
	}
	shift
}
if(! ~ $#* 1)
	usage
if(! ~ $#o 0){
	if(! ~ $#o 1)
		usage
	if(test -s $o)
		s=`{ls -l $o | awk '{print $6}'}
}
if(! ~ $s 0)
	r=($r 'Range: bytes='^$s^'-')
<[3=0] <>/mnt/web/clone {
	d=/mnt/web/^`{sed 1q}
	if(~ $#b 1)
		echo -n baseurl $b >[1=0]
	echo -n url $1 >[1=0]
	for(i in $r)
		echo -n headers $i >[1=0]
	if(~ $#m 1)
		echo -n request $m >[1=0]
	if(! ~ $#p 0 || ! ~ $#P 0){
		 >$d/postbody {
			if(! ~ $#p 0)
				echo -n $"p
			if(! ~ $#P 0)
				cat <[0=3]
		}
	}
	<$d/body {
		if(~ $#l 1){
			echo `{cat $d/parsed/url}
			exit
		}
		if(~ $#v 1){
			hpid=$pid
			@{
				while(ls /proc | grep -s $hpid) {
					have=`{grep '^  0' /proc/$hpid/fd | awk '{ print $9 }' }
					want=`{cat $d/contentlength}
					echo $have $want >[1=2]
					sleep 1
				}
			} &
		}
		if(~ $#o 1){
			l=`{cat $d/contentlength >[2]/dev/null}
			x=`{awk 'BEGIN{FS=" |-"}/^bytes ([0-9]+)\-/{print $2}' \
				$d/contentrange >[2]/dev/null}
			if(~ $s $l && ~ $#x 0)
				exit
			if(~ $s $x)
				exec cat >>$o
			exec cat >$o
		}
		c=`{cat $d/contentencoding >[2]/dev/null}
		switch($c){
		case *gzip*
			exec gunzip
		case *bzip2*
			exec bunzip2
		case *compress*
			exec uncompress
		}
		exec cat
	}
}