Exemple #1
0
static void dissect_tns_connect(tvbuff_t *tvb, int offset, packet_info *pinfo,
	proto_tree *tree, proto_tree *tns_tree)
{
	proto_tree *connect_tree = NULL, *ti;
	proto_item *hidden_item;
	int cd_offset;
	int cd_len;
	int tns_offset = offset-8;

	if ( tree )
	{
		connect_tree = proto_tree_add_subtree(tns_tree, tvb, offset, -1,
		    ett_tns_connect, NULL, "Connect");

		hidden_item = proto_tree_add_boolean(tns_tree, hf_tns_connect, tvb,
				    0, 0, TRUE);
		PROTO_ITEM_SET_HIDDEN(hidden_item);
	}

	col_append_str(pinfo->cinfo, COL_INFO, ", Connect");

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_version, tvb,
			offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_compat_version, tvb,
			offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree *sopt_tree = NULL;

		ti = proto_tree_add_item(connect_tree, hf_tns_service_options, tvb,
			offset, 2, ENC_BIG_ENDIAN);

		sopt_tree = proto_item_add_subtree(ti, ett_tns_sopt_flag);

		dissect_tns_service_options(tvb, offset, sopt_tree);


	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_sdu_size, tvb,
			offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_max_tdu_size, tvb,
			offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree *ntp_tree = NULL;

		ti = proto_tree_add_item(connect_tree, hf_tns_nt_proto_characteristics, tvb,
			offset, 2, ENC_BIG_ENDIAN);

		ntp_tree = proto_item_add_subtree(ti, ett_tns_ntp_flag);

		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_hangon, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_crel, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_tduio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_srun, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_dtest, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_cbio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_asio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_pio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_grant, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_handoff, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_sigio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_sigpipe, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_sigurg, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_urgentio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_fdio, tvb, offset, 2, ENC_BIG_ENDIAN);
		proto_tree_add_item(ntp_tree, hf_tns_ntp_flag_testop, tvb, offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_line_turnaround, tvb,
			offset, 2, ENC_BIG_ENDIAN);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_value_of_one, tvb,
			offset, 2, ENC_NA);
	}
	offset += 2;

	cd_len = tvb_get_ntohs(tvb, offset);
	if ( connect_tree )
	{
		proto_tree_add_uint(connect_tree, hf_tns_connect_data_length, tvb,
			offset, 2, cd_len);
	}
	offset += 2;

	cd_offset = tvb_get_ntohs(tvb, offset);
	if ( connect_tree )
	{
		proto_tree_add_uint(connect_tree, hf_tns_connect_data_offset, tvb,
			offset, 2, cd_offset);
	}
	offset += 2;

	if ( connect_tree )
	{
		proto_tree_add_item(connect_tree, hf_tns_connect_data_max, tvb,
			offset, 4, ENC_BIG_ENDIAN);
	}
	offset += 4;

	if ( connect_tree )
	{
		proto_tree *cflag_tree = NULL;

		ti = proto_tree_add_item(connect_tree, hf_tns_connect_flags0, tvb,
			offset, 1, ENC_BIG_ENDIAN);

		cflag_tree = proto_item_add_subtree(ti, ett_tns_conn_flag);

		dissect_tns_connect_flag(tvb, offset, cflag_tree);
	}
	offset += 1;

	if ( connect_tree )
	{
		proto_tree *cflag_tree = NULL;

		ti = proto_tree_add_item(connect_tree, hf_tns_connect_flags1, tvb,
			offset, 1, ENC_BIG_ENDIAN);

		cflag_tree = proto_item_add_subtree(ti, ett_tns_conn_flag);

		dissect_tns_connect_flag(tvb, offset, cflag_tree);
	}
	offset += 1;

	/*
	 * XXX - sometimes it appears that this stuff isn't present
	 * in the packet.
	 */
	if (offset + 16 <= tns_offset+cd_offset)
	{
		if ( connect_tree )
		{
			proto_tree_add_item(connect_tree, hf_tns_trace_cf1, tvb,
				offset, 4, ENC_BIG_ENDIAN);
		}
		offset += 4;

		if ( connect_tree )
		{
			proto_tree_add_item(connect_tree, hf_tns_trace_cf2, tvb,
				offset, 4, ENC_BIG_ENDIAN);
		}
		offset += 4;

		if ( connect_tree )
		{
			proto_tree_add_item(connect_tree, hf_tns_trace_cid, tvb,
				offset, 8, ENC_BIG_ENDIAN);
		}
		/* offset += 8;*/
	}

	if ( connect_tree && cd_len > 0)
	{
		proto_tree_add_item(connect_tree, hf_tns_connect_data, tvb,
			tns_offset+cd_offset, -1, ENC_ASCII|ENC_NA);
	}
	return;
}
static void dissect_tns_accept(tvbuff_t *tvb, int offset, packet_info *pinfo,
                               proto_tree *tree, proto_tree *tns_tree)
{
    proto_tree *accept_tree = NULL, *ti;
    proto_item *hidden_item;
    int accept_offset;
    int accept_len;
    int tns_offset = offset-8;

    if ( tree )
    {
        ti = proto_tree_add_text(tns_tree, tvb, offset, -1,
                                 "Accept");
        accept_tree = proto_item_add_subtree(ti, ett_tns_accept);

        hidden_item = proto_tree_add_boolean(tns_tree, hf_tns_accept, tvb,
                                             0, 0, TRUE);
        PROTO_ITEM_SET_HIDDEN(hidden_item);
    }

    col_append_str(pinfo->cinfo, COL_INFO, ", Accept");

    if ( accept_tree )
    {
        proto_tree_add_item(accept_tree, hf_tns_version, tvb,
                            offset, 2, ENC_BIG_ENDIAN);
    }
    offset += 2;

    if ( accept_tree )
    {
        proto_tree *sopt_tree = NULL;

        ti = proto_tree_add_item(accept_tree, hf_tns_service_options,
                                 tvb, offset, 2, ENC_BIG_ENDIAN);

        sopt_tree = proto_item_add_subtree(ti, ett_tns_sopt_flag);

        dissect_tns_service_options(tvb, offset, sopt_tree);

    }
    offset += 2;

    if ( accept_tree )
    {
        proto_tree_add_item(accept_tree, hf_tns_sdu_size, tvb,
                            offset, 2, ENC_BIG_ENDIAN);
    }
    offset += 2;

    if ( accept_tree )
    {
        proto_tree_add_item(accept_tree, hf_tns_max_tdu_size, tvb,
                            offset, 2, ENC_BIG_ENDIAN);
    }
    offset += 2;

    if ( accept_tree )
    {
        proto_tree_add_item(accept_tree, hf_tns_value_of_one, tvb,
                            offset, 2, ENC_NA);
    }
    offset += 2;

    accept_len = tvb_get_ntohs(tvb, offset);
    if ( accept_tree )
    {
        proto_tree_add_uint(accept_tree, hf_tns_accept_data_length, tvb,
                            offset, 2, accept_len);
    }
    offset += 2;

    accept_offset = tvb_get_ntohs(tvb, offset);
    if ( accept_tree )
    {
        proto_tree_add_uint(accept_tree, hf_tns_accept_data_offset, tvb,
                            offset, 2, accept_offset);
    }
    offset += 2;

    if ( accept_tree )
    {
        proto_tree *cflag_tree = NULL;

        ti = proto_tree_add_item(accept_tree, hf_tns_connect_flags0, tvb,
                                 offset, 1, ENC_BIG_ENDIAN);

        cflag_tree = proto_item_add_subtree(ti, ett_tns_conn_flag);

        dissect_tns_connect_flag(tvb, offset, cflag_tree);

    }
    offset += 1;

    if ( accept_tree )
    {
        proto_tree *cflag_tree = NULL;

        ti = proto_tree_add_item(accept_tree, hf_tns_connect_flags1, tvb,
                                 offset, 1, ENC_BIG_ENDIAN);

        cflag_tree = proto_item_add_subtree(ti, ett_tns_conn_flag);

        dissect_tns_connect_flag(tvb, offset, cflag_tree);

    }
    offset += 1;

    if ( accept_tree && accept_len > 0)
    {
        proto_tree_add_item(accept_tree, hf_tns_accept_data, tvb,
                            tns_offset+accept_offset, -1, ENC_ASCII|ENC_NA);
    }
    return;
}