Added Byte-Range Support.

This commit is contained in:
dougt%netscape.com 1999-01-09 01:16:40 +00:00
parent a2044894ff
commit 66f36fba6d
3 changed files with 56 additions and 0 deletions

View File

@ -20,6 +20,8 @@
#include "nsString.h"
#include "nsILoadAttribs.h"
#include "prtypes.h"
#include "prmem.h"
#include "plstr.h"
#if defined(XP_PC)
#include <windows.h> // Needed for Interlocked APIs defined in nsISupports.h
@ -49,6 +51,10 @@ public:
NS_IMETHOD SetLoadType(nsURLLoadType aType);
NS_IMETHOD GetLoadType(nsURLLoadType* aResult);
// Byte Range Support
NS_IMETHOD SetByteRangeHeader(const char *aByteRangeHeader);
NS_IMETHOD GetByteRangeHeader(char** aByteRangeHeader);
protected:
virtual ~nsLoadAttribs();
@ -57,6 +63,7 @@ private:
PRUint32 mLocalIP;
nsURLLoadType mLoadType;
nsURLReloadType mReloadType;
char* mByteRangeHeader;
};
// nsLoadAttribs Implementation
@ -72,10 +79,12 @@ nsLoadAttribs::nsLoadAttribs()
mLocalIP = 0;
mLoadType = nsURLLoadNormal;
mReloadType = nsURLReload;
mByteRangeHeader = NULL;
}
nsLoadAttribs::~nsLoadAttribs()
{
PR_FREEIF(mByteRangeHeader);
}
NS_IMETHODIMP
@ -206,6 +215,37 @@ nsLoadAttribs::GetLoadType(nsURLLoadType* aResult)
return rv;
}
NS_IMETHODIMP
nsLoadAttribs::SetByteRangeHeader(const char* aByteRangeHeader)
{
NS_LOCK_INSTANCE();
mByteRangeHeader = PL_strdup(aByteRangeHeader);
NS_UNLOCK_INSTANCE();
return NS_OK;
}
NS_IMETHODIMP
nsLoadAttribs::GetByteRangeHeader(char **aByteRangeHeader)
{
nsresult rv = NS_OK;
if (nsnull == aByteRangeHeader)
{
rv = NS_ERROR_NULL_POINTER;
}
else
{
NS_LOCK_INSTANCE();
*aByteRangeHeader = PL_strdup(mByteRangeHeader);
NS_UNLOCK_INSTANCE();
}
return rv;
}
// Creation routines
NS_NET nsresult NS_NewLoadAttribs(nsILoadAttribs** aInstancePtrResult) {
nsILoadAttribs* it;

View File

@ -255,6 +255,7 @@ void nsNetlibService::SetupURLStruct(nsIURL *aUrl, URL_Struct *aURL_s)
nsURLLoadType loadType;
nsURLReloadType reloadType;
PRUint32 localIP;
char* byteRangeHeader=NULL;
NS_VERIFY_THREADSAFE_INTERFACE(loadAttribs);
@ -303,6 +304,16 @@ void nsNetlibService::SetupURLStruct(nsIURL *aUrl, URL_Struct *aURL_s)
}
aURL_s->localIP = localIP;
rv = loadAttribs->GetByteRangeHeader(&byteRangeHeader);
if (NS_FAILED(rv))
{
byteRangeHeader = NULL;
}
else
{
aURL_s->range_header = byteRangeHeader;
}
NS_RELEASE(loadAttribs);
}
}

View File

@ -75,6 +75,11 @@ public:
// Load method
NS_IMETHOD SetLoadType(nsURLLoadType aType) = 0;
NS_IMETHOD GetLoadType(nsURLLoadType* aResult) = 0;
// Byte Range Support
NS_IMETHOD SetByteRangeHeader(const char *aByteRangeHeader) = 0;
NS_IMETHOD GetByteRangeHeader(char** aByteRangeHeader) = 0;
};
/* Creation routines. */