1# ros-res.cnf 2# ROS ReturnResult common code 3# Copyright 2007 Tomas Kukosa 4 5#.FN_HDR ReturnResult 6 dissector_handle_t res_handle = NULL; 7 const gchar *descr = ""; 8 9 actx->rose_ctx->d.code = -1; 10 res_next_tvb = NULL; 11#.FN_FTR ReturnResult 12 actx->rose_ctx->d.pdu = 2; 13 14 if ((actx->rose_ctx->d.code == 0) && actx->rose_ctx->res_local_dissector_table) { 15 res_handle = dissector_get_uint_handle(actx->rose_ctx->res_local_dissector_table, actx->rose_ctx->d.code_local); 16 } else if ((actx->rose_ctx->d.code == 1) && actx->rose_ctx->res_global_dissector_table) { 17 res_handle = dissector_get_string_handle(actx->rose_ctx->res_global_dissector_table, actx->rose_ctx->d.code_global); 18 } else { 19 res_handle = NULL; 20 } 21 22 if (!res_handle || 23 !proto_is_protocol_enabled(find_protocol_by_id(dissector_handle_get_protocol_index(res_handle)))) { 24 if (actx->rose_ctx->d.code == 0) 25 descr = wmem_strdup_printf(actx->pinfo->pool, "RES: %d", actx->rose_ctx->d.code_local); 26 else if (actx->rose_ctx->d.code == 1) 27 descr = wmem_strdup_printf(actx->pinfo->pool, "RES: %s", actx->rose_ctx->d.code_global); 28 } else { 29 descr = wmem_strdup(actx->pinfo->pool, "RES:"); 30 } 31 32 if (actx->rose_ctx->apdu_depth >= 0) 33 proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), actx->rose_ctx->apdu_depth), " %s", descr); 34 if (actx->rose_ctx->fillin_info) 35 col_append_str(actx->pinfo->cinfo, COL_INFO, descr); 36 if (actx->rose_ctx->fillin_ptr) 37 (void) g_strlcat(actx->rose_ctx->fillin_ptr, descr, actx->rose_ctx->fillin_buf_size); 38 39 if (actx->rose_ctx->d.code != -1) { 40 if (!res_next_tvb) { /* empty result */ 41 res_next_tvb = tvb_new_subset_length_caplen(tvb, (actx->encoding==ASN1_ENC_PER)?offset>>3:offset, 0, 0); 42 } 43 44 call_dissector_with_data((res_handle)?res_handle:data_handle, res_next_tvb, actx->pinfo, tree, actx->rose_ctx); 45 if (!res_handle) { 46 expert_add_info_format(actx->pinfo, tree, &ei_ros_undecoded, "Undecoded %s", descr); 47 } 48 } 49#.END 50