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

📄 jnw_stream.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************
 * 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 + -