# ros-inv.cnf # ROS Invoke common code # Copyright 2007 Tomas Kukosa # $Id$ #.FN_HDR Invoke dissector_handle_t arg_handle = NULL; const gchar *descr = ""; arg_next_tvb = NULL; #.FN_FTR Invoke actx->rose_ctx->d.pdu = 1; if ((actx->rose_ctx->d.code == 0) && actx->rose_ctx->arg_local_dissector_table) { arg_handle = dissector_get_uint_handle(actx->rose_ctx->arg_local_dissector_table, actx->rose_ctx->d.code_local); } else if ((actx->rose_ctx->d.code == 1) && actx->rose_ctx->arg_global_dissector_table) { arg_handle = dissector_get_string_handle(actx->rose_ctx->arg_global_dissector_table, actx->rose_ctx->d.code_global); } else { arg_handle = NULL; } if (!arg_handle || !proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(arg_handle)))) { if (actx->rose_ctx->d.code == 0) descr = ep_strdup_printf("INV: %d", actx->rose_ctx->d.code_local); else if (actx->rose_ctx->d.code == 1) descr = ep_strdup_printf("INV: %s", actx->rose_ctx->d.code_global); } else { descr = ep_strdup_printf("INV:"); } if (actx->rose_ctx->apdu_depth >= 0) proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), actx->rose_ctx->apdu_depth), " %s", descr); if (actx->rose_ctx->fillin_info && check_col(actx->pinfo->cinfo, COL_INFO)) col_append_str(actx->pinfo->cinfo, COL_INFO, descr); if (actx->rose_ctx->fillin_ptr) g_strlcat(actx->rose_ctx->fillin_ptr, descr, actx->rose_ctx->fillin_buf_size); if (!arg_next_tvb) { /* empty argument */ arg_next_tvb = tvb_new_subset(tvb, (actx->encoding==ASN1_ENC_PER)?offset>>3:offset, 0, 0); } actx->pinfo->private_data = actx->rose_ctx; call_dissector((arg_handle)?arg_handle:data_handle, arg_next_tvb, actx->pinfo, tree); if (!arg_handle) { expert_add_info_format(actx->pinfo, tree, PI_UNDECODED, PI_WARN, "Undecoded %s", descr); } #.END