Version 4.1.19

This commit is contained in:
Neo committed 2025-12-19 05:38:56 -08:00
1 parent 28bd025b35
commit 2bd5025018
2674 files changed
+233518 -77766

No files matched your search

+22 -2
View File
@@ -2,9 +2,9 @@
/**
* @brief HTTP Ranges Request/Response Class
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
* @license http://www.invisionpower.com/legal/standards/
* @package IPS Social Suite
* @package IPS Community Suite
* @since 19 May 2014
* @version SVN_VERSION_NUMBER
* @note This class facilitates parsing of HTTP Range requests and sending the appropriate response
@@ -53,9 +53,13 @@ class _Ranges extends Response
$range = 0;
$start_range = 0;
\IPS\Log::debug( "Range response initiated", 'ranges' );
/* Was this a ranged request? */
if( isset( $_SERVER['HTTP_RANGE'] ) )
{
\IPS\Log::debug( "This is a range request: " . $_SERVER['HTTP_RANGE'], 'ranges' );
/* Get the range */
list( $a, $range ) = explode( "=", $_SERVER['HTTP_RANGE'] );
@@ -65,6 +69,8 @@ class _Ranges extends Response
/* Did we only find one range? */
if( count($ranges) == 1 )
{
\IPS\Log::debug( "Only one range detected", 'ranges' );
/* Get the actual range start and end */
list( $start_range, $end_range ) = explode( "-", $range );
@@ -90,6 +96,8 @@ class _Ranges extends Response
/* If the range is invalid we need to send a 416 header and let the client know the valid range */
if( $start_range > $size OR $end_range > $size )
{
\IPS\Log::debug( "Invalid range, responding with 416 header. Requested {$start_range} - {$end_range} out of {$size}", 'ranges' );
\IPS\Output::i()->sendStatusCodeHeader( 416 );
\IPS\Output::i()->sendHeader( "Content-Range: */{$filesize}" );
return;
@@ -97,6 +105,8 @@ class _Ranges extends Response
/* Otherwise send the 206 header */
else
{
\IPS\Log::debug( "Sending requested range with 206 header: {$start_range} - {$size} out of {$filesize}", 'ranges' );
\IPS\Output::i()->sendStatusCodeHeader( 206 );
\IPS\Output::i()->sendHeader( "Content-Range: bytes {$start_range}-{$size}/{$filesize}" );
}
@@ -115,6 +125,8 @@ class _Ranges extends Response
foreach( $ranges as $arange )
{
\IPS\Log::debug( "Multiple ranges: {$start_range} - {$end_range}", 'ranges' );
/* Get the actual range start and end */
list( $start_range, $end_range ) = explode( "-", $arange );
@@ -140,6 +152,8 @@ class _Ranges extends Response
/* If the range is invalid we need to send a 416 header and let the client know the valid range */
if( $start_range > $size OR $end_range > $size )
{
\IPS\Log::debug( "This range out of multiple ranges was invalid", 'ranges' );
\IPS\Output::i()->sendStatusCodeHeader( 416 );
\IPS\Output::i()->sendHeader( "Content-Range: */{$filesize}" );
return;
@@ -160,6 +174,8 @@ class _Ranges extends Response
$the_responses = array();
\IPS\Log::debug( "One range out of multiple ranges to respond: {$start_range} - {$size} out of {$filesize}", 'ranges' );
\IPS\Output::i()->sendStatusCodeHeader( 206 );
\IPS\Output::i()->sendHeader( "Content-Range: bytes {$start_range}-{$size}/{$filesize}" );
@@ -174,6 +190,8 @@ class _Ranges extends Response
{
$content_length = 0;
\IPS\Log::debug( "Multiple range responses, using boundary", 'ranges' );
foreach( $the_responses as $part )
{
$content_length += \strlen( "\r\n--IPDOWNLOADSBOUNDARYMARKER\r\n" );
@@ -197,6 +215,8 @@ class _Ranges extends Response
/* No range */
else
{
\IPS\Log::debug( "No range requested, sending entire file", 'ranges' );
$size = $filesize - 1;
\IPS\Output::i()->sendStatusCodeHeader( 200 );