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

📄 jpush_general.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
        work_info_ptr = old_info_ptr;
        return buf;
    }

    while (size > 0)
    {
        sprintf(_kvmLogStr, "size = %d\n", size);
        Kprintf();
        result = jvm_file_read(smsq_fd, tmp_buf, 25);   /* "type len port timestamp addr_len " */
        //              *type = tmp_buf[0]<<24 | tmp_buf[1]<<16 | tmp_buf[2] << 8 | tmp_buf[3];
        //              *len = tmp_buf[5]<<24 | tmp_buf[6]<<16 | tmp_buf[7] << 8 | tmp_buf[8];
        //              port = tmp_buf[10]<<24 | tmp_buf[11]<<16 | tmp_buf[12] << 8 | tmp_buf[13];
        temp_type =
            ((tmp_buf[0] & 0xFF) << 24) | ((tmp_buf[1] & 0xFF) << 16) | ((tmp_buf[2] & 0xFF) << 8) | (tmp_buf[3] &
                                                                                                      0xFF);
        temp_len =
            ((tmp_buf[5] & 0xFF) << 24) | ((tmp_buf[6] & 0xFF) << 16) | ((tmp_buf[7] & 0xFF) << 8) | (tmp_buf[8] &
                                                                                                      0xFF);
        port =
            ((tmp_buf[10] & 0xFF) << 24) | ((tmp_buf[11] & 0xFF) << 16) | ((tmp_buf[12] & 0xFF) << 8) | (tmp_buf[13] &
                                                                                                         0xFF);

        timestamp[0] = (tmp_buf[15] & 0xFF);
        timestamp[1] = (tmp_buf[16] & 0xFF);
        timestamp[2] = (tmp_buf[17] & 0xFF);
        timestamp[3] = (tmp_buf[18] & 0xFF);
        timestamp[4] = (tmp_buf[19] & 0xFF);
        timestamp[5] = (tmp_buf[20] & 0xFF);
        timestamp[6] = (tmp_buf[21] & 0xFF);

        addr_len = (tmp_buf[23] & 0xFF);

        ASSERT(result >= 0);

        memset(addr_ucs2, 0x00, sizeof(addr_ucs2));
        if (addr_len > 0)
        {
            result = jvm_file_read(smsq_fd, addr_ucs2, addr_len);
            ASSERT(result >= 0);

            /* For the space in the tail */
            addr_len++;

            /* For the space in the tail */
            result = jvm_file_read(smsq_fd, tmp_buf_short, 1);
            ASSERT(result >= 0);
        }

        if (port == dequeue_port && found == KAL_FALSE)
        {
            *type = temp_type;
            *len = temp_len;
            buf = (kal_uint8*) get_ctrl_buffer((*len) + 1);
            memset(buf, 0x00, ((*len) + 1));
            ASSERT(buf);
            result = jvm_file_read(smsq_fd, buf, *len);
            ASSERT(result >= 0);
            found = KAL_TRUE;
        }
        else
        {
            /* Copy the entry to tmp file */
            result = jvm_file_write(new_smsq_fd, tmp_buf, 25);
            ASSERT(result >= 0);

            if (addr_len > 0)
            {
                result = jvm_file_write(new_smsq_fd, addr_ucs2, (addr_len - 1));
                ASSERT(result >= 0);

                tmp_buf_short[0] = ' ';
                result = jvm_file_write(new_smsq_fd, tmp_buf_short, 1);
                ASSERT(result >= 0);
            }

            entry_size = temp_len;
            while (entry_size > 0)
            {
                rw_len = (entry_size > 128 ? 128 : entry_size);
                result = jvm_file_read(smsq_fd, tmp_buf, rw_len);
                ASSERT(result > 0);
                result = jvm_file_write(new_smsq_fd, tmp_buf, rw_len);
                ASSERT(result > 0);
                entry_size -= rw_len;
            }
            result = jvm_file_write(new_smsq_fd, "\n", 1);  /* "\n" */
            ASSERT(result >= 0);
        }

        result = jvm_file_read(smsq_fd, tmp_buf_short, 1);  /* "\n" */
        ASSERT(result >= 0);
        size -= (25 + addr_len + temp_len + 1);
    }

    jvm_file_close(smsq_fd);
    jvm_file_close(new_smsq_fd);

    /* Delete old queue file, and update new queue file */
    result = jvm_file_delete(EUREKA_SMSQUEUE_FILE);
    ASSERT(result == 0);
    result = jvm_file_rename(EUREKA_SMSQUEUETMP_FILE, EUREKA_SMSQUEUE_FILE);
    ASSERT(result == 0);

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

    return buf;
}


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_check_smsqueue_without_remove
 * DESCRIPTION
 *  
 * PARAMETERS
 *  type            [?]         
 *  len             [?]         
 *  check_port      [IN]        
 *  addr            [?]         
 *  timestamp       [?]         
 * RETURNS
 *  
 *****************************************************************************/
kal_uint8 *jpush_eureka_check_smsqueue_without_remove(
            int *type,
            int *len,
            int check_port,
            kal_uint16 *addr,
            kal_uint8 *timestamp)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int smsq_fd;
    kal_uint8 *buf = NULL;
    kal_uint8 tmp_buf[128];
    kal_uint32 size;
    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_uint8 addr_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_check_smsqueue_without_remove: game_type = %d, work_sys_dir_path = %s\n",
        *type,
        work_sys_dir_path);
    Kprintf();

    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);

    if (jvm_file_getsize(smsq_fd, &size) < 0)
    {
        jvm_file_close(smsq_fd);
        work_sys_dir_path = old_sys_dir;
        work_dir_path = old_dir;
        work_info_ptr = old_info_ptr;
        return buf;
    }

    while (size > 0)
    {
        result = jvm_file_read(smsq_fd, tmp_buf, 25);   /* "type len port timestamp addr_len " */
        //              *type = tmp_buf[0]<<24 | tmp_buf[1]<<16 | tmp_buf[2] << 8 | tmp_buf[3];
        //              *len = tmp_buf[5]<<24 | tmp_buf[6]<<16 | tmp_buf[7] << 8 | tmp_buf[8];
        //              port = tmp_buf[10]<<24 | tmp_buf[11]<<16 | tmp_buf[12] << 8 | tmp_buf[13];
        *type =
            ((tmp_buf[0] & 0xFF) << 24) | ((tmp_buf[1] & 0xFF) << 16) | ((tmp_buf[2] & 0xFF) << 8) | (tmp_buf[3] &
                                                                                                      0xFF);
        *len =
            ((tmp_buf[5] & 0xFF) << 24) | ((tmp_buf[6] & 0xFF) << 16) | ((tmp_buf[7] & 0xFF) << 8) | (tmp_buf[8] &
                                                                                                      0xFF);
        port =
            ((tmp_buf[10] & 0xFF) << 24) | ((tmp_buf[11] & 0xFF) << 16) | ((tmp_buf[12] & 0xFF) << 8) | (tmp_buf[13] &
                                                                                                         0xFF);

        timestamp[0] = (tmp_buf[15] & 0xFF);
        timestamp[1] = (tmp_buf[16] & 0xFF);
        timestamp[2] = (tmp_buf[17] & 0xFF);
        timestamp[3] = (tmp_buf[18] & 0xFF);
        timestamp[4] = (tmp_buf[19] & 0xFF);
        timestamp[5] = (tmp_buf[20] & 0xFF);
        timestamp[6] = (tmp_buf[21] & 0xFF);

        addr_len = (tmp_buf[23] & 0xFF);

        ASSERT(result >= 0);

        memset(addr, 0x00, sizeof(addr));
        if (addr_len > 0)
        {
            result = jvm_file_read(smsq_fd, addr, addr_len);
            ASSERT(result >= 0);

            /* For the space in the tail */
            result = jvm_file_read(smsq_fd, tmp_buf, 1);
            ASSERT(result >= 0);

            addr_len++;
        }

        if (port == check_port)
        {
            buf = (kal_uint8*) get_ctrl_buffer((*len) + 1);
            memset(buf, 0x00, ((*len) + 1));
            ASSERT(buf);
            result = jvm_file_read(smsq_fd, buf, *len);
            ASSERT(result >= 0);
            break;
        }

        result = jvm_file_read(smsq_fd, tmp_buf, 1);    /* "\n" */
        ASSERT(result >= 0);
        size -= (25 + addr_len + *len + 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 buf;
}

/*
 * The function will retrieve SMS and save to Eureka private persistent queues.
 * * Meanwhile, the function is executed in JVM context.
 */


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_process_pending_sms
 * DESCRIPTION
 *  
 * PARAMETERS
 *  sms_ind     [?]     
 * RETURNS
 *  
 *****************************************************************************/
kal_int32 jpush_eureka_process_pending_sms(mmiapi_sms_ind_struct *sms_ind)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint8 scts[7];
    long portnumber = sms_ind->port_number;
    int result;
    int len = 0;
    char *buf = NULL;
    int type;
    kal_uint16 *addr = NULL;
    kal_uint8 addr_len = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* JVM issue request, polling, and JDaemon received */
    type = _jwa_sms_check_incoming_msg(portnumber, KAL_FALSE);
    while ((result = jwa_sms_get_response_primitive()) != MSG_J2ME_SMS_CHECK_INCOMING_MSG_RSP);
    type = jwa_sms_get_primitive_result();

    if (type != MSG_J2ME_SMS_TEXT && type != MSG_J2ME_SMS_BINARY)
        return (-1);

    /* Synchronous API */
    addr = (kal_uint16*) _jwa_sms_get_incoming_msg_addr(portnumber, (int*)&addr_len);
    ASSERT(jwa_sms_get_ori_timestamp(portnumber, scts));

    switch (type)
    {
        case MSG_J2ME_SMS_TEXT:
            _jwa_sms_receive_text_msg_req(portnumber);
            while ((result = jwa_sms_get_response_primitive()) != MSG_J2ME_SMS_GET_INCOMING_MSG_RSP);
            result = jwa_sms_get_primitive_result();

            buf = (char*)jwa_sms_receive_text_msg_rsp(&len);
            jpush_eureka_enqueue_sms(type, len, portnumber, buf, addr, addr_len, scts);
            J2ME_sms_free_data();

            break;
        case MSG_J2ME_SMS_BINARY:
            _jwa_sms_receive_binary_msg_req(portnumber);
            while ((result = jwa_sms_get_response_primitive()) != MSG_J2ME_SMS_GET_INCOMING_MSG_RSP);
            result = jwa_sms_get_primitive_result();

            buf = jwa_sms_receive_binary_msg_rsp(&len);
            jpush_eureka_enqueue_sms(type, len, portnumber, buf, addr, addr_len, scts);
            J2ME_sms_free_data();

            break;
        default:
            break;
    }

    return 0;
}


/*****************************************************************************
 * FUNCTION
 *  jpush_eureka_check_smsqueue
 * DESCRIPTION
 *  
 * PARAMETERS
 *  port        [IN]        
 *  len         [?]         
 * RETURNS
 *  
 *****************************************************************************/
kal_uint8 *jpush_eureka_check_smsqueue(int port, int *len)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int type;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    *len = -1;
    return jpush_eureka_dequeue_sms(&type, len, port);
}

#endif /* __SUPPORT_INFUSIO__ */ 

#if PERSISTENT_PUSH


/*****************************************************************************
 * FUNCTION
 *  pushstorage
 * DESCRIPTION
 *  Extract the storage name from the connection connection string
 * PARAMETERS
 *  connection      [?]         [CHAR*]
 *  field           [IN]        
 *  length          [?]         [IN*]
 * RETURNS
 *  void
 *****************************************************************************/
kal_char *pushstorage(kal_char *connection, kal_int32 field, kal_int32 *length)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    char *storagefield;
    char *storagename = NULL;
    kal_int32 comma = 0, len = 0, offset = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    storagename = connection;
    *length = 0;

    if (field)
    {
        /* for (storagefield = connection; *storagefield; storagefield++) { */
        storagefield = connection;
        while (pushlist_len > offset)
        {
            if (*storagefield == ',')
                comma++;
            /* Push entry contains "connection, midletname, filter, storage" */
            /* Alarm entry contains "midletname, alarm, storage" */
            if (comma == field)
            {
                storagename = storagefield + 1;
                break;
            }
            offset++;
            storagefield++;
        }
    }

    /* Ca

⌨️ 快捷键说明

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