| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 
							- #!/bin/bash
 
- # function used by fetch-all* to download server descriptors and
 
- # extra info documents
 
- # Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
 
- #
 
- # Permission is hereby granted, free of charge, to any person obtaining a copy
 
- # of this software and associated documentation files (the "Software"), to deal
 
- # in the Software without restriction, including without limitation the rights
 
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
- # copies of the Software, and to permit persons to whom the Software is
 
- # furnished to do so, subject to the following conditions:
 
- #
 
- # The above copyright notice and this permission notice shall be included in
 
- # all copies or substantial portions of the Software.
 
- #
 
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
- # SOFTWARE.
 
- fetch_digest() {
 
- 	local digest
 
- 	local objecttype
 
- 	local urlpart
 
- 	local pathpart
 
- 	local target
 
- 	local targetdir
 
- 	local dirserver
 
- 	local ei
 
- 	digest="$1"
 
- 	objecttype="$2"
 
- 	if [ "$objecttype" = "server-descriptor" ] ; then
 
- 		urlpart="server"
 
- 		pathpart="server-descriptor"
 
- 	elif [ "$objecttype" = "extra-info" ] ; then
 
- 		urlpart="extra"
 
- 		pathpart="extra-info"
 
- 	else
 
- 		echo "Called fetch_digest with illegal objecttype '$objecttype'" >&2
 
- 		exit 1
 
- 	fi
 
- 	target=$( echo $digest | sed -e 's#^\(.\)\(.\)#'"$pathpart"'/\1/\2/\1\2#' )
 
- 	targetdir=$( dirname $target )
 
- 	[ -d "$targetdir" ] || mkdir -p "$targetdir"
 
- 	if ! [ -e "$target" ]; then
 
- 		for dirserver in $DIRSERVERS; do
 
- 			wget -q -O "$target" http://$dirserver/tor/$urlpart/d/"$digest" || rm -f "$target"
 
- 			if [ -s "$target" ]; then
 
- 				if egrep '^opt extra-info-digest ' "$target" > /dev/null; then
 
- 					ei=$( egrep '^opt extra-info-digest ' "$target" | awk '{print $3}' | tr 'A-F' 'a-f' )
 
- 					fetch_digest "$ei" "extra-info"
 
- 				elif egrep '^extra-info-digest ' "$target" > /dev/null; then
 
- 					ei=$( egrep '^extra-info-digest ' "$target" | awk '{print $2}' | tr 'A-F' 'a-f' )
 
- 					fetch_digest "$ei" "extra-info"
 
- 				fi
 
- 				break
 
- 			else
 
- 				rm -f "$target"
 
- 			fi
 
- 		done
 
- 	fi
 
- 	#if ! [ -e "$target" ]; then
 
- 	#	echo "$objecttype $digest" >> failed
 
- 	#fi
 
- }
 
- if [ -x /usr/bin/base64 ] ; then
 
- 	base64-decode() {
 
- 		/usr/bin/base64 -d
 
- 	}
 
- else
 
- 	base64-decode() {
 
- 		perl -MMIME::Base64 -e 'print decode_base64(<>)'
 
- 	}
 
- fi
 
 
  |