http.subr (252987) | http.subr (253333) |
---|---|
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# | 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 $ | 27# $FreeBSD: head/usr.sbin/bsdconfig/share/media/http.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/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 | 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] | 513# f_media_get_http $device $file [$probe_type] |
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 | 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, | 517# gathered from the environment. If $probe_type 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). | 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# If $probe_type is equal to $PROBE_SIZE, prints the content-length in bytes 521# from the response (or -1 if not found) to standard-out. |
|
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{ | 522# 523# The variables used to configure the connection are as follows (all of which 524# are configured by f_media_set_http above): 525# 526# VAR_HTTP_HOST 527# HTTP server which to connect. Can be an IPv4 address, IPv6 528# address, or DNS hostname of your choice. 529# VAR_HTTP_PORT --- 9 unchanged lines hidden (view full) --- 539# See variable.subr for additional information. 540# 541# Example usage: 542# f_media_set_http 543# f_media_get_http media $file 544# 545f_media_get_http() 546{ |
545 local dev="$1" file="$2" probe_only="$3" hosts= | 547 local dev="$1" file="$2" probe_type="$3" hosts= |
546 | 548 |
547 f_dprintf "f_media_get_http: dev=[%s] file=[%s] probe_only=%s" \ 548 "$dev" "$file" "$probe_only" | 549 f_dprintf "f_media_get_http: dev=[%s] file=[%s] probe_type=%s" \ 550 "$dev" "$file" "$probe_type" |
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 | 551 552 local http_host http_port 553 f_getvar $VAR_HTTP_HOST http_host 554 f_getvar $VAR_HTTP_PORT http_port 555 556 if ! { 557 f_validate_ipaddr "$http_host" || 558 f_validate_ipaddr6 "$http_host" || --- 29 unchanged lines hidden (view full) --- 588 f_dprintf "sending http request for: %s" "$url" 589 printf "GET %s HTTP/1.0\r\n\r\n" "$url" | nc -n "$host" "$http_port" | 590 ( 591 # 592 # scan the headers of the response 593 # this is extremely quick'n dirty 594 # 595 |
594 rv=0 | 596 rv=0 length=-1 |
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 ;; | 597 while read LINE; do 598 case "$LINE" in 599 HTTP*) 600 f_dprintf "received response: %s" "$LINE" 601 set -- $LINE; rv=$2 602 f_isinteger "$rv" || rv=0 603 ;; |
604 "Content-Length: "*) 605 length="${LINE% 606}" 607 length="${length#Content-Length: }" 608 f_dprintf "received content-length: %s" \ 609 "$length" 610 ;; |
|
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 | 611 *) 612 [ "${LINE% 613}" ] || break # End of headers 614 esac 615 done 616 617 [ $rv -ge 500 ] && exit 5 618 [ $rv -eq 404 ] && exit 44 619 [ $rv -ge 400 ] && exit 4 620 [ $rv -ge 300 ] && exit 3 621 [ $rv -eq 200 ] || exit $FAILURE 622 |
614 if [ ! "$probe_only" ]; then | 623 if [ ! "$probe_type" ]; then |
615 cat # output the rest ``as-is'' | 624 cat # output the rest ``as-is'' |
625 elif [ "$probe_type" = "$PROBE_SIZE" ]; then 626 f_isinteger "$length" || length=-1 627 echo "$length" |
|
616 fi 617 exit 200 618 ) 619 local retval=$? 620 [ $retval -eq 200 ] && return $SUCCESS | 628 fi 629 exit 200 630 ) 631 local retval=$? 632 [ $retval -eq 200 ] && return $SUCCESS |
621 [ "$probe_only" ] && return $FAILURE | 633 [ "$probe_type" ] && 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 | 634 635 case "$retval" in 636 5) f_show_msg "$msg_server_error_when_requesting_url" "$url" ;; 637 44) f_show_msg "$msg_url_was_not_found" "$url" ;; 638 4) f_show_msg "$msg_client_error" ;; 639 *) f_show_msg "$msg_error_when_requesting_url" "$url" ;; 640 esac 641 return $FAILURE 642} 643 644############################################################ MAIN 645 646f_dprintf "%s: Successfully loaded." media/http.subr 647 648fi # ! $_MEDIA_HTTP_SUBR |