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

📄 jpush_general.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
    /* Find all of the entries to remove */
    for (pushp = g_jpush_pushlist_ptr; pushp != NULL; pushp = pushnext)
    {
        pushnext = pushp->next;
        if (strcmp(store, pushp->storagename) == 0)
        {
            for (i = 0; i < MAX_PUSH_REGISTRY; i++)
            {
                /* remove the push indication memorized by MMI */
                if (timealarm_push_ind_msg_used[i])
                {
                    if (strcmp(store, timealarm_push_ind_msg[i].mids_storage_name) == 0)
                    {
                        jpush_search_and_delete_persistent_push(
                            timealarm_push_ind_msg[i].game_type,
                            0,
                            timealarm_push_ind_msg[i].pushalarm_type,
                            timealarm_push_ind_msg[i].mid_class_name,
                            timealarm_push_ind_msg[i].mids_storage_name,
                            pushp->filter,
                            pushp->connection,
                            pushp->appid,
                            KAL_TRUE);
                        timealarm_push_ind_msg_used[i] = KAL_FALSE;
                        timealarm_push_ind_msg[i].mids_storage_name = NULL;
                    }
                }
            }
            *pPrevNext = pushp->next;
            g_push_length--;

            /* Unregister the sms port */
            if (pushp->portNo != -1)
            {
                J2ME_sms_unregister(pushp->portNo, PUSH_REGISTRY);
            }
            else if (pushp->appid != NULL)
            {
                J2ME_mms_register(pushp->appid, 1, PUSH_REGISTRY);      /* 1 for unregister */
            }

            free_ctrl_buffer(pushp->connection);
            free_ctrl_buffer(pushp->midlet);
            free_ctrl_buffer(pushp->filter);
            free_ctrl_buffer(pushp->storagename);
            if (pushp->appid != NULL)
            {
                free_ctrl_buffer(pushp->appid);
            }
            free_ctrl_buffer(pushp);
            continue;
        }
        pPrevNext = &pushp->next;
    }

    jpush_push_save();

    /* Find all of the alarm entries to remove */
    for (alarmp = g_jpush_alarmlist_ptr; alarmp != NULL; alarmp = alarmnext)
    {
        alarmnext = alarmp->next;
        if (strcmp(store, alarmp->storagename) == 0)
        {
            for (i = 0; i < MAX_PUSH_REGISTRY; i++)
            {
                /* remove the push indication memorized by MMI */
                if (timealarm_push_ind_msg_used[i])
                {
                    if (strcmp(store, timealarm_push_ind_msg[i].mids_storage_name) == 0)
                    {
                        jpush_search_and_delete_persistent_push(
                            timealarm_push_ind_msg[i].game_type,
                            0,
                            timealarm_push_ind_msg[i].pushalarm_type,
                            timealarm_push_ind_msg[i].mid_class_name,
                            timealarm_push_ind_msg[i].mids_storage_name,
                            NULL,
                            NULL,
                            NULL,
                            KAL_TRUE);
                        timealarm_push_ind_msg_used[i] = KAL_FALSE;
                        timealarm_push_ind_msg[i].mids_storage_name = NULL;
                    }
                }
            }
            *alarmpPrevNext = alarmp->next;

            free_ctrl_buffer(alarmp->midlet);
            alarmp->midlet = NULL;
            free_ctrl_buffer(alarmp->storagename);
            alarmp->storagename = NULL;
            free_ctrl_buffer(alarmp);
            continue;
        }
        alarmpPrevNext = &alarmp->next;
    }

    jpush_alarm_save();
}


/*****************************************************************************
 * FUNCTION
 *  jpush_push_checkappid
 * DESCRIPTION
 *  check if this appid is registered by mms push or not.
 *  if it is registered, tell it is registered by the same midlet or not.
 * PARAMETERS
 *  application_id      [?]    
 *  type                [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
int jpush_push_checkappid(char *application_id, int type)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    char *appid = application_id;
    pushentry_struct *p;
    int result = NON_REGISTERED;
    char *cur_suite;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, FUNC_J2ME_CHECK_PUSH_REGISTER_PORT);

    /* Find the entry to pass off the open file descriptor. */
    for (p = g_jpush_pushlist_ptr; p; p = p->next)
    {
        if (p->appid != NULL)
        {
            if (strcmp(appid, p->appid) == 0)
            {

                cur_suite = jam_current_midletsuite_name();
            #ifdef MIDP_PUSH_DEBUG
                if (cur_suite)
                {
                    sprintf(_kvmLogStr, "J2ME Debug: j2me_check_push_register_port commandstate: %s", cur_suite);
                    Kprintf();
                }
                sprintf(_kvmLogStr, "J2ME Debug: j2me_check_push_register_port check: %s", p->storagename);
                Kprintf();
            #endif /* MIDP_PUSH_DEBUG */ 

                if (cur_suite && (strcmp(p->storagename, cur_suite) == 0))
                {
                    /* The same midletsuite register the port. */
                    result = PUSH_REGISTERED;
                }
                else
                {
                    /* Already register by other midlet suite */
                    result = PUSH_CONFLICT_REGISTERED;
                }

                break;
            }
        }
    }
    return result;
}

#ifdef __SUPPORT_INFUSIO__


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_init
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
int jpush_eureka_init(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int result = 0;
    int smsq_fd;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_INFUSIO_EUREKA);
    work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_INFUSIO_EUREKA);
    /* Now read the pending sms in queue */
    if ((smsq_fd = jvm_file_open(EUREKA_SMSQUEUE_FILE, O_RDONLY)) != -1)
    {
        /* If need to do something */
    }
    else if ((smsq_fd = jvm_file_open(EUREKA_SMSQUEUE_FILE, O_CREAT | O_TRUNC)) == -1)
    {
        result = -1;
    }

    if (smsq_fd > 0)
    {
        jvm_file_close(smsq_fd);
    }

    return result;
}


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_enqueue_sms
 * DESCRIPTION
 *  
 * PARAMETERS
 *  type            [IN]        
 *  len             [IN]        
 *  port            [IN]        
 *  buf             [?]         
 *  addr            [?]         
 *  addr_len        [IN]        
 *  timestamp       [?]         
 * RETURNS
 *  
 *****************************************************************************/
kal_int32
jpush_eureka_enqueue_sms(
    int type,
    int len,
    int port,
    char *buf,
    kal_uint16 *addr,
    kal_uint8 addr_len,
    kal_uint8 *timestamp)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int smsq_fd;
    kal_uint8 tmp_buf[30];
    int result;
    j2me_custom_file_info_struct *old_info_ptr = work_info_ptr;
    kal_char *old_sys_dir = work_sys_dir_path;
    kal_char *old_dir = work_dir_path;
    kal_uint8 i = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_INFUSIO_EUREKA);
    work_dir_path = work_sys_dir_path;
    work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_INFUSIO_EUREKA);

    sprintf(_kvmLogStr, "jpush_eureka_enqueue_sms: game_type = %d, work_sys_dir_path = %s\n", type, work_sys_dir_path);
    Kprintf();

    /* Now read the pending sms in queue */
    if ((smsq_fd = jvm_file_open(EUREKA_SMSQUEUE_FILE, O_RDWR)) < 0)
    {
        work_sys_dir_path = old_sys_dir;
        work_dir_path = old_dir;
        work_info_ptr = old_info_ptr;
        return (-1);
    }

    jvm_file_lseek(smsq_fd, 0, SEEK_END);

    tmp_buf[i++] = (kal_uint8) ((type & 0xff000000) >> 24);
    tmp_buf[i++] = (kal_uint8) ((type & 0x00ff0000) >> 16);
    tmp_buf[i++] = (kal_uint8) ((type & 0x0000ff00) >> 8);
    tmp_buf[i++] = (kal_uint8) (type & 0x000000ff);
    tmp_buf[i++] = ' ';
    tmp_buf[i++] = (kal_uint8) ((len & 0xff000000) >> 24);
    tmp_buf[i++] = (kal_uint8) ((len & 0x00ff0000) >> 16);
    tmp_buf[i++] = (kal_uint8) ((len & 0x0000ff00) >> 8);
    tmp_buf[i++] = (kal_uint8) (len & 0x000000ff);
    tmp_buf[i++] = ' ';
    tmp_buf[i++] = (kal_uint8) ((port & 0xff000000) >> 24);
    tmp_buf[i++] = (kal_uint8) ((port & 0x00ff0000) >> 16);
    tmp_buf[i++] = (kal_uint8) ((port & 0x0000ff00) >> 8);
    tmp_buf[i++] = (kal_uint8) (port & 0x000000ff);
    tmp_buf[i++] = ' ';
    tmp_buf[i++] = (kal_uint8) (timestamp[0] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[1] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[2] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[3] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[4] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[5] & 0xFF);
    tmp_buf[i++] = (kal_uint8) (timestamp[6] & 0xFF);
    tmp_buf[i++] = ' ';
    tmp_buf[i++] = addr_len;
    tmp_buf[i++] = ' ';

    sprintf(_kvmLogStr, "buf: %s\n", tmp_buf);
    Kprintf();

    /* "type len port timestamp addr_len addr buf\n " */
    result = jvm_file_write(smsq_fd, tmp_buf, i);   /* 25 */
    ASSERT(result >= 0);

    if (addr_len)
    {
        result = jvm_file_write(smsq_fd, addr, addr_len);
        ASSERT(result >= 0);

        tmp_buf[0] = ' ';
        result = jvm_file_write(smsq_fd, tmp_buf, 1);
        ASSERT(result >= 0);
    }

    if (len)
    {
        result = jvm_file_write(smsq_fd, buf, len);
        ASSERT(result >= 0);
    }
    jvm_file_write(smsq_fd, "\n", 1);

    jvm_file_close(smsq_fd);

    work_sys_dir_path = old_sys_dir;
    work_dir_path = old_dir;
    work_info_ptr = old_info_ptr;

    return 0;
}


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_dequeue_sms
 * DESCRIPTION
 *  
 * PARAMETERS
 *  type                [?]         
 *  len                 [?]         
 *  dequeue_port        [IN]        
 * RETURNS
 *  
 *****************************************************************************/
kal_uint8 *jpush_eureka_dequeue_sms(int *type, int *len, int dequeue_port)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint16 addr_ucs2[6 + MAX_CC_ADDR_LEN + 7];
    kal_uint8 timestamp[7];
    int smsq_fd, new_smsq_fd;
    kal_uint8 *buf = NULL;
    kal_uint8 tmp_buf[128];
    kal_uint8 tmp_buf_short[2];
    kal_uint32 size, entry_size, rw_len;
    int result;
    j2me_custom_file_info_struct *old_info_ptr = work_info_ptr;
    kal_char *old_sys_dir = work_sys_dir_path;
    kal_char *old_dir = work_dir_path;
    int port;
    kal_bool found = KAL_FALSE;
    kal_uint8 addr_len = 0;
    int temp_type = 0;
    int temp_len = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* initialize invalid value */
    *type = -1;
    *len = -1;

    work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_INFUSIO_EUREKA);
    work_dir_path = work_sys_dir_path;
    work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_INFUSIO_EUREKA);

    sprintf(
        _kvmLogStr,
        "jpush_eureka_dequeue_sms: game_type = %d, work_sys_dir_path = %s\n",
        (int)type,
        work_sys_dir_path);
    Kprintf();

    if ((new_smsq_fd = jvm_file_open(EUREKA_SMSQUEUETMP_FILE, O_CREAT | O_TRUNC)) < 0)
    {
        work_sys_dir_path = old_sys_dir;
        work_dir_path = old_dir;
        work_info_ptr = old_info_ptr;
        return buf;
    }
    if ((smsq_fd = jvm_file_open(EUREKA_SMSQUEUE_FILE, O_RDONLY)) < 0)
    {
        work_sys_dir_path = old_sys_dir;
        work_dir_path = old_dir;
        work_info_ptr = old_info_ptr;
        return buf;
    }

    jvm_file_lseek(smsq_fd, 0, SEEK_SET);
    jvm_file_lseek(new_smsq_fd, 0, SEEK_SET);

    if (jvm_file_getsize(smsq_fd, &size) < 0)
    {
        jvm_file_close(smsq_fd);
        jvm_file_close(new_smsq_fd);
        work_sys_dir_path = old_sys_dir;
        work_dir_path = old_dir;

⌨️ 快捷键说明

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