📄 jpush_general.c
字号:
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 + -