pxutil.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:8k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: pxutil.cpp,v 1.2.24.1 2004/07/09 01:54:51 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. // From include
  50. #include "hxtypes.h"
  51. #include "hxcom.h"
  52. #include "hxresult.h"
  53. #include "ihxpckts.h"
  54. // From hxcont
  55. #include "hxstring.h"
  56. #include "hxbuffer.h"
  57. // From pxcomlib
  58. #include "gstring.h"
  59. #include "pxutil.h"
  60. // hxdebug
  61. #include "hxheap.h"
  62. #ifdef _DEBUG
  63. #undef HX_THIS_FILE
  64. static char HX_THIS_FILE[] = __FILE__;
  65. #endif
  66. void Pack32(BYTE * &pBuffer, UINT32 ulValue)
  67. {
  68.     pBuffer[0] = (unsigned char) ((ulValue >> 24) & 0x000000FF);
  69.     pBuffer[1] = (unsigned char) ((ulValue >> 16) & 0x000000FF);
  70.     pBuffer[2] = (unsigned char) ((ulValue >>  8) & 0x000000FF);
  71.     pBuffer[3] = (unsigned char) ( ulValue        & 0x000000FF);
  72.     pBuffer   += 4;
  73. };
  74. void UnPack32(BYTE * &pBuffer, UINT32 &rulValue)
  75. {
  76.     rulValue = ((pBuffer[0] << 24) & 0xFF000000) |
  77.                ((pBuffer[1] << 16) & 0x00FF0000) |
  78.                ((pBuffer[2] <<  8) & 0x0000FF00) |
  79.                ( pBuffer[3]        & 0x000000FF);
  80.     pBuffer += 4;
  81. };
  82. void Pack16(BYTE * &pBuffer, UINT16 usValue)
  83. {
  84.     pBuffer[0] = (unsigned char) ((usValue >> 8) & 0x00FF);
  85.     pBuffer[1] = (unsigned char) ( usValue       & 0x00FF);
  86.     pBuffer   += 2;
  87. };
  88. void UnPack16(BYTE * &pBuffer, UINT16 &rusValue)
  89. {
  90.     rusValue = ((pBuffer[0] << 8) & 0xFF00) |
  91.                ( pBuffer[1]       & 0x00FF);
  92.     pBuffer += 2;
  93. };
  94. void Pack8(BYTE * &pBuffer, BYTE ucValue)
  95. {
  96.     pBuffer[0] = ucValue;
  97.     pBuffer++;
  98. };
  99. void UnPack8(BYTE * &pBuffer, BYTE &rucValue)
  100. {
  101.     rucValue = pBuffer[0];
  102.     pBuffer++;
  103. };
  104. void PackBool(BYTE * &pBuffer, BOOL bValue)
  105. {
  106.     if (bValue)
  107.     {
  108.         Pack8(pBuffer, 1);
  109.     }
  110.     else
  111.     {
  112.         Pack8(pBuffer, 0);
  113.     }
  114. };
  115. void UnPackBool(BYTE * &pBuffer, BOOL &rbValue)
  116. {
  117.     BYTE ucTmp;
  118.     UnPack8(pBuffer, ucTmp);
  119.     rbValue = (ucTmp ? TRUE : FALSE);
  120. };
  121. void PackString(BYTE * &pBuffer, const GString &rString)
  122. {
  123.     Pack16(pBuffer, (UINT16) rString.length());
  124.     if (rString.length() > 0)
  125.     {
  126. //        memcpy(pBuffer, (BYTE *) rString.c_str(), rString.length());
  127. //        pBuffer += rString.length();
  128.         strcpy((char *) pBuffer, rString.c_str());
  129.         pBuffer += rString.length() + 1;
  130.     }
  131. };
  132. void UnPackString(BYTE * &pBuffer, GString &rString)
  133. {
  134.     UINT16 usLength;
  135.     UnPack16(pBuffer, usLength);
  136.     if (usLength > 0)
  137.     {
  138.         rString.CopyN(pBuffer, (UINT32) usLength);
  139. //        pBuffer += (UINT32) usLength;
  140.         pBuffer += (UINT32) (usLength + 1);
  141.     }
  142. };
  143. void PackStringNoNullTerm(BYTE * &pBuffer, const GString &rString)
  144. {
  145.     Pack16(pBuffer, (UINT16) rString.length());
  146.     if (rString.length() > 0)
  147.     {
  148.         memcpy(pBuffer, (BYTE *) rString.c_str(), rString.length()); /* Flawfinder: ignore */
  149.         pBuffer += rString.length();
  150.     }
  151. };
  152. void UnPackStringNoNullTerm(BYTE * &pBuffer, GString &rString)
  153. {
  154.     UINT16 usLength;
  155.     UnPack16(pBuffer, usLength);
  156.     if (usLength > 0)
  157.     {
  158.         rString.CopyN(pBuffer, (UINT32) usLength);
  159.         pBuffer += (UINT32) usLength;
  160.     }
  161. };
  162. void PackString(BYTE * &pBuffer, const CHXString &rString)
  163. {
  164.     Pack16(pBuffer, (UINT16) rString.GetLength());
  165.     if (rString.GetLength() > 0)
  166.     {
  167.         strcpy((char *) pBuffer, (const char *) rString); /* Flawfinder: ignore */
  168.         pBuffer += rString.GetLength() + 1;
  169.     }
  170. };
  171. void UnPackString(BYTE * &pBuffer, CHXString &rString)
  172. {
  173.     UINT16 usLength;
  174.     UnPack16(pBuffer, usLength);
  175.     if (usLength > 0)
  176.     {
  177.         rString = (const char *) pBuffer;
  178.         pBuffer += (UINT32) (usLength + 1);
  179.     }
  180. };
  181. void PackStringNoNullTerm(BYTE * &pBuffer, const CHXString &rString)
  182. {
  183.     Pack16(pBuffer, (UINT16) rString.GetLength());
  184.     if (rString.GetLength() > 0)
  185.     {
  186.         memcpy((void*) pBuffer, (const char*) rString, rString.GetLength()); /* Flawfinder: ignore */
  187.         pBuffer += rString.GetLength();
  188.     }
  189. };
  190. void UnPackStringNoNullTerm(BYTE * &pBuffer, CHXString &rString)
  191. {
  192.     UINT16 usLength;
  193.     UnPack16(pBuffer, usLength);
  194.     if (usLength > 0)
  195.     {
  196.         CHXString cTmp((const char*) pBuffer, (int) usLength);
  197.         rString  = cTmp;
  198.         pBuffer += (UINT32) usLength;
  199.     }
  200. };
  201. void PackStringBuffer(BYTE * &pBuffer, IHXBuffer* pIHXBuffer)
  202. {
  203.     if (pIHXBuffer)
  204.     {
  205.         UINT32 ulLen = (UINT32) strlen((const char*) pIHXBuffer->GetBuffer());
  206.         Pack16(pBuffer, (UINT16) ulLen);
  207.         if (ulLen > 0)
  208.         {
  209.             strcpy((char*) pBuffer, (const char*) pIHXBuffer->GetBuffer()); /* Flawfinder: ignore */
  210.             pBuffer += ulLen + 1;
  211.         }
  212.     }
  213.     else
  214.     {
  215.         Pack16(pBuffer, (UINT16) 0);
  216.     }
  217. }
  218. HX_RESULT UnPackStringBuffer(BYTE * &pBuffer, IHXBuffer** ppIHXBuffer)
  219. {
  220.     HX_RESULT   retVal = HXR_OK;
  221.     UINT16 usLength = 0;
  222.     UnPack16(pBuffer, usLength);
  223.     if (usLength > 0)
  224.     {
  225.         IHXBuffer* pBuf   = (IHXBuffer*) new CHXBuffer();
  226.         if (pBuf)
  227.         {
  228.             pBuf->AddRef();
  229.             retVal = pBuf->Set(pBuffer, (UINT32) usLength + 1);
  230.             if (SUCCEEDED(retVal))
  231.             {
  232.                 pBuffer      += usLength + 1;
  233.                 *ppIHXBuffer = pBuf;
  234.             }
  235.         }
  236.         else
  237.         {
  238.             retVal = HXR_OUTOFMEMORY;
  239.         }
  240.     }
  241.     return retVal;
  242. }
  243. HX_RESULT UnPackStringBufferNoNullTerm(BYTE * &pBuffer, IHXBuffer** ppIHXBuffer)
  244. {
  245.     HX_RESULT   retVal = HXR_OK;
  246.     UINT16 usLength = 0;
  247.     UnPack16(pBuffer, usLength);
  248.     if (usLength > 0)
  249.     {
  250.         IHXBuffer* pBuf   = (IHXBuffer*) new CHXBuffer();
  251.         if (pBuf)
  252.         {
  253.             pBuf->AddRef();
  254.             retVal = pBuf->Set(pBuffer, (UINT32) usLength);
  255.             if (SUCCEEDED(retVal))
  256.             {
  257.                 pBuffer      += usLength;
  258.                 *ppIHXBuffer = pBuf;
  259.             }
  260.         }
  261.         else
  262.         {
  263.             retVal = HXR_OUTOFMEMORY;
  264.         }
  265.     }
  266.     return retVal;
  267. }