From f0390cbabaa411a9c30b3cd9e8a531c70cfaefd3 Mon Sep 17 00:00:00 2001 From: "dougt%netscape.com" Date: Sat, 9 Jan 1999 01:16:40 +0000 Subject: [PATCH] Added Byte-Range Support. git-svn-id: svn://10.0.0.236/trunk@17437 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/network/module/nsLoadAttribs.cpp | 40 ++++++++++++++++++++++++ mozilla/network/module/nsNetService.cpp | 11 +++++++ mozilla/network/public/nsILoadAttribs.h | 5 +++ 3 files changed, 56 insertions(+) diff --git a/mozilla/network/module/nsLoadAttribs.cpp b/mozilla/network/module/nsLoadAttribs.cpp index 7ac30b911d2..30ae37e8199 100644 --- a/mozilla/network/module/nsLoadAttribs.cpp +++ b/mozilla/network/module/nsLoadAttribs.cpp @@ -20,6 +20,8 @@ #include "nsString.h" #include "nsILoadAttribs.h" #include "prtypes.h" +#include "prmem.h" +#include "plstr.h" #if defined(XP_PC) #include // 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; diff --git a/mozilla/network/module/nsNetService.cpp b/mozilla/network/module/nsNetService.cpp index 413c3e35dfc..e59d1067faa 100644 --- a/mozilla/network/module/nsNetService.cpp +++ b/mozilla/network/module/nsNetService.cpp @@ -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); } } diff --git a/mozilla/network/public/nsILoadAttribs.h b/mozilla/network/public/nsILoadAttribs.h index 2463875708f..5473b2970b4 100644 --- a/mozilla/network/public/nsILoadAttribs.h +++ b/mozilla/network/public/nsILoadAttribs.h @@ -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. */