⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jbrowserdrmhandler.c

📁 MTK手机平台的MMI部分的源代码
💻 C
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 * jBrowserDRMHandler.c
 *
 * Project:
 * --------
 *   MAUI
 *
 * Description:
 * ------------
 *   This is DRm handler file for Browser
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

#ifndef _JBROWSERDRMHANDLER_C_
#define _JBROWSERDRMHANDLER_C_

#include "MMI_features.h"
#ifdef __DRM_SUPPORT__
#if defined (JATAAYU_SUPPORT) && defined (WAP_SUPPORT)

#include "jBrowserDRMHandler.h"
#include "JBrowserMMITypes.h"
#include "drm_gprot.h"
#include "jdd_MessagingConfig.h"
#include "miscutils.h"

brw_drm_context_struct g_brw_drm_cntx;


/*****************************************************************************
 * FUNCTION
 *  jBrowser_drm_indication_handler
 * DESCRIPTION
 *  -
 * PARAMETERS
 *  pvDRMArg                    [?]         
 *  pcMimeType                  [?]         
 *  pstMimeContent              [?]         
 *  cbResponseHandler           [IN]        
 *  cbMoreContentHandler        [IN]        
 *  pvAppArg                    [?]         
 *  puiDRMRefID                 [?]         
 *  pstDRMInfo                  [?]         
 *  -(?)
 * RETURNS
 *  -
 *****************************************************************************/
JC_RETCODE jBrowser_drm_indication_handler(
            void *pvDRMArg,
            JC_INT8 *pcMimeType,
            ST_MIME_CONTENT *pstMimeContent,
            CB_DRM_RESPONSE_HANDLER cbResponseHandler,
            CB_DRM_MORE_CONTENT_HANDLER cbMoreContentHandler,
            void *pvAppArg,
            JC_UINT32 *puiDRMRefID,
            ST_DRM_PARSED_INFO *pstDRMInfo)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    g_brw_drm_cntx.drm_arg = pvDRMArg;
    g_brw_drm_cntx.drm_content = pstMimeContent;
    g_brw_drm_cntx.drm_response_callback = cbResponseHandler;
    g_brw_drm_cntx.drm_app_arg = pvAppArg;

    if (!jc_strcmp(pcMimeType, "application/vnd.oma.drm.message"))
    {
        g_brw_drm_cntx.drm_type = DRM_TYPE_MESSAGE;
    }
    else if (!jc_strcmp(pcMimeType, "application/vnd.oma.drm.content"))
    {
        g_brw_drm_cntx.drm_type = DRM_TYPE_CONTENT;
    }

    *puiDRMRefID = (JC_UINT32) g_brw_drm_cntx.drm_content->uData.pmFileName;
    g_brw_drm_cntx.drm_ref_id = *puiDRMRefID;

    jBrowser_send_parse_drm_event();

    return JC_ERR_ASYNC_CALL;
}


/*****************************************************************************
 * FUNCTION
 *  jBrowser_send_parse_drm_event
 * DESCRIPTION
 *  -
 * PARAMETERS
 *  void
 *  -(?)
 * RETURNS
 *  -(?)
 *****************************************************************************/
void jBrowser_send_parse_drm_event(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE iRet = JC_OK;
    JC_EVENT_DATA eventData = {0};

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    jc_memset(&eventData, 0, sizeof(JC_EVENT_DATA));

    eventData.pEventInfo = NULL;
    eventData.uiEventInfoSize = 0;
    eventData.iEventType = E_BRW_PARSE_DRM_EVENT;

    eventData.destTaskInfo.iAppID = E_TASK_BROWSER_UI;
    eventData.destTaskInfo.iTaskID = E_TASK_BROWSER_UI;

    eventData.srcTaskInfo.iAppID = E_TASK_BROWSER_UI;
    eventData.srcTaskInfo.iTaskID = E_TASK_BROWSER_UI;

    iRet = jdd_QueueSend(&eventData);
    if (JC_OK != iRet)
    {
        return;
    }
}


/*****************************************************************************
 * FUNCTION
 *  jBrowser_parse_drm_content
 * DESCRIPTION
 *  -
 * PARAMETERS
 *  void
 *  -(?)
 * RETURNS
 *  -(?)
 *****************************************************************************/
void jBrowser_parse_drm_content(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    ST_DRM_PARSED_INFO parsed_drm_info;
    JC_RETCODE eRet = JC_OK;
    JC_CHAR *drm_content_fname;
    JDD_FSHANDLE fs_handle = NULL;
    U32 drm_ret = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (!fs_handle)
    {
        eRet = jdd_FSInitialize(&fs_handle);
        if (eRet != JC_OK)
        {
            goto ERROR_HANDLE;
        }
    }

    parsed_drm_info.pstRightsObject = (ST_DRM_RIGHTS_OBJECT*) jdd_MemAlloc(sizeof(ST_DRM_RIGHTS_OBJECT), 1);

    if (parsed_drm_info.pstRightsObject == NULL)
    {
        eRet = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }

    parsed_drm_info.pstRightsObject->pcContentID = NULL;
    parsed_drm_info.pstRightsObject->eStatusCode = E_DRM_STATUS_OK;
    parsed_drm_info.pstRightsObject->bIsRender = FALSE;
    parsed_drm_info.pstRightsObject->bIsForwardLock = TRUE;
    parsed_drm_info.pstRightsObject->uiStartTime = 0;
    parsed_drm_info.pstRightsObject->uiDuration = 0;
    parsed_drm_info.pstRightsObject->pstNext = NULL;

    parsed_drm_info.pcContentType = NULL;

    parsed_drm_info.stMimeContent.pucHeader = NULL;
    parsed_drm_info.stMimeContent.uiHeaderLen = 0;
    parsed_drm_info.stMimeContent.bIsBinaryHeader = FALSE;
    parsed_drm_info.stMimeContent.eDataType = E_MIME_FILENAME;
    parsed_drm_info.stMimeContent.uData.pucBuffer = NULL;
    parsed_drm_info.stMimeContent.uData.pmFileName = NULL;
    parsed_drm_info.stMimeContent.uiBufferLen = 0;
    parsed_drm_info.stMimeContent.bHasMoreData = FALSE;

    drm_content_fname =
        (JC_CHAR*) jdd_FSFileNameTranslate(fs_handle, (JC_CHAR*) g_brw_drm_cntx.drm_content->uData.pmFileName);
    if (drm_content_fname == NULL)
    {
        eRet = JC_ERR_MEMORY_ALLOCATION;
        goto ERROR_HANDLE;
    }

    if (g_brw_drm_cntx.drm_type == DRM_TYPE_MESSAGE)
    {
        /* JC_CHAR                      tmp_ext_str[50]; */
        JC_CHAR *encrypted_filename;
        FS_HANDLE file_handle = NULL;
        DRM_RIGHTS_STRUCT *drm_rights = NULL;

        jdd_FSGetDownloadFileName(&encrypted_filename);

        //AnsiiToUnicodeString((PS8)&tmp_ext_str, (PS8)"temp_file.extension");
        //drm_ret  = DRM_process_direct_file((kal_uint8*)"application/vnd.oma.drm.message", (kal_wchar*)drm_content_fname, (kal_wchar*)tmp_ext_str, &content_length);
        drm_ret = DRM_process_virtual_file(
                    (kal_uint8*) "application/vnd.oma.drm.message",
                    (kal_wchar*) drm_content_fname,
                    (kal_wchar*) encrypted_filename);

        /* if(drm_ret > DRM_PROC_RESULT_NO_PERMISSION) */
        if (drm_ret == DRM_PROC_RESULT_OK)
        {
            file_handle = DRM_open_file((kal_wchar*) encrypted_filename, FS_READ_ONLY, DRM_PERMISSION_NONE);
            if (file_handle <= 0)
            {
                DRM_close_file(file_handle);
                eRet = JC_ERR_UNKNOWN;
                goto ERROR_HANDLE;
            }

            drm_rights = DRM_get_rights(file_handle);

            parsed_drm_info.pstRightsObject->bIsRender = TRUE;
            parsed_drm_info.stMimeContent.uData.pmFileName = encrypted_filename;
            parsed_drm_info.pcContentType = jdi_UtilsStrdup((JC_INT8*) DRM_get_content_type(file_handle));
            parsed_drm_info.stMimeContent.uiBufferLen = drm_rights->data_len;
            DRM_close_file(file_handle);
        }
        else
        {
            eRet = JC_ERR_UNKNOWN;
            goto ERROR_HANDLE;
        }
    }
    else if (g_brw_drm_cntx.drm_type == DRM_TYPE_CONTENT)
    {
        drm_ret = DRM_process_virtual_file(
                    (kal_uint8*) "application/vnd.oma.drm.content",
                    (kal_wchar*) drm_content_fname,
                    (kal_wchar*) drm_content_fname);
    }
    else
    {
        eRet = JC_ERR_UNKNOWN;
        goto ERROR_HANDLE;
    }

  ERROR_HANDLE:
    if (fs_handle)
    {
        jdd_FSDeinitialize(fs_handle);
        fs_handle = NULL;
    }

    (g_brw_drm_cntx.drm_response_callback) (g_brw_drm_cntx.drm_app_arg, g_brw_drm_cntx.drm_ref_id, &parsed_drm_info);
}


/*****************************************************************************
 * FUNCTION
 *  jBrowser_drm_rights_update_handler
 * DESCRIPTION
 *  -
 * PARAMETERS
 *  uiDRMRefID          [IN]        
 *  pstRightsObject     [?]         
 *  bIsRendered         [IN]        
 *  -(?)
 * RETURNS
 *  -(?)
 *****************************************************************************/
void jBrowser_drm_rights_update_handler(
        JC_UINT32 uiDRMRefID,
        ST_DRM_RIGHTS_OBJECT *pstRightsObject,
        JC_BOOLEAN bIsRendered)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    return;
}


/*****************************************************************************
 * FUNCTION
 *  jBrowser_drm_more_content_handler
 * DESCRIPTION
 *  -
 * PARAMETERS
 *  pvAppArg            [?]         
 *  uiDRMRefID          [IN]        
 *  pucBuffer           [?]         
 *  uiBufferLen         [IN]        
 *  bHasMoreData        [IN]        
 *  -(?)
 * RETURNS
 *  -
 *****************************************************************************/
JC_RETCODE jBrowser_drm_more_content_handler(
            void *pvAppArg,
            JC_UINT32 uiDRMRefID,
            JC_UINT8 *pucBuffer,
            JC_UINT32 uiBufferLen,
            JC_BOOLEAN bHasMoreData)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    return JC_OK;
}

#endif /* defined (JATAAYU_SUPPORT) && defined (WAP_SUPPORT) */ 
#endif /* __DRM_SUPPORT__ */ /* #ifdef __DRM_SUPPORT__ */
#endif /* _JBROWSERDRMHANDLER_C_ */ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -