static int hf_mysql_fld_timestamp = -1;
static int hf_mysql_fld_set = -1;
static int hf_mysql_fld_decimals = -1;
+static int hf_mysql_row_length = -1;
+static int hf_mysql_row_text = -1;
/* type constants */
static const value_string type_constants[] =
{ &hf_mysql_fld_decimals,
{ "Decimals", "mysql.field.decimals",
FT_UINT8, BASE_DEC, NULL, 0x0,
- "Field: decimals", HFILL }}
+ "Field: decimals", HFILL }},
+
+ { &hf_mysql_row_length,
+ { "length", "mysql.row.length",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Field: row packet text tength", HFILL }},
+
+ { &hf_mysql_row_text,
+ { "text", "mysql.row.text",
+ FT_STRING, BASE_DEC, NULL, 0x0,
+ "Field: row packet text", HFILL }},
};
static gint *ett[]=
offset+=strlen;
/* rest is optional */
- if (!tvb_length_remaining(tvb, offset)) return offset;
+ if (!tvb_reported_length_remaining(tvb, offset)) return offset;
/* 2 bytes CAPS */
offset= mysql_dissect_caps(tvb, offset, greeting_tree, &conn_data->srv_caps, "Server");
/* rest is optional */
- if (!tvb_length_remaining(tvb, offset)) return offset;
+ if (!tvb_reported_length_remaining(tvb, offset)) return offset;
mysql_dissect_collation(tvb, offset, greeting_tree, conn_data->srv_caps,
tvb_get_guint8(tvb, offset), hf_mysql_charset);
offset+= 13;
/* 4.1+ server: rest of salt */
- if (tvb_length_remaining(tvb, offset)) {
+ if (tvb_reported_length_remaining(tvb, offset)) {
strlen= tvb_strsize(tvb,offset);
proto_tree_add_item(greeting_tree, hf_mysql_salt2, tvb,
offset, strlen, FALSE );
offset+= strlen;
/* rest is optional */
- if (!tvb_length_remaining(tvb, offset)) return offset;
+ if (!tvb_reported_length_remaining(tvb, offset)) return offset;
/* password: asciiz or length+ascii */
if (conn_data->clnt_caps & MYSQL_CAPS_SC) {
case MYSQL_REGISTER_SLAVE:
proto_tree_add_string(req_tree, hf_mysql_payload, tvb, offset, -1,
"FIXME: implement replication packets");
- offset+= tvb_length_remaining(tvb, offset);
+ offset+= tvb_reported_length_remaining(tvb, offset);
conn_data->state= REQUEST;
break;
default:
proto_tree_add_string(req_tree, hf_mysql_payload, tvb, offset, -1,
"unknown/invalid command code");
- offset+= tvb_length_remaining(tvb, offset);
+ offset+= tvb_reported_length_remaining(tvb, offset);
conn_data->state= UNDEFINED;
}
conn_data->state= REQUEST;
}
- else if (response_code == 0xfe && tvb_length_remaining(tvb, offset) < 9) {
+ else if (response_code == 0xfe && tvb_reported_length_remaining(tvb, offset) < 9) {
proto_tree_add_uint_format(tree, hf_mysql_eof, tvb, offset, 1,
response_code, "EOF marker (%u)",
offset+= 1;
/* pre-4.1 packet ends here */
- if (tvb_length_remaining(tvb, offset)) {
+ if (tvb_reported_length_remaining(tvb, offset)) {
proto_tree_add_item(tree, hf_mysql_num_warn,
tvb, offset, 2, FALSE);
offset= mysql_dissect_server_status(tvb, offset+2, tree);
}
else if (response_code == 0) {
- if (tvb_length_remaining(tvb, offset+1)
+ if (tvb_reported_length_remaining(tvb, offset+1)
> tvb_get_fle(tvb, offset+1, NULL, NULL)) {
offset= mysql_dissect_ok_packet(tvb, pinfo, offset+1,
tree, conn_data);
else {
switch (conn_data->state) {
case RESPONSE_MESSAGE:
- if ((strlen= tvb_length_remaining(tvb, offset))) {
+ if ((strlen= tvb_reported_length_remaining(tvb, offset))) {
proto_tree_add_item(tree, hf_mysql_message, tvb,
offset, strlen, FALSE);
offset+= strlen;
default:
proto_tree_add_string(tree, hf_mysql_payload, tvb, offset, -1,
"unknown/invalid response");
- offset+= tvb_length_remaining(tvb, offset);
+ offset+= tvb_reported_length_remaining(tvb, offset);
conn_data->state= UNDEFINED;
}
}
}
offset+= fle;
- if ((strlen= tvb_length_remaining(tvb, offset))) {
+ if ((strlen= tvb_reported_length_remaining(tvb, offset))) {
offset= mysql_dissect_server_status(tvb, offset, tree);
/* 4.1+ protocol only: 2 bytes number of warnings */
}
/* optional: message string */
- if ((strlen= tvb_length_remaining(tvb, offset))) {
+ if ((strlen= tvb_reported_length_remaining(tvb, offset))) {
proto_tree_add_item(tree, hf_mysql_message, tvb,
offset, strlen, FALSE);
offset+= strlen;
tvb, offset, fle, num_fields);
offset+= fle;
- if (tvb_length_remaining(tvb, offset)) {
+ if (tvb_reported_length_remaining(tvb, offset)) {
fle= tvb_get_fle(tvb, offset, &extra, NULL);
proto_tree_add_uint64(tree, hf_mysql_extra,
tvb, offset, fle, extra);
static int
mysql_dissect_row_packet(tvbuff_t *tvb, int offset, proto_tree *tree)
{
- proto_tree_add_text(tree, tvb, offset, -1, "FIXME: write mysql_dissect_row_packet()");
- return offset + tvb_length_remaining(tvb, offset);
+ while (offset < tvb_reported_length_remaining(tvb, offset)) {
+ int length = (int) tvb_get_guint8(tvb, offset);
+
+ proto_tree_add_item(tree, hf_mysql_row_length, tvb, offset, 1, FALSE);
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_mysql_row_text, tvb, offset, length, FALSE);
+ offset += length;
+ }
+
+ return offset;
}
mysql_dissect_response_prepare(tvbuff_t *tvb, int offset, proto_tree *tree)
{
proto_tree_add_text(tree, tvb, offset, -1, "FIXME: write mysql_dissect_response_prepare()");
- return offset + tvb_length_remaining(tvb, offset);
+ return offset + tvb_reported_length_remaining(tvb, offset);
}
mysql_dissect_param_packet(tvbuff_t *tvb, int offset, proto_tree *tree)
{
proto_tree_add_text(tree, tvb, offset, -1, "FIXME: write mysql_dissect_param_packet()");
- return offset + tvb_length_remaining(tvb, offset);
+ return offset + tvb_reported_length_remaining(tvb, offset);
}
{
gint len = tvb_strnlen(tvb, offset, -1);
if (len == -1) {
- len = tvb_length_remaining(tvb, offset);
+ len = tvb_reported_length_remaining(tvb, offset);
} else {
len++; /* the trailing \0 */
}