1if [ ! "$_MEDIA_HTTPPROXY_SUBR" ]; then _MEDIA_HTTPPROXY_SUBR=1
2#
3# Copyright (c) 2012-2013 Devin Teske
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
--- 10 unchanged lines hidden (view full) ---
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: head/usr.sbin/bsdconfig/share/media/httpproxy.subr 253333 2013-07-14 03:08:52Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." media/httpproxy.subr
34f_include $BSDCFG_SHARE/dialog.subr
35f_include $BSDCFG_SHARE/media/ftp.subr
--- 288 unchanged lines hidden (view full) ---
324
325 unset $VAR_HTTP_PROXY_PATH
326 f_media_set_http_proxy || break
327 done
328
329 return $http_found
330}
331
332# f_media_get_http_proxy $device $file [$probe_type]
333#
334# Returns data from $file on an FTP server via HTTP proxy using nc(1). Please
335# note that $device is unused but must be present (even if null). Information
336# is instead gathered from the environment. If $probe_type is both present and
337# non-NULL, this function exits after receiving the HTTP header response from
338# the proxy server (if the HTTP response code is 200, success is returned;
339# otherwise failure). If $probe_type is equal to $PROBE_SIZE, prints the
340# content-length in bytes from the response (or -1 if not found) to standard-
341# out.
342#
343# The variables used to configure the connection are as follows (all of which
344# are configured by f_media_set_http_proxy above):
345#
346# VAR_HTTP_PROXY_HOST
347# HTTP proxy host to connect. Can be an IPv4 address, IPv6
348# address, or DNS hostname of your choice.
349# VAR_HTTP_PROXY_PORT
--- 5 unchanged lines hidden (view full) ---
355# See variable.subr for additional information.
356#
357# Example usage:
358# f_media_set_http_proxy
359# f_media_get_http_proxy media $file
360#
361f_media_get_http_proxy()
362{
363 local dev="$1" file="$2" probe_type="$3" hosts=
364
365 f_dprintf "f_media_get_http_proxy: dev=[%s] file=[%s] probe_type=%s" \
366 "$dev" "$file" "$probe_type"
367
368 local proxy_host proxy_port
369 f_getvar $VAR_HTTP_PROXY_HOST proxy_host
370 f_getvar $VAR_HTTP_PROXY_PORT proxy_port
371
372 if ! {
373 f_validate_ipaddr "$proxy_host" ||
374 f_validate_ipaddr6 "$proxy_host" ||
--- 30 unchanged lines hidden (view full) ---
405 f_dprintf "sending http request for: %s" "$url"
406 printf "GET %s HTTP/1.0\r\n\r\n" "$url" | nc -n "$host" "$proxy_port" |
407 (
408 #
409 # scan the headers of the response
410 # this is extremely quick'n dirty
411 #
412
413 rv=0 length=-1
414 while read LINE; do
415 case "$LINE" in
416 HTTP*)
417 f_dprintf "received response: %s" "$LINE"
418 set -- $LINE; rv=$2
419 f_isinteger "$rv" || rv=0
420 ;;
421 "Content-Length: "*)
422 length="${LINE%
423}"
424 length="${length#Content-Length: }"
425 f_dprintf "received content-length: %s" \
426 "$length"
427 ;;
428 *)
429 [ "${LINE%
430}" ] || break # End of headers
431 esac
432 done
433
434 [ $rv -ge 500 ] && exit 5
435 [ $rv -eq 404 ] && exit 44
436 [ $rv -ge 400 ] && exit 4
437 [ $rv -ge 300 ] && exit 3
438 [ $rv -eq 200 ] || exit $FAILURE
439
440 if [ ! "$probe_type" ]; then
441 cat # output the rest ``as-is''
442 elif [ "$probe_type" = "$PROBE_SIZE" ]; then
443 f_isinteger "$length" || length=-1
444 echo "$length"
445 fi
446 exit 200
447 )
448 local retval=$?
449 [ $retval -eq 200 ] && return $SUCCESS
450 [ "$probe_type" ] && return $FAILURE
451
452 case "$retval" in
453 5) f_show_msg "$msg_server_error_when_requesting_url" "$url" ;;
454 44) f_show_msg "$msg_url_was_not_found" "$url" ;;
455 4) f_show_msg "$msg_client_error" ;;
456 *) f_show_msg "$msg_error_when_requesting_url" "$url" ;;
457 esac
458 return $FAILURE
459}
460
461############################################################ MAIN
462
463f_dprintf "%s: Successfully loaded." media/httpproxy.subr
464
465fi # ! $_MEDIA_HTTPPROXY_SUBR
2#
3# Copyright (c) 2012-2013 Devin Teske
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
--- 10 unchanged lines hidden (view full) ---
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: head/usr.sbin/bsdconfig/share/media/httpproxy.subr 253333 2013-07-14 03:08:52Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." media/httpproxy.subr
34f_include $BSDCFG_SHARE/dialog.subr
35f_include $BSDCFG_SHARE/media/ftp.subr
--- 288 unchanged lines hidden (view full) ---
324
325 unset $VAR_HTTP_PROXY_PATH
326 f_media_set_http_proxy || break
327 done
328
329 return $http_found
330}
331
332# f_media_get_http_proxy $device $file [$probe_type]
333#
334# Returns data from $file on an FTP server via HTTP proxy using nc(1). Please
335# note that $device is unused but must be present (even if null). Information
336# is instead gathered from the environment. If $probe_type is both present and
337# non-NULL, this function exits after receiving the HTTP header response from
338# the proxy server (if the HTTP response code is 200, success is returned;
339# otherwise failure). If $probe_type is equal to $PROBE_SIZE, prints the
340# content-length in bytes from the response (or -1 if not found) to standard-
341# out.
342#
343# The variables used to configure the connection are as follows (all of which
344# are configured by f_media_set_http_proxy above):
345#
346# VAR_HTTP_PROXY_HOST
347# HTTP proxy host to connect. Can be an IPv4 address, IPv6
348# address, or DNS hostname of your choice.
349# VAR_HTTP_PROXY_PORT
--- 5 unchanged lines hidden (view full) ---
355# See variable.subr for additional information.
356#
357# Example usage:
358# f_media_set_http_proxy
359# f_media_get_http_proxy media $file
360#
361f_media_get_http_proxy()
362{
363 local dev="$1" file="$2" probe_type="$3" hosts=
364
365 f_dprintf "f_media_get_http_proxy: dev=[%s] file=[%s] probe_type=%s" \
366 "$dev" "$file" "$probe_type"
367
368 local proxy_host proxy_port
369 f_getvar $VAR_HTTP_PROXY_HOST proxy_host
370 f_getvar $VAR_HTTP_PROXY_PORT proxy_port
371
372 if ! {
373 f_validate_ipaddr "$proxy_host" ||
374 f_validate_ipaddr6 "$proxy_host" ||
--- 30 unchanged lines hidden (view full) ---
405 f_dprintf "sending http request for: %s" "$url"
406 printf "GET %s HTTP/1.0\r\n\r\n" "$url" | nc -n "$host" "$proxy_port" |
407 (
408 #
409 # scan the headers of the response
410 # this is extremely quick'n dirty
411 #
412
413 rv=0 length=-1
414 while read LINE; do
415 case "$LINE" in
416 HTTP*)
417 f_dprintf "received response: %s" "$LINE"
418 set -- $LINE; rv=$2
419 f_isinteger "$rv" || rv=0
420 ;;
421 "Content-Length: "*)
422 length="${LINE%
423}"
424 length="${length#Content-Length: }"
425 f_dprintf "received content-length: %s" \
426 "$length"
427 ;;
428 *)
429 [ "${LINE%
430}" ] || break # End of headers
431 esac
432 done
433
434 [ $rv -ge 500 ] && exit 5
435 [ $rv -eq 404 ] && exit 44
436 [ $rv -ge 400 ] && exit 4
437 [ $rv -ge 300 ] && exit 3
438 [ $rv -eq 200 ] || exit $FAILURE
439
440 if [ ! "$probe_type" ]; then
441 cat # output the rest ``as-is''
442 elif [ "$probe_type" = "$PROBE_SIZE" ]; then
443 f_isinteger "$length" || length=-1
444 echo "$length"
445 fi
446 exit 200
447 )
448 local retval=$?
449 [ $retval -eq 200 ] && return $SUCCESS
450 [ "$probe_type" ] && return $FAILURE
451
452 case "$retval" in
453 5) f_show_msg "$msg_server_error_when_requesting_url" "$url" ;;
454 44) f_show_msg "$msg_url_was_not_found" "$url" ;;
455 4) f_show_msg "$msg_client_error" ;;
456 *) f_show_msg "$msg_error_when_requesting_url" "$url" ;;
457 esac
458 return $FAILURE
459}
460
461############################################################ MAIN
462
463f_dprintf "%s: Successfully loaded." media/httpproxy.subr
464
465fi # ! $_MEDIA_HTTPPROXY_SUBR