gensdptest.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 "hlxclib/stdio.h"
  36. #define  INITGUID
  37. #include "hxcom.h"
  38. #include "chxminiccf.h"
  39. #include "ihxpckts.h"
  40. #include "sdpmdparse.h"
  41. IHXBuffer* ReadSDPFile(IHXCommonClassFactory* pCCF, const char* pFilename)
  42. {
  43.     IHXBuffer* pBuf = 0;
  44.     FILE* pFile = ::fopen(pFilename, "rb");
  45.     if (pFile)
  46.     {
  47. if (!fseek(pFile, 0, SEEK_END))
  48. {
  49.     long fileSize = ftell(pFile);
  50.     
  51.     if (HXR_OK == pCCF->CreateInstance(CLSID_IHXBuffer,(void**)&pBuf))
  52.     {
  53. BOOL bFailed = TRUE;
  54. if ((HXR_OK == pBuf->SetSize(fileSize)) &&
  55.     (!fseek(pFile, 0, SEEK_SET)) &&
  56.     (fread(pBuf->GetBuffer(), fileSize, 1, pFile) == 1))
  57. {
  58.     bFailed = FALSE;
  59. }
  60. if (bFailed)
  61. {
  62.     pBuf->Release();
  63.     pBuf = 0;
  64. }
  65.     }
  66. }
  67. ::fclose(pFile);
  68.     }
  69.     return pBuf;
  70. }
  71. void PrintString(IHXBuffer* pBuf)
  72. {
  73.     const char* pCur = (const char*)pBuf->GetBuffer();
  74.     const char* pEnd = pCur + pBuf->GetSize();
  75.     
  76.     for (; pCur < pEnd; pCur++)
  77.     {
  78. if (*pCur == 'r')
  79. {
  80.     printf("\r");
  81. }
  82. else if (*pCur == 'n')
  83. {
  84.     printf("\n");
  85. }
  86. else if (*pCur == '"')
  87. {
  88.     printf("\"");
  89. }
  90. else if (*pCur == '\')
  91. {
  92.     printf("\\");
  93. }
  94. else if(*pCur)
  95. {
  96.     printf("%c", *pCur);
  97. }
  98.     }
  99. }
  100. ULONG32 CountULONG32(IHXValues* pHdr)
  101. {
  102.     ULONG32 ulCount = 0;
  103.     
  104.     const char* pName = 0;
  105.     ULONG32 ulValue = 0;
  106.     HX_RESULT res = pHdr->GetFirstPropertyULONG32(pName, ulValue);
  107.     
  108.     while (HXR_OK == res)
  109.     {
  110. ulCount++;
  111. res = pHdr->GetNextPropertyULONG32(pName, ulValue);
  112.     }
  113.     return ulCount;
  114. }
  115. void OutputULONG32Tests(UINT16 ulStreamID, IHXValues* pHdr)
  116. {
  117.     const char* pName = 0;
  118.     ULONG32 ulValue = 0;
  119.     HX_RESULT res = pHdr->GetFirstPropertyULONG32(pName, ulValue);
  120.     
  121.     while (HXR_OK == res)
  122.     {
  123. printf ("GetInt %u %s %lun", ulStreamID, pName, ulValue);
  124. res = pHdr->GetNextPropertyULONG32(pName, ulValue);
  125.     }
  126. }
  127. ULONG32 CountStrings(IHXValues* pHdr)
  128. {
  129.     ULONG32 ulCount = 0;
  130.     
  131.     const char* pName = 0;
  132.     IHXBuffer* pValue = 0;
  133.     HX_RESULT res = pHdr->GetFirstPropertyCString(pName, pValue);
  134.     
  135.     while (HXR_OK == res)
  136.     {
  137. ulCount++;
  138. HX_RELEASE(pValue);
  139. res = pHdr->GetNextPropertyCString(pName, pValue);
  140.     }
  141.     
  142.     HX_RELEASE(pValue);
  143.     return ulCount;
  144. }
  145. void OutputStrings(UINT16 ulStreamID, IHXValues* pHdr)
  146. {
  147.     const char* pName = 0;
  148.     IHXBuffer* pValue = 0;
  149.     HX_RESULT res = pHdr->GetFirstPropertyCString(pName, pValue);
  150.     
  151.     while (HXR_OK == res)
  152.     {
  153. printf("GetString %u "%s" "", ulStreamID, pName);
  154. PrintString(pValue);
  155. printf(""n");
  156. HX_RELEASE(pValue);
  157. res = pHdr->GetNextPropertyCString(pName, pValue);
  158.     }
  159.     
  160.     HX_RELEASE(pValue);
  161. }
  162. ULONG32 CountBuffers(IHXValues* pHdr)
  163. {
  164.     ULONG32 ulCount = 0;
  165.     
  166.     const char* pName = 0;
  167.     IHXBuffer* pValue = 0;
  168.     HX_RESULT res = pHdr->GetFirstPropertyBuffer(pName, pValue);
  169.     
  170.     while (HXR_OK == res)
  171.     {
  172. ulCount++;
  173. HX_RELEASE(pValue);
  174. res = pHdr->GetNextPropertyBuffer(pName, pValue);
  175.     }
  176.     
  177.     HX_RELEASE(pValue);
  178.     return ulCount;
  179. }
  180. void OutputBuffers(UINT16 ulStreamID, IHXValues* pHdr)
  181. {
  182.     const char* pName = 0;
  183.     IHXBuffer* pValue = 0;
  184.     HX_RESULT res = pHdr->GetFirstPropertyBuffer(pName, pValue);
  185.     
  186.     while (HXR_OK == res)
  187.     {
  188. printf("GetBuffer %u "%s" "", ulStreamID, pName);
  189. UCHAR* pCur = pValue->GetBuffer();
  190. UCHAR* pEnd = pCur + pValue->GetSize();
  191. static const char z_hexChars[] = "0123456789abcdef";
  192. for (;pCur < pEnd; pCur++)
  193. {
  194.     printf("%c%c", z_hexChars[*pCur >> 4], z_hexChars[*pCur & 0xf]);
  195. }
  196. printf(""n");
  197. HX_RELEASE(pValue);
  198. res = pHdr->GetNextPropertyBuffer(pName, pValue);
  199.     }
  200.     
  201.     HX_RELEASE(pValue);
  202. }
  203. HX_RESULT Parse(IUnknown* pContext, ULONG32 ulVersion, IHXBuffer* pSDP)
  204. {
  205.     SDPMediaDescParser parser(ulVersion);
  206.     HX_RESULT res = parser.Init(pContext);
  207.     if (HXR_OK == res)
  208.     {
  209. UINT16 nValues = 0;
  210. IHXValues** ppValues = 0;
  211. res = parser.Parse(pSDP, nValues, ppValues);
  212. printf("Init %lun", ulVersion);
  213. printf("Parse 0x%08x %lu "", res, nValues);
  214. PrintString(pSDP);
  215. printf (""n");
  216. for (UINT16 i = 0; i < nValues; i++)
  217. {
  218.     IHXValues* pHdr = ppValues[i];
  219.     printf ("IntCount %u %lun", i, CountULONG32(pHdr));
  220.     OutputULONG32Tests(i, pHdr);
  221.     printf ("StringCount %u %lun", i, CountStrings(pHdr));
  222.     OutputStrings(i, pHdr);
  223.     printf ("BufferCount %u %lun", i, CountBuffers(pHdr));
  224.     OutputBuffers(i, pHdr);
  225. }
  226.     }
  227.     return res;
  228. }
  229. int main(int argc, char* argv[])
  230. {
  231.     if (argc != 3)
  232.     {
  233. fprintf(stderr, "Usage : %s <sdp version> <sdp file>n", argv[0]);
  234.     }
  235.     else
  236.     {
  237. IUnknown* pContext = new CHXMiniCCF();
  238. if (pContext)
  239. {
  240.     pContext->AddRef();
  241.     
  242.     IHXCommonClassFactory* pCCF = 0;
  243.     if (HXR_OK == pContext->QueryInterface(IID_IHXCommonClassFactory,
  244.    (void**)&pCCF))
  245.     {
  246. IHXBuffer* pSDP = ReadSDPFile(pCCF, argv[2]);
  247. if (pSDP)
  248. {
  249.     if (HXR_OK != Parse(pContext, strtoul(argv[1], 0, 10), 
  250. pSDP))
  251.     {
  252. fprintf(stderr, "Failed to parse SDPn", argv[1]);
  253.     }
  254.     pSDP->Release();
  255.     pSDP = 0;
  256. }
  257. else
  258. {
  259.     fprintf(stderr, "Failed to read SDP file '%s'n", argv[2]);
  260. }
  261. pCCF->Release();
  262. pCCF = 0;
  263.     }
  264.          
  265.     pContext->Release();
  266.     pContext = 0;
  267. }
  268.     }
  269.     return 0;
  270. }