Ethereal-dev: [Ethereal-dev] PATCH: fix to click on packet note
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Rich Coe <Richard.Coe@xxxxxxxxxx>
Date: Fri, 14 Oct 2005 10:01:54 -0500
Patch to fix 'click on packet' note. Also, make MAX_BUF_LEN -> DCM_MAX_BUF_LEN, in case some system defines it. Please apply. -- Rich Coe richard.coe@xxxxxxxxxx General Electric Healthcare Technologies Global Software Platforms, Computer Technology Team Index: epan/dissectors/packet-dcm.c =================================================================== --- epan/dissectors/packet-dcm.c (revision 16203) +++ epan/dissectors/packet-dcm.c (working copy) @@ -513,23 +513,23 @@ size_t pl; static dcmTag_t utag = { 0, 0, "(unknown)" }; -#define MAX_BUF_LEN 1024 - buf=ep_alloc(MAX_BUF_LEN); +#define DCM_MAX_BUF_LEN 1024 + buf = ep_alloc(DCM_MAX_BUF_LEN); *buf = 0; if (0 == elm) { if (DCM_ILE & syntax) val32 = tvb_get_letohl(tvb, offset); else val32 = tvb_get_ntohl(tvb, offset); - g_snprintf(buf, MAX_BUF_LEN, "Group Length 0x%x (%d)", val32, val32); + g_snprintf(buf, DCM_MAX_BUF_LEN, "Group Length 0x%x (%d)", val32, val32); return buf; } tag = (grp << 16) | elm; if (NULL == (dtag = g_hash_table_lookup(dcm_tagTable, GUINT_TO_POINTER(tag)))) dtag = &utag; - DISSECTOR_ASSERT(MAX_BUF_LEN > strlen(dtag->desc)); + DISSECTOR_ASSERT(DCM_MAX_BUF_LEN > strlen(dtag->desc)); strcpy(buf, dtag->desc); - pl = MAX_BUF_LEN - strlen(buf); + pl = DCM_MAX_BUF_LEN - strlen(buf) - 7; /* always save space for [..] */ p = buf + strlen(buf); if (vr > 0) { vval = tvb_format_text(tvb, vr, 2); @@ -549,9 +549,9 @@ vval = tvb_format_text(tvb, offset, len); vval_len = strlen(vval); if (vval_len > pl) { - strncpy(p, vval, pl - 6); - p += pl - 6; - strcpy(p, "[...]"); + strncpy(p, vval, pl); + p += pl; + strcpy(p, "[...]"); /* saved above in alloc */ } else { strncpy(p, vval, vval_len); p += vval_len; @@ -562,39 +562,39 @@ if (DCM_ILE & syntax) val16 = tvb_get_letohs(tvb, offset); else val16 = tvb_get_ntohs(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " 0x%x (%d)", val16, val16); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " 0x%x (%d)", val16, val16); break; case DCM_TINT4: if (DCM_ILE & syntax) val32 = tvb_get_letohl(tvb, offset); else val32 = tvb_get_ntohl(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " 0x%x (%d)", val32, val32); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " 0x%x (%d)", val32, val32); break; case DCM_TFLT: { gfloat valf; if (DCM_ILE & syntax) valf = tvb_get_letohieee_float(tvb, offset); else valf = tvb_get_ntohieee_float(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " (%f)", valf); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " (%f)", valf); } break; case DCM_TDBL: { gdouble vald; if (DCM_ILE & syntax) vald = tvb_get_letohieee_double(tvb, offset); else vald = tvb_get_ntohieee_double(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " (%f)", vald); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " (%f)", vald); } break; case DCM_TSTAT: /* call dcm_rsp2str() on TINT2 */ if (DCM_ILE & syntax) val16 = tvb_get_letohs(tvb, offset); else val16 = tvb_get_ntohs(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " 0x%x '%s'", val16, dcm_rsp2str(val16)); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " 0x%x '%s'", val16, dcm_rsp2str(val16)); break; case DCM_TCMD: /* call dcm_cmd2str() on TINT2 */ if (DCM_ILE & syntax) val16 = tvb_get_letohs(tvb, offset); else val16 = tvb_get_ntohs(tvb, offset); - g_snprintf(p, MAX_BUF_LEN-(p-buf), " 0x%x '%s'", val16, dcm_cmd2str(val16)); + g_snprintf(p, DCM_MAX_BUF_LEN-(p-buf), " 0x%x '%s'", val16, dcm_cmd2str(val16)); break; case DCM_SQ: /* Sequence */ case DCM_OTH: /* Other BYTE, WORD, ... */ @@ -621,10 +621,15 @@ guint8 id, *name, result; int reply = 0; - if (!ti) - return; + /* this dissector needs to process this packet whether ti is set + * or not to correctly display the dicom packets in the stream. if we + * don't, we won't correctly display the rest of packets. + * + * dont't return here if ti is not set. + */ + if (ti) + dcm_tree = proto_item_add_subtree(ti, ett_assoc); - dcm_tree = proto_item_add_subtree(ti, ett_assoc); while (-1 < offset && offset < (int) dcm_data->clen) { guint16 len; guint32 mlen; @@ -769,20 +774,14 @@ proto_tree_add_item(dcm_tree, hf_dcm_data_len, tvb, 6, 4, FALSE); ctx = tvb_get_guint8(tvb, 10); di = lookupCtx(dcm_data, ctx); - /* - * XXX - telling the user to "click on ASSOC request" is bogus if we - * have already identified the ASSOC request and can connect it to - * this mnessage; if clicking on a request prior to this one causes - * additional state information to be set up that would affect the - * dissection of this request, we should set up that state *at the - * time we dissect that request*, if possible, and if clicking on it - * doesn't change any state, clicking on the request doesn't convey - * any additional information. + + /* if dissect_dcm_assoc returns on NULL ti, (invalid optimization) + * or the ASSOC Request/Reply is missing + * prints missing ASSOC Request */ proto_tree_add_uint_format(dcm_tree, hf_dcm_data_ctx, tvb, 10, 1, ctx, "Context 0x%x (%s)", ctx, - di->xfer == NULL ? "not found - click on ASSOC Request" : - di->xfer); + di->xfer == NULL ? "not found - missing ASSOC Request ???" : di->xfer); if (DCM_UNK == di->syntax) return; len = offset = toffset = 11;
- Prev by Date: RE: [Ethereal-dev] G_malloc vs malloc
- Next by Date: RE: [Ethereal-dev] G_malloc vs malloc
- Previous by thread: [Ethereal-dev] Re: New dissector: STANAG 5066
- Next by thread: [Ethereal-dev] de-fragmentation code question
- Index(es):