diff options
author | Evan Huus <eapache@gmail.com> | 2021-08-23 18:26:13 -0400 |
---|---|---|
committer | AndersBroman <a.broman58@gmail.com> | 2021-08-24 12:43:52 +0000 |
commit | 678541878cb9fd1400a1b9104e76b79f5a2eb775 (patch) | |
tree | 16a9ddc4b9f895d04df8a5fa56c2a1d65751ae2c /epan/dissectors/asn1/h248 | |
parent | e8f967f162038fe4a72595f0b2191cdca2f10149 (diff) |
h248: convert to pinfo->pool
This one was non-trivial in places and involved converting a few methods
to use strbufs to simplify.
Diffstat (limited to 'epan/dissectors/asn1/h248')
-rw-r--r-- | epan/dissectors/asn1/h248/h248.cnf | 52 | ||||
-rw-r--r-- | epan/dissectors/asn1/h248/packet-h248-template.c | 96 | ||||
-rw-r--r-- | epan/dissectors/asn1/h248/packet-h248-template.h | 10 |
3 files changed, 82 insertions, 76 deletions
diff --git a/epan/dissectors/asn1/h248/h248.cnf b/epan/dissectors/asn1/h248/h248.cnf index 7cb58c325b..6b65126293 100644 --- a/epan/dissectors/asn1/h248/h248.cnf +++ b/epan/dissectors/asn1/h248/h248.cnf @@ -108,7 +108,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_FTR Message - col_add_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,keep_persistent_data)); + col_add_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,actx->pinfo->pool,keep_persistent_data)); if (keep_persistent_data) gcp_analyze_msg(h248_tree, actx->pinfo, tvb, curr_info.msg, &h248_arrel, &ei_h248_errored_command); @@ -121,32 +121,32 @@ SigParameterV1/value ABBREV=sig_param_value #.FN_BODY TransactionRequest/transactionId guint32 trx_id = 0; offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id); - curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, keep_persistent_data); + curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, actx->pinfo, keep_persistent_data); error_code = 0; #.END #.FN_BODY TransactionPending/transactionId guint32 trx_id = 0; offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id); - curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_PENDING, keep_persistent_data); + curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_PENDING, actx->pinfo, keep_persistent_data); error_code = 0; #.FN_BODY TransactionReply/transactionId guint32 trx_id = 0; offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id); - curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REPLY, keep_persistent_data); + curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REPLY, actx->pinfo, keep_persistent_data); error_code = 0; #.FN_BODY SegmentReply/transactionId guint32 trx_id = 0; offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id); - curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_ACK, keep_persistent_data); + curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_ACK, actx->pinfo, keep_persistent_data); error_code = 0; #.FN_BODY ActionRequest/contextId guint32 ctx_id = 0; offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id); - curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,keep_persistent_data); + curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,actx->pinfo,keep_persistent_data); curr_info.cmd = NULL; curr_info.term = NULL; #.END @@ -154,13 +154,13 @@ SigParameterV1/value ABBREV=sig_param_value #.FN_FTR ActionReply if (!curr_info.cmd) { - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); } #.END #.FN_HDR Command/addReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END @@ -169,7 +169,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/moveReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END @@ -179,7 +179,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/modReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR Command/modReq @@ -187,7 +187,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/subtractReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR Command/subtractReq @@ -195,7 +195,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/auditCapRequest - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR Command/auditCapRequest @@ -203,7 +203,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/auditValueRequest - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR Command/auditValueRequest @@ -211,7 +211,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR Command/notifyReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR Command/notifyReq @@ -219,7 +219,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR ServiceChangeRequest - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR ServiceChangeRequest @@ -227,7 +227,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR ContextRequest/topologyReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR ContextRequest/topologyReq @@ -235,7 +235,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR ActionRequest/contextAttrAuditReq - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_FTR ActionRequest/contextAttrAuditReq @@ -243,37 +243,37 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR CommandReply/addReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR CommandReply/moveReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR CommandReply/modReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR CommandReply/subtractReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR CommandReply/notifyReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR ServiceChangeReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END #.FN_HDR CommandReply/auditCapReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END @@ -288,7 +288,7 @@ SigParameterV1/value ABBREV=sig_param_value #.END #.FN_HDR CommandReply/auditValueReply - curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,keep_persistent_data); + curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,actx->pinfo,keep_persistent_data); H248_TAP(); #.END @@ -370,7 +370,7 @@ SigParameterV1/value ABBREV=sig_param_value } - curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, keep_persistent_data); + curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, actx->pinfo, keep_persistent_data); } else { curr_info.term->len = 0; diff --git a/epan/dissectors/asn1/h248/packet-h248-template.c b/epan/dissectors/asn1/h248/packet-h248-template.c index 7c0a596aca..af1a2ba83c 100644 --- a/epan/dissectors/asn1/h248/packet-h248-template.c +++ b/epan/dissectors/asn1/h248/packet-h248-template.c @@ -168,7 +168,7 @@ gcp_msg_t* gcp_msg(packet_info* pinfo, int o, gboolean keep_persistent_data) { wmem_tree_insert32_array(gcp_msgs,key,m); } } else { - m = wmem_new0(wmem_packet_scope(), gcp_msg_t); + m = wmem_new0(pinfo->pool, gcp_msg_t); m->framenum = framenum; m->trxs = NULL; m->committed = FALSE; @@ -198,8 +198,8 @@ gcp_msg_t* gcp_msg(packet_info* pinfo, int o, gboolean keep_persistent_data) { } else { /* XXX: heuristic and error prone */ - m->hi_addr = g_str_hash(address_to_str(wmem_packet_scope(), hi_addr)); - m->lo_addr = g_str_hash(address_to_str(wmem_packet_scope(), lo_addr)); + m->hi_addr = g_str_hash(address_to_str(pinfo->pool, hi_addr)); + m->lo_addr = g_str_hash(address_to_str(pinfo->pool, lo_addr)); } break; } @@ -207,7 +207,7 @@ gcp_msg_t* gcp_msg(packet_info* pinfo, int o, gboolean keep_persistent_data) { return m; } -gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, gboolean keep_persistent_data) { +gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, packet_info *pinfo, gboolean keep_persistent_data) { gcp_trx_t* t = NULL; gcp_trx_msg_t* trxmsg; @@ -260,8 +260,8 @@ gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, gboolean ke } } else { - t = wmem_new(wmem_packet_scope(), gcp_trx_t); - trxmsg = wmem_new(wmem_packet_scope(), gcp_trx_msg_t); + t = wmem_new(pinfo->pool, gcp_trx_t); + trxmsg = wmem_new(pinfo->pool, gcp_trx_msg_t); t->initial = NULL; t->id = t_id; t->type = type; @@ -286,7 +286,7 @@ gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, gboolean ke } -gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, gboolean persistent) { +gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, packet_info *pinfo, gboolean persistent) { gcp_ctx_t* context = NULL; gcp_ctx_t** context_p = NULL; @@ -384,7 +384,7 @@ gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, gboolean persistent } } } else { - context = wmem_new(wmem_packet_scope(), gcp_ctx_t); + context = wmem_new(pinfo->pool, gcp_ctx_t); context->initial = m; context->cmds = NULL; context->id = c_id; @@ -396,7 +396,7 @@ gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, gboolean persistent return context; } -gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, guint offset, gboolean persistent) { +gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, guint offset, packet_info *pinfo, gboolean persistent) { gcp_cmd_t* cmd; gcp_cmd_msg_t* cmdtrx; gcp_cmd_msg_t* cmdctx; @@ -423,9 +423,9 @@ gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type cmdctx = wmem_new(wmem_file_scope(), gcp_cmd_msg_t); } } else { - cmd = wmem_new(wmem_packet_scope(), gcp_cmd_t); - cmdtrx = wmem_new(wmem_packet_scope(), gcp_cmd_msg_t); - cmdctx = wmem_new(wmem_packet_scope(), gcp_cmd_msg_t); + cmd = wmem_new(pinfo->pool, gcp_cmd_t); + cmdtrx = wmem_new(pinfo->pool, gcp_cmd_msg_t); + cmdctx = wmem_new(pinfo->pool, gcp_cmd_msg_t); } cmd->type = type; @@ -465,7 +465,7 @@ gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type return cmd; } -gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, gboolean persistent) { +gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, packet_info *pinfo, gboolean persistent) { gcp_terms_t* ct; gcp_terms_t* ct2; @@ -582,7 +582,7 @@ gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term DISSECTOR_ASSERT_NOT_REACHED(); } } else { - ct = wmem_new(wmem_packet_scope(), gcp_terms_t); + ct = wmem_new(pinfo->pool, gcp_terms_t); ct->term = t; ct->next = NULL; c->terms.last = c->terms.last->next = ct; @@ -592,7 +592,7 @@ gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term } -static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, gboolean persistent) { +static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, wmem_allocator_t *scope, gboolean persistent) { const gchar* s; gcp_terms_t* term; @@ -601,7 +601,6 @@ static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, gboolean persistent) { switch (c->type) { case GCP_CMD_NONE: return "-"; - break; case GCP_CMD_ADD_REQ: s = "AddReq {"; break; @@ -671,16 +670,17 @@ static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, gboolean persistent) { } for (term = c->terms.next; term; term = term->next) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,term->term->str); + s = wmem_strdup_printf(scope, "%s %s", s, term->term->str); } if (c->error) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s Error=%i",s,c->error); + s = wmem_strdup_printf(scope, "%s Error=%i", s, c->error); } - s = wmem_strdup_printf(wmem_packet_scope(), "%s }", s); + s = wmem_strdup_printf(scope, "%s }", s); if (persistent) { + /* FIXME: this method has a side-effect but is buried deep within an apparently side-effect free string helper */ if (! c->str) c->str = wmem_strdup(wmem_file_scope(), s); } else { c->str = s; @@ -689,46 +689,52 @@ static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, gboolean persistent) { return s; } -static const gchar* gcp_trx_to_str(gcp_msg_t* m, gcp_trx_t* t, gboolean persistent) { - gchar* s; +static const gchar * gcp_trx_to_str(gcp_msg_t* m, gcp_trx_t* t, wmem_allocator_t *scope, gboolean persistent) { + wmem_strbuf_t *s; gcp_cmd_msg_t* c; if ( !m || !t ) return "-"; - s = wmem_strdup_printf(wmem_packet_scope(), "T %x { ",t->id); + s = wmem_strbuf_new(scope, NULL); + wmem_strbuf_append_printf(s, "T %x { ", t->id); if (t->cmds) { if (t->cmds->cmd->ctx) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s C %x {",s,t->cmds->cmd->ctx->id); + wmem_strbuf_append_printf(s, " C %x {", t->cmds->cmd->ctx->id); for (c = t->cmds; c; c = c->next) { if (c->cmd->msg == m) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,gcp_cmd_to_str(c->cmd,persistent)); + wmem_strbuf_append_c(s, ' '); + wmem_strbuf_append(s, gcp_cmd_to_str(c->cmd, scope, persistent)); } } - s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,"}"); + wmem_strbuf_append(s, " }"); } } if (t->error) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s Error=%i",s,t->error); + wmem_strbuf_append_printf(s, " Error=%i", t->error); } - return wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,"}"); + wmem_strbuf_append(s, " }"); + + return wmem_strbuf_finalize(s); } -const gchar* gcp_msg_to_str(gcp_msg_t* m, gboolean persistent) { +const gchar* gcp_msg_to_str(gcp_msg_t* m, wmem_allocator_t *scope, gboolean persistent) { gcp_trx_msg_t* t; - const gchar* s = ""; + wmem_strbuf_t *s; if ( !m ) return "-"; + s = wmem_strbuf_new(scope, NULL); for (t = m->trxs; t; t = t->next) { - s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,gcp_trx_to_str(m,t->trx, persistent)); + wmem_strbuf_append_c(s, ' '); + wmem_strbuf_append(s, gcp_trx_to_str(m, t->trx, scope, persistent)); } - return s; + return wmem_strbuf_finalize(s); } typedef struct _gcp_ctxs_t { @@ -756,7 +762,7 @@ void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* gcp_tvb } if (! ctx_node) { - ctx_node = wmem_new(wmem_packet_scope(), gcp_ctxs_t); + ctx_node = wmem_new(pinfo->pool, gcp_ctxs_t); ctx_node->ctx = ctx; ctx_node->next = contexts.next; contexts.next = ctx_node; @@ -811,7 +817,7 @@ void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* gcp_tvb } if (ctx_term->term->bir && ctx_term->term->nsap) { - gchar* tmp_key = wmem_strdup_printf(wmem_packet_scope(), "%s:%s",ctx_term->term->nsap,ctx_term->term->bir); + gchar* tmp_key = wmem_strdup_printf(pinfo->pool, "%s:%s",ctx_term->term->nsap,ctx_term->term->bir); gchar* key = g_ascii_strdown(tmp_key, -1); alcap_tree_from_bearer_key(term_tree, gcp_tvb, pinfo, key); g_free(key); @@ -1517,9 +1523,9 @@ extern void h248_param_PkgdName(proto_tree* tree, tvbuff_t* tvb, packet_info* pi pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor); if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor); + strval = wmem_strdup_printf(pinfo->pool, "%s (%d)",strval,name_minor); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor); + strval = wmem_strdup_printf(pinfo->pool, "Unknown (%d)",name_minor); } proto_item_set_text(pi,"Signal ID: %s", strval); @@ -1772,9 +1778,9 @@ static int dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offse const gchar* strval; if (pkg->param_names && ( strval = try_val_to_str(name_minor, pkg->param_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor); } proto_item_set_text(pi,"Parameter: %s", strval); @@ -1835,9 +1841,9 @@ static int dissect_h248_EventName(gboolean implicit_tag, tvbuff_t *tvb, int offs const gchar* strval; if (pkg->event_names && ( strval = try_val_to_str(name_minor, pkg->event_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor); } proto_item_set_text(pi,"Event ID: %s", strval); @@ -1900,9 +1906,9 @@ static int dissect_h248_SignalName(gboolean implicit_tag , tvbuff_t *tvb, int of const gchar* strval; if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor); + strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor); } proto_item_set_text(pi,"Signal ID: %s", strval); @@ -1993,9 +1999,9 @@ static int dissect_h248_SigParameterName(gboolean implicit_tag _U_, tvbuff_t *tv } if (curr_info.sig && curr_info.sig->param_names && ( strval = try_val_to_str(param_id, curr_info.sig->param_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,param_id); + strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,param_id); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",param_id); + strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",param_id); } proto_item_set_text(pi,"Parameter: %s", strval); @@ -2071,9 +2077,9 @@ static int dissect_h248_EventParameterName(gboolean implicit_tag _U_, tvbuff_t * } if (curr_info.evt && curr_info.evt->param_names && ( strval = try_val_to_str(param_id, curr_info.evt->param_names) )) { - strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,param_id); + strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,param_id); } else { - strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",param_id); + strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",param_id); } proto_item_set_text(pi,"Parameter: %s", strval); diff --git a/epan/dissectors/asn1/h248/packet-h248-template.h b/epan/dissectors/asn1/h248/packet-h248-template.h index d6356b927d..ac32c7045d 100644 --- a/epan/dissectors/asn1/h248/packet-h248-template.h +++ b/epan/dissectors/asn1/h248/packet-h248-template.h @@ -164,10 +164,10 @@ typedef struct _gcp_ctx_t { } gcp_ctx_t; extern gcp_msg_t* gcp_msg(packet_info* pinfo, int o, gboolean persistent); -extern gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, gboolean persistent); -extern gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, gboolean persistent); -extern gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, guint offset, gboolean persistent); -extern gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, gboolean persistent); +extern gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, packet_info *pinfo, gboolean persistent); +extern gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, packet_info *pinfo, gboolean persistent); +extern gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, guint offset, packet_info *pinfo, gboolean persistent); +extern gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, packet_info *pinfo, gboolean persistent); extern void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* gcp_tvb, gcp_msg_t* m, gcp_hf_ett_t* ids, expert_field* command_err); #define GCP_ETT_ARR_ELEMS(gi) &(gi.ett.ctx),&(gi.ett.ctx_cmds),&(gi.ett.ctx_terms),&(gi.ett.ctx_term) @@ -183,7 +183,7 @@ extern void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* WS_DLL_PUBLIC const value_string gcp_cmd_type[]; WS_DLL_PUBLIC const value_string gcp_term_types[]; -extern const gchar* gcp_msg_to_str(gcp_msg_t* m, gboolean persistent); +extern const gchar* gcp_msg_to_str(gcp_msg_t* m, wmem_allocator_t *scope, gboolean persistent); #define gcp_cmd_set_error(c,e) (c->error = e) #define gcp_trx_set_error(t,e) (t->error = e) |