1if [ ! "$_MEDIA_HTTP_SUBR" ]; then _MEDIA_HTTP_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/http.subr 252987 2013-07-07 18:51:44Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." media/http.subr
34f_include $BSDCFG_SHARE/device.subr
35f_include $BSDCFG_SHARE/dialog.subr
--- 469 unchanged lines hidden (view full) ---
505
506 unset $VAR_HTTP_PATH
507 f_media_set_http || break
508 done
509
510 return $http_found
511}
512
513# f_media_get_http $device $file [$probe_only]
514#
515# Returns data from $file on an HTTP server using nc(1). Please note that
516# $device is unused but must be present (even if null). Information is instead
517# gathered from the environment. If $probe_only is both present and non-NULL,
518# this function exits after receiving the HTTP header response from the server
519# (if the HTTP response code is 200, success is returned; otherwise failure).
520#
521# The variables used to configure the connection are as follows (all of which
522# are configured by f_media_set_http above):
523#
524# VAR_HTTP_HOST
525# HTTP server which to connect. Can be an IPv4 address, IPv6
526# address, or DNS hostname of your choice.
527# VAR_HTTP_PORT
--- 9 unchanged lines hidden (view full) ---
537# See variable.subr for additional information.
538#
539# Example usage:
540# f_media_set_http
541# f_media_get_http media $file
542#
543f_media_get_http()
544{
545 local dev="$1" file="$2" probe_only="$3" hosts=
546
547 f_dprintf "f_media_get_http: dev=[%s] file=[%s] probe_only=%s" \
548 "$dev" "$file" "$probe_only"
549
550 local http_host http_port
551 f_getvar $VAR_HTTP_HOST http_host
552 f_getvar $VAR_HTTP_PORT http_port
553
554 if ! {
555 f_validate_ipaddr "$http_host" ||
556 f_validate_ipaddr6 "$http_host" ||
--- 29 unchanged lines hidden (view full) ---
586 f_dprintf "sending http request for: %s" "$url"
587 printf "GET %s HTTP/1.0\r\n\r\n" "$url" | nc -n "$host" "$http_port" |
588 (
589 #
590 # scan the headers of the response
591 # this is extremely quick'n dirty
592 #
593
594 rv=0
595 while read LINE; do
596 case "$LINE" in
597 HTTP*)
598 f_dprintf "received response: %s" "$LINE"
599 set -- $LINE; rv=$2
600 f_isinteger "$rv" || rv=0
601 ;;
602 *)
603 [ "${LINE%
604}" ] || break # End of headers
605 esac
606 done
607
608 [ $rv -ge 500 ] && exit 5
609 [ $rv -eq 404 ] && exit 44
610 [ $rv -ge 400 ] && exit 4
611 [ $rv -ge 300 ] && exit 3
612 [ $rv -eq 200 ] || exit $FAILURE
613
614 if [ ! "$probe_only" ]; then
615 cat # output the rest ``as-is''
616 fi
617 exit 200
618 )
619 local retval=$?
620 [ $retval -eq 200 ] && return $SUCCESS
621 [ "$probe_only" ] && return $FAILURE
622
623 case "$retval" in
624 5) f_show_msg "$msg_server_error_when_requesting_url" "$url" ;;
625 44) f_show_msg "$msg_url_was_not_found" "$url" ;;
626 4) f_show_msg "$msg_client_error" ;;
627 *) f_show_msg "$msg_error_when_requesting_url" "$url" ;;
628 esac
629 return $FAILURE
630}
631
632############################################################ MAIN
633
634f_dprintf "%s: Successfully loaded." media/http.subr
635
636fi # ! $_MEDIA_HTTP_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/http.subr 252987 2013-07-07 18:51:44Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." media/http.subr
34f_include $BSDCFG_SHARE/device.subr
35f_include $BSDCFG_SHARE/dialog.subr
--- 469 unchanged lines hidden (view full) ---
505
506 unset $VAR_HTTP_PATH
507 f_media_set_http || break
508 done
509
510 return $http_found
511}
512
513# f_media_get_http $device $file [$probe_only]
514#
515# Returns data from $file on an HTTP server using nc(1). Please note that
516# $device is unused but must be present (even if null). Information is instead
517# gathered from the environment. If $probe_only is both present and non-NULL,
518# this function exits after receiving the HTTP header response from the server
519# (if the HTTP response code is 200, success is returned; otherwise failure).
520#
521# The variables used to configure the connection are as follows (all of which
522# are configured by f_media_set_http above):
523#
524# VAR_HTTP_HOST
525# HTTP server which to connect. Can be an IPv4 address, IPv6
526# address, or DNS hostname of your choice.
527# VAR_HTTP_PORT
--- 9 unchanged lines hidden (view full) ---
537# See variable.subr for additional information.
538#
539# Example usage:
540# f_media_set_http
541# f_media_get_http media $file
542#
543f_media_get_http()
544{
545 local dev="$1" file="$2" probe_only="$3" hosts=
546
547 f_dprintf "f_media_get_http: dev=[%s] file=[%s] probe_only=%s" \
548 "$dev" "$file" "$probe_only"
549
550 local http_host http_port
551 f_getvar $VAR_HTTP_HOST http_host
552 f_getvar $VAR_HTTP_PORT http_port
553
554 if ! {
555 f_validate_ipaddr "$http_host" ||
556 f_validate_ipaddr6 "$http_host" ||
--- 29 unchanged lines hidden (view full) ---
586 f_dprintf "sending http request for: %s" "$url"
587 printf "GET %s HTTP/1.0\r\n\r\n" "$url" | nc -n "$host" "$http_port" |
588 (
589 #
590 # scan the headers of the response
591 # this is extremely quick'n dirty
592 #
593
594 rv=0
595 while read LINE; do
596 case "$LINE" in
597 HTTP*)
598 f_dprintf "received response: %s" "$LINE"
599 set -- $LINE; rv=$2
600 f_isinteger "$rv" || rv=0
601 ;;
602 *)
603 [ "${LINE%
604}" ] || break # End of headers
605 esac
606 done
607
608 [ $rv -ge 500 ] && exit 5
609 [ $rv -eq 404 ] && exit 44
610 [ $rv -ge 400 ] && exit 4
611 [ $rv -ge 300 ] && exit 3
612 [ $rv -eq 200 ] || exit $FAILURE
613
614 if [ ! "$probe_only" ]; then
615 cat # output the rest ``as-is''
616 fi
617 exit 200
618 )
619 local retval=$?
620 [ $retval -eq 200 ] && return $SUCCESS
621 [ "$probe_only" ] && return $FAILURE
622
623 case "$retval" in
624 5) f_show_msg "$msg_server_error_when_requesting_url" "$url" ;;
625 44) f_show_msg "$msg_url_was_not_found" "$url" ;;
626 4) f_show_msg "$msg_client_error" ;;
627 *) f_show_msg "$msg_error_when_requesting_url" "$url" ;;
628 esac
629 return $FAILURE
630}
631
632############################################################ MAIN
633
634f_dprintf "%s: Successfully loaded." media/http.subr
635
636fi # ! $_MEDIA_HTTP_SUBR