corshare.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxcom.h"
  36. #include "hlxclib/stdio.h"
  37. #include "hlxclib/stdlib.h"
  38. #ifdef _WINDOWS
  39. #include <windows.h>
  40. #endif
  41. #include "prefdefs.h"
  42. #include "plprefk.h"
  43. #include "ihxpckts.h"
  44. #include "hxfiles.h"
  45. #include "hxengin.h"
  46. #include "hxcore.h"
  47. #include "hxprefs.h"
  48. #include "hxpref.h"
  49. #include "hxausvc.h"
  50. #include "hxmon.h"
  51. #include "hxclreg.h"
  52. #include "hxgroup.h"
  53. #include "hxsmbw.h"
  54. #include "chxeven.h"
  55. #include "chxelst.h"
  56. #include "hxmap.h"
  57. #include "hxrquest.h"
  58. #include "hxmangle.h"
  59. #include "hxstrutl.h"
  60. #include "strminfo.h"
  61. #include "timeval.h"
  62. #include "smiltype.h"
  63. #include "hxbsrc.h"
  64. #include "hxsrc.h"
  65. #include "srcinfo.h"
  66. // will be taken out once flags are defined in a separate file
  67. #include "rmfftype.h"
  68. #include "hxplay.h"
  69. #include "hxheap.h"
  70. #ifdef _DEBUG
  71. #undef HX_THIS_FILE
  72. static const char HX_THIS_FILE[] = __FILE__;
  73. #endif
  74. HX_RESULT 
  75. SetRequest(const char* pURL, 
  76.    BOOL bAltURL, 
  77.    IHXPreferences* pPreferences,
  78.    IHXRegistry* pRegistry,
  79.    IHXValues* pValuesInRequest,
  80.    REF(IHXRequest*) pRequest)
  81. {
  82.     HX_RESULT hr = HXR_OK;
  83.     BOOL bSetRequestHeader = FALSE;
  84.     IHXBuffer* pRegionData = NULL;
  85.     IHXBuffer* pBandwidth = NULL;
  86.     IHXBuffer* pLanguage = NULL;
  87.     IHXValues* pHeaders = NULL;
  88.     IHXBuffer* pClientID = NULL;
  89.     IHXBuffer* pGUID = NULL;
  90.     IHXBuffer* pMaxASMBW = NULL;
  91.     IHXBuffer* pValue = NULL;
  92.     BOOL bCanSendGuid = FALSE;
  93.     if (!pRequest)
  94.     {
  95. // create our own if it doesn't exist
  96. pRequest = new CHXRequest();
  97.         if(!pRequest)
  98.         {
  99.             hr = HXR_OUTOFMEMORY;
  100.             goto exit;
  101.         }
  102. pRequest->AddRef();
  103.     }
  104.     pRequest->SetURL(pURL);    
  105.     if(pPreferences)
  106.     {
  107.         pPreferences->ReadPref("Bandwidth", pBandwidth);
  108.         ReadPrefBOOL(pPreferences, "AllowAuthID", bCanSendGuid);
  109.     }
  110.     if (pRegistry)
  111.     {
  112. CHXString strTemp;
  113. strTemp = HXREGISTRY_PREFPROPNAME;
  114. strTemp += '.';
  115. strTemp += CLIENT_ID_REGNAME;
  116. pRegistry->GetStrByName(strTemp, pClientID);
  117. strTemp = HXREGISTRY_PREFPROPNAME;
  118. strTemp += ".RegionData";
  119. pRegistry->GetStrByName(strTemp, pRegionData);
  120. strTemp = HXREGISTRY_PREFPROPNAME;
  121. strTemp += ".Language";
  122. pRegistry->GetStrByName(strTemp, pLanguage);
  123.     }
  124.     if(bCanSendGuid &&
  125.        pPreferences && 
  126.        pPreferences->ReadPref(CLIENT_GUID_REGNAME, pGUID) == HXR_OK)
  127.     {
  128. char* pszGUID = DeCipher((char*)pGUID->GetBuffer());
  129. HX_RELEASE(pGUID);
  130. pGUID = (IHXBuffer*) new CHXBuffer;
  131.         if(pGUID)
  132.         {
  133.     pGUID->AddRef();
  134.     pGUID->Set((UCHAR*) pszGUID, strlen(pszGUID) + 1);
  135.         }
  136.         else
  137.         {
  138.             hr = HXR_OUTOFMEMORY;
  139.             goto exit;
  140.         }
  141. delete[] pszGUID;
  142.     }
  143.     else
  144.     {
  145. pGUID = (IHXBuffer*) new CHXBuffer;
  146.         if(pGUID)
  147.         {
  148.     pGUID->AddRef();
  149.     pGUID->Set((UCHAR*) CLIENT_ZERO_GUID, sizeof(CLIENT_ZERO_GUID));
  150.         }
  151.         else
  152.         {
  153.             hr = HXR_OUTOFMEMORY;
  154.             goto exit;
  155.         }
  156.     }
  157.     // set attributes to the request header
  158.     if (HXR_OK != pRequest->GetRequestHeaders(pHeaders) || !pHeaders)
  159.     {
  160. pHeaders = new CHXHeader();
  161.         if(!pHeaders)
  162.         {
  163.             hr = HXR_OUTOFMEMORY;
  164.             goto exit;
  165.         }
  166. pHeaders->AddRef();
  167. bSetRequestHeader = TRUE;
  168.     }
  169.     pHeaders->SetPropertyULONG32("IsAltURL", bAltURL);
  170.     if (HXR_OK != pHeaders->GetPropertyCString("Bandwidth", pValue) &&
  171. pBandwidth && pBandwidth->GetSize())
  172.     {
  173. pHeaders->SetPropertyCString("Bandwidth", pBandwidth);
  174.     }
  175.     HX_RELEASE(pValue);
  176.     if (HXR_OK != pHeaders->GetPropertyCString("Language", pValue) &&
  177. pLanguage && pLanguage->GetSize())
  178.     {
  179. pHeaders->SetPropertyCString("Language", pLanguage);
  180.     }
  181.     HX_RELEASE(pValue);
  182.     if (HXR_OK != pHeaders->GetPropertyCString("RegionData", pValue) &&
  183. pRegionData && pRegionData->GetSize())
  184.     {
  185. pHeaders->SetPropertyCString("RegionData", pRegionData);
  186.     }
  187.     HX_RELEASE(pValue);
  188.     if (HXR_OK != pHeaders->GetPropertyCString("ClientID", pValue) &&
  189. pClientID && pClientID->GetSize())
  190.     {
  191. pHeaders->SetPropertyCString("ClientID", pClientID);
  192.     }
  193.     HX_RELEASE(pValue);
  194.     if (HXR_OK != pHeaders->GetPropertyCString("GUID", pValue) &&
  195. pGUID && pGUID->GetSize())
  196.     {
  197. pHeaders->SetPropertyCString("GUID", pGUID);
  198.     }
  199.     HX_RELEASE(pValue);
  200.     if (HXR_OK != pHeaders->GetPropertyCString ("SupportsMaximumASMBandwidth", pValue))
  201.     {
  202. pMaxASMBW = (IHXBuffer*)new CHXBuffer;
  203.         if(!pMaxASMBW)
  204.         {
  205.             hr = HXR_OUTOFMEMORY;
  206.             goto exit;
  207.         }
  208. pMaxASMBW->Set((UCHAR*)"1",2);
  209. pMaxASMBW->AddRef();
  210. pHeaders->SetPropertyCString ("SupportsMaximumASMBandwidth",pMaxASMBW);
  211.     }
  212.     HX_RELEASE(pValue);
  213.     if (pValuesInRequest)
  214.     {
  215. CHXHeader::mergeHeaders(pHeaders, pValuesInRequest);
  216.     }
  217.     if (bSetRequestHeader)
  218.     {
  219. pRequest->SetRequestHeaders(pHeaders);
  220.     }
  221. exit:
  222.     HX_RELEASE(pMaxASMBW);
  223.     HX_RELEASE(pBandwidth);
  224.     HX_RELEASE(pLanguage);
  225.     HX_RELEASE(pRegionData);
  226.     HX_RELEASE(pClientID);
  227.     HX_RELEASE(pGUID);
  228.     HX_RELEASE(pHeaders);
  229.     return hr;
  230. }