|
List Info
Thread: CR: Add FileObject static utility methods
|
|
| CR: Add FileObject static utility
methods |
  United States |
2007-05-30 14:35:55 |
Synopsis: Add utility functions that creates an
IHXFileObject from an
URL or an IHXBuffer and sets the request. These methods were
created
for the Flash Guest Player, which uses FileObjects to
provide the
data to the Flash plugin.
Overview: Added two static methods:
HX_RESULT
CHXSingleBufferFileObject::CreateFileObjectWithRequest(IHXBu
ffer*
pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
IUnknown* pContext)
- Create an IHXFileObject from pBuffer and set the request
on it with pszURL.
HX_RESULT
CHXSingleBufferFileObject::CreateLocalFileObject(const
CHXString& pszURL, REF(IHXFileObject*) rpFileObject,
IUnknown* pContext)
- Read the local file specified by pszURL into an
IHXBuffer, call
CreateFileObjectWithRequest to get the IHXFileObject and set
the request.
Files:
common/fileio/single_buffer_file_object.cpp
common/fileio/pub/single_buffer_file_object.h
Branch: HEAD
Index: single_buffer_file_object.cpp
============================================================
=======
RCS file:
/cvsroot/common/fileio/single_buffer_file_object.cpp,v
retrieving revision 1.2
diff -w -u -5 -r1.2 single_buffer_file_object.cpp
--- single_buffer_file_object.cpp 26 Apr 2007 21:13:14
-0000 1.2
+++ single_buffer_file_object.cpp 30 May 2007 19:26:31
-0000
 -56,10
+56,15 
* ***** END LICENSE BLOCK ***** */
#include "hxtypes.h"
#include "hxcom.h"
#include "hxfiles.h"
+#include "hxurl.h"
+#include "hxurlutil.h"
+#include "filespecutils.h"
+#include "hxxfile.h"
+#include "pckunpck.h"
#include "ihxpckts.h"
#include "baseobj.h"
#include "nestbuff.h"
#include "single_buffer_file_object.h"
//#define HELIX_FEATURE_LOGLEVEL_NONE // Uncomment to
disable logging
 -367,5
+372,79 
CHXSingleBufferFileObject::~CHXSingleBufferFileObject()
{
Close();
}
+//
+// Create an IHXFileObject from the IHXBuffer and set the
request with pszURL
+//
+HX_RESULT
+CHXSingleBufferFileObject::CreateFileObjectWithRequest(IHXB
uffer*
pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
+ IUnknown* pContext)
+{
+ HX_RESULT retVal=HXR_FAIL;
+
+ CreateFileObject(pBuffer, rpFileObject);
+
+ // QI the file object for IHXRequestHandler
+ IHXRequestHandler* pHandler = NULL;
+ retVal =
rpFileObject->QueryInterface(IID_IHXRequestHandler,
(void**) &pHandler);
+ if (SUCCEEDED(retVal))
+ {
+ // Create a IHXRequest
+ IHXRequest* pRequest = NULL;
+ if (SUCCEEDED(CreateInstanceCCF(CLSID_IHXRequest, (void**)
&pRequest, pContext)))
+ {
+ // Set a dummy URL
+ if (SUCCEEDED(pRequest->SetURL(pszURL)))
+ {
+ // Set the request into the file object
+ retVal = pHandler->SetRequest(pRequest);
+ }
+ }
+ HX_RELEASE(pRequest);
+ }
+ HX_RELEASE(pHandler);
+
+ if (FAILED(retVal))
+ {
+ HX_RELEASE(rpFileObject);
+ }
+
+ return retVal;
+}
+
+//
+// Read the local URL into an IHXBuffer, create the
IHXFileObject,
and set the request.
+//
+HX_RESULT
+CHXSingleBufferFileObject::CreateLocalFileObject(const
CHXString&
pszURL, REF(IHXFileObject*) rpFileObject, IUnknown*
pContext)
+{
+ HX_RESULT retVal=HXR_FAIL;
+ HXURLRep urlRep = HXURLRep(pszURL);
+ HXURLUtil::ProtocolInfo urlProtocolInfo =
HXURLUtil::GetProtocolInfo(urlRep.Scheme());
+
+ if (HXURLUtil::ProtocolInfo::SCHEME_FILE ==
urlProtocolInfo.type)
+ {
+ CHXString pszLocalURL(pszURL);
+ HXXFile::GetReasonableLocalFileName(pszLocalURL); // Strip
off
protocol, for FileExists
+ CHXFileSpecifier dataFile((const char*)pszLocalURL);
+ if (CHXFileSpecUtils::FileExists(dataFile, pContext))
+ {
+ IHXBuffer* pBuffer = NULL;
+ CreateBufferCCF(pBuffer, pContext);
+ retVal = CHXFileSpecUtils::ReadBinaryFile(dataFile,
pBuffer);
+ if (SUCCEEDED(retVal))
+ {
+ retVal = CreateFileObjectWithRequest(pBuffer, pszURL,
rpFileObject, pContext);
+ }
+ HX_RELEASE(pBuffer);
+ }
+ else
+ {
+ retVal = HXR_FAIL;
+ }
+ }
+
+ return retVal;
+}
+
Index: pub/single_buffer_file_object.h
============================================================
=======
RCS file:
/cvsroot/common/fileio/pub/single_buffer_file_object.h,v
retrieving revision 1.2
diff -w -u -5 -r1.2 single_buffer_file_object.h
--- pub/single_buffer_file_object.h 26 Apr 2007 21:13:14
-0000 1.2
+++ pub/single_buffer_file_object.h 30 May 2007 18:37:30
-0000
 -89,10
+89,15 
STDMETHOD(SetRequest) (THIS_ IHXRequest* pRequest);
STDMETHOD(GetRequest) (THIS_ REF(IHXRequest*)
rpRequest);
// CHXSingleBufferFileObject methods
static HX_RESULT CreateFileObject(IHXBuffer* pBuffer,
REF(IHXFileObject*) rpFileObject);
+
+ static HX_RESULT CreateFileObjectWithRequest(IHXBuffer*
pBuffer,
const char* pszURL, REF(IHXFileObject*) rpFileObject,
+ IUnknown* pContext);
+ static HX_RESULT CreateLocalFileObject(const
CHXString& pszURL,
REF(IHXFileObject*) rpFileObject, IUnknown* pContext);
+
protected:
INT32 m_lRefCount;
IHXBuffer* m_pBuffer;
IHXFileResponse* m_pFileResponse;
IHXRequest* m_pRequest;
_______________________________________________
Common-dev mailing list
Common-dev helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/comm
on-dev
|
|
| Re: CR: Add FileObject static utility
methods |
  United States |
2007-05-30 14:52:20 |
You should check the return values of CreateFileObject()
and
CreateBufferCCF().
--greg.
Christina Dunn wrote:
> Synopsis: Add utility functions that creates an
IHXFileObject from an
> URL or an IHXBuffer and sets the request. These methods
were created for
> the Flash Guest Player, which uses FileObjects to
provide the data to
> the Flash plugin.
>
> Overview: Added two static methods:
> HX_RESULT
>
CHXSingleBufferFileObject::CreateFileObjectWithRequest(IHXBu
ffer*
> pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject, IUnknown*
> pContext)
> - Create an IHXFileObject from pBuffer and set the
request on it
> with pszURL.
> HX_RESULT
CHXSingleBufferFileObject::CreateLocalFileObject(const
> CHXString& pszURL, REF(IHXFileObject*)
rpFileObject, IUnknown* pContext)
> - Read the local file specified by pszURL into an
IHXBuffer, call
> CreateFileObjectWithRequest to get the IHXFileObject
and set the request.
>
> Files:
> common/fileio/single_buffer_file_object.cpp
> common/fileio/pub/single_buffer_file_object.h
>
> Branch: HEAD
>
> Index: single_buffer_file_object.cpp
>
============================================================
=======
> RCS file:
/cvsroot/common/fileio/single_buffer_file_object.cpp,v
> retrieving revision 1.2
> diff -w -u -5 -r1.2 single_buffer_file_object.cpp
> --- single_buffer_file_object.cpp 26 Apr 2007
21:13:14 -0000 1.2
> +++ single_buffer_file_object.cpp 30 May 2007
19:26:31 -0000
>  -56,10 +56,15 
> * ***** END LICENSE BLOCK ***** */
>
> #include "hxtypes.h"
> #include "hxcom.h"
> #include "hxfiles.h"
> +#include "hxurl.h"
> +#include "hxurlutil.h"
> +#include "filespecutils.h"
> +#include "hxxfile.h"
> +#include "pckunpck.h"
> #include "ihxpckts.h"
> #include "baseobj.h"
> #include "nestbuff.h"
> #include "single_buffer_file_object.h"
> //#define HELIX_FEATURE_LOGLEVEL_NONE // Uncomment to
disable logging
>  -367,5 +372,79 
>
CHXSingleBufferFileObject::~CHXSingleBufferFileObject()
> {
> Close();
> }
>
> +//
> +// Create an IHXFileObject from the IHXBuffer and set
the request with
> pszURL
> +//
> +HX_RESULT
>
+CHXSingleBufferFileObject::CreateFileObjectWithRequest(IHXB
uffer*
> pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
> + IUnknown* pContext)
> +{
> + HX_RESULT retVal=HXR_FAIL;
> +
> + CreateFileObject(pBuffer, rpFileObject);
> +
> + // QI the file object for IHXRequestHandler
> + IHXRequestHandler* pHandler = NULL;
> + retVal =
rpFileObject->QueryInterface(IID_IHXRequestHandler,
> (void**) &pHandler);
> + if (SUCCEEDED(retVal))
> + {
> + // Create a IHXRequest
> + IHXRequest* pRequest = NULL;
> + if (SUCCEEDED(CreateInstanceCCF(CLSID_IHXRequest,
(void**)
> &pRequest, pContext)))
> + {
> + // Set a dummy URL
> + if (SUCCEEDED(pRequest->SetURL(pszURL)))
> + {
> + // Set the request into the file object
> + retVal = pHandler->SetRequest(pRequest);
> + }
> + }
> + HX_RELEASE(pRequest);
> + }
> + HX_RELEASE(pHandler);
> +
> + if (FAILED(retVal))
> + {
> + HX_RELEASE(rpFileObject);
> + }
> +
> + return retVal;
> +}
> +
> +//
> +// Read the local URL into an IHXBuffer, create the
IHXFileObject, and
> set the request.
> +//
> +HX_RESULT
> +CHXSingleBufferFileObject::CreateLocalFileObject(const
CHXString&
> pszURL, REF(IHXFileObject*) rpFileObject, IUnknown*
pContext)
> +{
> + HX_RESULT retVal=HXR_FAIL;
> + HXURLRep urlRep = HXURLRep(pszURL);
> + HXURLUtil::ProtocolInfo urlProtocolInfo =
> HXURLUtil::GetProtocolInfo(urlRep.Scheme());
> +
> + if (HXURLUtil::ProtocolInfo::SCHEME_FILE ==
urlProtocolInfo.type)
> + {
> + CHXString pszLocalURL(pszURL);
> + HXXFile::GetReasonableLocalFileName(pszLocalURL);
// Strip off
> protocol, for FileExists
> + CHXFileSpecifier dataFile((const
char*)pszLocalURL);
> + if (CHXFileSpecUtils::FileExists(dataFile,
pContext))
> + {
> + IHXBuffer* pBuffer = NULL;
> + CreateBufferCCF(pBuffer, pContext);
> + retVal =
CHXFileSpecUtils::ReadBinaryFile(dataFile, pBuffer);
> + if (SUCCEEDED(retVal))
> + {
> + retVal = CreateFileObjectWithRequest(pBuffer,
pszURL,
> rpFileObject, pContext);
> + }
> + HX_RELEASE(pBuffer);
> + }
> + else
> + {
> + retVal = HXR_FAIL;
> + }
> + }
> +
> + return retVal;
> +}
> +
> Index: pub/single_buffer_file_object.h
>
============================================================
=======
> RCS file:
/cvsroot/common/fileio/pub/single_buffer_file_object.h,v
> retrieving revision 1.2
> diff -w -u -5 -r1.2 single_buffer_file_object.h
> --- pub/single_buffer_file_object.h 26 Apr 2007
21:13:14 -0000 1.2
> +++ pub/single_buffer_file_object.h 30 May 2007
18:37:30 -0000
>  -89,10 +89,15 
> STDMETHOD(SetRequest) (THIS_ IHXRequest*
pRequest);
> STDMETHOD(GetRequest) (THIS_ REF(IHXRequest*)
rpRequest);
>
> // CHXSingleBufferFileObject methods
> static HX_RESULT CreateFileObject(IHXBuffer*
pBuffer,
> REF(IHXFileObject*) rpFileObject);
> +
> + static HX_RESULT
CreateFileObjectWithRequest(IHXBuffer* pBuffer,
> const char* pszURL, REF(IHXFileObject*) rpFileObject,
> + IUnknown* pContext);
> + static HX_RESULT CreateLocalFileObject(const
CHXString& pszURL,
> REF(IHXFileObject*) rpFileObject, IUnknown* pContext);
> +
> protected:
> INT32 m_lRefCount;
> IHXBuffer* m_pBuffer;
> IHXFileResponse* m_pFileResponse;
> IHXRequest* m_pRequest;
>
>
> _______________________________________________
> Common-dev mailing list
> Common-dev helixcommunity.org
> http://lists.helixcommunity.org/mailman/listinfo/comm
on-dev
_______________________________________________
Common-dev mailing list
Common-dev helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/comm
on-dev
|
|
| Re: CR: Add FileObject static utility
methods |
  United States |
2007-05-30 16:58:49 |
Added return value checks. Checked into HEAD.
thanks,
christina
At 12:52 PM 5/30/2007, Greg Wright wrote:
>You should check the return values of CreateFileObject()
and
>CreateBufferCCF().
>
>--greg.
>
>
>Christina Dunn wrote:
>>Synopsis: Add utility functions that creates an
IHXFileObject from
>>an URL or an IHXBuffer and sets the request. These
methods were
>>created for the Flash Guest Player, which uses
FileObjects to
>>provide the data to the Flash plugin.
>>Overview: Added two static methods:
>>HX_RESULT
>>CHXSingleBufferFileObject::CreateFileObjectWithReque
st(IHXBuffer*
>>pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
>>IUnknown* pContext)
>> - Create an IHXFileObject from pBuffer and set
the request on
>> it with pszURL.
>>HX_RESULT
CHXSingleBufferFileObject::CreateLocalFileObject(const
>>CHXString& pszURL, REF(IHXFileObject*)
rpFileObject, IUnknown* pContext)
>> - Read the local file specified by pszURL into
an IHXBuffer,
>> call CreateFileObjectWithRequest to get the
IHXFileObject and set the request.
>>Files:
>>common/fileio/single_buffer_file_object.cpp
>>common/fileio/pub/single_buffer_file_object.h
>>Branch: HEAD
>>Index: single_buffer_file_object.cpp
>>====================================================
===============
>>RCS file:
/cvsroot/common/fileio/single_buffer_file_object.cpp,v
>>retrieving revision 1.2
>>diff -w -u -5 -r1.2 single_buffer_file_object.cpp
>>--- single_buffer_file_object.cpp 26 Apr 2007
21:13:14 -0000 1.2
>>+++ single_buffer_file_object.cpp 30 May 2007
19:26:31 -0000
>> -56,10 +56,15 
>> * ***** END LICENSE BLOCK ***** */
>> #include "hxtypes.h"
>> #include "hxcom.h"
>> #include "hxfiles.h"
>>+#include "hxurl.h"
>>+#include "hxurlutil.h"
>>+#include "filespecutils.h"
>>+#include "hxxfile.h"
>>+#include "pckunpck.h"
>> #include "ihxpckts.h"
>> #include "baseobj.h"
>> #include "nestbuff.h"
>> #include "single_buffer_file_object.h"
>> //#define HELIX_FEATURE_LOGLEVEL_NONE // Uncomment
to disable logging
>> -367,5 +372,79 
>>
CHXSingleBufferFileObject::~CHXSingleBufferFileObject()
>> {
>> Close();
>> }
>>+//
>>+// Create an IHXFileObject from the IHXBuffer and
set the request
>>with pszURL
>>+//
>>+HX_RESULT
>>+CHXSingleBufferFileObject::CreateFileObjectWithRequ
est(IHXBuffer*
>>pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
>>+ IUnknown* pContext)
>>+{
>>+ HX_RESULT retVal=HXR_FAIL;
>>+
>>+ CreateFileObject(pBuffer, rpFileObject);
>>+
>>+ // QI the file object for IHXRequestHandler
>>+ IHXRequestHandler* pHandler = NULL;
>>+ retVal =
rpFileObject->QueryInterface(IID_IHXRequestHandler,
>>(void**) &pHandler);
>>+ if (SUCCEEDED(retVal))
>>+ {
>>+ // Create a IHXRequest
>>+ IHXRequest* pRequest = NULL;
>>+ if
(SUCCEEDED(CreateInstanceCCF(CLSID_IHXRequest, (void**)
>>&pRequest, pContext)))
>>+ {
>>+ // Set a dummy URL
>>+ if
(SUCCEEDED(pRequest->SetURL(pszURL)))
>>+ {
>>+ // Set the request into the file object
>>+ retVal =
pHandler->SetRequest(pRequest);
>>+ }
>>+ }
>>+ HX_RELEASE(pRequest);
>>+ }
>>+ HX_RELEASE(pHandler);
>>+
>>+ if (FAILED(retVal))
>>+ {
>>+ HX_RELEASE(rpFileObject);
>>+ }
>>+
>>+ return retVal;
>>+}
>>+
>>+//
>>+// Read the local URL into an IHXBuffer, create the
IHXFileObject,
>>and set the request.
>>+//
>>+HX_RESULT
>>+CHXSingleBufferFileObject::CreateLocalFileObject(co
nst CHXString&
>>pszURL, REF(IHXFileObject*) rpFileObject, IUnknown*
pContext)
>>+{
>>+ HX_RESULT retVal=HXR_FAIL;
>>+ HXURLRep urlRep = HXURLRep(pszURL);
>>+ HXURLUtil::ProtocolInfo urlProtocolInfo =
>>HXURLUtil::GetProtocolInfo(urlRep.Scheme());
>>+
>>+ if (HXURLUtil::ProtocolInfo::SCHEME_FILE ==
urlProtocolInfo.type)
>>+ {
>>+ CHXString pszLocalURL(pszURL);
>>+
HXXFile::GetReasonableLocalFileName(pszLocalURL); //
Strip
>>off protocol, for FileExists
>>+ CHXFileSpecifier dataFile((const
char*)pszLocalURL);
>>+ if (CHXFileSpecUtils::FileExists(dataFile,
pContext))
>>+ {
>>+ IHXBuffer* pBuffer = NULL;
>>+ CreateBufferCCF(pBuffer, pContext);
>>+ retVal =
CHXFileSpecUtils::ReadBinaryFile(dataFile, pBuffer);
>>+ if (SUCCEEDED(retVal))
>>+ {
>>+ retVal =
CreateFileObjectWithRequest(pBuffer, pszURL,
>>rpFileObject, pContext);
>>+ }
>>+ HX_RELEASE(pBuffer);
>>+ }
>>+ else
>>+ {
>>+ retVal = HXR_FAIL;
>>+ }
>>+ }
>>+
>>+ return retVal;
>>+}
>>+
>>Index: pub/single_buffer_file_object.h
>>====================================================
===============
>>RCS file:
/cvsroot/common/fileio/pub/single_buffer_file_object.h,v
>>retrieving revision 1.2
>>diff -w -u -5 -r1.2 single_buffer_file_object.h
>>--- pub/single_buffer_file_object.h 26 Apr 2007
21:13:14 -0000 1.2
>>+++ pub/single_buffer_file_object.h 30 May 2007
18:37:30 -0000
>> -89,10 +89,15 
>> STDMETHOD(SetRequest) (THIS_ IHXRequest*
pRequest);
>> STDMETHOD(GetRequest) (THIS_ REF(IHXRequest*)
rpRequest);
>> // CHXSingleBufferFileObject methods
>> static HX_RESULT CreateFileObject(IHXBuffer*
pBuffer,
>> REF(IHXFileObject*) rpFileObject);
>>+
>>+ static HX_RESULT
CreateFileObjectWithRequest(IHXBuffer*
>>pBuffer, const char* pszURL, REF(IHXFileObject*)
rpFileObject,
>>+ IUnknown* pContext);
>>+ static HX_RESULT CreateLocalFileObject(const
CHXString&
>>pszURL, REF(IHXFileObject*) rpFileObject, IUnknown*
pContext);
>>+
>> protected:
>> INT32 m_lRefCount;
>> IHXBuffer* m_pBuffer;
>> IHXFileResponse* m_pFileResponse;
>> IHXRequest* m_pRequest;
>>
>>_______________________________________________
>>Common-dev mailing list
>>Common-dev helixcommunity.org
>>http://lists.helixcommunity.org/mailman/listinfo/comm
on-dev
_______________________________________________
Common-dev mailing list
Common-dev helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/comm
on-dev
|
|
[1-3]
|
|