mimechk.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. /****************************************************************************
  36.  *  Defines
  37.  */
  38. #define ENCRYPTED_MIME_EXTENSION "-encrypted"
  39. #define ENCRYPTED_MIME_EXTENSION_SIZE (sizeof(ENCRYPTED_MIME_EXTENSION) - 1)
  40. /****************************************************************************
  41.  *  Includes
  42.  */
  43. // #include "hlxclib/stdio.h"
  44. #include "hlxclib/string.h"
  45. #include "hxtypes.h"
  46. #include "hxstrutl.h"
  47. #include "mimechk.h"
  48. BOOL isProhibitedMimeType(const char* pMimeType, ULONG32 ulMimeLen)
  49. {
  50.     BOOL bProhibited = TRUE;
  51.     // First disqualify based solely on length
  52.     if ((ulMimeLen != 20) && (ulMimeLen != 29) && (ulMimeLen != 26) &&
  53. (ulMimeLen != 25) && (ulMimeLen != 23) && (ulMimeLen != 21) &&
  54. (ulMimeLen != 24))
  55.     {
  56. return TRUE;
  57.     }
  58.     // Now walk the input string backwards and find out if it matches
  59.     // any of the following acceptable mime types:
  60.     //
  61.     // "audio/x-pn-realaudio" "oidualaer-np-x/oidua"
  62.     // "application/x-shockwave-flash" "hsalf-evawkcohs-x/noitacilppa"
  63.     // "application/x-pn-realmedia" "aidemlaer-np-x/noitacilppa"
  64.     // "application/x-pn-realevent" "tnevelaer-np-x/noitacilppa"
  65.     // "application/x-pn-imagemap" "pamegami-np-x/noitacilppa"
  66.     // "application/x-pn-realad" "dalaer-np-x/noitacilppa"
  67.     // "syncMM/x-pn-realvideo" "oedivlaer-np-x/MMcnys"
  68.     // "image_map/x-pn-realvideo" "oedivlaer-np-x/pam_egami"
  69.     // "video/x-pn-realvideo"
  70.     if (pMimeType[ulMimeLen - 1] == 'o')
  71.     {
  72. if (pMimeType[ulMimeLen - 2] == 'e')
  73. {
  74.     if (pMimeType[0] == 's')
  75.     {
  76. // "syncMM/x-pn-realvideo"
  77. if (strcmp(pMimeType, "syncMM/x-pn-realvideo") == 0)
  78. {
  79.     bProhibited = FALSE;
  80. }
  81.     }
  82.     else if (pMimeType[0] == 'i')
  83.     {
  84. // "image_map/x-pn-realvideo"
  85. if (strcmp(pMimeType, "image_map/x-pn-realvideo") == 0)
  86. {
  87.     bProhibited = FALSE;
  88. }
  89.     }
  90.     else if (pMimeType[0] == 'v')
  91.     {
  92. // "video/x-pn-realvideo"
  93. if (strcmp(pMimeType, "video/x-pn-realvideo") == 0)
  94. {
  95.     bProhibited = FALSE;
  96. }
  97.     }
  98. }
  99. else if (pMimeType[ulMimeLen - 2] == 'i')
  100. {
  101.     // "audio/x-pn-realaudio"
  102.     if (strcmp(pMimeType, "audio/x-pn-realaudio") == 0)
  103.     {
  104. bProhibited = FALSE;
  105.     }
  106. }
  107.     }
  108.     else if (pMimeType[ulMimeLen - 1] == 'h')
  109.     {
  110. // "application/x-shockwave-flash"
  111. if (strcmp(pMimeType, "application/x-shockwave-flash") == 0)
  112. {
  113.     bProhibited = FALSE;
  114. }
  115.     }
  116.     else if (pMimeType[ulMimeLen - 1] == 'a')
  117.     {
  118. // "application/x-pn-realmedia"
  119. if (strcmp(pMimeType, "application/x-pn-realmedia") == 0)
  120. {
  121.     bProhibited = FALSE;
  122. }
  123.     }
  124.     else if (pMimeType[ulMimeLen - 1] == 't')
  125.     {
  126. // "application/x-pn-realevent"
  127. if (strcmp(pMimeType, "application/x-pn-realevent") == 0)
  128. {
  129.     bProhibited = FALSE;
  130. }
  131.     }
  132.     else if (pMimeType[ulMimeLen - 1] == 'p')
  133.     {
  134. // "application/x-pn-imagemap"
  135. if (strcmp(pMimeType, "application/x-pn-imagemap") == 0)
  136. {
  137.     bProhibited = FALSE;
  138. }
  139.     }
  140.     else if (pMimeType[ulMimeLen - 1] == 'd')
  141.     {
  142. // "application/x-pn-realad"
  143. if (strcmp(pMimeType, "application/x-pn-realad") == 0)
  144. {
  145.     bProhibited = FALSE;
  146. }
  147.     }
  148.     return bProhibited;
  149. }
  150. int hxMimeRootCmp(const char* pMimeType1, const char* pMimeType2)
  151. {
  152.     int retVal;
  153.     retVal = strcasecmp(pMimeType1, pMimeType2);
  154.     if (retVal != 0)
  155.     {
  156. ULONG32 ulLength1 = strlen(pMimeType1);
  157. ULONG32 ulLength2 = strlen(pMimeType2);
  158. if (ulLength1 == (ulLength2 + ENCRYPTED_MIME_EXTENSION_SIZE))
  159. {
  160.     if ((strcasecmp(pMimeType1 + ulLength1 - ENCRYPTED_MIME_EXTENSION_SIZE,
  161.     ENCRYPTED_MIME_EXTENSION) == 0) &&
  162. (strncasecmp(pMimeType1, pMimeType2, ulLength2) == 0))
  163.     {
  164. retVal = 0;
  165.     }
  166. }
  167. else if (ulLength2 == (ulLength1 + ENCRYPTED_MIME_EXTENSION_SIZE))
  168. {
  169.     if ((strcasecmp(pMimeType2 + ulLength2 - ENCRYPTED_MIME_EXTENSION_SIZE,
  170.     ENCRYPTED_MIME_EXTENSION) == 0) &&
  171. (strncasecmp(pMimeType1, pMimeType2, ulLength1) == 0))
  172.     {
  173. retVal = 0;
  174.     }
  175. }
  176.     }
  177.     return retVal;
  178. }
  179. BOOL decryptMimeType(CHXString &strMimeType)
  180. {
  181.     BOOL bRetVal = FALSE; // assume no decryption
  182.     ULONG32 ulMimeLength = strMimeType.GetLength();
  183.     if (ulMimeLength > ENCRYPTED_MIME_EXTENSION_SIZE)
  184.     {
  185. const char* pMimeChars = (const char*) (strMimeType);
  186. if (strcmp(ENCRYPTED_MIME_EXTENSION, 
  187.     &pMimeChars[ulMimeLength - ENCRYPTED_MIME_EXTENSION_SIZE]) == 0)
  188. {
  189.     ulMimeLength -= ENCRYPTED_MIME_EXTENSION_SIZE;
  190.     strMimeType.GetBufferSetLength(ulMimeLength);
  191.     bRetVal = TRUE; // decrypted
  192. }
  193.     }
  194.     
  195.     return bRetVal;
  196. }
  197. BOOL encryptMimeType(CHXString &strMimeType)
  198. {
  199.     BOOL bRetVal = FALSE; // assume no encryption
  200.     ULONG32 ulMimeLength = strMimeType.GetLength();
  201.     const char* pMimeChars = (const char*) (strMimeType);
  202.     if ((ulMimeLength < ENCRYPTED_MIME_EXTENSION_SIZE) ||
  203. (strcmp(ENCRYPTED_MIME_EXTENSION, 
  204. &pMimeChars[ulMimeLength - ENCRYPTED_MIME_EXTENSION_SIZE]) != 0))
  205.     {
  206. strMimeType += ENCRYPTED_MIME_EXTENSION;
  207. bRetVal = TRUE;
  208.     }
  209.     return bRetVal;
  210. }
  211.