📄 jnw_stream.c
字号:
/*****************************************************************************
* FUNCTION
* j2me_stream_close_stream
* DESCRIPTION
*
* PARAMETERS
* channel_type [IN]
* RETURNS
* void
*****************************************************************************/
void j2me_stream_close_stream(kal_uint8 stream_id)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
wps_close_stream_connection_req_struct *close_req = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_CLOSE_STREAM, stream_id);
jui_widget_hide_connect_icon();
close_req = (wps_close_stream_connection_req_struct*) construct_local_para(sizeof(wps_close_stream_connection_req_struct), TD_CTRL);
close_req->channel_id = stream_id;
j2me_stream_send_ilm(close_req, NULL, MSG_ID_WPS_CLOSE_STREAM_CONNECTION_REQ, MOD_WPS);
return;
}
/*****************************************************************************
* FUNCTION
* j2me_stream_response_handler
* DESCRIPTION
*
* PARAMETERS
* ilm_ptr [?]
* RETURNS
* void
*****************************************************************************/
void j2me_stream_response_handler(ilm_struct *ilm_ptr)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_RESPONSE_HANDLER);
if (ilm_ptr->msg_id == MSG_ID_WPS_STREAM_CONNECTION_CLOSED_IND)
{
wps_stream_connection_closed_ind_struct *p = (wps_stream_connection_closed_ind_struct*) ilm_ptr->local_para_ptr;
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_CLOSE_IND, p->channel_id);
j2me_stream_remove(p->channel_id);
return;
}
if (J2ME_async_stream_msgid && flag_wait_async_stream_msgid)
{
/* Pedning async event */
kal_uint32 event_group, polling = 0;
kal_status result;
while (1)
{
/* 2nd bit indicate wait pending async event consumed */
result = kal_retrieve_eg_events(J2ME_async_stream_eventgroup, 0x2, KAL_OR_CONSUME, &event_group, KAL_NO_SUSPEND);
if (result != KAL_NOT_PRESENT || polling++ >= 100)
{
break;
}
/* To avoid deadlock and complicated timer control, use polling */
kal_sleep_task(1);
}
}
J2ME_async_stream_msgid = ilm_ptr->msg_id;
switch (ilm_ptr->msg_id)
{
case MSG_ID_WPS_CREATE_STREAM_CONNECTION_RSP:
{
wps_create_stream_connection_rsp_struct *p = (wps_create_stream_connection_rsp_struct*) ilm_ptr->local_para_ptr;
if (p->result == WPS_OK)
{
jui_widget_show_connect_icon();
j2me_stream_add(p->channel_id);
}
j2me_stream_result.result = p->result;
j2me_stream_result.channel_id = p->channel_id;
}
break;
case MSG_ID_WPS_CLOSE_STREAM_CONNECTION_RSP:
{
wps_close_stream_connection_rsp_struct *p = (wps_close_stream_connection_rsp_struct*) ilm_ptr->local_para_ptr;
if (p->result == WPS_OK)
{
j2me_stream_remove(p->channel_id);
}
j2me_stream_result.result = p->result;
j2me_stream_result.channel_id = p->channel_id;
}
break;
case MSG_ID_WPS_STREAM_DATA_SEND_RSP:
{
wps_stream_data_send_rsp_struct *p = (wps_stream_data_send_rsp_struct*) ilm_ptr->local_para_ptr;
j2me_stream_send_result.result = p->result;
j2me_stream_send_result.channel_id = p->channel_id;
j2me_stream_send_result.seq_num = p->seq_num;
}
break;
case MSG_ID_WPS_STREAM_DATA_READ_RSP:
{
wps_stream_data_read_rsp_struct *p = (wps_stream_data_read_rsp_struct*) ilm_ptr->local_para_ptr;
wps_stream_data_read_rsp_var_struct read_rsp_var;
kal_uint16 pdu_length;
j2me_stream_reset_read_data();
j2me_stream_read_result.channel_id = p->channel_id;
j2me_stream_read_result.result = p->result;
j2me_stream_read_result.more = p->more;
j2me_stream_read_result.seq_num = p->seq_num;
if (p->result == WPS_OK && ilm_ptr->peer_buff_ptr != NULL)
{
if (wps_pun_var_part
(WPS_PUN_UNPACK, ilm_ptr->msg_id, &read_rsp_var,
get_pdu_ptr(ilm_ptr->peer_buff_ptr, &pdu_length)) > 0)
{
j2me_stream_read_result.read_data_length = read_rsp_var.length;
j2me_stream_read_data = (kal_uint8*) jvm_malloc(j2me_stream_read_result.read_data_length);
if (j2me_stream_read_data == NULL)
{
j2me_stream_read_result.result = JNW_STREAM_NO_RESOURCE;
}
else
{
memcpy(
j2me_stream_read_data,
read_rsp_var.data,
j2me_stream_read_result.read_data_length);
}
}
else
{
j2me_stream_read_result.read_data_length = 0;
}
}
else
{
j2me_stream_read_result.read_data_length = 0;
}
}
break;
default:
break;
}
/* notify J2ME thread to process coming async event */
kal_set_eg_events(J2ME_async_stream_eventgroup, 1, KAL_OR);
return;
}
/*****************************************************************************
* FUNCTION
* jnw_stream_open_stream_req
* DESCRIPTION
*
* PARAMETERS
* channelType [IN]
* RETURNS
*
*****************************************************************************/
int jnw_stream_open_stream_req
(kal_bool use_java_setting,
kal_uint8 conn_type,
kal_uint8 addr[4],
kal_uint16 port,
kal_uint16 domain_length,
kal_uint8* domain)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
wps_create_stream_connection_req_struct *set_channel_req;
int i = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_OPEN_STREAM_REQ, use_java_setting, conn_type, domain_length);
i = j2me_stream_search((kal_int16) J2ME_STREAM_INVALID);
if (i >= J2ME_STREAM_MAX_NUMBER)
{
return JNW_STREAM_NO_RESOURCE;
}
if (domain_length > J2ME_STREAM_MAX_DOMAIN_LENGTH)
{
return JNW_STREAM_INVALID_PARAMETER;
}
set_channel_req = (wps_create_stream_connection_req_struct*) construct_local_para(sizeof(wps_create_stream_connection_req_struct), TD_CTRL);
if (use_java_setting == KAL_FALSE)
{
set_channel_req->use_default = KAL_TRUE;
}
else if (jam_get_wap_prof_id() == 0xFF)
{
set_channel_req->use_default = KAL_TRUE;
}
else
{
set_channel_req->use_default = KAL_FALSE;
set_channel_req->net_id = wap_prof.net_id;
}
set_channel_req->conn_type = conn_type;
for (i = 0; i < 4;i++)
{
set_channel_req->addr[i] = addr[i];
}
set_channel_req->port = port;
memset(set_channel_req->domain,0,sizeof(set_channel_req->domain));
if (domain_length > 0)
{
memcpy(set_channel_req->domain,domain,domain_length);
}
j2me_stream_send_ilm(set_channel_req, NULL, MSG_ID_WPS_CREATE_STREAM_CONNECTION_REQ, MOD_WPS);
return JNW_STREAM_OK;
}
/*****************************************************************************
* FUNCTION
* jnw_stream_close_stream_req
* DESCRIPTION
*
* PARAMETERS
* conn_id [IN]
* RETURNS
*
*****************************************************************************/
int jnw_stream_close_stream_req(kal_uint8 channel_id)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
int i = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_CLOSE_STREAM_REQ, channel_id);
i = j2me_stream_search((kal_int16) channel_id);
if (i >= J2ME_STREAM_MAX_NUMBER)
{
return JNW_STREAM_CLOSED_STREAM;
}
j2me_stream_close_stream (channel_id);
return JNW_STREAM_OK;
}
/*****************************************************************************
* FUNCTION
* jnw_stream_send_data_req
* DESCRIPTION
*
* PARAMETERS
* channel_id [IN]
* seq_num [IN]
* length [IN]
* data [IN]
* RETURNS
*
*****************************************************************************/
int jnw_stream_send_data_req
(kal_uint8 channel_id,
kal_uint8 seq_num,
kal_uint32 length,
kal_uint8* data )
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
wps_stream_data_send_req_struct *send_req;
peer_buff_struct *peer_buff_ptr;
wps_stream_data_send_req_var_struct send_req_var;
kal_uint16 pdu_length;
int i = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_3, FUNC_J2ME_STREAM_SEND_STREAM_REQ, channel_id, length);
i = j2me_stream_search((kal_int16) channel_id);
if (i >= J2ME_STREAM_MAX_NUMBER)
{
return JNW_STREAM_CLOSED_STREAM;
}
if (length > 2000)
{
return JNW_STREAM_INVALID_PARAMETER;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -