Minor changes mostly related to proto_register & proto_reg_handoff;

- Use 'dissector standard template format'
- Remove 'once-only' ["if (!initialized) ..."] if not req'd
- Misc
Also: adjust some indentation

svn path=/trunk/; revision=27324
This commit is contained in:
Bill Meier 2009-01-28 21:52:57 +00:00
parent 3c11319ea4
commit 0e1613fbe5
9 changed files with 1101 additions and 1103 deletions

View File

@ -33,9 +33,6 @@
#include <string.h>
#include <epan/packet.h>
/* forward reference */
static void dissect_egd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
#define EGD_PORT 18246 /* 0x4746 */
#define EGD_ST_NONEW 0
@ -76,7 +73,6 @@ static const value_string egd_stat_vals[] = {
static int proto_egd = -1;
static dissector_handle_t egd_handle;
static dissector_handle_t data_handle;
static int hf_egd_ver = -1;
@ -93,100 +89,6 @@ static int hf_egd_resv = -1;
static gint ett_egd = -1;
static gint ett_status_item = -1;
static hf_register_info hf[] =
{
{ &hf_egd_ver,
{ "Version", "egd.ver",
FT_UINT8, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_type,
{ "Type", "egd.type",
FT_UINT8, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_rid,
{ "RequestID", "egd.rid",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_pid,
{ "ProducerID", "egd.pid",
FT_IPv4, BASE_NONE,
NULL, 0x0,
"", HFILL }
},
{ &hf_egd_exid,
{ "ExchangeID", "egd.exid",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_time,
{ "Timestamp", "egd.time",
FT_ABSOLUTE_TIME, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_notime,
{ "Timestamp", "egd.time",
FT_UINT64, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_stat,
{ "Status", "egd.stat",
FT_UINT32, BASE_DEC,
VALS(egd_stat_vals), 0x0,
"Status", HFILL }
},
{ &hf_egd_csig,
{ "ConfigSignature", "egd.csig",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_resv,
{ "Reserved", "egd.rsrv",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
}
};
static gint *ett[] =
{
&ett_egd,
&ett_status_item
};
void proto_register_egd(void)
{
proto_egd = proto_register_protocol (
"Ethernet Global Data", /* name */
"EGD", /* short name */
"egd" /* abbrev */
);
proto_register_field_array(proto_egd, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
void proto_reg_handoff_egd(void)
{
/* find data dissector */
data_handle = find_dissector("data");
egd_handle = create_dissector_handle(dissect_egd, proto_egd);
dissector_add("udp.port", EGD_PORT, egd_handle);
}
static void dissect_egd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
/* replace UDP with EGD in display */
@ -259,3 +161,96 @@ static void dissect_egd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
}
void proto_register_egd(void)
{
static hf_register_info hf[] =
{
{ &hf_egd_ver,
{ "Version", "egd.ver",
FT_UINT8, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_type,
{ "Type", "egd.type",
FT_UINT8, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_rid,
{ "RequestID", "egd.rid",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_pid,
{ "ProducerID", "egd.pid",
FT_IPv4, BASE_NONE,
NULL, 0x0,
"", HFILL }
},
{ &hf_egd_exid,
{ "ExchangeID", "egd.exid",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_time,
{ "Timestamp", "egd.time",
FT_ABSOLUTE_TIME, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_notime,
{ "Timestamp", "egd.time",
FT_UINT64, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_stat,
{ "Status", "egd.stat",
FT_UINT32, BASE_DEC,
VALS(egd_stat_vals), 0x0,
"Status", HFILL }
},
{ &hf_egd_csig,
{ "ConfigSignature", "egd.csig",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_egd_resv,
{ "Reserved", "egd.rsrv",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
}
};
static gint *ett[] =
{
&ett_egd,
&ett_status_item
};
proto_egd = proto_register_protocol (
"Ethernet Global Data", /* name */
"EGD", /* short name */
"egd" /* abbrev */
);
proto_register_field_array(proto_egd, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
void proto_reg_handoff_egd(void)
{
dissector_handle_t egd_handle;
egd_handle = create_dissector_handle(dissect_egd, proto_egd);
dissector_add("udp.port", EGD_PORT, egd_handle);
/* find data dissector */
data_handle = find_dissector("data");
}

View File

@ -58,19 +58,19 @@
const value_string gsm_bssmap_le_msg_strings[] = {
{ 0, "Reserved" },
{ 1, "Reserved" },
{ 2, "Reserved" },
{ 3, "Reserved" },
{ 4, "Reserved" },
{ BSSMAP_LE_PERFORM_LOCATION_REQUEST, "Perform Location Request" },
{ BSSMAP_LE_PERFORM_LOCATION_RESPONSE, "Perform Location Response" },
{ BSSMAP_LE_PERFORM_LOCATION_ABORT, "Perform Location Abort" },
{ BSSMAP_LE_PERFORM_LOCATION_INFORMATION, "Perform Location Information" },
{ BSSMAP_LE_CONNECTION_ORIENTED_INFORMATION, "Connection Oriented Information" },
{ BSSMAP_LE_CONNECTIONLESS_INFORMATION, "Connectionless Information" },
{ BSSMAP_LE_RESET, "Reset" },
{ BSSMAP_LE_RESET_ACKNOWLEDGE, "Reset Acknowledge" },
{ 0, NULL } /*Null terminated list. Make sure we add this to our value/string structures. */
{ 1, "Reserved" },
{ 2, "Reserved" },
{ 3, "Reserved" },
{ 4, "Reserved" },
{ BSSMAP_LE_PERFORM_LOCATION_REQUEST, "Perform Location Request" },
{ BSSMAP_LE_PERFORM_LOCATION_RESPONSE, "Perform Location Response" },
{ BSSMAP_LE_PERFORM_LOCATION_ABORT, "Perform Location Abort" },
{ BSSMAP_LE_PERFORM_LOCATION_INFORMATION, "Perform Location Information" },
{ BSSMAP_LE_CONNECTION_ORIENTED_INFORMATION, "Connection Oriented Information" },
{ BSSMAP_LE_CONNECTIONLESS_INFORMATION, "Connectionless Information" },
{ BSSMAP_LE_RESET, "Reset" },
{ BSSMAP_LE_RESET_ACKNOWLEDGE, "Reset Acknowledge" },
{ 0, NULL } /*Null terminated list. Make sure we add this to our value/string structures. */
};
/* Information Element definitions */
@ -106,37 +106,37 @@ const value_string gsm_bssmap_le_msg_strings[] = {
#define BSSMAP_LE_IMEI 128
const value_string gsm_bssmap_le_elem_strings[] = {
{ BSSMAP_LE_LCS_QOS, "LCS QoS" },
{ BSSMAP_LE_LCS_PRIORITY, "LCS Priority" },
{ BSSMAP_LE_LOCATION_TYPE, "Location Type" },
{ BSSMAP_LE_GANSS_LOCATION_TYPE, "GANSS Location Type" },
{ BSSMAP_LE_GEOGRAPHIC_LOCATION, "Geographic Location" },
{ BSSMAP_LE_POSITIONING_DATA, "Positioning Data" },
{ BSSMAP_LE_GANSS_POSITIONING_DATA, "GANSS Positioning Data" },
{ BSSMAP_LE_VELOCITY_DATA, "Velocity Data" },
{ BSSMAP_LE_LCS_CAUSE, "LCS Cause" },
{ BSSMAP_LE_LCS_CLIENT_TYPE, "LCS Client Type" },
{ BSSMAP_LE_APDU, "APDU" },
{ BSSMAP_LE_NETWORK_ELEMENT_IDENTITY, "Network Element Identity" },
{ BSSMAP_LE_REQUESTED_GPS_ASSISTANCE_DATA, "Requested GPS Assistance Data" },
{ BSSMAP_LE_REQUESTED_GANSS_ASSISTANCE_DATA, "Requested GANSS Assistance Data" },
{ BSSMAP_LE_DECIPHERING_KEYS, "Deciphering Keys" },
{ BSSMAP_LE_RETURN_ERROR_REQUEST, "Return Error Request" },
{ BSSMAP_LE_RETURN_ERROR_CAUSE, "Return Error Cause" },
{ BSSMAP_LE_SEGMENTATION, "Segmentation" },
{ BSSMAP_LE_CLASSMARK_INFORMATION_TYPE_3, "Classmark Information Type 3" },
{ BSSMAP_LE_CAUSE, "Cause" },
{ BSSMAP_LE_CELL_IDENTIFIER, "Cell Identifier" },
{ BSSMAP_LE_CHOSEN_CHANNEL, "Chosen Channel" },
{ BSSMAP_LE_IMSI, "IMSI" },
{ BSSMAP_LE_RESERVED_NOTE1, "Reserved" },
{ BSSMAP_LE_RESERVED_NOTE2, "Reserved" },
{ BSSMAP_LE_RESERVED_NOTE3, "Reserved" },
{ BSSMAP_LE_LCS_CAPABILITY, "LCS Capability" },
{ BSSMAP_LE_PACKET_MEASUREMENT_REPORT, "Packet Measurement Report" },
{ BSSMAP_LE_CELL_IDENTITY_LIST, "Cell Identity List" },
{ BSSMAP_LE_IMEI, "IMEI" },
{ 0, NULL }
{ BSSMAP_LE_LCS_QOS, "LCS QoS" },
{ BSSMAP_LE_LCS_PRIORITY, "LCS Priority" },
{ BSSMAP_LE_LOCATION_TYPE, "Location Type" },
{ BSSMAP_LE_GANSS_LOCATION_TYPE, "GANSS Location Type" },
{ BSSMAP_LE_GEOGRAPHIC_LOCATION, "Geographic Location" },
{ BSSMAP_LE_POSITIONING_DATA, "Positioning Data" },
{ BSSMAP_LE_GANSS_POSITIONING_DATA, "GANSS Positioning Data" },
{ BSSMAP_LE_VELOCITY_DATA, "Velocity Data" },
{ BSSMAP_LE_LCS_CAUSE, "LCS Cause" },
{ BSSMAP_LE_LCS_CLIENT_TYPE, "LCS Client Type" },
{ BSSMAP_LE_APDU, "APDU" },
{ BSSMAP_LE_NETWORK_ELEMENT_IDENTITY, "Network Element Identity" },
{ BSSMAP_LE_REQUESTED_GPS_ASSISTANCE_DATA, "Requested GPS Assistance Data" },
{ BSSMAP_LE_REQUESTED_GANSS_ASSISTANCE_DATA, "Requested GANSS Assistance Data" },
{ BSSMAP_LE_DECIPHERING_KEYS, "Deciphering Keys" },
{ BSSMAP_LE_RETURN_ERROR_REQUEST, "Return Error Request" },
{ BSSMAP_LE_RETURN_ERROR_CAUSE, "Return Error Cause" },
{ BSSMAP_LE_SEGMENTATION, "Segmentation" },
{ BSSMAP_LE_CLASSMARK_INFORMATION_TYPE_3, "Classmark Information Type 3" },
{ BSSMAP_LE_CAUSE, "Cause" },
{ BSSMAP_LE_CELL_IDENTIFIER, "Cell Identifier" },
{ BSSMAP_LE_CHOSEN_CHANNEL, "Chosen Channel" },
{ BSSMAP_LE_IMSI, "IMSI" },
{ BSSMAP_LE_RESERVED_NOTE1, "Reserved" },
{ BSSMAP_LE_RESERVED_NOTE2, "Reserved" },
{ BSSMAP_LE_RESERVED_NOTE3, "Reserved" },
{ BSSMAP_LE_LCS_CAPABILITY, "LCS Capability" },
{ BSSMAP_LE_PACKET_MEASUREMENT_REPORT, "Packet Measurement Report" },
{ BSSMAP_LE_CELL_IDENTITY_LIST, "Cell Identity List" },
{ BSSMAP_LE_IMEI, "IMEI" },
{ 0, NULL }
};
static const value_string gsm_apdu_protocol_id_strings[] = {
@ -149,39 +149,39 @@ static const value_string gsm_apdu_protocol_id_strings[] = {
/* Velocity Requested definitions */
static const value_string bssmap_le_velocity_requested_vals[] = {
{ 0, "do not report velocity" },
{ 1, "report velocity if available" },
{ 0, NULL}
{ 0, "do not report velocity" },
{ 1, "report velocity if available" },
{ 0, NULL}
};
/* Vertical Coordinate definitions */
static const value_string bssmap_le_vertical_coordinate_indicator_vals[] = {
{ 0, "vertical coordinate not requested" },
{ 1, "vertical coordinate is requested" },
{ 0, NULL}
{ 0, "vertical coordinate not requested" },
{ 1, "vertical coordinate is requested" },
{ 0, NULL}
};
/* Horizontal Accuracy definitions */
static const value_string bssmap_le_horizontal_accuracy_indicator_vals[] = {
{ 0, "horizontal accuracy is not specified" },
{ 1, "horizontal accuracy is specified" },
{ 0, NULL}
{ 0, "horizontal accuracy is not specified" },
{ 1, "horizontal accuracy is specified" },
{ 0, NULL}
};
/* Vertical Accuracy definitions */
static const value_string bssmap_le_vertical_accuracy_indicator_vals[] = {
{ 0, "vertical accuracy is not specified" },
{ 1, "vertical accuracy is specified" },
{ 0, NULL}
{ 0, "vertical accuracy is not specified" },
{ 1, "vertical accuracy is specified" },
{ 0, NULL}
};
/* Response Time definitions */
static const value_string bssmap_le_response_time_definitions_vals[] = {
{ 0, "Response Time is not specified" },
{ 1, "Low Delay" },
{ 2, "Delay Tolerant" },
{ 3, "reserved" },
{ 0, NULL}
{ 0, "Response Time is not specified" },
{ 1, "Low Delay" },
{ 2, "Delay Tolerant" },
{ 3, "reserved" },
{ 0, NULL}
};
/* Initialize the protocol and registered fields */
@ -300,26 +300,26 @@ de_bmaple_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
static guint16
de_bmaple_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
gint bit_offset;
gint bit_offset;
/* Spare bits */
bit_offset = (offset<<3);
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bit_offset, 7, FALSE);
bit_offset += 7;
/* Spare bits */
bit_offset = (offset<<3);
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bit_offset, 7, FALSE);
bit_offset += 7;
/* Extract the Ciphering Key Flag and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_ciphering_key_flag, tvb, bit_offset, 1, FALSE);
bit_offset++;
offset++;
/* Extract the Ciphering Key Flag and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_ciphering_key_flag, tvb, bit_offset, 1, FALSE);
bit_offset++;
offset++;
/* Extract the Current Deciphering Key Value and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_current_deciphering_key_value, tvb, bit_offset, 56, FALSE);
bit_offset += 56;
offset += 7;
/* Extract the Current Deciphering Key Value and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_current_deciphering_key_value, tvb, bit_offset, 56, FALSE);
bit_offset += 56;
offset += 7;
/* Extract the Next Deciphering Key Value and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_next_deciphering_key_value, tvb, bit_offset, 56, FALSE);
offset += 7;
/* Extract the Next Deciphering Key Value and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_next_deciphering_key_value, tvb, bit_offset, 56, FALSE);
offset += 7;
return(len);
}
@ -344,36 +344,36 @@ de_bmaple_decihp_keys(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
* 10.13 LCS Cause
*/
static const value_string bssmap_le_lcs_cause_values[] = {
{ 0, "Unspecified" },
{ 1, "System Failure" },
{ 2, "Protocol Error" },
{ 3, "Data missing in position request" },
{ 4, "Unexpected data value in position request" },
{ 5, "Position method failure" },
{ 6, "Target MS Unreachable" },
{ 7, "Location request aborted" },
{ 8, "Facility not supported" },
{ 9, "Inter-BSC Handover Ongoing" },
{ 10, "Intra-BSC Handover Complete" },
{ 11, "Congestion" },
{ 12, "Inter NSE cell change" },
{ 13, "Routing Area Update" },
{ 14, "PTMSI reallocation" },
{ 15, "Suspension of GPRS services" },
{ 0, NULL}
{ 0, "Unspecified" },
{ 1, "System Failure" },
{ 2, "Protocol Error" },
{ 3, "Data missing in position request" },
{ 4, "Unexpected data value in position request" },
{ 5, "Position method failure" },
{ 6, "Target MS Unreachable" },
{ 7, "Location request aborted" },
{ 8, "Facility not supported" },
{ 9, "Inter-BSC Handover Ongoing" },
{ 10, "Intra-BSC Handover Complete" },
{ 11, "Congestion" },
{ 12, "Inter NSE cell change" },
{ 13, "Routing Area Update" },
{ 14, "PTMSI reallocation" },
{ 15, "Suspension of GPRS services" },
{ 0, NULL}
};
static const value_string bssmap_le_position_method_failure_diagnostic_vals[] = {
{ 0, "Congestion" },
{ 1, "insufficientResources" },
{ 2, "insufficientMeasurementData" },
{ 3, "inconsistentMeasurementData" },
{ 4, "locationProcedureNotCompleted" },
{ 5, "locationProcedureNotSupportedByTargetMS" },
{ 6, "qoSNotAttainable" },
{ 7, "positionMethodNotAvailableInNetwork" },
{ 8, "positionMethodNotAvailableInLocaitonArea" },
{ 0, NULL}
{ 0, "Congestion" },
{ 1, "insufficientResources" },
{ 2, "insufficientMeasurementData" },
{ 3, "inconsistentMeasurementData" },
{ 4, "locationProcedureNotCompleted" },
{ 5, "locationProcedureNotSupportedByTargetMS" },
{ 6, "qoSNotAttainable" },
{ 7, "positionMethodNotAvailableInNetwork" },
{ 8, "positionMethodNotAvailableInLocaitonArea" },
{ 0, NULL}
};
static guint16
de_bmaple_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
@ -382,16 +382,16 @@ de_bmaple_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
curr_offset = offset;
/* cause value */
/* cause value */
proto_tree_add_item(tree, hf_gsm_bssmap_le_lcs_cause_value, tvb, curr_offset, 1, FALSE);
curr_offset++;
curr_offset++;
if (len == 2)
{
/* Diagnostic value (note) */
if (len == 2)
{
/* Diagnostic value (note) */
proto_tree_add_item(tree, hf_gsm_bssmap_le_diagnostic_value, tvb, curr_offset, 1, FALSE);
curr_offset++;
}
curr_offset++;
}
return(curr_offset - offset);
}
@ -400,39 +400,39 @@ de_bmaple_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
*/
/* Client Category definitions */
static const value_string bssmap_le_client_category[] = {
{ 0, "Value Added Client" },
{ 2, "PLMN Operator" },
{ 3, "Emergency Services"},
{ 4, "Lawful Intercept Services"},
{ 0, NULL}
{ 0, "Value Added Client" },
{ 2, "PLMN Operator" },
{ 3, "Emergency Services"},
{ 4, "Lawful Intercept Services"},
{ 0, NULL}
};
/* Client Subtype definitions */
static const value_string bssmap_le_client_subtype[] = {
{ 0, "unspecified" },
{ 1, "broadcast service" },
{ 2, "O&M" },
{ 3, "anonymous statistics" },
{ 4, "Target MS service support" },
{ 0, NULL}
{ 0, "unspecified" },
{ 1, "broadcast service" },
{ 2, "O&M" },
{ 3, "anonymous statistics" },
{ 4, "Target MS service support" },
{ 0, NULL}
};
static guint16
de_bmaple_client(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint32 curr_offset;
guint8 bitCount;
guint8 bitCount;
bitCount = offset<<3;
bitCount = offset<<3;
curr_offset = offset;
/* Extract the client category and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_category, tvb, bitCount, 4, FALSE);
bitCount = bitCount + 4;
/* Extract the client category and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_category, tvb, bitCount, 4, FALSE);
bitCount = bitCount + 4;
/* Extract the client subtype and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_subtype, tvb, bitCount, 4, FALSE);
bitCount = bitCount + 4;
/* Extract the client subtype and add to protocol tree */
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_client_subtype, tvb, bitCount, 4, FALSE);
bitCount = bitCount + 4;
curr_offset++;
return(curr_offset - offset);
@ -447,54 +447,54 @@ de_bmaple_client(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
static guint16
de_bmaple_lcs_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint64 verticalCoordIndicator, velocityRequested, horizontalAccuracyIndicator, verticalAccuracyIndicator;
guint16 bitCount;
guint64 verticalCoordIndicator, velocityRequested, horizontalAccuracyIndicator, verticalAccuracyIndicator;
guint16 bitCount;
bitCount = offset << 3;
bitCount = offset << 3;
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 6, FALSE);
bitCount = bitCount + 6;
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 6, FALSE);
bitCount = bitCount + 6;
/* Extract Velocity requested element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_velocity_requested, tvb, bitCount, 1, &velocityRequested, FALSE);
bitCount++;
/* Extract Velocity requested element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_velocity_requested, tvb, bitCount, 1, &velocityRequested, FALSE);
bitCount++;
/* Extract vertical coordinator element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_coordinate_indicator, tvb, bitCount, 1, &verticalCoordIndicator, FALSE);
bitCount++;
/* Extract vertical coordinator element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_coordinate_indicator, tvb, bitCount, 1, &verticalCoordIndicator, FALSE);
bitCount++;
/* Extract horizontal accuracy element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_horizontal_accuracy_indicator, tvb, bitCount, 1, &horizontalAccuracyIndicator, FALSE);
bitCount++;
/* Extract horizontal accuracy element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_horizontal_accuracy_indicator, tvb, bitCount, 1, &horizontalAccuracyIndicator, FALSE);
bitCount++;
if(horizontalAccuracyIndicator == 1)
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_horizontal_accuracy, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
else
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
if(horizontalAccuracyIndicator == 1)
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_horizontal_accuracy, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
else
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
/* Extract vertical accuracy element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_accuracy_indicator, tvb, bitCount, 1, &verticalAccuracyIndicator, FALSE);
bitCount++;
/* Extract vertical accuracy element */
proto_tree_add_bits_ret_val(tree, hf_gsm_bssmap_le_vertical_accuracy_indicator, tvb, bitCount, 1, &verticalAccuracyIndicator, FALSE);
bitCount++;
if(verticalAccuracyIndicator == 1)
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_vertical_accuracy, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
else
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
if(verticalAccuracyIndicator == 1)
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_vertical_accuracy, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
else
{
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_spare, tvb, bitCount, 7, FALSE);
bitCount = bitCount + 7;
}
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_response_time_category, tvb, bitCount, 2, FALSE);
bitCount = bitCount + 2;
proto_tree_add_bits_item(tree, hf_gsm_bssmap_le_response_time_category, tvb, bitCount, 2, FALSE);
bitCount = bitCount + 2;
return(len);
}
@ -566,8 +566,8 @@ be_lcs_capability(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_
static guint16
be_packet_meas_rep(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
/* Extract the Packet Measurement Report element and add to protocol tree */
proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet");
/* Extract the Packet Measurement Report element and add to protocol tree */
proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet");
return len;
}
@ -582,7 +582,7 @@ static guint16
be_measured_cell_identity(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
/* Extract the Measured Cell Identity List element and add to protocol tree */
proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet");
proto_tree_add_text(tree, tvb, offset, len, "Not decoded yet");
return len;
}
@ -852,141 +852,6 @@ static void (*bssmap_le_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offs
NULL, /* NONE */
};
/* Register the protocol with Wireshark */
void
proto_register_gsm_bssmap_le(void)
{
guint i;
guint last_offset;
/* Setup list of header fields */
static hf_register_info hf[] =
{
{ &hf_gsm_bssmap_le_msg_type,
{ "BSSMAP LE Message Type", "bssmap_le.msgtype",
FT_UINT8, BASE_HEX, VALS(gsm_bssmap_le_msg_strings), 0x0,
"", HFILL }
},
{ &hf_gsm_bssmap_le_elem_id,
{ "Element ID", "bssmap_le.elem_id",
FT_UINT8, BASE_DEC, NULL, 0,
"", HFILL }
},
{ &hf_gsm_bssmap_le_apdu_protocol_id,
{ "Protocol ID", "bssmap_le.apdu_protocol_id",
FT_UINT8, BASE_DEC, VALS(gsm_apdu_protocol_id_strings), 0x0,
"APDU embedded protocol id", HFILL }
},
{ &hf_gsm_bssmap_le_spare,
{ "Spare", "gsm_bssmap_le.spare",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Spare", HFILL}
},
{ &hf_gsm_bssmap_le_ciphering_key_flag,
{ "Ciphering Key Flag", "gsm_bssmap_le.decipheringKeys.flag",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Ciphering Key Flag", HFILL}
},
{ &hf_gsm_bssmap_le_current_deciphering_key_value,
{ "Current Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.current",
FT_UINT8, BASE_DEC, NULL, 0x0, "Current Deciphering Key Value",
HFILL}
},
{ &hf_gsm_bssmap_le_next_deciphering_key_value,
{ "Next Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.next",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Next Deciphering Key Value", HFILL}
},
{ &hf_gsm_bssmap_le_lcs_cause_value,
{ "Cause Value", "gsm_bssmap_le.lcsCauseValue",
FT_UINT8, BASE_HEX, VALS(bssmap_le_lcs_cause_values), 0x0,
"Cause Value", HFILL}
},
{ &hf_gsm_bssmap_le_diagnostic_value,
{ "Diagnostic Value", "gsm_bssmap_le.diagnosticValue",
FT_UINT8, BASE_HEX, VALS(bssmap_le_position_method_failure_diagnostic_vals), 0x0,
"Diagnostic Value", HFILL}
},
{ &hf_gsm_bssmap_le_client_category,
{ "Client Category", "gsm_bssmap_le.lcsClientType.clientCategory",
FT_UINT8, BASE_HEX, VALS(bssmap_le_client_category), 0x0,
"Client Category", HFILL}
},
{ &hf_gsm_bssmap_le_client_subtype,
{ "Client Subtype", "gsm_bssmap_le.lcsClientType.clientSubtype",
FT_UINT8, BASE_HEX, VALS(bssmap_le_client_subtype), 0x0,
"Client Subtype", HFILL}
},
{ &hf_gsm_bssmap_le_velocity_requested,
{ "Velocity Requested", "gsm_bssmap_le.lcsQos.velocityRequested",
FT_UINT8, BASE_HEX, VALS(bssmap_le_velocity_requested_vals), 0x0,
"Velocity Requested", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_coordinate_indicator,
{ "Vertical Coordinate Indicator", "gsm_bssmap_le.lcsQos.verticalCoordinateIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_coordinate_indicator_vals), 0x0,
"Vertical Coordinate Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_horizontal_accuracy_indicator,
{ "Horizontal Accuracy Indicator", "gsm_bssmap_le.lcsQos.horizontalAccuracyIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_horizontal_accuracy_indicator_vals), 0x0,
"Horizontal Accuracy Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_horizontal_accuracy,
{ "Horizontal Accuracy", "gsm_bssmap_le.lcsQos.horizontalAccuracy",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Horizontal Accuracy", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_accuracy,
{ "Vertical Accuracy", "gsm_bssmap_le.lcsQos.verticalAccuracy",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Vertical Accuracy", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_accuracy_indicator,
{ "Vertical Accuracy Indicator", "gsm_bssmap_le.lcsQos.verticalAccuracyIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_accuracy_indicator_vals), 0x0,
"Vertical Accuracy Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_response_time_category,
{ "Response Time Category", "gsm_bssmap_le.lcsQos.responseTimeCategory",
FT_UINT8, BASE_HEX, VALS(bssmap_le_response_time_definitions_vals), 0x0,
"Response Time Category", HFILL}
},
};
/* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 1
static gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_LE_MSG +
NUM_GSM_BSSMAP_LE_ELEM];
ett[0] = &ett_bssmap_le_msg;
last_offset = NUM_INDIVIDUAL_ELEMS;
for (i=0; i < NUM_GSM_BSSMAP_LE_MSG; i++, last_offset++)
{
ett_gsm_bssmap_le_msg[i] = -1;
ett[last_offset] = &ett_gsm_bssmap_le_msg[i];
}
for (i=0; i < NUM_GSM_BSSMAP_LE_ELEM; i++, last_offset++)
{
ett_gsm_bssmap_le_elem[i] = -1;
ett[last_offset] = &ett_gsm_bssmap_le_elem[i];
}
/* Register the protocol name and description */
proto_bssmap_le =
proto_register_protocol("Lb-I/F BSSMAP LE", "GSM BSSMAP LE", "gsm_bssmap_le");
proto_register_field_array(proto_bssmap_le, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_dissector("gsm_bssmap_le", dissect_bssmap_le, proto_bssmap_le);
}
void
dissect_bssmap_le(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
@ -1100,6 +965,140 @@ dissect_bssmap_le(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
/* Register the protocol with Wireshark */
void
proto_register_gsm_bssmap_le(void)
{
guint i;
guint last_offset;
/* Setup list of header fields */
static hf_register_info hf[] = {
{ &hf_gsm_bssmap_le_msg_type,
{ "BSSMAP LE Message Type", "bssmap_le.msgtype",
FT_UINT8, BASE_HEX, VALS(gsm_bssmap_le_msg_strings), 0x0,
"", HFILL }
},
{ &hf_gsm_bssmap_le_elem_id,
{ "Element ID", "bssmap_le.elem_id",
FT_UINT8, BASE_DEC, NULL, 0,
"", HFILL }
},
{ &hf_gsm_bssmap_le_apdu_protocol_id,
{ "Protocol ID", "bssmap_le.apdu_protocol_id",
FT_UINT8, BASE_DEC, VALS(gsm_apdu_protocol_id_strings), 0x0,
"APDU embedded protocol id", HFILL }
},
{ &hf_gsm_bssmap_le_spare,
{ "Spare", "gsm_bssmap_le.spare",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Spare", HFILL}
},
{ &hf_gsm_bssmap_le_ciphering_key_flag,
{ "Ciphering Key Flag", "gsm_bssmap_le.decipheringKeys.flag",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Ciphering Key Flag", HFILL}
},
{ &hf_gsm_bssmap_le_current_deciphering_key_value,
{ "Current Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.current",
FT_UINT8, BASE_DEC, NULL, 0x0, "Current Deciphering Key Value",
HFILL}
},
{ &hf_gsm_bssmap_le_next_deciphering_key_value,
{ "Next Deciphering Key Value", "gsm_bssmap_le.decipheringKeys.next",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Next Deciphering Key Value", HFILL}
},
{ &hf_gsm_bssmap_le_lcs_cause_value,
{ "Cause Value", "gsm_bssmap_le.lcsCauseValue",
FT_UINT8, BASE_HEX, VALS(bssmap_le_lcs_cause_values), 0x0,
"Cause Value", HFILL}
},
{ &hf_gsm_bssmap_le_diagnostic_value,
{ "Diagnostic Value", "gsm_bssmap_le.diagnosticValue",
FT_UINT8, BASE_HEX, VALS(bssmap_le_position_method_failure_diagnostic_vals), 0x0,
"Diagnostic Value", HFILL}
},
{ &hf_gsm_bssmap_le_client_category,
{ "Client Category", "gsm_bssmap_le.lcsClientType.clientCategory",
FT_UINT8, BASE_HEX, VALS(bssmap_le_client_category), 0x0,
"Client Category", HFILL}
},
{ &hf_gsm_bssmap_le_client_subtype,
{ "Client Subtype", "gsm_bssmap_le.lcsClientType.clientSubtype",
FT_UINT8, BASE_HEX, VALS(bssmap_le_client_subtype), 0x0,
"Client Subtype", HFILL}
},
{ &hf_gsm_bssmap_le_velocity_requested,
{ "Velocity Requested", "gsm_bssmap_le.lcsQos.velocityRequested",
FT_UINT8, BASE_HEX, VALS(bssmap_le_velocity_requested_vals), 0x0,
"Velocity Requested", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_coordinate_indicator,
{ "Vertical Coordinate Indicator", "gsm_bssmap_le.lcsQos.verticalCoordinateIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_coordinate_indicator_vals), 0x0,
"Vertical Coordinate Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_horizontal_accuracy_indicator,
{ "Horizontal Accuracy Indicator", "gsm_bssmap_le.lcsQos.horizontalAccuracyIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_horizontal_accuracy_indicator_vals), 0x0,
"Horizontal Accuracy Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_horizontal_accuracy,
{ "Horizontal Accuracy", "gsm_bssmap_le.lcsQos.horizontalAccuracy",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Horizontal Accuracy", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_accuracy,
{ "Vertical Accuracy", "gsm_bssmap_le.lcsQos.verticalAccuracy",
FT_UINT8, BASE_HEX, NULL, 0x0,
"Vertical Accuracy", HFILL}
},
{ &hf_gsm_bssmap_le_vertical_accuracy_indicator,
{ "Vertical Accuracy Indicator", "gsm_bssmap_le.lcsQos.verticalAccuracyIndicator",
FT_UINT8, BASE_HEX, VALS(bssmap_le_vertical_accuracy_indicator_vals), 0x0,
"Vertical Accuracy Indicator", HFILL}
},
{ &hf_gsm_bssmap_le_response_time_category,
{ "Response Time Category", "gsm_bssmap_le.lcsQos.responseTimeCategory",
FT_UINT8, BASE_HEX, VALS(bssmap_le_response_time_definitions_vals), 0x0,
"Response Time Category", HFILL}
},
};
/* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 1
static gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_LE_MSG +
NUM_GSM_BSSMAP_LE_ELEM];
ett[0] = &ett_bssmap_le_msg;
last_offset = NUM_INDIVIDUAL_ELEMS;
for (i=0; i < NUM_GSM_BSSMAP_LE_MSG; i++, last_offset++)
{
ett_gsm_bssmap_le_msg[i] = -1;
ett[last_offset] = &ett_gsm_bssmap_le_msg[i];
}
for (i=0; i < NUM_GSM_BSSMAP_LE_ELEM; i++, last_offset++)
{
ett_gsm_bssmap_le_elem[i] = -1;
ett[last_offset] = &ett_gsm_bssmap_le_elem[i];
}
/* Register the protocol name and description */
proto_bssmap_le =
proto_register_protocol("Lb-I/F BSSMAP LE", "GSM BSSMAP LE", "gsm_bssmap_le");
proto_register_field_array(proto_bssmap_le, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_dissector("gsm_bssmap_le", dissect_bssmap_le, proto_bssmap_le);
}
void
proto_reg_handoff_gsm_bssmap_le(void)
{

View File

@ -318,16 +318,11 @@ proto_register_ipmi_session(void)
void
proto_reg_handoff_ipmi_session(void)
{
static gboolean inited = FALSE;
dissector_handle_t ipmi_session_handle;
if (!inited) {
dissector_handle_t ipmi_session_handle;
ipmi_session_handle = create_dissector_handle(dissect_ipmi_session, proto_ipmi_session);
dissector_add("rmcp.class", RMCP_CLASS_IPMI, ipmi_session_handle);
ipmi_session_handle = create_dissector_handle(dissect_ipmi_session, proto_ipmi_session);
dissector_add("rmcp.class", RMCP_CLASS_IPMI, ipmi_session_handle);
data_handle = find_dissector("data");
ipmi_handle = find_dissector("ipmi");
inited = TRUE;
}
data_handle = find_dissector("data");
ipmi_handle = find_dissector("ipmi");
}

View File

@ -77,88 +77,88 @@ Table G-1 FLC table for profile_and_level_indication Profile/Level Code
*/
const value_string mp4ves_level_indication_vals[] =
{
{ 0, "Reserved" },
{ 1, "Simple Profile/Level 1" },
{ 2, "Simple Profile/Level 2" },
{ 3, "Reserved" },
{ 4, "Reserved" },
{ 5, "Reserved" },
{ 6, "Reserved" },
{ 7, "Reserved" },
{ 8, "Simple Profile/Level 0" },
{ 9, "Simple Profile/Level 0b" },
/* Reserved 00001001 - 00010000 */
{ 0x11, "Simple Scalable Profile/Level 1" },
{ 0x12, "Simple Scalable Profile/Level 2" },
/* Reserved 00010011 - 00100000 */
{ 0x21, "Core Profile/Level 1" },
{ 0x22, "Core Profile/Level 2" },
/* Reserved 00100011 - 00110001 */
{ 0x32, "Main Profile/Level 2" },
{ 0x33, "Main Profile/Level 3" },
{ 0x34, "Main Profile/Level 4" },
/* Reserved 00110101 - 01000001 */
{ 0x42, "N-bit Profile/Level 2" },
/* Reserved 01000011 - 01010000 */
{ 0x51, "Scalable Texture Profile/Level 1" },
/* Reserved 01010010 - 01100000 */
{ 0x61, "Simple Face Animation Profile/Level 1" },
{ 0x62, "Simple Face Animation Profile/Level 2" },
{ 0x63, "Simple FBA Profile/Level 1" },
{ 0x64, "Simple FBA Profile/Level 2" },
/* Reserved 01100101 - 01110000 */
{ 0x71, "Basic Animated Texture Profile/Level 1" },
{ 0x72, "Basic Animated Texture Profile/Level 2" },
/* Reserved 01110011 - 10000000 */
{ 0x81, "Hybrid Profile/Level 1" },
{ 0x82, "Hybrid Profile/Level 2" },
/* Reserved 10000011 - 10010000 */
{ 0x91, "Advanced Real Time Simple Profile/Level 1" },
{ 0x92, "Advanced Real Time Simple Profile/Level 2" },
{ 0x93, "Advanced Real Time Simple Profile/Level 3" },
{ 0x94, "Advanced Real Time Simple Profile/Level 4" },
/* Reserved 10010101 - 10100000 */
{ 0xa1, "Core Scalable Profile/Level 1" },
{ 0xa2, "Core Scalable Profile/Level 2" },
{ 0xa3, "Core Scalable Profile/Level 3" },
/* Reserved 10100100 - 10110000 */
{ 0xb1, "Advanced Coding Efficiency Profile/Level 1" },
{ 0xb2, "Advanced Coding Efficiency Profile/Level 2" },
{ 0xb3, "Advanced Coding Efficiency Profile/Level 3" },
{ 0xb4, "Advanced Coding Efficiency Profile/Level 4" },
/* Reserved 10110101 - 11000000 */
{ 0xc1, "Advanced Core Profile/Level 1" },
{ 0xc2, "Advanced Core Profile/Level 2" },
/* Reserved 11000011 - 11010000 */
{ 0xd1, "Advanced Scalable Texture/Level 1" },
{ 0xd2, "Advanced Scalable Texture/Level 2" },
{ 0xd3, "Advanced Scalable Texture/Level 3" },
/* Reserved 11010100 - 11100000 */
{ 0xe1, "Simple Studio Profile/Level 1" },
{ 0xe2, "Simple Studio Profile/Level 2" },
{ 0xe3, "Simple Studio Profile/Level 3" },
{ 0xe4, "Simple Studio Profile/Level 4" },
{ 0xe5, "Core Studio Profile/Level 1" },
{ 0xe6, "Core Studio Profile/Level 2" },
{ 0xe7, "Core Studio Profile/Level 3" },
{ 0xe8, "Core Studio Profile/Level 4" },
/* Reserved 11101001 - 11101111 */
{ 0xf0, "Advanced Simple Profile/Level 0" },
{ 0xf1, "Advanced Simple Profile/Level 1" },
{ 0xf2, "Advanced Simple Profile/Level 2" },
{ 0xf3, "Advanced Simple Profile/Level 3" },
{ 0xf4, "Advanced Simple Profile/Level 4" },
{ 0xf5, "Advanced Simple Profile/Level 5" },
/* Reserved 11110110 - 11110111 */
{ 0xf8, "Fine Granularity Scalable Profile/Level 0" },
{ 0xf9, "Fine Granularity Scalable Profile/Level 1" },
{ 0xfa, "Fine Granularity Scalable Profile/Level 2" },
{ 0xfb, "Fine Granularity Scalable Profile/Level 3" },
{ 0xfc, "Fine Granularity Scalable Profile/Level 4" },
{ 0xfd, "Fine Granularity Scalable Profile/Level 5" },
{ 0xfe, "Reserved" },
{ 0xff, "Reserved for Escape" },
{ 0, NULL },
{ 0, "Reserved" },
{ 1, "Simple Profile/Level 1" },
{ 2, "Simple Profile/Level 2" },
{ 3, "Reserved" },
{ 4, "Reserved" },
{ 5, "Reserved" },
{ 6, "Reserved" },
{ 7, "Reserved" },
{ 8, "Simple Profile/Level 0" },
{ 9, "Simple Profile/Level 0b" },
/* Reserved 00001001 - 00010000 */
{ 0x11, "Simple Scalable Profile/Level 1" },
{ 0x12, "Simple Scalable Profile/Level 2" },
/* Reserved 00010011 - 00100000 */
{ 0x21, "Core Profile/Level 1" },
{ 0x22, "Core Profile/Level 2" },
/* Reserved 00100011 - 00110001 */
{ 0x32, "Main Profile/Level 2" },
{ 0x33, "Main Profile/Level 3" },
{ 0x34, "Main Profile/Level 4" },
/* Reserved 00110101 - 01000001 */
{ 0x42, "N-bit Profile/Level 2" },
/* Reserved 01000011 - 01010000 */
{ 0x51, "Scalable Texture Profile/Level 1" },
/* Reserved 01010010 - 01100000 */
{ 0x61, "Simple Face Animation Profile/Level 1" },
{ 0x62, "Simple Face Animation Profile/Level 2" },
{ 0x63, "Simple FBA Profile/Level 1" },
{ 0x64, "Simple FBA Profile/Level 2" },
/* Reserved 01100101 - 01110000 */
{ 0x71, "Basic Animated Texture Profile/Level 1" },
{ 0x72, "Basic Animated Texture Profile/Level 2" },
/* Reserved 01110011 - 10000000 */
{ 0x81, "Hybrid Profile/Level 1" },
{ 0x82, "Hybrid Profile/Level 2" },
/* Reserved 10000011 - 10010000 */
{ 0x91, "Advanced Real Time Simple Profile/Level 1" },
{ 0x92, "Advanced Real Time Simple Profile/Level 2" },
{ 0x93, "Advanced Real Time Simple Profile/Level 3" },
{ 0x94, "Advanced Real Time Simple Profile/Level 4" },
/* Reserved 10010101 - 10100000 */
{ 0xa1, "Core Scalable Profile/Level 1" },
{ 0xa2, "Core Scalable Profile/Level 2" },
{ 0xa3, "Core Scalable Profile/Level 3" },
/* Reserved 10100100 - 10110000 */
{ 0xb1, "Advanced Coding Efficiency Profile/Level 1" },
{ 0xb2, "Advanced Coding Efficiency Profile/Level 2" },
{ 0xb3, "Advanced Coding Efficiency Profile/Level 3" },
{ 0xb4, "Advanced Coding Efficiency Profile/Level 4" },
/* Reserved 10110101 - 11000000 */
{ 0xc1, "Advanced Core Profile/Level 1" },
{ 0xc2, "Advanced Core Profile/Level 2" },
/* Reserved 11000011 - 11010000 */
{ 0xd1, "Advanced Scalable Texture/Level 1" },
{ 0xd2, "Advanced Scalable Texture/Level 2" },
{ 0xd3, "Advanced Scalable Texture/Level 3" },
/* Reserved 11010100 - 11100000 */
{ 0xe1, "Simple Studio Profile/Level 1" },
{ 0xe2, "Simple Studio Profile/Level 2" },
{ 0xe3, "Simple Studio Profile/Level 3" },
{ 0xe4, "Simple Studio Profile/Level 4" },
{ 0xe5, "Core Studio Profile/Level 1" },
{ 0xe6, "Core Studio Profile/Level 2" },
{ 0xe7, "Core Studio Profile/Level 3" },
{ 0xe8, "Core Studio Profile/Level 4" },
/* Reserved 11101001 - 11101111 */
{ 0xf0, "Advanced Simple Profile/Level 0" },
{ 0xf1, "Advanced Simple Profile/Level 1" },
{ 0xf2, "Advanced Simple Profile/Level 2" },
{ 0xf3, "Advanced Simple Profile/Level 3" },
{ 0xf4, "Advanced Simple Profile/Level 4" },
{ 0xf5, "Advanced Simple Profile/Level 5" },
/* Reserved 11110110 - 11110111 */
{ 0xf8, "Fine Granularity Scalable Profile/Level 0" },
{ 0xf9, "Fine Granularity Scalable Profile/Level 1" },
{ 0xfa, "Fine Granularity Scalable Profile/Level 2" },
{ 0xfb, "Fine Granularity Scalable Profile/Level 3" },
{ 0xfc, "Fine Granularity Scalable Profile/Level 4" },
{ 0xfd, "Fine Granularity Scalable Profile/Level 5" },
{ 0xfe, "Reserved" },
{ 0xff, "Reserved for Escape" },
{ 0, NULL },
};
static const range_string mp4ves_startcode_vals[] = {
{ 0x00, 0x1f, "video_object_start_code" },
@ -790,98 +790,215 @@ dissect_mp4ves(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
static int
dissect_mp4ves_par_profile(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_)
{
int offset = 0;
guint16 lvl;
const gchar *p = NULL;
asn1_ctx_t *actx;
int offset = 0;
guint16 lvl;
const gchar *p = NULL;
asn1_ctx_t *actx;
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
lvl = tvb_get_ntohs(tvb, offset);
p = match_strval(lvl, VALS(mp4ves_level_indication_vals));
if (p) {
proto_item_append_text(actx->created_item, " - profileAndLevel %s", p);
}
offset += 2;
return offset;
lvl = tvb_get_ntohs(tvb, offset);
p = match_strval(lvl, VALS(mp4ves_level_indication_vals));
if (p) {
proto_item_append_text(actx->created_item, " - profileAndLevel %s", p);
}
offset += 2;
return offset;
}
static int
dissect_mp4ves_par_video_object_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_)
{
int offset = 0;
guint16 lvl;
const gchar *p = NULL;
asn1_ctx_t *actx;
int offset = 0;
guint16 lvl;
const gchar *p = NULL;
asn1_ctx_t *actx;
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
lvl = tvb_get_ntohs(tvb, offset);
p = match_strval(lvl, VALS(mp4ves_video_object_type_vals));
if (p) {
proto_item_append_text(actx->created_item, " - video_object_type %s", p);
}
offset += 2;
return offset;
lvl = tvb_get_ntohs(tvb, offset);
p = match_strval(lvl, VALS(mp4ves_video_object_type_vals));
if (p) {
proto_item_append_text(actx->created_item, " - video_object_type %s", p);
}
offset += 2;
return offset;
}
static int
dissect_mp4ves_par_decoderConfigurationInformation(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_)
{
asn1_ctx_t *actx;
asn1_ctx_t *actx;
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
dissect_mp4ves_config(tvb, pinfo, tree);
dissect_mp4ves_config(tvb, pinfo, tree);
return tvb_length(tvb);
return tvb_length(tvb);
}
typedef struct _mp4ves_capability_t {
const gchar *id;
const gchar *name;
new_dissector_t content_pdu;
const gchar *id;
const gchar *name;
new_dissector_t content_pdu;
} mp4ves_capability_t;
static mp4ves_capability_t mp4ves_capability_tab[] = {
/* ITU-T H.245 capabilities ISO/IEC 14496-2(m*/
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/0", "profileAndLevel", dissect_mp4ves_par_profile },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/1", "object", dissect_mp4ves_par_video_object_type },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/2", "decoderConfigurationInformation", dissect_mp4ves_par_decoderConfigurationInformation },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/3", "drawingOrder", NULL },
{ "GenericCapability/0.0.8.245.1.0.0/collapsing/4", "visualBackChannelHandle", NULL },
{ NULL, NULL, NULL },
/* ITU-T H.245 capabilities ISO/IEC 14496-2(m*/
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/0", "profileAndLevel", dissect_mp4ves_par_profile },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/1", "object", dissect_mp4ves_par_video_object_type },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/2", "decoderConfigurationInformation", dissect_mp4ves_par_decoderConfigurationInformation },
{ "GenericCapability/0.0.8.245.1.0.0/nonCollapsing/3", "drawingOrder", NULL },
{ "GenericCapability/0.0.8.245.1.0.0/collapsing/4", "visualBackChannelHandle", NULL },
{ NULL, NULL, NULL },
};
static mp4ves_capability_t *find_cap(const gchar *id) {
mp4ves_capability_t *ftr = NULL;
mp4ves_capability_t *f;
mp4ves_capability_t *ftr = NULL;
mp4ves_capability_t *f;
for (f=mp4ves_capability_tab; f->id; f++) {
if (!strcmp(id, f->id)) { ftr = f; break; }
}
return ftr;
for (f=mp4ves_capability_tab; f->id; f++) {
if (!strcmp(id, f->id)) { ftr = f; break; }
}
return ftr;
}
static void
dissect_mp4ves_name(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *tree)
{
asn1_ctx_t *actx;
mp4ves_capability_t *ftr = NULL;
asn1_ctx_t *actx;
mp4ves_capability_t *ftr = NULL;
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
if (tree) {
ftr = find_cap(pinfo->match_string);
if (ftr) {
proto_item_append_text(actx->created_item, " - %s", ftr->name);
proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name);
} else {
proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string);
}
}
}
void
proto_reg_handoff_mp4ves(void);
void
proto_register_mp4ves(void)
{
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf[] = {
{ &hf_mp4ves_config,
{ "Configuration", "mp4ves.configuration",
FT_BYTES, BASE_NONE, NULL, 0x0,
"Configuration", HFILL }
},
{ &hf_mp4ves_start_code_prefix,
{ "start code prefix", "mp4ves.start_code_prefix",
FT_UINT32, BASE_HEX, NULL, 0x0,
"start code prefix", HFILL }
},
{ &hf_mp4ves_start_code,
{ "Start code", "mp4ves.start_code",
FT_UINT8, BASE_RANGE_STRING|BASE_HEX, RVALS(&mp4ves_startcode_vals), 0x0,
"Start code", HFILL }
},
{ &hf_mp4ves_vop_coding_type,
{ "vop_coding_type", "mp4ves.vop_coding_type",
FT_UINT8, BASE_DEC, VALS(mp4ves_vop_coding_type_vals), 0x0,
"Start code", HFILL }
},
{&hf_mp4ves_profile_and_level_indication,
{ "profile_and_level_indication", "mp4ves.profile_and_level_indication",
FT_UINT8, BASE_DEC,VALS(mp4ves_level_indication_vals), 0x0,
"profile_and_level_indication", HFILL }
},
{ &hf_mp4ves_is_visual_object_identifier,
{ "visual_object_identifier", "mp4ves.visual_object_identifier",
FT_UINT8, BASE_DEC, NULL, 0x0,
"visual_object_identifier", HFILL }
},
{ &hf_mp4ves_visual_object_type,
{ "visual_object_type", "mp4ves.visual_object_type",
FT_UINT32, BASE_DEC, VALS(mp4ves_visual_object_type_vals), 0x0,
"visual_object_type", HFILL }
},
{ &hf_mp4ves_video_signal_type,
{ "video_signal_type", "mp4ves.video_signal_type",
FT_UINT8, BASE_DEC, NULL, 0x0,
"video_signal_type", HFILL }
},
{ &hf_mp4ves_stuffing,
{ "Stuffing", "mp4ves.stuffing",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Stuffing", HFILL }
},
{ &hf_mp4ves_video_object_type_indication,
{ "video_object_type_indication", "mp4ves.video_object_type_indication",
FT_UINT8, BASE_DEC, VALS(mp4ves_video_object_type_indication_vals), 0x0,
"video_object_type_indication", HFILL }
},
{ &hf_mp4ves_random_accessible_vol,
{ "random_accessible_vol", "mp4ves.random_accessible_vol",
FT_UINT8, BASE_DEC, NULL, 0x0,
"video_object_type_indication", HFILL }
},
{ &hf_mp4ves_is_object_layer_identifier,
{ "is_object_layer_identifier", "mp4ves.is_object_layer_identifier",
FT_UINT8, BASE_DEC, NULL, 0x0,
"is_object_layer_identifier", HFILL }
},
{ &hf_mp4ves_aspect_ratio_info,
{ "aspect_ratio_info", "mp4ves.aspect_ratio_info",
FT_UINT8, BASE_DEC, VALS(mp4ves_aspect_ratio_info_vals), 0x0,
"aspect_ratio_info", HFILL }
},
{ &hf_mp4ves_vol_control_parameters,
{ "vol_control_parameters", "mp4ves.vol_control_parameters",
FT_UINT8, BASE_DEC, NULL, 0x0,
"vol_control_parameters", HFILL }
},
{ &hf_mp4ves_video_object_layer_shape,
{ "video_object_layer_shape", "mp4ves.video_object_layer_shape",
FT_UINT8, BASE_DEC, VALS(mp4ves_video_object_layer_shape_vals), 0x0,
"video_object_layer_shape", HFILL }
},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_mp4ves,
&ett_mp4ves_config,
};
module_t *mp4ves_module;
/* Register the protocol name and description */
proto_mp4ves = proto_register_protocol("MP4V-ES","MP4V-ES", "mp4v-es");
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_mp4ves, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/* Register a configuration option for port */
register_dissector("mp4ves", dissect_mp4ves, proto_mp4ves);
/* Register a configuration option for port */
mp4ves_module = prefs_register_protocol(proto_mp4ves, proto_reg_handoff_mp4ves);
prefs_register_uint_preference(mp4ves_module,
"dynamic.payload.type",
"MP4V-ES dynamic payload type",
"The dynamic payload type which will be interpreted as MP4V-ES",
10,
&global_dynamic_payload_type);
actx = get_asn1_ctx(pinfo->private_data);
DISSECTOR_ASSERT(actx);
if (tree) {
ftr = find_cap(pinfo->match_string);
if (ftr) {
proto_item_append_text(actx->created_item, " - %s", ftr->name);
proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name);
} else {
proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string);
}
}
}
void
@ -917,116 +1034,3 @@ proto_reg_handoff_mp4ves(void)
}
}
void
proto_register_mp4ves(void)
{
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf[] = {
{ &hf_mp4ves_config,
{ "Configuration", "mp4ves.configuration",
FT_BYTES, BASE_NONE, NULL, 0x0,
"Configuration", HFILL }
},
{ &hf_mp4ves_start_code_prefix,
{ "start code prefix", "mp4ves.start_code_prefix",
FT_UINT32, BASE_HEX, NULL, 0x0,
"start code prefix", HFILL }
},
{ &hf_mp4ves_start_code,
{ "Start code", "mp4ves.start_code",
FT_UINT8, BASE_RANGE_STRING|BASE_HEX, RVALS(&mp4ves_startcode_vals), 0x0,
"Start code", HFILL }
},
{ &hf_mp4ves_vop_coding_type,
{ "vop_coding_type", "mp4ves.vop_coding_type",
FT_UINT8, BASE_DEC, VALS(mp4ves_vop_coding_type_vals), 0x0,
"Start code", HFILL }
},
{&hf_mp4ves_profile_and_level_indication,
{ "profile_and_level_indication", "mp4ves.profile_and_level_indication",
FT_UINT8, BASE_DEC,VALS(mp4ves_level_indication_vals), 0x0,
"profile_and_level_indication", HFILL }
},
{ &hf_mp4ves_is_visual_object_identifier,
{ "visual_object_identifier", "mp4ves.visual_object_identifier",
FT_UINT8, BASE_DEC, NULL, 0x0,
"visual_object_identifier", HFILL }
},
{ &hf_mp4ves_visual_object_type,
{ "visual_object_type", "mp4ves.visual_object_type",
FT_UINT32, BASE_DEC, VALS(mp4ves_visual_object_type_vals), 0x0,
"visual_object_type", HFILL }
},
{ &hf_mp4ves_video_signal_type,
{ "video_signal_type", "mp4ves.video_signal_type",
FT_UINT8, BASE_DEC, NULL, 0x0,
"video_signal_type", HFILL }
},
{ &hf_mp4ves_stuffing,
{ "Stuffing", "mp4ves.stuffing",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Stuffing", HFILL }
},
{ &hf_mp4ves_video_object_type_indication,
{ "video_object_type_indication", "mp4ves.video_object_type_indication",
FT_UINT8, BASE_DEC, VALS(mp4ves_video_object_type_indication_vals), 0x0,
"video_object_type_indication", HFILL }
},
{ &hf_mp4ves_random_accessible_vol,
{ "random_accessible_vol", "mp4ves.random_accessible_vol",
FT_UINT8, BASE_DEC, NULL, 0x0,
"video_object_type_indication", HFILL }
},
{ &hf_mp4ves_is_object_layer_identifier,
{ "is_object_layer_identifier", "mp4ves.is_object_layer_identifier",
FT_UINT8, BASE_DEC, NULL, 0x0,
"is_object_layer_identifier", HFILL }
},
{ &hf_mp4ves_aspect_ratio_info,
{ "aspect_ratio_info", "mp4ves.aspect_ratio_info",
FT_UINT8, BASE_DEC, VALS(mp4ves_aspect_ratio_info_vals), 0x0,
"aspect_ratio_info", HFILL }
},
{ &hf_mp4ves_vol_control_parameters,
{ "vol_control_parameters", "mp4ves.vol_control_parameters",
FT_UINT8, BASE_DEC, NULL, 0x0,
"vol_control_parameters", HFILL }
},
{ &hf_mp4ves_video_object_layer_shape,
{ "video_object_layer_shape", "mp4ves.video_object_layer_shape",
FT_UINT8, BASE_DEC, VALS(mp4ves_video_object_layer_shape_vals), 0x0,
"video_object_layer_shape", HFILL }
},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_mp4ves,
&ett_mp4ves_config,
};
module_t *mp4ves_module;
/* Register the protocol name and description */
proto_mp4ves = proto_register_protocol("MP4V-ES","MP4V-ES", "mp4v-es");
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_mp4ves, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/* Register a configuration option for port */
register_dissector("mp4ves", dissect_mp4ves, proto_mp4ves);
/* Register a configuration option for port */
mp4ves_module = prefs_register_protocol(proto_mp4ves, proto_reg_handoff_mp4ves);
prefs_register_uint_preference(mp4ves_module, "dynamic.payload.type",
"MP4V-ES dynamic payload type",
"The dynamic payload type which will be interpreted as MP4V-ES",
10,
&global_dynamic_payload_type);
}

View File

@ -1826,7 +1826,7 @@ void proto_register_cotp(void)
prefs_register_bool_preference(cotp_module, "reassemble",
"Reassemble segmented COTP datagrams",
"Whether segmented COTP datagrams should be reassembled."
" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
&cotp_reassemble);
prefs_register_enum_preference(cotp_module, "tsap_display",
@ -1849,19 +1849,6 @@ void proto_register_cotp(void)
register_init_routine(cotp_reassemble_init);
}
void
proto_reg_handoff_cotp(void)
{
dissector_handle_t ositp_handle;
ositp_handle = find_dissector("ositp");
dissector_add("ip.proto", IP_PROTO_TP, ositp_handle);
data_handle = find_dissector("data");
proto_clnp = proto_get_id_by_filter_name("clnp");
}
void proto_register_cltp(void)
{
static hf_register_info hf[] = {
@ -1880,3 +1867,17 @@ void proto_register_cltp(void)
proto_register_field_array(proto_cltp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
void
proto_reg_handoff_cotp(void)
{
dissector_handle_t ositp_handle;
ositp_handle = find_dissector("ositp");
dissector_add("ip.proto", IP_PROTO_TP, ositp_handle);
data_handle = find_dissector("data");
proto_clnp = proto_get_id_by_filter_name("clnp");
}

View File

@ -830,13 +830,6 @@ static gboolean dissect_rtps(tvbuff_t *, packet_info *, proto_tree *);
/* static gboolean glob_do_something = TRUE; */
static guint rtps_max_batch_samples_dissected = 16;
static void reinit_rtps(void) {
/* Do something here when global arguments are changed */
}
/* *********************************************************************** */
/* Appends a submessage description to the info summary text
@ -9250,22 +9243,13 @@ void proto_register_rtps2(void) {
proto_register_subtree_array(ett, array_length(ett));
/* Registers the control in the preference panel */
rtps_module = prefs_register_protocol(proto_rtps, reinit_rtps);
/*
prefs_register_bool_preference(rtps_module, "do_something",
"Do somethinig short description",
"Do something long and very exhaustive description "
"that can go on and on and on and on... ",
&glob_do_something);
*/
rtps_module = prefs_register_protocol(proto_rtps, NULL);
prefs_register_uint_preference(rtps_module, "max_batch_samples_dissected",
"Max samples dissected for DATA_BATCH",
"Specifies the maximum number of samples dissected in "
"a DATA_BATCH submessage. Increasing this value may affect "
"performances if the trace has a lot of big batched samples.",
10, &rtps_max_batch_samples_dissected);
}
void proto_reg_handoff_rtps2(void) {

View File

@ -266,12 +266,6 @@ static int hf_ts2_status_mute = -1;
static gint ett_ts2 = -1;
static gint *ett[] = {
&ett_ts2,
&ett_msg_fragment,
&ett_msg_fragments
};
/* Conversation Variables */
typedef struct
{
@ -295,275 +289,6 @@ typedef struct
gboolean outoforder;
} ts2_frag;
static hf_register_info hf[] = {
{ &hf_ts2_class,
{ "Class", "ts2.class",
FT_UINT16, BASE_HEX,
VALS(classnames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_type,
{ "Type", "ts2.type",
FT_UINT16, BASE_HEX,
VALS(typenames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_clientid,
{ "Client id", "ts2.clientid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_sessionkey,
{ "Session Key", "ts2.sessionkey",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_ackto,
{ "Ping Reply To", "ts2.ping_ackto",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_crc32,
{ "CRC32 Checksum", "ts2.crc32",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_seqnum,
{ "Sequence Number", "ts2.sequencenum",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_protocol_string,
{ "Protocol String", "ts2.protocolstring",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_string,
{ "String", "ts2.string",
FT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_registeredlogin,
{ "Registered Login", "ts2.registeredlogin",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_name,
{ "Name", "ts2.name",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_password,
{ "Password", "ts2.password",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_nick,
{ "Nick", "ts2.nick",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_badlogin,
{ "Bad Login", "ts2.badlogin",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_unknown,
{ "Unknown", "ts2.unknown",
FT_BYTES, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel,
{ "Channel", "ts2.channel",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_subchannel,
{ "Sub-Channel", "ts2.subchannel",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channelpassword,
{ "Channel Password", "ts2.channelpassword",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_emptyspace,
{ "Empty Space", "ts2.emptyspace",
FT_NONE, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_fragmentnumber,
{ "Fragment Number", "ts2.fragmentnumber",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_platform_string,
{ "Platform String", "ts2.platformstring",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_server_name,
{ "Server Name", "ts2.servername",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_server_welcome_message,
{ "Server Welcome Message", "ts2.serverwelcomemessage",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_endmarker,
{ "End Marker", "ts2.endmarker",
FT_NONE, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_codec,
{ "Codec", "ts2.codec",
FT_UINT16, BASE_HEX,
VALS(codecnames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_flags,
{ "Channel Flags", "ts2.channelflags",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_id,
{ "Channel Id", "ts2.chanelid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_name,
{ "Channel Name", "ts2.chanelname",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_topic,
{ "Channel Topic", "ts2.chaneltopic",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_description,
{ "Channel Description", "ts2.chaneldescription",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_player_id,
{ "Player Id", "ts2.playerid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_player_status_flags,
{ "Player Status Flags", "ts2.playerstatusflags",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_number_of_players,
{ "Number Of Players", "ts2.numberofplayers",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_number_of_channels,
{ "Number Of Channels", "ts2.numberofchannels",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_resend_count,
{ "Resend Count", "ts2.resendcount",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_status_channelcommander,
{ "Channel Commander", "ts2.playerstatusflags.channelcommander",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_CHANNELCOMMANDER,
NULL, HFILL }
},
{ &hf_ts2_status_blockwhispers,
{ "Block Whispers", "ts2.playerstatusflags.blockwhispers",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_BLOCKWHISPERS,
NULL, HFILL }
},
{ &hf_ts2_status_away,
{ "Away", "ts2.playerstatusflags.away",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_AWAY,
NULL, HFILL }
},
{ &hf_ts2_status_mutemicrophone,
{ "Mute Microphone", "ts2.playerstatusflags.mutemicrophone",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_MUTEMICROPHONE,
NULL, HFILL }
},
{ &hf_ts2_status_mute,
{ "Mute", "ts2.playerstatusflags.mute",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_MUTE,
NULL, HFILL }
},
{ &hf_msg_fragments,
{"Message fragments", "ts2.fragments",
FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment,
{"Message fragment", "ts2.fragment",
FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment_overlap,
{"Message fragment overlap", "ts2.fragment.overlap",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment_overlap_conflicts,
{"Message fragment overlapping with conflicting data",
"ts2.fragment.overlap.conflicts",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment_multiple_tails,
{"Message has multiple tail fragments",
"ts2.fragment.multiple_tails",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment_too_long_fragment,
{"Message fragment too long", "ts2.fragment.too_long_fragment",
FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_fragment_error,
{"Message defragmentation error", "ts2.fragment.error",
FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
{ &hf_msg_reassembled_in,
{"Reassembled in", "ts2.reassembled.in",
FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }
};
/* the GMemChunk base structure */
static GMemChunk *conv_vals = NULL;
@ -590,46 +315,6 @@ static void ts2_add_statusflags(tvbuff_t *tvb, proto_tree *ts2_tree, guint32 off
static void ts2_parse_channelchange(tvbuff_t *tvb, proto_tree *ts2_tree);
static void ts2_parse_loginpart2(tvbuff_t *tvb, proto_tree *ts2_tree);
static void ts2_init(void) {
fragment_table_init(&msg_fragment_table);
reassembled_table_init(&msg_reassembled_table);
if (conv_vals)
g_mem_chunk_destroy(conv_vals);
/* now create memory chunks */
conv_vals = g_mem_chunk_new("ts2_conv_vals",
sizeof(ts2_conversation),
my_init_count * sizeof(ts2_conversation),
G_ALLOC_AND_FREE);
}
/*
* proto_register_ts2()
* */
void proto_register_ts2(void)
{
/* Setup protocol subtree array */
proto_ts2 = proto_register_protocol (
"Teamspeak2 Protocol", /* name */
"TeamSpeak2", /* short name */
"ts2" /* abbrev */
);
proto_register_field_array(proto_ts2, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_init_routine(ts2_init);
}
/*
* proto_reg_handoff_ts2()
* */
void proto_reg_handoff_ts2(void)
{
dissector_handle_t ts2_handle;
ts2_handle = create_dissector_handle(dissect_ts2, proto_ts2);
dissector_add("udp.port", TS2_PORT, ts2_handle);
}
/*
* Check if a packet is in order and if it is set its fragmentation details into the passed pointers.
* Returns TRUE if the packet is fragmented.
@ -1144,3 +829,343 @@ static gboolean ts2_add_checked_crc32(proto_tree *tree, int hf_item, tvbuff_t *t
return FALSE;
}
}
static void ts2_init(void) {
fragment_table_init(&msg_fragment_table);
reassembled_table_init(&msg_reassembled_table);
if (conv_vals)
g_mem_chunk_destroy(conv_vals);
/* now create memory chunks */
conv_vals = g_mem_chunk_new("ts2_conv_vals",
sizeof(ts2_conversation),
my_init_count * sizeof(ts2_conversation),
G_ALLOC_AND_FREE);
}
/*
* proto_register_ts2()
* */
void proto_register_ts2(void)
{
static hf_register_info hf[] = {
{ &hf_ts2_class,
{ "Class", "ts2.class",
FT_UINT16, BASE_HEX,
VALS(classnames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_type,
{ "Type", "ts2.type",
FT_UINT16, BASE_HEX,
VALS(typenames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_clientid,
{ "Client id", "ts2.clientid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_sessionkey,
{ "Session Key", "ts2.sessionkey",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_ackto,
{ "Ping Reply To", "ts2.ping_ackto",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_crc32,
{ "CRC32 Checksum", "ts2.crc32",
FT_UINT32, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_seqnum,
{ "Sequence Number", "ts2.sequencenum",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_protocol_string,
{ "Protocol String", "ts2.protocolstring",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_string,
{ "String", "ts2.string",
FT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_registeredlogin,
{ "Registered Login", "ts2.registeredlogin",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_name,
{ "Name", "ts2.name",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_password,
{ "Password", "ts2.password",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_nick,
{ "Nick", "ts2.nick",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_badlogin,
{ "Bad Login", "ts2.badlogin",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_unknown,
{ "Unknown", "ts2.unknown",
FT_BYTES, BASE_HEX,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel,
{ "Channel", "ts2.channel",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_subchannel,
{ "Sub-Channel", "ts2.subchannel",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channelpassword,
{ "Channel Password", "ts2.channelpassword",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_emptyspace,
{ "Empty Space", "ts2.emptyspace",
FT_NONE, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_fragmentnumber,
{ "Fragment Number", "ts2.fragmentnumber",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_platform_string,
{ "Platform String", "ts2.platformstring",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_server_name,
{ "Server Name", "ts2.servername",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_server_welcome_message,
{ "Server Welcome Message", "ts2.serverwelcomemessage",
FT_UINT_STRING, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_endmarker,
{ "End Marker", "ts2.endmarker",
FT_NONE, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_codec,
{ "Codec", "ts2.codec",
FT_UINT16, BASE_HEX,
VALS(codecnames), 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_flags,
{ "Channel Flags", "ts2.channelflags",
FT_BOOLEAN, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_id,
{ "Channel Id", "ts2.chanelid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_name,
{ "Channel Name", "ts2.chanelname",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_topic,
{ "Channel Topic", "ts2.chaneltopic",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_channel_description,
{ "Channel Description", "ts2.chaneldescription",
FT_STRINGZ, BASE_NONE,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_player_id,
{ "Player Id", "ts2.playerid",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_player_status_flags,
{ "Player Status Flags", "ts2.playerstatusflags",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_number_of_players,
{ "Number Of Players", "ts2.numberofplayers",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_number_of_channels,
{ "Number Of Channels", "ts2.numberofchannels",
FT_UINT32, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_resend_count,
{ "Resend Count", "ts2.resendcount",
FT_UINT16, BASE_DEC,
NULL, 0x0,
NULL, HFILL }
},
{ &hf_ts2_status_channelcommander,
{ "Channel Commander", "ts2.playerstatusflags.channelcommander",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_CHANNELCOMMANDER,
NULL, HFILL }
},
{ &hf_ts2_status_blockwhispers,
{ "Block Whispers", "ts2.playerstatusflags.blockwhispers",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_BLOCKWHISPERS,
NULL, HFILL }
},
{ &hf_ts2_status_away,
{ "Away", "ts2.playerstatusflags.away",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_AWAY,
NULL, HFILL }
},
{ &hf_ts2_status_mutemicrophone,
{ "Mute Microphone", "ts2.playerstatusflags.mutemicrophone",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_MUTEMICROPHONE,
NULL, HFILL }
},
{ &hf_ts2_status_mute,
{ "Mute", "ts2.playerstatusflags.mute",
FT_BOOLEAN, 8,
NULL, TS2_STATUS_MUTE,
NULL, HFILL }
},
{ &hf_msg_fragments,
{"Message fragments", "ts2.fragments",
FT_NONE, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment,
{"Message fragment", "ts2.fragment",
FT_FRAMENUM, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment_overlap,
{"Message fragment overlap", "ts2.fragment.overlap",
FT_BOOLEAN, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment_overlap_conflicts,
{"Message fragment overlapping with conflicting data",
"ts2.fragment.overlap.conflicts",
FT_BOOLEAN, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment_multiple_tails,
{"Message has multiple tail fragments",
"ts2.fragment.multiple_tails",
FT_BOOLEAN, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment_too_long_fragment,
{"Message fragment too long", "ts2.fragment.too_long_fragment",
FT_BOOLEAN, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_fragment_error,
{"Message defragmentation error", "ts2.fragment.error",
FT_FRAMENUM, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
},
{ &hf_msg_reassembled_in,
{"Reassembled in", "ts2.reassembled.in",
FT_FRAMENUM, BASE_NONE,
NULL, 0x00,
NULL, HFILL }
}
};
static gint *ett[] = {
&ett_ts2,
&ett_msg_fragment,
&ett_msg_fragments
};
/* Setup protocol subtree array */
proto_ts2 = proto_register_protocol (
"Teamspeak2 Protocol", /* name */
"TeamSpeak2", /* short name */
"ts2" /* abbrev */
);
proto_register_field_array(proto_ts2, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_init_routine(ts2_init);
}
/*
* proto_reg_handoff_ts2()
* */
void proto_reg_handoff_ts2(void)
{
dissector_handle_t ts2_handle;
ts2_handle = create_dissector_handle(dissect_ts2, proto_ts2);
dissector_add("udp.port", TS2_PORT, ts2_handle);
}

View File

@ -201,7 +201,6 @@ static int get_signed_delta(tvbuff_t *tvb, int *offsetp, int hf,
proto_tree *tree);
static guint16 ip_csum(const guint8 *ptr, guint32 len);
static slcompress *slhc_init(void);
static void vj_init(void);
static gint vjc_process(tvbuff_t *src_tvb, packet_info *pinfo, proto_tree *tree,
slcompress *comp);
static gint vjc_tvb_setup(tvbuff_t *src_tvb, tvbuff_t **dst_tvb,
@ -442,84 +441,6 @@ dissect_vjc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
call_dissector(ip_handle, next_tvb, pinfo, tree);
}
/* Registration functions for dissectors */
void
proto_register_vj(void)
{
static hf_register_info hf[] = {
{ &hf_vj_change_mask,
{ "Change mask", "vj.change_mask", FT_UINT8, BASE_HEX,
NULL, 0x0, "", HFILL }},
{ &hf_vj_change_mask_c,
{ "Connection changed", "vj.change_mask_c", FT_BOOLEAN, 8,
NULL, NEW_C, "Connection number changed", HFILL }},
{ &hf_vj_change_mask_i,
{ "IP ID change != 1", "vj.change_mask_i", FT_BOOLEAN, 8,
NULL, NEW_I, "IP ID changed by a value other than 1", HFILL }},
{ &hf_vj_change_mask_p,
{ "Push bit set", "vj.change_mask_p", FT_BOOLEAN, 8,
NULL, CHANGE_PUSH_BIT, "TCP PSH flag set", HFILL }},
{ &hf_vj_change_mask_s,
{ "Sequence number changed", "vj.change_mask_s", FT_BOOLEAN, 8,
NULL, NEW_S, "Sequence number changed", HFILL }},
{ &hf_vj_change_mask_a,
{ "Ack number changed", "vj.change_mask_a", FT_BOOLEAN, 8,
NULL, NEW_A, "Acknowledgement sequence number changed", HFILL }},
{ &hf_vj_change_mask_w,
{ "Window changed", "vj.change_mask_w", FT_BOOLEAN, 8,
NULL, NEW_W, "TCP window changed", HFILL }},
{ &hf_vj_change_mask_u,
{ "Urgent pointer set", "vj.change_mask_u", FT_BOOLEAN, 8,
NULL, NEW_U, "Urgent pointer set", HFILL }},
{ &hf_vj_connection_number,
{ "Connection number", "vj.connection_number", FT_UINT8, BASE_DEC,
NULL, 0x0, "Connection number", HFILL }},
{ &hf_vj_tcp_cksum,
{ "TCP checksum", "vj.tcp_cksum", FT_UINT16, BASE_HEX,
NULL, 0x0, "TCP checksum", HFILL }},
{ &hf_vj_urp,
{ "Urgent pointer", "vj.urp", FT_UINT16, BASE_DEC,
NULL, 0x0, "Urgent pointer", HFILL }},
{ &hf_vj_win_delta,
{ "Window delta", "vj.win_delta", FT_INT16, BASE_DEC,
NULL, 0x0, "Delta for window", HFILL }},
{ &hf_vj_ack_delta,
{ "Ack delta", "vj.ack_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for acknowledgment sequence number", HFILL }},
{ &hf_vj_seq_delta,
{ "Sequence delta", "vj.seq_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for sequence number", HFILL }},
{ &hf_vj_ip_id_delta,
{ "IP ID delta", "vj.ip_id_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for IP ID", HFILL }},
};
static gint *ett[] = {
&ett_vj,
&ett_vj_changes,
};
proto_vj = proto_register_protocol("PPP VJ Compression", "PPP VJ", "vj");
proto_register_field_array(proto_vj, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_init_routine(&vj_init);
}
void
proto_reg_handoff_vj(void)
{
dissector_handle_t vjc_handle;
dissector_handle_t vjuc_handle;
vjc_handle = create_dissector_handle(dissect_vjc, proto_vj);
dissector_add("ppp.protocol", PPP_VJC_COMP, vjc_handle);
vjuc_handle = create_dissector_handle(dissect_vjuc, proto_vj);
dissector_add("ppp.protocol", PPP_VJC_UNCOMP, vjuc_handle);
ip_handle = find_dissector("ip");
data_handle = find_dissector("data");
}
/* Initialization function */
static void
vj_init(void)
@ -887,3 +808,82 @@ ip_csum(const guint8 * ptr, guint32 len)
cksum_vec[0].len = len;
return in_cksum(&cksum_vec[0], 1);
}
/* Registration functions for dissectors */
void
proto_register_vj(void)
{
static hf_register_info hf[] = {
{ &hf_vj_change_mask,
{ "Change mask", "vj.change_mask", FT_UINT8, BASE_HEX,
NULL, 0x0, "", HFILL }},
{ &hf_vj_change_mask_c,
{ "Connection changed", "vj.change_mask_c", FT_BOOLEAN, 8,
NULL, NEW_C, "Connection number changed", HFILL }},
{ &hf_vj_change_mask_i,
{ "IP ID change != 1", "vj.change_mask_i", FT_BOOLEAN, 8,
NULL, NEW_I, "IP ID changed by a value other than 1", HFILL }},
{ &hf_vj_change_mask_p,
{ "Push bit set", "vj.change_mask_p", FT_BOOLEAN, 8,
NULL, CHANGE_PUSH_BIT, "TCP PSH flag set", HFILL }},
{ &hf_vj_change_mask_s,
{ "Sequence number changed", "vj.change_mask_s", FT_BOOLEAN, 8,
NULL, NEW_S, "Sequence number changed", HFILL }},
{ &hf_vj_change_mask_a,
{ "Ack number changed", "vj.change_mask_a", FT_BOOLEAN, 8,
NULL, NEW_A, "Acknowledgement sequence number changed", HFILL }},
{ &hf_vj_change_mask_w,
{ "Window changed", "vj.change_mask_w", FT_BOOLEAN, 8,
NULL, NEW_W, "TCP window changed", HFILL }},
{ &hf_vj_change_mask_u,
{ "Urgent pointer set", "vj.change_mask_u", FT_BOOLEAN, 8,
NULL, NEW_U, "Urgent pointer set", HFILL }},
{ &hf_vj_connection_number,
{ "Connection number", "vj.connection_number", FT_UINT8, BASE_DEC,
NULL, 0x0, "Connection number", HFILL }},
{ &hf_vj_tcp_cksum,
{ "TCP checksum", "vj.tcp_cksum", FT_UINT16, BASE_HEX,
NULL, 0x0, "TCP checksum", HFILL }},
{ &hf_vj_urp,
{ "Urgent pointer", "vj.urp", FT_UINT16, BASE_DEC,
NULL, 0x0, "Urgent pointer", HFILL }},
{ &hf_vj_win_delta,
{ "Window delta", "vj.win_delta", FT_INT16, BASE_DEC,
NULL, 0x0, "Delta for window", HFILL }},
{ &hf_vj_ack_delta,
{ "Ack delta", "vj.ack_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for acknowledgment sequence number", HFILL }},
{ &hf_vj_seq_delta,
{ "Sequence delta", "vj.seq_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for sequence number", HFILL }},
{ &hf_vj_ip_id_delta,
{ "IP ID delta", "vj.ip_id_delta", FT_UINT16, BASE_DEC,
NULL, 0x0, "Delta for IP ID", HFILL }},
};
static gint *ett[] = {
&ett_vj,
&ett_vj_changes,
};
proto_vj = proto_register_protocol("PPP VJ Compression", "PPP VJ", "vj");
proto_register_field_array(proto_vj, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
register_init_routine(&vj_init);
}
void
proto_reg_handoff_vj(void)
{
dissector_handle_t vjc_handle;
dissector_handle_t vjuc_handle;
vjc_handle = create_dissector_handle(dissect_vjc, proto_vj);
dissector_add("ppp.protocol", PPP_VJC_COMP, vjc_handle);
vjuc_handle = create_dissector_handle(dissect_vjuc, proto_vj);
dissector_add("ppp.protocol", PPP_VJC_UNCOMP, vjuc_handle);
ip_handle = find_dissector("ip");
data_handle = find_dissector("data");
}

View File

@ -1078,13 +1078,8 @@ proto_register_zrtp(void)
void
proto_reg_handoff_zrtp(void)
{
static gboolean inited = FALSE;
dissector_handle_t zrtp_handle;
if (!inited){
dissector_handle_t zrtp_handle;
zrtp_handle = create_dissector_handle(dissect_zrtp, proto_zrtp);
dissector_add_handle("udp.port", zrtp_handle);
inited = TRUE;
}
zrtp_handle = find_dissector("zrtp");
dissector_add_handle("udp.port", zrtp_handle);
}