Allow control of individual columns to be (un)writable.

Most protocols just want to limit COL_INFO or COL_PROTOCOL
so give that level of granularity.

Bug: 12144
Bug: 5117
Bug: 11144
Change-Id: I8de9b7d2c69e90d3fbfc0a52c2bd78c3de58e2f8
Reviewed-on: https://code.wireshark.org/review/15894
Reviewed-by: Jeff Morriss <jeff.morriss.ws@gmail.com>
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Michael Mann 2016-06-14 11:55:08 -04:00 committed by Anders Broman
parent c19e6c2406
commit 0ef1d941ea
39 changed files with 167 additions and 157 deletions

View File

@ -56,6 +56,7 @@ typedef struct {
const gchar *col_data; /**< Column data */
gchar *col_buf; /**< Buffer into which to copy data for column */
int col_fence; /**< Stuff in column buffer before this index is immutable */
gboolean writable; /**< writable or not */
} col_item_t;
/** Column info */

View File

@ -138,6 +138,7 @@ col_init(column_info *cinfo, const struct epan_session *epan)
col_item->col_buf[0] = '\0';
col_item->col_data = col_item->col_buf;
col_item->col_fence = 0;
col_item->writable = TRUE;
cinfo->col_expr.col_expr[i] = "";
cinfo->col_expr.col_expr_val[i][0] = '\0';
}
@ -145,25 +146,55 @@ col_init(column_info *cinfo, const struct epan_session *epan)
cinfo->epan = epan;
}
#define COL_GET_WRITABLE(cinfo) (cinfo ? cinfo->writable : FALSE)
gboolean
col_get_writable(column_info *cinfo)
col_get_writable(column_info *cinfo, const gint col)
{
return COL_GET_WRITABLE(cinfo);
int i;
col_item_t* col_item;
if (cinfo == NULL)
return FALSE;
/* "global" (not) writeability will always override
an individual column */
if ((col == -1) || (cinfo->writable == FALSE))
return cinfo->writable;
if (cinfo->col_first[col] >= 0) {
for (i = cinfo->col_first[col]; i <= cinfo->col_last[col]; i++) {
col_item = &cinfo->columns[i];
if (col_item->fmt_matx[col]) {
return col_item->writable;
}
}
}
return FALSE;
}
void
col_set_writable(column_info *cinfo, const gboolean writable)
col_set_writable(column_info *cinfo, const gint col, const gboolean writable)
{
if (cinfo)
cinfo->writable = writable;
int i;
col_item_t* col_item;
if (cinfo) {
if (col == -1) {
cinfo->writable = writable;
} else if (cinfo->col_first[col] >= 0) {
for (i = cinfo->col_first[col]; i <= cinfo->col_last[col]; i++) {
col_item = &cinfo->columns[i];
if (col_item->fmt_matx[col]) {
col_item->writable = writable;
}
}
}
}
}
/* Checks to see if a particular packet information element is needed for the packet list */
#define CHECK_COL(cinfo, el) \
/* We are constructing columns, and they're writable */ \
(COL_GET_WRITABLE(cinfo) && \
(col_get_writable(cinfo, el) && \
/* There is at least one column in that format */ \
((cinfo)->col_first[el] >= 0))

View File

@ -149,16 +149,18 @@ WS_DLL_PUBLIC void col_fill_in_error(column_info *cinfo, frame_data *fdata, cons
/** Are the columns writable?
*
* @param cinfo the current packet row
* @param col the writable column, -1 for checking the state of all columns
* @return TRUE if it's writable, FALSE if not
*/
WS_DLL_PUBLIC gboolean col_get_writable(column_info *cinfo);
WS_DLL_PUBLIC gboolean col_get_writable(column_info *cinfo, const gint col);
/** Set the columns writable.
*
* @param cinfo the current packet row
* @param col the column to set, -1 for all
* @param writable TRUE if it's writable, FALSE if not
*/
WS_DLL_PUBLIC void col_set_writable(column_info *cinfo, const gboolean writable);
WS_DLL_PUBLIC void col_set_writable(column_info *cinfo, const gint col, const gboolean writable);
/** Sets a fence for the current column content,
* so this content won't be affected by further col_... function calls.

View File

@ -3007,13 +3007,13 @@ dissect_lte_rrc_Handover_Preparation_Info(tvbuff_t *tvb, packet_info *pinfo, pro
/* Don't want elements inside message updating Info column, so set now and
freeze during dissection of PDU */
col_set_str(pinfo->cinfo, COL_INFO, "HandoverPreparationInformation");
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
ti = proto_tree_add_item(tree, proto_lte_rrc, tvb, 0, -1, ENC_NA);
lte_rrc_tree = proto_item_add_subtree(ti, ett_lte_rrc);
dissect_lte_rrc_HandoverPreparationInformation_PDU(tvb, pinfo, lte_rrc_tree, NULL);
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
return tvb_captured_length(tvb);
}

View File

@ -333,7 +333,7 @@ tvbuff_t *parameter_tvb=NULL;
if (g_s1ap_dissect_container) {
/* Don't want elements inside container to write to info column */
col_set_writable(actx->pinfo->cinfo, FALSE);
col_set_writable(actx->pinfo->cinfo, COL_INFO, FALSE);
subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToTargetTransparentContainer);
switch(handover_type_value){
@ -378,7 +378,7 @@ tvbuff_t *parameter_tvb=NULL;
break;
}
/* Enable writing of the column again */
col_set_writable(actx->pinfo->cinfo, TRUE);
col_set_writable(actx->pinfo->cinfo, COL_INFO, TRUE);
}
#.FN_BODY Target-ToSource-TransparentContainer VAL_PTR = &parameter_tvb
# I think the message is "directly encoded" into the octet string(no "double encoding")

View File

@ -2317,15 +2317,14 @@ dissect_artnet_output(tvbuff_t *tvb, guint offset, proto_tree *tree, packet_info
size = tvb_reported_length_remaining(tvb, offset);
save_info = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_info = col_get_writable(pinfo->cinfo, COL_INFO);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset, length);
/* XXX: Assumption: OK to call dmx-chan dissector under 'if (tree)' */
call_dissector(dmx_chan_handle, next_tvb, pinfo, base_tree);
col_set_writable(pinfo->cinfo, save_info);
col_set_writable(pinfo->cinfo, COL_INFO, save_info);
return offset + size;
}
@ -2813,15 +2812,14 @@ dissect_artnet_rdm(tvbuff_t *tvb, guint offset, proto_tree *tree, packet_info *
size = tvb_reported_length_remaining(tvb, offset);
save_info = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_info = col_get_writable(pinfo->cinfo, COL_INFO);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
next_tvb = tvb_new_subset_remaining(tvb, offset);
/* XXX: Assumption: OK to call rdm dissector under 'if (tree)' */
call_dissector(rdm_handle, next_tvb, pinfo, base_tree);
col_set_writable(pinfo->cinfo, save_info);
col_set_writable(pinfo->cinfo, COL_INFO, save_info);
return offset + size;
}
@ -3322,7 +3320,6 @@ dissect_artnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
break;
case ARTNET_OP_OUTPUT:
if (tree) {
hi = proto_tree_add_item(artnet_tree,
hf_artnet_output,
tvb,
@ -3336,7 +3333,6 @@ dissect_artnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
size -= offset;
proto_item_set_len(si, size );
offset += size;
}
break;
@ -3435,7 +3431,6 @@ dissect_artnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
break;
case ARTNET_OP_RDM:
if (tree) {
hi = proto_tree_add_item(artnet_tree,
hf_artnet_rdm,
tvb,
@ -3448,7 +3443,6 @@ dissect_artnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _
proto_item_set_len( si, size );
offset += size;
}
break;
case ARTNET_OP_RDM_SUB:

View File

@ -5991,8 +5991,7 @@ fObjectIdentifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
Vendor_Proprietary_Fmt),
object_id_instance(object_id));
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "%s,%u ",
col_append_fstr(pinfo->cinfo, COL_INFO, "%s,%u ",
val_to_split_str(object_type,
128,
BACnetObjectType,
@ -6255,8 +6254,7 @@ fPropertyIdentifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o
BACnetPropertyIdentifier,
ASHRAE_Reserved_Fmt,
Vendor_Proprietary_Fmt), propertyIdentifier);
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
val_to_split_str(propertyIdentifier, 512,
BACnetPropertyIdentifier,
ASHRAE_Reserved_Fmt,
@ -7390,8 +7388,7 @@ fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
len = fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
fUnsigned32(tvb, offset+len, lvt, &vendor_identifier);
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
offset = fVendorIdentifier(tvb, pinfo, subtree, offset);
next_tvb = tvb_new_subset_remaining(tvb, offset);
@ -7422,8 +7419,7 @@ fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
/* vendorID is now parsed above */
case 1: /* serviceNumber */
fUnsigned32(tvb, offset+len, lvt, &service_number);
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
offset = fUnsignedTag(tvb, pinfo, subtree, offset, "service Number: ");
break;
case 2: /*serviceParameters */
@ -9124,7 +9120,7 @@ fLOPR(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
guint8 tag_no, tag_info;
guint32 lvt;
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
@ -9172,7 +9168,7 @@ fAddListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
guint32 lvt;
proto_tree *subtree = tree;
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
lastoffset = offset;
@ -9503,7 +9499,7 @@ fWritePropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
if (offset >= tvb_reported_length(tvb))
return offset;
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
return fWriteAccessSpecification(tvb, pinfo, tree, offset);
}
@ -9543,7 +9539,7 @@ fPropertyReference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
static guint
fBACnetPropertyReference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 list)
{
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
return fPropertyReference(tvb, pinfo, tree, offset, 0, list);
}
@ -9561,7 +9557,7 @@ fBACnetObjectPropertyReference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
break;
case 1: /* PropertyIdentifier and propertyArrayIndex */
offset = fPropertyReference(tvb, pinfo, tree, offset, 1, 0);
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
default:
lastoffset = offset; /* Set loop end condition */
break;
@ -10034,7 +10030,7 @@ fReadRangeAck(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
/* itemData */
fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
if (tag_is_opening(tag_info)) {
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
subtree = proto_tree_add_subtree(subtree, tvb, offset, 1, ett_bacapp_value, NULL, "itemData");
offset += fTagHeaderTree(tvb, pinfo, subtree, offset, &tag_no, &tag_info, &lvt);
offset = fAbstractSyntaxNType(tvb, pinfo, subtree, offset);
@ -10135,14 +10131,14 @@ fAtomicReadFileAck(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
static guint
fReadPropertyMultipleRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
return fReadAccessSpecification(tvb, pinfo, subtree, offset);
}
static guint
fReadPropertyMultipleAck(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
return fReadAccessResult(tvb, pinfo, tree, offset);
}
@ -10352,7 +10348,7 @@ fWhoIsRequest(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, guint offset)
switch (tag_no) {
case 0:
/* DeviceInstanceRangeLowLimit Optional */
if (col_get_writable(pinfo->cinfo) && fUnsigned32(tvb, offset+tag_len, lvt, &val))
if (fUnsigned32(tvb, offset+tag_len, lvt, &val))
col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
offset = fDevice_Instance(tvb, pinfo, tree, offset,
hf_Device_Instance_Range_Low_Limit);
@ -10360,7 +10356,7 @@ fWhoIsRequest(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, guint offset)
case 1:
/* DeviceInstanceRangeHighLimit Optional but
required if DeviceInstanceRangeLowLimit is there */
if (col_get_writable(pinfo->cinfo) && fUnsigned32(tvb, offset+tag_len, lvt, &val))
if (fUnsigned32(tvb, offset+tag_len, lvt, &val))
col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", val);
offset = fDevice_Instance(tvb, pinfo, tree, offset,
hf_Device_Instance_Range_High_Limit);
@ -10590,14 +10586,12 @@ fConfirmedPrivateTransferError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
break;
case 1: /* vendorID */
fUnsigned32(tvb, offset+tag_len, lvt, &vendor_identifier);
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
col_append_fstr(pinfo->cinfo, COL_INFO, "V=%u ", vendor_identifier);
offset = fVendorIdentifier(tvb, pinfo, subtree, offset);
break;
case 2: /* serviceNumber */
fUnsigned32(tvb, offset+tag_len, lvt, &service_number);
if (col_get_writable(pinfo->cinfo))
col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
col_append_fstr(pinfo->cinfo, COL_INFO, "SN=%u ", service_number);
offset = fUnsignedTag(tvb, pinfo, subtree, offset, "service Number: ");
break;
case 3: /* errorParameters */
@ -10680,7 +10674,7 @@ fWritePropertyMultipleError(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 tag_no = 0, tag_info = 0;
guint32 lvt = 0;
col_set_writable(pinfo->cinfo, FALSE); /* don't set all infos into INFO column */
col_set_writable(pinfo->cinfo, COL_INFO, FALSE); /* don't set all infos into INFO column */
while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
lastoffset = offset;
switch (fTagNo(tvb, offset)) {

View File

@ -447,12 +447,12 @@ dissect_diameter_eap_payload(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
gboolean save_writable;
/* Ensure the packet is displayed as Diameter, not EAP */
save_writable = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_writable = col_get_writable(pinfo->cinfo, COL_PROTOCOL);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, FALSE);
call_dissector(eap_handle, tvb, pinfo, tree);
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, save_writable);
return tvb_reported_length(tvb);
}
@ -877,7 +877,8 @@ proto_avp(diam_ctx_t *c, diam_avp_t *a, tvbuff_t *tvb, diam_sub_dis_t *diam_sub_
{
proto_avp_t *t = (proto_avp_t *)a->type_data;
col_set_writable(c->pinfo->cinfo, FALSE);
col_set_writable(c->pinfo->cinfo, COL_PROTOCOL, FALSE);
col_set_writable(c->pinfo->cinfo, COL_INFO, FALSE);
if (!t->handle) {
t->handle = find_dissector(t->name);

View File

@ -1513,13 +1513,13 @@ dissect_tcpip_last_conflict(packet_info *pinfo, proto_tree *tree, proto_item *it
else
{
/* Dissect ARP PDU, but don't have it change column info */
save_info = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_info = col_get_writable(pinfo->cinfo, -1);
col_set_writable(pinfo->cinfo, -1, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset+7, 28);
call_dissector(arp_handle, next_tvb, pinfo, tree);
col_set_writable(pinfo->cinfo, save_info);
col_set_writable(pinfo->cinfo, -1, save_info);
}
return 35;

View File

@ -729,7 +729,6 @@ dissect_etch_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
}
gbl_old_frame_num = pinfo->num;
col_set_writable(pinfo->cinfo, TRUE);
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", wmem_strbuf_get_str(colInfo));
}
@ -785,7 +784,6 @@ dissect_etch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
dissect_etch_message, data);
if (gbl_pdu_counter > 0) {
col_set_writable(pinfo->cinfo, TRUE);
col_prepend_fstr(pinfo->cinfo, COL_INFO, "[%d] ", gbl_pdu_counter + 1);
}

View File

@ -4313,9 +4313,9 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g
* dissect the embedded message
*/
/* In this case we do not want the columns updated */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
call_dissector(handle, l3_tvb, pinfo, pco_tree);
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, -1, TRUE);
}
else
{

View File

@ -458,9 +458,9 @@ parse_gsm_sms_ud_message(proto_tree *sm_tree, tvbuff_t *tvb, packet_info *pinfo,
if (ports_available) {
gboolean disallow_write = FALSE; /* TRUE if we changed writability
of the columns of the summary */
if (prevent_subdissectors_changing_columns && col_get_writable(pinfo->cinfo)) {
if (prevent_subdissectors_changing_columns && col_get_writable(pinfo->cinfo, -1)) {
disallow_write = TRUE;
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
if (port_number_udh_means_wsp) {
@ -478,7 +478,7 @@ parse_gsm_sms_ud_message(proto_tree *sm_tree, tvbuff_t *tvb, packet_info *pinfo,
}
if (disallow_write)
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, -1, TRUE);
} else { /* No ports IE */
proto_tree_add_item(sm_tree, hf_gsm_sms_ud_short_msg, sm_tvb, 0, -1, ENC_NA);
}

View File

@ -1202,7 +1202,7 @@ dissect_ah(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
next_tvb = tvb_new_subset_remaining(tvb, advance);
if (g_ah_payload_in_subtree) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
/* do lookup with the subdissector table */

View File

@ -1006,7 +1006,7 @@ static int dissect_jxta_welcome(tvbuff_t * tvb, packet_info * pinfo, proto_tree
Common_Exit:
g_strfreev(tokens);
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
return afterwelcome;
}
@ -1363,7 +1363,7 @@ static int dissect_jxta_message(tvbuff_t * tvb, packet_info * pinfo, proto_tree
wmem_strbuf_get_str(src_addr), wmem_strbuf_get_str(dst_addr));
}
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
while( tree && (complete_messages > 0) ) {
proto_item *jxta_msg_tree_item = NULL;

View File

@ -353,7 +353,6 @@ dissect_messageid(tvbuff_t *buffer, int *offset, proto_tree *tree, packet_info *
{
gint messageid_length;
guint8 messageid;
gboolean col_write;
messageid = tvb_get_guint8(buffer, (*offset));
@ -374,16 +373,9 @@ dissect_messageid(tvbuff_t *buffer, int *offset, proto_tree *tree, packet_info *
proto_tree_add_uint_format_value(tree, hf_knet_messageid, buffer, *offset, messageid_length, messageid,
"%s (%d)", val_to_str_const(messageid, packettypenames, "AppData or Malformed Message ID"), messageid);
/* XXX - TCP reassembly disables writing columns which prevents populating COL_INFO if multiple KNET messages
appear in a single packet that needed to be reassembled.
Force making columns writable.
*/
if (separator)
{
col_write = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, TRUE);
col_append_sep_fstr(pinfo->cinfo, COL_INFO, ", ", "%s (%d)", val_to_str_const(messageid, packettypenames, "AppData"), messageid);
col_set_writable(pinfo->cinfo, col_write);
}
else
{

View File

@ -59287,13 +59287,13 @@ dissect_lte_rrc_Handover_Preparation_Info(tvbuff_t *tvb, packet_info *pinfo, pro
/* Don't want elements inside message updating Info column, so set now and
freeze during dissection of PDU */
col_set_str(pinfo->cinfo, COL_INFO, "HandoverPreparationInformation");
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
ti = proto_tree_add_item(tree, proto_lte_rrc, tvb, 0, -1, ENC_NA);
lte_rrc_tree = proto_item_add_subtree(ti, ett_lte_rrc);
dissect_lte_rrc_HandoverPreparationInformation_PDU(tvb, pinfo, lte_rrc_tree, NULL);
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
return tvb_captured_length(tvb);
}

View File

@ -2583,7 +2583,7 @@ static void show_extra_phy_parameters(packet_info *pinfo, tvbuff_t *tvb, proto_t
/* Don't want columns to be replaced now */
if (global_mac_lte_layer_to_show == ShowPHYLayer) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
}
}
@ -2670,7 +2670,7 @@ static void show_extra_phy_parameters(packet_info *pinfo, tvbuff_t *tvb, proto_t
/* Don't want columns to be replaced now */
if (global_mac_lte_layer_to_show == ShowPHYLayer) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
}
}
@ -3169,7 +3169,7 @@ static void call_rlc_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
if (global_mac_lte_layer_to_show != ShowRLCLayer) {
/* Don't want these columns replaced */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
else {
/* Clear info column before first RLC PDU */
@ -3188,7 +3188,7 @@ static void call_rlc_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
call_with_catch_all(rlc_lte_handle, rb_tvb, pinfo, tree);
/* Let columns be written to again */
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, -1, TRUE);
}

View File

@ -284,7 +284,7 @@ dissect_eth_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mint_tree,
tvbuff_t *eth_tvb;
#ifdef MINT_DEVELOPMENT
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
#endif
eth_tvb = tvb_new_subset_length(tvb, offset, length);
@ -297,7 +297,7 @@ dissect_eth_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mint_tree,
offset += length;
#ifdef MINT_DEVELOPMENT
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, -1, TRUE);
#endif
return offset;
}

View File

@ -316,7 +316,7 @@ static void dissect_msdp_sa(tvbuff_t *tvb, packet_info *pinfo,
* reflect the MSDP packet rather than the
* encapsulated packet.
*/
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
call_dissector(ip_handle, next_tvb, pinfo, enc_tree);
}
*offset += length;

View File

@ -2991,7 +2991,7 @@ dissect_ndmp_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
wmem_map_t *frags;
conversation_t *conversation;
proto_item *vers_item;
gboolean save_fragmented, save_writable;
gboolean save_fragmented, save_info_writable, save_proto_writable;
gboolean do_frag = TRUE;
tvbuff_t* new_tvb = NULL;
fragment_head *frag_msg = NULL;
@ -3212,8 +3212,10 @@ dissect_ndmp_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
* multiple fragments, the column becomes unwritable.
* Temporarily change that so that the correct header can be
* applied */
save_writable = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, TRUE);
save_info_writable = col_get_writable(pinfo->cinfo, COL_INFO);
save_proto_writable = col_get_writable(pinfo->cinfo, COL_PROTOCOL);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "NDMP");
col_clear(pinfo->cinfo, COL_INFO);
@ -3292,7 +3294,8 @@ dissect_ndmp_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
/* restore saved variables */
pinfo->fragmented = save_fragmented;
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, COL_INFO, save_info_writable);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, save_proto_writable);
return tvb_captured_length(tvb);
}

View File

@ -838,7 +838,7 @@ dissect_openflow_v1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *d
/* Stop the Ethernet frame from overwriting the columns */
if((type == OFPT_1_0_PACKET_IN) || (type == OFPT_1_0_PACKET_OUT)){
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
/* Create display subtree for the protocol */

View File

@ -1819,7 +1819,7 @@ dissect_openflow_packet_in_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v4_packet_in_data, NULL, "Data");
/* save some state */
save_writable = col_get_writable(pinfo->cinfo);
save_writable = col_get_writable(pinfo->cinfo, -1);
save_in_error_pkt = pinfo->flags.in_error_pkt;
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
@ -1829,12 +1829,12 @@ dissect_openflow_packet_in_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
copy_address_shallow(&save_dst, &pinfo->dst);
/* dissect data */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset, length - offset);
call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree);
/* restore saved state */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
pinfo->flags.in_error_pkt = save_in_error_pkt;
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
@ -2406,7 +2406,7 @@ dissect_openflow_packet_out_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v4_packet_out_data, NULL, "Data");
/* save some state */
save_writable = col_get_writable(pinfo->cinfo);
save_writable = col_get_writable(pinfo->cinfo, -1);
save_in_error_pkt = pinfo->flags.in_error_pkt;
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
@ -2416,12 +2416,12 @@ dissect_openflow_packet_out_v4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
copy_address_shallow(&save_dst, &pinfo->dst);
/* dissect data */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset, length - offset);
call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree);
/* restore saved state */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
pinfo->flags.in_error_pkt = save_in_error_pkt;
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);

View File

@ -2049,7 +2049,7 @@ dissect_openflow_packet_in_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v5_packet_in_data, NULL, "Data");
/* save some state */
save_writable = col_get_writable(pinfo->cinfo);
save_writable = col_get_writable(pinfo->cinfo, -1);
save_in_error_pkt = pinfo->flags.in_error_pkt;
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
@ -2059,12 +2059,12 @@ dissect_openflow_packet_in_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
copy_address_shallow(&save_dst, &pinfo->dst);
/* dissect data */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset, length - offset);
call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree);
/* restore saved state */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
pinfo->flags.in_error_pkt = save_in_error_pkt;
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
@ -2788,7 +2788,7 @@ dissect_openflow_packet_out_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v5_packet_out_data, NULL, "Data");
/* save some state */
save_writable = col_get_writable(pinfo->cinfo);
save_writable = col_get_writable(pinfo->cinfo, -1);
save_in_error_pkt = pinfo->flags.in_error_pkt;
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
@ -2798,12 +2798,12 @@ dissect_openflow_packet_out_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
copy_address_shallow(&save_dst, &pinfo->dst);
/* dissect data */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
next_tvb = tvb_new_subset_length(tvb, offset, length - offset);
call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree);
/* restore saved state */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
pinfo->flags.in_error_pkt = save_in_error_pkt;
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);

View File

@ -1740,12 +1740,12 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
if ((global_pdcp_lte_layer_to_show == ShowRLCLayer) &&
(p_get_proto_data(wmem_file_scope(), pinfo, proto_rlc_lte, 0) != NULL)) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
}
else {
/* TODO: won't help with multiple PDCP-or-traffic PDUs / frame... */
col_clear(pinfo->cinfo, COL_INFO);
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
}
/* Create pdcp tree. */
@ -2263,15 +2263,15 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
if (rrc_handle != 0) {
/* Call RRC dissector if have one */
tvbuff_t *rrc_payload_tvb = tvb_new_subset_length(payload_tvb, offset, data_length);
gboolean was_writable = col_get_writable(pinfo->cinfo);
gboolean was_writable = col_get_writable(pinfo->cinfo, COL_INFO);
/* We always want to see this in the info column */
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
call_dissector_only(rrc_handle, rrc_payload_tvb, pinfo, pdcp_tree, NULL);
/* Restore to whatever it was */
col_set_writable(pinfo->cinfo, was_writable);
col_set_writable(pinfo->cinfo, COL_INFO, was_writable);
}
else {
/* Just show data */
@ -2338,7 +2338,7 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* Don't update info column for ROHC unless configured to */
if (global_pdcp_lte_layer_to_show != ShowTrafficLayer) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
}
switch (tvb_get_guint8(ip_payload_tvb, 0) & 0xf0) {
@ -2355,7 +2355,7 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* Freeze the columns again because we don't want other layers writing to info */
if (global_pdcp_lte_layer_to_show == ShowTrafficLayer) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
}
}
@ -2371,7 +2371,7 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* (there will be no signalling data left at this point) */
/* Let RLC write to columns again */
col_set_writable(pinfo->cinfo, global_pdcp_lte_layer_to_show == ShowRLCLayer);
col_set_writable(pinfo->cinfo, COL_INFO, global_pdcp_lte_layer_to_show == ShowRLCLayer);
/* DROPPING OUT HERE IF NOT DOING ROHC! */
return tvb_captured_length(tvb);
@ -2392,7 +2392,7 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* Only enable writing to column if configured to show ROHC */
if (global_pdcp_lte_layer_to_show != ShowTrafficLayer) {
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
}
else {
col_clear(pinfo->cinfo, COL_INFO);
@ -2402,7 +2402,7 @@ static int dissect_pdcp_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
call_dissector_with_data(rohc_handle, rohc_tvb, pinfo, tree, &p_pdcp_info->rohc);
/* Let RLC write to columns again */
col_set_writable(pinfo->cinfo, global_pdcp_lte_layer_to_show == ShowRLCLayer);
col_set_writable(pinfo->cinfo, COL_INFO, global_pdcp_lte_layer_to_show == ShowRLCLayer);
}
}
return tvb_captured_length(tvb);

View File

@ -388,7 +388,7 @@ dissect_pimv1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U
* explicitly state that.
*/
pim_length = 8;
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
} else {
/*
* Other message - checksum the entire packet.
@ -874,7 +874,7 @@ dissect_pim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
* this register will overwrite the PIM info in the columns.
*/
pim_length = 8;
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
} else {
/*
* Other message - checksum the entire packet.

View File

@ -304,7 +304,7 @@ dissect_callit_call(tvbuff_t *tvb, packet_info *pinfo,
/* Dissect the arguments for this procedure.
Make the columns non-writable, so the dissector won't change
them out from under us. */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
offset = dissect_rpc_indir_call(tvb, pinfo, tree, offset,
hf_portmap_args, prog, vers, proc);
@ -325,7 +325,7 @@ dissect_callit_reply(tvbuff_t *tvb, packet_info *pinfo,
/* Dissect the result of this procedure.
Make the columns non-writable, so the dissector won't change
them out from under us. */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
offset = dissect_rpc_indir_reply(tvb, pinfo, tree, offset,
hf_portmap_result, hf_portmap_prog, hf_portmap_version,
hf_portmap_proc);
@ -460,7 +460,7 @@ dissect_rpcb_rmtcallres(tvbuff_t *tvb, packet_info *pinfo _U_,
/* Dissect the result of this procedure.
Make the columns non-writable, so the dissector won't change
them out from under us. */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
offset = dissect_rpc_indir_reply(tvb, pinfo, tree, offset,
hf_portmap_result, hf_portmap_prog, hf_portmap_version,
hf_portmap_proc);

View File

@ -1701,12 +1701,12 @@ dissect_attribute_value_pairs(proto_tree *tree, packet_info *pinfo, tvbuff_t *tv
* this as an RADIUS packet, not
* as an EAP packet.
*/
save_writable = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_writable = col_get_writable(pinfo->cinfo, -1);
col_set_writable(pinfo->cinfo, -1, FALSE);
call_dissector(eap_handle, eap_tvb, pinfo, eap_tree);
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
} else {
proto_item_append_text(avp_item, " Segment[%u]",
eap_seg_num);

View File

@ -1322,7 +1322,7 @@ rlc_call_subdissector(enum rlc_channel_type channel, tvbuff_t *tvb,
/* assume transparent PDCP for now */
call_dissector(ip_handle, tvb, pinfo, tree);
/* once the packet has been dissected, protect it from further changes */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
break;
default:
return; /* stop dissecting */
@ -1339,7 +1339,7 @@ rlc_call_subdissector(enum rlc_channel_type channel, tvbuff_t *tvb,
rrcinf->msgtype[fpinf->cur_tb] = msgtype;
call_dissector(rrc_handle, tvb, pinfo, tree);
/* once the packet has been dissected, protect it from further changes */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
}
}

View File

@ -1376,10 +1376,10 @@ dissect_rtsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
/*
* OK, we've set the Protocol and Info columns for the
* first RTSP message; make the columns non-writable,
* so that we don't change it for subsequent RTSP messages.
* first RTSP message; set fence so changes are kept for
* subsequent RTSP messages.
*/
col_set_writable(pinfo->cinfo, FALSE);
col_set_fence(pinfo->cinfo, COL_INFO);
}
return tvb_captured_length(tvb);
}

View File

@ -6002,7 +6002,7 @@ dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset
if (g_s1ap_dissect_container) {
/* Don't want elements inside container to write to info column */
col_set_writable(actx->pinfo->cinfo, FALSE);
col_set_writable(actx->pinfo->cinfo, COL_INFO, FALSE);
subtree = proto_item_add_subtree(actx->created_item, ett_s1ap_ToTargetTransparentContainer);
switch(handover_type_value){
@ -6047,7 +6047,7 @@ dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset
break;
}
/* Enable writing of the column again */
col_set_writable(actx->pinfo->cinfo, TRUE);
col_set_writable(actx->pinfo->cinfo, COL_INFO, TRUE);
}

View File

@ -4447,9 +4447,9 @@ dissect_sctp_chunk(tvbuff_t *chunk_tvb,
dissect_i_forward_tsn_chunk(chunk_tvb, length, chunk_tree, chunk_item);
break;
case SCTP_PKTDROP_CHUNK_ID:
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
dissect_pktdrop_chunk(chunk_tvb, length, pinfo, chunk_tree, chunk_item, flags_item);
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, -1, TRUE);
break;
case SCTP_PAD_CHUNK_ID:
dissect_pad_chunk(chunk_tvb, length, chunk_tree, chunk_item);

View File

@ -679,7 +679,7 @@ dissect_sflow_245_sampled_header(tvbuff_t *tvb, packet_info *pinfo,
next_tvb = tvb_new_subset(tvb, offset, header_length, frame_length);
/* save some state */
save_writable = col_get_writable(pinfo->cinfo);
save_writable = col_get_writable(pinfo->cinfo, -1);
/*
If sFlow samples a TCP packet it is very likely that the
@ -705,7 +705,7 @@ dissect_sflow_245_sampled_header(tvbuff_t *tvb, packet_info *pinfo,
pinfo->flags.in_error_pkt = TRUE;
}
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, -1, FALSE);
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
copy_address_shallow(&save_net_src, &pinfo->net_src);
@ -727,7 +727,7 @@ dissect_sflow_245_sampled_header(tvbuff_t *tvb, packet_info *pinfo,
ENDTRY;
/* restore saved state */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
pinfo->flags.in_error_pkt = save_in_error_pkt;
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);

View File

@ -1095,12 +1095,11 @@ again:
int old_len;
/*
* Unblock and reset column in case multiple SSL segments form the
* Reset column in case multiple SSL segments form the
* PDU and this last SSL segment is not in the first TCP segment of
* this frame.
* XXX prevent clearing the column if the last layer is not SSL?
*/
col_set_writable(pinfo->cinfo, TRUE);
/* Clear column during the first pass. */
col_clear(pinfo->cinfo, COL_INFO);
@ -1339,11 +1338,9 @@ again:
* PROTOCOL and INFO colums since what follows may be an
* incomplete PDU and we don't want it be changed back from
* <Protocol> to <TCP>
* XXX There is no good way to block the PROTOCOL column
* from being changed yet so we set the entire row unwritable.
*/
col_set_fence(pinfo->cinfo, COL_INFO);
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, FALSE);
offset += another_pdu_follows;
seq += another_pdu_follows;
goto again;

View File

@ -2487,7 +2487,7 @@ desegment_tcp(tvbuff_t *tvb, packet_info *pinfo, int offset,
gint nbytes;
proto_item *item;
struct tcp_multisegment_pdu *msp;
gboolean cleared_writable = col_get_writable(pinfo->cinfo);
gboolean cleared_writable = col_get_writable(pinfo->cinfo, COL_PROTOCOL);
again:
ipfd_head = NULL;
@ -2932,13 +2932,10 @@ again:
* PROTOCOL and INFO columns since what follows may be an
* incomplete PDU and we don't want it be changed back from
* <Protocol> to <TCP>
* XXX There is no good way to block the PROTOCOL column
* from being changed yet so we set the entire row unwritable.
* The flag cleared_writable stores the initial state.
*/
col_set_fence(pinfo->cinfo, COL_INFO);
cleared_writable |= col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
cleared_writable |= col_get_writable(pinfo->cinfo, COL_PROTOCOL);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, FALSE);
offset += another_pdu_follows;
seq += another_pdu_follows;
goto again;
@ -2947,7 +2944,7 @@ again:
* proto,colinfo tap will break
*/
if(cleared_writable) {
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_PROTOCOL, TRUE);
}
}
}

View File

@ -773,7 +773,7 @@ dissect_snmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *wassp_tree,
tvbuff_t *snmp_tvb;
/* Don't add SNMP stuff to the info column */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
snmp_tvb = tvb_new_subset_length(tvb, offset, length);
@ -784,7 +784,7 @@ dissect_snmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *wassp_tree,
show_exception(snmp_tvb, pinfo, wassp_tree, EXCEPT_CODE, GET_MESSAGE);
} ENDTRY;
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
offset += length;
@ -798,7 +798,7 @@ dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *wassp_tree,
tvbuff_t *ieee80211_tvb;
/* Don't add IEEE 802.11 stuff to the info column */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
ieee80211_tvb = tvb_new_subset_length(tvb, offset, length);
@ -809,7 +809,7 @@ dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *wassp_tree,
show_exception(ieee80211_tvb, pinfo, wassp_tree, EXCEPT_CODE, GET_MESSAGE);
} ENDTRY;
col_set_writable(pinfo->cinfo, TRUE);
col_set_writable(pinfo->cinfo, COL_INFO, TRUE);
offset += length;

View File

@ -12679,18 +12679,18 @@ dissect_zbee_zcl_gp_payload(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
if (payload_size != 0 && payload_size != 0xff) {
tvbuff_t *gtvb = tvb_new_composite();
gboolean writable = col_get_writable(pinfo->cinfo);
gboolean writable = col_get_writable(pinfo->cinfo, COL_INFO);
/* remove payload length and put command id instead */
tvb_composite_append(gtvb, tvb_new_subset_length(tvb, offset-2, 1));
tvb_composite_append(gtvb, tvb_new_subset_length(tvb, offset, payload_size));
tvb_composite_finalize(gtvb);
/* prevent overwriting COL_INFO */
col_set_writable(pinfo->cinfo, FALSE);
col_set_writable(pinfo->cinfo, COL_INFO, FALSE);
/* Actually dissect_zbee_nwk_gp_cmd wants zbee_nwk_green_power_packet*
* as a data but never uses it. */
call_dissector_only(zgp_handle, gtvb, pinfo, tree, NULL);
col_set_writable(pinfo->cinfo, writable);
col_set_writable(pinfo->cinfo, COL_INFO, writable);
offset += payload_size;
}
return offset;

View File

@ -782,8 +782,8 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
saved_proto = pinfo->current_proto;
saved_can_desegment = pinfo->can_desegment;
save_writable = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_writable = col_get_writable(pinfo->cinfo, -1);
col_set_writable(pinfo->cinfo, -1, FALSE);
copy_address_shallow(&save_dl_src, &pinfo->dl_src);
copy_address_shallow(&save_dl_dst, &pinfo->dl_dst);
copy_address_shallow(&save_net_src, &pinfo->net_src);
@ -799,7 +799,7 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
/*
* Restore the column writability and addresses.
*/
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
copy_address_shallow(&pinfo->net_src, &save_net_src);
@ -841,7 +841,7 @@ call_dissector_work_error(dissector_handle_t handle, tvbuff_t *tvb,
}
ENDTRY;
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
copy_address_shallow(&pinfo->dl_src, &save_dl_src);
copy_address_shallow(&pinfo->dl_dst, &save_dl_dst);
copy_address_shallow(&pinfo->net_src, &save_net_src);

View File

@ -1632,14 +1632,14 @@ static void wimaxasncp_dissect_tlv_value(
eap_tvb = tvb_new_subset_remaining(tvb, offset);
/* Disable writing to info column while calling eap dissector */
save_writable = col_get_writable(pinfo->cinfo);
col_set_writable(pinfo->cinfo, FALSE);
save_writable = col_get_writable(pinfo->cinfo, -1);
col_set_writable(pinfo->cinfo, -1, FALSE);
/* Call the EAP dissector. */
call_dissector(eap_handle, eap_tvb, pinfo, eap_tree);
/* Restore previous writable state of info column */
col_set_writable(pinfo->cinfo, save_writable);
col_set_writable(pinfo->cinfo, -1, save_writable);
}
return;

View File

@ -59,7 +59,7 @@ protocolinfo_packet(void *prs, packet_info *pinfo, epan_dissect_t *edt, const vo
* To prevent a crash, we check whether INFO column is writable
* and, if not, we report that error and exit.
*/
if (!col_get_writable(pinfo->cinfo)) {
if (!col_get_writable(pinfo->cinfo, COL_INFO)) {
fprintf(stderr, "tshark: the proto,colinfo tap doesn't work if the INFO column isn't being printed.\n");
exit(1);
}