diff options
-rw-r--r-- | epan/dissectors/packet-skinny.c | 1354 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.c.in | 175 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.h | 63 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.h.in | 63 | ||||
-rw-r--r-- | tools/SkinnyProtocolOptimized.xml | 479 | ||||
-rwxr-xr-x | tools/parse_xml2skinny_dissector.py | 51 |
6 files changed, 1432 insertions, 753 deletions
diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c index 0851910f73..69f1eaf1e8 100644 --- a/epan/dissectors/packet-skinny.c +++ b/epan/dissectors/packet-skinny.c @@ -46,6 +46,9 @@ #include <epan/packet.h> #include <epan/prefs.h> +#include <epan/conversation.h> +#include <epan/wmem/wmem.h> +#include <epan/to_str.h> #include <epan/reassemble.h> #include <epan/tap.h> #include <epan/ptvcursor.h> @@ -55,6 +58,10 @@ #include "packet-ssl.h" #include "packet-skinny.h" +/* un-comment the following as well as this line in conversation.c, to enable debug printing */ +/* #define DEBUG_CONVERSATION */ +#include "conversation_debug.h" + void proto_register_skinny(void); void proto_reg_handoff_skinny(void); @@ -89,9 +96,9 @@ static const value_string header_version[] = { }; /* Declare MessageId */ -static const value_string message_id[] = { - { 0x0000, "KeepAlive" }, - { 0x0001, "Register" }, +static const value_string message_id[] = { + { 0x0000, "KeepAliveReq" }, + { 0x0001, "RegisterReq" }, { 0x0002, "IpPort" }, { 0x0003, "KeypadButton" }, { 0x0004, "EnblocCall" }, @@ -115,7 +122,7 @@ static const value_string message_id[] = { { 0x0024, "OffHookWithCgpn" }, { 0x0025, "SoftKeySetReq" }, { 0x0026, "SoftKeyEvent" }, - { 0x0027, "Unregister" }, + { 0x0027, "UnregisterReq" }, { 0x0028, "SoftKeyTemplateReq" }, { 0x0029, "RegisterTokenReq" }, { 0x002a, "MediaTransmissionFailure" }, @@ -137,8 +144,8 @@ static const value_string message_id[] = { { 0x0040, "AuditParticipantRes" }, { 0x0041, "DeviceToUserDataVersion1" }, { 0x0042, "DeviceToUserDataResponseVersion1" }, - { 0x0043, "UpdateCapabilitiesV2" }, - { 0x0044, "UpdateCapabilitiesV3" }, + { 0x0043, "CapabilitiesV2Res" }, + { 0x0044, "CapabilitiesV3Res" }, { 0x0045, "PortRes" }, { 0x0046, "QoSResvNotify" }, { 0x0047, "QoSErrorNotify" }, @@ -156,15 +163,15 @@ static const value_string message_id[] = { { 0x008a, "StartMediaTransmission" }, { 0x008b, "StopMediaTransmission" }, { 0x008f, "CallInfo" }, - { 0x0090, "ForwardStat" }, - { 0x0091, "SpeedDialStat" }, - { 0x0092, "LineStat" }, - { 0x0093, "ConfigStat" }, - { 0x0094, "DefineTimeDate" }, + { 0x0090, "ForwardStatRes" }, + { 0x0091, "SpeedDialStatRes" }, + { 0x0092, "LineStatRes" }, + { 0x0093, "ConfigStatRes" }, + { 0x0094, "TimeDateRes" }, { 0x0095, "StartSessionTransmission" }, { 0x0096, "StopSessionTransmission" }, - { 0x0097, "ButtonTemplate" }, - { 0x0098, "Version" }, + { 0x0097, "ButtonTemplateRes" }, + { 0x0098, "VersionRes" }, { 0x0099, "DisplayText" }, { 0x009a, "ClearDisplay" }, { 0x009b, "CapabilitiesReq" }, @@ -190,13 +197,13 @@ static const value_string message_id[] = { { 0x0116, "ActivateCallPlane" }, { 0x0117, "DeactivateCallPlane" }, { 0x0118, "UnregisterAck" }, - { 0x0119, "BackSpaceReq" }, + { 0x0119, "BackSpaceRes" }, { 0x011a, "RegisterTokenAck" }, { 0x011b, "RegisterTokenReject" }, { 0x011c, "StartMediaFailureDetection" }, { 0x011d, "DialedNumber" }, { 0x011e, "UserToDeviceData" }, - { 0x011f, "FeatureStat" }, + { 0x011f, "FeatureStatRes" }, { 0x0120, "DisplayPriNotify" }, { 0x0121, "ClearPriNotify" }, { 0x0122, "StartAnnouncement" }, @@ -210,8 +217,8 @@ static const value_string message_id[] = { { 0x012c, "UnSubscribeDtmfPayloadReq" }, { 0x012d, "UnSubscribeDtmfPayloadRes" }, { 0x012e, "UnSubscribeDtmfPayloadErr" }, - { 0x012f, "ServiceURLStat" }, - { 0x0130, "CallSelectStat" }, + { 0x012f, "ServiceURLStatRes" }, + { 0x0130, "CallSelectStatRes" }, { 0x0131, "OpenMultiMediaReceiveChannel" }, { 0x0132, "StartMultiMediaTransmission" }, { 0x0133, "StopMultiMediaTransmission" }, @@ -229,14 +236,14 @@ static const value_string message_id[] = { { 0x013f, "UserToDeviceDataVersion1" }, { 0x0140, "VideoDisplayCommand" }, { 0x0141, "FlowControlNotify" }, - { 0x0142, "ConfigStatV2" }, + { 0x0142, "ConfigStatV2Res" }, { 0x0143, "DisplayNotifyV2" }, { 0x0144, "DisplayPriNotifyV2" }, { 0x0145, "DisplayPromptStatusV2" }, - { 0x0146, "FeatureStatV2" }, - { 0x0147, "LineStatV2" }, - { 0x0148, "ServiceURLStatV2" }, - { 0x0149, "SpeedDialStatV2" }, + { 0x0146, "FeatureStatV2Res" }, + { 0x0147, "LineStatV2Res" }, + { 0x0148, "ServiceURLStatV2Res" }, + { 0x0149, "SpeedDialStatV2Res" }, { 0x014a, "CallInfoV2" }, { 0x014b, "PortReq" }, { 0x014c, "PortClose" }, @@ -245,13 +252,13 @@ static const value_string message_id[] = { { 0x014f, "QoSTeardown" }, { 0x0150, "UpdateDSCP" }, { 0x0151, "QoSModify" }, - { 0x0152, "SubscriptionStat" }, + { 0x0152, "SubscriptionStatRes" }, { 0x0153, "Notification" }, { 0x0154, "StartMediaTransmissionAck" }, { 0x0155, "StartMultiMediaTransmissionAck" }, { 0x0156, "CallHistoryInfo" }, - { 0x0156, "LocationInfo" }, - { 0x0158, "MwiResponse" }, + { 0x0157, "LocationInfo" }, + { 0x0158, "MwiRes" }, { 0x0159, "AddOnDeviceCapabilities" }, { 0x015a, "EnhancedAlarm" }, { 0x015e, "CallCountReq" }, @@ -264,7 +271,6 @@ static const value_string message_id[] = { }; static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id); - /* Declare Enums and Defines */ static const value_string DisplayLabels_36[] = { { 0x00000, "Empty" }, @@ -1731,6 +1737,9 @@ static int hf_skinny_data_length = -1; static int hf_skinny_hdr_version = -1; static int hf_skinny_xmlData = -1; static int hf_skinny_ipv4or6 = -1; +static int hf_skinny_response_in = -1; +static int hf_skinny_response_to = -1; +static int hf_skinny_response_time = -1; static int hf_skinny_AlternateCallingParty = -1; static int hf_skinny_CallingPartyName = -1; @@ -2015,6 +2024,7 @@ static int hf_skinny_mwiTargetNumber = -1; static int hf_skinny_mwi_notification_result = -1; static int hf_skinny_noaudio = -1; static int hf_skinny_none = -1; +static int hf_skinny_notificationStatus = -1; static int hf_skinny_notify = -1; static int hf_skinny_nse = -1; static int hf_skinny_numNewMsgs = -1; @@ -2045,7 +2055,7 @@ static int hf_skinny_participantName = -1; static int hf_skinny_participantNumber = -1; static int hf_skinny_partyDirection = -1; static int hf_skinny_passThruData = -1; -static int hf_skinny_passThruPartyID = -1; +static int hf_skinny_passThruPartyId = -1; static int hf_skinny_passthruPartyID = -1; static int hf_skinny_payloadCapability = -1; static int hf_skinny_payloadDtmf = -1; @@ -2139,7 +2149,6 @@ static int hf_skinny_subAppID = -1; static int hf_skinny_subcriptionFeatureID = -1; static int hf_skinny_subscriptionFeatureID = -1; static int hf_skinny_subscriptionID = -1; -static int hf_skinny_subscriptionoFeatureID = -1; static int hf_skinny_systemTime = -1; static int hf_skinny_temporalSpatialTradeOff = -1; static int hf_skinny_temporalSpatialTradeOffCapability = -1; @@ -2323,17 +2332,79 @@ dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, gint length) ptvcursor_advance(cursor, length); } -/*** Messages Handlers ***/ +/*** Request / Response helper functions */ +static void skinny_reqrep_add_request(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key) +{ + proto_tree *tree = ptvcursor_tree(cursor); + tvbuff_t *tvb = ptvcursor_tvbuff(cursor); + skinny_req_resp_t *req_resp = NULL; + + if (!PINFO_FD_VISITED(pinfo)) { + req_resp = wmem_new0(wmem_file_scope(), skinny_req_resp_t); + req_resp->request_frame = pinfo->num; + req_resp->response_frame = 0; + req_resp->request_time = pinfo->fd->abs_ts; + wmem_map_insert(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key), (void *)req_resp); + DPRINT(("SKINNY: setup_request: frame=%d add key=%d to map\n", pinfo->num, request_key)); + } + + req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->requests, GUINT_TO_POINTER(pinfo->num)); + if (req_resp && req_resp->response_frame) { + DPRINT(("SKINNY: show request in tree: frame/key=%d\n", pinfo->num)); + proto_item *it; + it = proto_tree_add_uint(tree, hf_skinny_response_in, tvb, 0, 0, req_resp->response_frame); + PROTO_ITEM_SET_GENERATED(it); + } else { + DPRINT(("SKINNY: no request found for frame/key=%d\n", pinfo->num)); + } +} + + +static void skinny_reqrep_add_response(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key) +{ + proto_tree *tree = ptvcursor_tree(cursor); + tvbuff_t *tvb = ptvcursor_tvbuff(cursor); + skinny_req_resp_t *req_resp = NULL; + + if (!PINFO_FD_VISITED(pinfo)) { + req_resp = (skinny_req_resp_t *) wmem_map_remove(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key)); + if (req_resp) { + DPRINT(("SKINNY: match request:%d with response:%d for key=%d\n", req_resp->request_frame, pinfo->num, request_key)); + req_resp->response_frame = pinfo->num; + wmem_map_insert(skinny_conv->requests, GUINT_TO_POINTER(req_resp->request_frame), (void *)req_resp); + wmem_map_insert(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num), (void *)req_resp); + } else { + DPRINT(("SKINNY: no match found for reponse frame=%d and key=%d\n", pinfo->num, request_key)); + } + } + req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num)); + if (req_resp && req_resp->request_frame) { + DPRINT(("SKINNY: show response in tree: frame/key=%d\n", pinfo->num)); + proto_item *it; + nstime_t ns; + it = proto_tree_add_uint(tree, hf_skinny_response_to, tvb, 0, 0, req_resp->request_frame); + PROTO_ITEM_SET_GENERATED(it); + + nstime_delta(&ns, &pinfo->fd->abs_ts, &req_resp->request_time); + it = proto_tree_add_time(tree, hf_skinny_response_time, tvb, 0, 0, &ns); + PROTO_ITEM_SET_GENERATED(it); + } else { + DPRINT(("SKINNY: no response found for frame/key=%d\n", pinfo->num)); + } +} + +/*** Messages Handlers ***/ /* - * Message: RegisterMessage + * Message: RegisterReqMessage * Opcode: 0x0001 * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); @@ -2385,6 +2456,7 @@ handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) if (hdr_data_length > 191) { ptvcursor_add(cursor, hf_skinny_configVersionStamp, 48, ENC_ASCII|ENC_NA); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0001); } /* @@ -2393,9 +2465,10 @@ handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_rtpMediaPort, 4, ENC_LITTLE_ENDIAN); } @@ -2406,9 +2479,10 @@ handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); @@ -2427,9 +2501,10 @@ handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); @@ -2449,9 +2524,10 @@ handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -2467,9 +2543,10 @@ handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); @@ -2487,9 +2564,10 @@ handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); @@ -2507,9 +2585,10 @@ handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -2523,11 +2602,15 @@ handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 lineNumber = 0; + lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0009 ^ lineNumber); } /* @@ -2536,11 +2619,15 @@ handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 speedDialNumber = 0; + speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber); } /* @@ -2549,22 +2636,27 @@ handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_LineStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_LineStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 lineNumber = 0; + lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber); } /* - * Message: CapabilitiesRes + * Message: CapabilitiesResMessage * Opcode: 0x0010 * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CapabilitiesResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 capCount = 0; guint32 payloadCapability = 0; @@ -2637,6 +2729,7 @@ handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (capCount * 16)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b); } /* @@ -2645,9 +2738,10 @@ handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_alarmSeverity, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_text, 80, ENC_ASCII|ENC_NA); @@ -2661,15 +2755,20 @@ handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; si->multicastReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_multicastReceptionStatus, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0101 ^ passThruPartyId); } /* @@ -2678,21 +2777,26 @@ handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinf * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); + guint32 passThruPartyId = 0; si->mediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_mediaReceptionStatus, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); if (hdr_data_length > 20) { si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0105 ^ passThruPartyId); } /* @@ -2701,28 +2805,33 @@ handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_ * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); + guint32 callReference = 0; guint32 dataSize = 0; if (hdr_version <= V16_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_directoryNum, 24, ENC_ASCII|ENC_NA); + callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN); } if (hdr_version >= V17_MSG_TYPE && hdr_version <= V20_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_directoryNum, 28, ENC_ASCII|ENC_NA); + callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN); } if (hdr_version >= V21_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_directoryNum, 28, ENC_ASCII|ENC_NA); + callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 1, ENC_LITTLE_ENDIAN); @@ -2739,6 +2848,7 @@ handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _ ptvcursor_add(cursor, hf_skinny_dataSize, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_data, dataSize, ENC_ASCII|ENC_NA); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0107 ^ callReference); } /* @@ -2747,9 +2857,10 @@ handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_OffHookWithCgpnMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OffHookWithCgpnMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24; @@ -2765,9 +2876,10 @@ handle_OffHookWithCgpnMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -2777,20 +2889,22 @@ handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } /* - * Message: UnregisterMessage + * Message: UnregisterReqMessage * Opcode: 0x0027 * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_UnregisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UnregisterReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); if (hdr_data_length > 12) { ptvcursor_add(cursor, hf_skinny_unRegReasonCode, 4, ENC_LITTLE_ENDIAN); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0027); } /* @@ -2799,9 +2913,10 @@ handle_UnregisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { { ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid"); @@ -2813,6 +2928,7 @@ handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpV6Addr_ipv4, hf_skinny_stationIpV6Addr_ipv6); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0029); } /* @@ -2821,16 +2937,21 @@ handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x008a ^ passThruPartyId); } /* @@ -2839,9 +2960,10 @@ handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_headsetStatus, 4, ENC_LITTLE_ENDIAN); } @@ -2852,9 +2974,10 @@ handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_numberOfInServiceStreams, 4, ENC_LITTLE_ENDIAN); @@ -2868,9 +2991,10 @@ handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_maxNumOfAvailLines, 4, ENC_LITTLE_ENDIAN); } @@ -2881,9 +3005,10 @@ handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -2899,6 +3024,7 @@ handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000); ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x002e); } /* @@ -2907,9 +3033,10 @@ handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -2925,6 +3052,7 @@ handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000); ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x002e); } /* @@ -2933,9 +3061,10 @@ handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 audioCapCount = 0; guint32 videoCapCount = 0; @@ -3224,23 +3353,22 @@ handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { - guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); - + guint32 passThruPartyId = 0; si->multimediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_multimediaReceptionStatus, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - if (hdr_version >= V16_MSG_TYPE) { - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); - si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); - ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0131 ^ passThruPartyId); } /* @@ -3249,9 +3377,10 @@ handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * * Type: Conference * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN); @@ -3263,11 +3392,15 @@ handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 serviceURLIndex = 0; + serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex); } /* @@ -3276,16 +3409,20 @@ handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); + guint32 featureIndex = 0; + featureIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN); if (hdr_data_length > 16) { ptvcursor_add(cursor, hf_skinny_featureCapabilities, 4, ENC_LITTLE_ENDIAN); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0034 ^ featureIndex); } /* @@ -3294,16 +3431,20 @@ handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; guint32 dataLength = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_result, 4, ENC_LITTLE_ENDIAN); dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0137 ^ conferenceID); } /* @@ -3312,12 +3453,16 @@ handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_delete_conf_result, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0138 ^ conferenceID); } /* @@ -3326,16 +3471,20 @@ handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; guint32 dataLength = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_modify_conf_result, 4, ENC_LITTLE_ENDIAN); dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0139 ^ conferenceID); } /* @@ -3344,15 +3493,19 @@ handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_add_participant_result, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_bridgeParticipantId, 257, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013a ^ conferenceID); } /* @@ -3361,9 +3514,10 @@ handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 numberOfEntries = 0; ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN); @@ -3393,6 +3547,7 @@ handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (numberOfEntries * 76)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013c); } /* @@ -3401,13 +3556,16 @@ handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; guint32 numberOfEntries = 0; ptvcursor_add(cursor, hf_skinny_audit_participant_result, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN); + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN); @@ -3425,6 +3583,7 @@ handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (256 * 4)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013d ^ conferenceID); } /* @@ -3433,9 +3592,10 @@ handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -3456,6 +3616,7 @@ handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000); ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0041); } /* @@ -3464,9 +3625,10 @@ handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -3487,17 +3649,19 @@ handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000); ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0041); } /* - * Message: UpdateCapabilitiesV2Message + * Message: CapabilitiesV2ResMessage * Opcode: 0x0043 * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CapabilitiesV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 audioCapCount = 0; guint32 videoCapCount = 0; @@ -3794,17 +3958,19 @@ handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (dataCapCount * 16)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b); } /* - * Message: UpdateCapabilitiesV3Message + * Message: CapabilitiesV3ResMessage * Opcode: 0x0044 * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: yes + * MsgType: response */ static void -handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CapabilitiesV3ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 audioCapCount = 0; guint32 videoCapCount = 0; @@ -4080,6 +4246,7 @@ handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (dataCapCount * 20)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b); } /* @@ -4088,22 +4255,27 @@ handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: dev2pbx * VarLength: no + * MsgType: response */ static void -handle_PortResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_PortResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); + guint32 callReference = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_RTCPPortNumber, 4, ENC_LITTLE_ENDIAN); if (hdr_version >= V19_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x014b ^ callReference); } /* @@ -4112,14 +4284,16 @@ handle_PortResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSResvNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSResvNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN); @@ -4131,14 +4305,16 @@ handle_QoSResvNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSErrorNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSErrorNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN); @@ -4155,14 +4331,18 @@ handle_QoSErrorNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_SubscriptionStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SubscriptionStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 transactionID = 0; + transactionID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_subcriptionFeatureID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_subscriptionID, 64, ENC_ASCII|ENC_NA); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0048 ^ transactionID); } /* @@ -4171,9 +4351,10 @@ handle_SubscriptionStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_MediaPathEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MediaPathEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_mediaPathEvent, 4, ENC_LITTLE_ENDIAN); @@ -4185,9 +4366,10 @@ handle_MediaPathEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_MediaPathCapabilityMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MediaPathCapabilityMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_mediaPathCapabilities, 4, ENC_LITTLE_ENDIAN); @@ -4197,11 +4379,12 @@ handle_MediaPathCapabilityMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Message: MwiNotificationMessage * Opcode: 0x004c * Type: RegistrationAndManagement - * Direction: dev2pbx + * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_mwiControlNumber, 25, ENC_ASCII|ENC_NA); @@ -4230,6 +4413,7 @@ handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN); ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x004c); } /* @@ -4238,9 +4422,10 @@ handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_keepAliveInterval, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_dateTemplate, 6, ENC_ASCII|ENC_NA); @@ -4267,6 +4452,7 @@ handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Abbreviated_Dial, 2, ENC_LITTLE_ENDIAN); ptvcursor_advance(cursor, 2); ptvcursor_pop_subtree(cursor); /* end bitfield: PhoneFeatures */ + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0001); } /* @@ -4275,9 +4461,10 @@ handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_tone_output_direction, 4, ENC_LITTLE_ENDIAN); @@ -4293,9 +4480,10 @@ handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StopToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); @@ -4314,9 +4502,10 @@ handle_StopToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SetRingerMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SetRingerMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_ringMode, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_ringDuration, 4, ENC_LITTLE_ENDIAN); @@ -4332,9 +4521,10 @@ handle_SetRingerMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SetLampMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SetLampMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_stimulusInstance, 4, ENC_LITTLE_ENDIAN); @@ -4347,9 +4537,10 @@ handle_SetLampMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SetSpeakerModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SetSpeakerModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_speakerMode, 4, ENC_LITTLE_ENDIAN); } @@ -4360,9 +4551,10 @@ handle_SetSpeakerModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SetMicroModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SetMicroModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_micMode, 4, ENC_LITTLE_ENDIAN); } @@ -4373,17 +4565,21 @@ handle_SetMicroModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); + guint32 passThruPartyId = 0; guint32 compressionType = 0; guint16 keylen = 0; guint16 saltlen = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN); @@ -4506,6 +4702,7 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U ptvcursor_pop_subtree(cursor); } } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x008a ^ passThruPartyId); } /* @@ -4514,12 +4711,14 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StopMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN); @@ -4531,9 +4730,10 @@ handle_StopMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_ * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_callingPartyName, 40, ENC_ASCII|ENC_NA); si->callingParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24)); @@ -4577,18 +4777,21 @@ handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } /* - * Message: ForwardStatMessage + * Message: ForwardStatResMessage * Opcode: 0x0090 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_ForwardStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ForwardStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 lineNumber = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24; ptvcursor_add(cursor, hf_skinny_activeForward, 4, ENC_LITTLE_ENDIAN); + lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_forwardAllActive, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_forwardAllDirnum, VariableDirnumSize, ENC_ASCII|ENC_NA); @@ -4596,49 +4799,59 @@ handle_ForwardStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_forwardBusyDirnum, VariableDirnumSize, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_forwardNoAnswerActive, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_forwardNoAnswerlDirnum, VariableDirnumSize, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0009 ^ lineNumber); } /* - * Message: SpeedDialStatMessage + * Message: SpeedDialStatResMessage * Opcode: 0x0091 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SpeedDialStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SpeedDialStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 speedDialNumber = 0; + speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_speedDialDirNumber, 24, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_speedDialDisplayName, 40, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber); } /* - * Message: LineStatMessage + * Message: LineStatResMessage * Opcode: 0x0092 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_LineStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_LineStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 lineNumber = 0; + lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_lineDirNumber, 24, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_lineFullyQualifiedDisplayName, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_lineTextLabel, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_lineDisplayOptions, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber); } /* - * Message: ConfigStatMessage + * Message: ConfigStatResMessage * Opcode: 0x0093 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_ConfigStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ConfigStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { { ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid"); @@ -4651,17 +4864,19 @@ handle_ConfigStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_serverName, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_numberOfLines, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_numberOfSpeedDials, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000c); } /* - * Message: DefineTimeDate + * Message: TimeDateResMessage * Opcode: 0x0094 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_TimeDateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { { ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "timeDataInfo"); @@ -4676,6 +4891,7 @@ handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_pop_subtree(cursor); } ptvcursor_add(cursor, hf_skinny_systemTime, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000d); } /* @@ -4684,9 +4900,10 @@ handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_StartSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN); @@ -4698,23 +4915,25 @@ handle_StartSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_StopSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN); } /* - * Message: ButtonTemplateMessage + * Message: ButtonTemplateResMessage * Opcode: 0x0097 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_ButtonTemplateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ButtonTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 totalButtonCount = 0; { @@ -4744,19 +4963,22 @@ handle_ButtonTemplateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000e); } /* - * Message: VersionMessage + * Message: VersionResMessage * Opcode: 0x0098 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_VersionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_VersionResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000f); } /* @@ -4765,9 +4987,10 @@ handle_VersionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_DisplayTextMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayTextMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII|ENC_NA); } @@ -4778,9 +5001,10 @@ handle_DisplayTextMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_RegisterRejectMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterRejectMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII|ENC_NA); } @@ -4791,9 +5015,10 @@ handle_RegisterRejectMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); @@ -4839,6 +5064,7 @@ handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_pop_subtree(cursor); } } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0012); } /* @@ -4847,9 +5073,10 @@ handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_Reset(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_Reset(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_resetType, 4, ENC_LITTLE_ENDIAN); } @@ -4860,14 +5087,18 @@ handle_Reset(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; guint32 compressionType = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN); @@ -4901,6 +5132,7 @@ handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pi } si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0101 ^ passThruPartyId); } /* @@ -4909,14 +5141,18 @@ handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pi * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; guint32 compressionType = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN); @@ -4953,6 +5189,7 @@ handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * } si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0102 ^ passThruPartyId); } /* @@ -4961,12 +5198,14 @@ handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StopMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); } @@ -4977,12 +5216,14 @@ handle_StopMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pin * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StopMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); } @@ -4993,18 +5234,22 @@ handle_StopMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); + guint32 passThruPartyId = 0; guint32 compressionType = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); guint16 keylen = 0; guint16 saltlen = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN); compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN); @@ -5134,6 +5379,7 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } } } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0105 ^ passThruPartyId); } /* @@ -5142,12 +5388,14 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CloseReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CloseReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN); @@ -5159,11 +5407,13 @@ handle_CloseReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); + guint32 callReference = 0; if (hdr_version <= V16_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_directoryNum, 24, ENC_ASCII|ENC_NA); @@ -5171,9 +5421,11 @@ handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _ if (hdr_version >= V17_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_directoryNum, 28, ENC_ASCII|ENC_NA); } + callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0107 ^ callReference); } /* @@ -5182,9 +5434,10 @@ handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 totalSoftKeyCount = 0; { @@ -5214,6 +5467,7 @@ handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0028); } /* @@ -5222,9 +5476,10 @@ handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 totalSoftKeySetCount = 0; { @@ -5268,6 +5523,7 @@ handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } ptvcursor_pop_subtree(cursor); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0025); } /* @@ -5276,9 +5532,10 @@ handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SelectSoftKeysMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SelectSoftKeysMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5312,9 +5569,10 @@ handle_SelectSoftKeysMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->callState = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callState, 4, ENC_LITTLE_ENDIAN); @@ -5337,9 +5595,10 @@ handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_DisplayPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); dissect_skinny_displayLabel(cursor, hf_skinny_promptStatus, 32); @@ -5355,9 +5614,10 @@ handle_DisplayPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_ClearPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ClearPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5371,9 +5631,10 @@ handle_ClearPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_DisplayNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); dissect_skinny_displayLabel(cursor, hf_skinny_notify, 32); @@ -5385,9 +5646,10 @@ handle_DisplayNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_ActivateCallPlaneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ActivateCallPlaneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5399,22 +5661,25 @@ handle_ActivateCallPlaneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_UnregisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UnregisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_status, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0027); } /* - * Message: BackSpaceReqMessage + * Message: BackSpaceResMessage * Opcode: 0x0119 * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_BackSpaceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_BackSpaceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5428,11 +5693,13 @@ handle_BackSpaceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_RegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0029); } /* @@ -5441,14 +5708,16 @@ handle_RegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 compressionType = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN); compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN); @@ -5488,9 +5757,10 @@ handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinf * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24; @@ -5517,9 +5787,10 @@ handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -5538,19 +5809,23 @@ handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } /* - * Message: FeatureStatMessage + * Message: FeatureStatResMessage * Opcode: 0x011f * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_FeatureStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_FeatureStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 featureIndex = 0; + featureIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_featureTextLabel, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_featureStatus, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0034 ^ featureIndex); } /* @@ -5559,9 +5834,10 @@ handle_FeatureStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_DisplayPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN); @@ -5574,9 +5850,10 @@ handle_DisplayPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_ClearPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ClearPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN); } @@ -5587,9 +5864,10 @@ handle_ClearPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { { guint32 counter_1 = 0; @@ -5623,9 +5901,10 @@ handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_StopAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); } @@ -5636,9 +5915,10 @@ handle_StopAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_AnnouncementFinishMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AnnouncementFinishMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_annStatus, 4, ENC_LITTLE_ENDIAN); @@ -5650,9 +5930,10 @@ handle_AnnouncementFinishMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_NotifyDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_NotifyDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); @@ -5665,9 +5946,10 @@ handle_NotifyDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_SendDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SendDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); @@ -5680,14 +5962,16 @@ handle_SendDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_SubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0129); } /* @@ -5696,13 +5980,17 @@ handle_SubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0129 ^ passthruPartyID); } /* @@ -5711,13 +5999,17 @@ handle_SubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0129 ^ passthruPartyID); } /* @@ -5726,14 +6018,18 @@ handle_SubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_UnSubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UnSubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x012c ^ passthruPartyID); } /* @@ -5742,13 +6038,17 @@ handle_UnSubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_UnSubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UnSubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x012d ^ passthruPartyID); } /* @@ -5757,39 +6057,48 @@ handle_UnSubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_UnSubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UnSubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x012d ^ passthruPartyID); } /* - * Message: ServiceURLStatMessage + * Message: ServiceURLStatResMessage * Opcode: 0x012f * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_ServiceURLStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ServiceURLStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 serviceURLIndex = 0; + serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_serviceURL, 256, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_serviceURLDisplayName, 40, ENC_ASCII|ENC_NA); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex); } /* - * Message: CallSelectStatMessage + * Message: CallSelectStatResMessage * Opcode: 0x0130 * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CallSelectStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallSelectStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_callSelectStat, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -5804,11 +6113,13 @@ handle_CallSelectStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); + guint32 passThruPartyId = 0; guint32 compressionType = 0; guint32 payloadType = 0; guint32 pictureFormatCount = 0; @@ -5816,7 +6127,9 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi guint16 saltlen = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -6033,6 +6346,7 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi if (hdr_version >= V16_MSG_TYPE) { ptvcursor_add(cursor, hf_skinny_requestedIpAddrType, 4, ENC_LITTLE_ENDIAN); } + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0131 ^ passThruPartyId); } /* @@ -6041,10 +6355,12 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passthruPartyID = 0; guint32 compressionType = 0; guint32 payloadType = 0; guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); @@ -6052,6 +6368,7 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin guint16 keylen = 0; guint16 saltlen = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN); @@ -6262,6 +6579,7 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin } ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0132 ^ passthruPartyID); } /* @@ -6270,12 +6588,14 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_StopMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StopMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN); @@ -6287,9 +6607,10 @@ handle_StopMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinf * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 command = 0; guint32 recoveryReferencePictureCount = 0; @@ -6403,9 +6724,10 @@ handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_FlowControlCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_FlowControlCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); @@ -6420,12 +6742,14 @@ handle_FlowControlCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CloseMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CloseMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN); @@ -6437,11 +6761,14 @@ handle_CloseMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * p * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; guint32 dataLength = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN); @@ -6451,6 +6778,7 @@ handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0137 ^ conferenceID); } /* @@ -6459,11 +6787,15 @@ handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_DeleteConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DeleteConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0138 ^ conferenceID); } /* @@ -6472,11 +6804,14 @@ handle_DeleteConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; guint32 dataLength = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN); @@ -6485,6 +6820,7 @@ handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0139 ^ conferenceID); } /* @@ -6493,10 +6829,13 @@ handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); @@ -6519,6 +6858,7 @@ handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_participantName, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_participantNumber, 24, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_conferenceName, 32, ENC_ASCII|ENC_NA); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013a ^ conferenceID); } /* @@ -6527,13 +6867,17 @@ handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_DropParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DropParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013b ^ conferenceID); } /* @@ -6542,11 +6886,15 @@ handle_DropParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_AuditParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AuditParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013d ^ conferenceID); } /* @@ -6555,10 +6903,13 @@ handle_AuditParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: request */ static void -handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 conferenceID = 0; + conferenceID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); @@ -6581,6 +6932,7 @@ handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_participantName, 40, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_participantNumber, 24, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_conferenceName, 32, ENC_ASCII|ENC_NA); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013e ^ conferenceID); } /* @@ -6589,9 +6941,10 @@ handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 dataLength = 0; { @@ -6620,9 +6973,10 @@ handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_VideoDisplayCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_VideoDisplayCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -6636,9 +6990,10 @@ handle_VideoDisplayCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_FlowControlNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_FlowControlNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN); @@ -6648,14 +7003,15 @@ handle_FlowControlNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } /* - * Message: ConfigStatV2Message + * Message: ConfigStatV2ResMessage * Opcode: 0x0142 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: response */ static void -handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ConfigStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 DeviceName_len = 0; guint32 userName_len = 0; @@ -6686,6 +7042,7 @@ handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, 1); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000c); } /* @@ -6694,9 +7051,10 @@ handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: event */ static void -handle_DisplayNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); dissect_skinny_displayLabel(cursor, hf_skinny_notify, 0); @@ -6708,9 +7066,10 @@ handle_DisplayNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: event */ static void -handle_DisplayPriNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayPriNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN); @@ -6723,9 +7082,10 @@ handle_DisplayPriNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: yes + * MsgType: event */ static void -handle_DisplayPromptStatusV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_DisplayPromptStatusV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -6736,14 +7096,15 @@ handle_DisplayPromptStatusV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_ } /* - * Message: FeatureStatV2Message + * Message: FeatureStatV2ResMessage * Opcode: 0x0146 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: response */ static void -handle_FeatureStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_FeatureStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 featureTextLabel_len = 0; ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN); @@ -6755,21 +7116,25 @@ handle_FeatureStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, 1); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0034); } /* - * Message: LineStatV2Message + * Message: LineStatV2ResMessage * Opcode: 0x0147 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: response */ static void -handle_LineStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_LineStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 lineNumber = 0; guint32 lineDirNumber_len = 0; guint32 lineFullyQualifiedDisplayName_len = 0; guint32 lineTextLabel_len = 0; + lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineType"); ptvcursor_add_no_advance(cursor, hf_skinny_OrigDialed, 4, ENC_LITTLE_ENDIAN); @@ -6796,33 +7161,41 @@ handle_LineStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, 1); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber); } /* - * Message: ServiceURLStatV2Message + * Message: ServiceURLStatV2ResMessage * Opcode: 0x0148 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: response */ static void -handle_ServiceURLStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_ServiceURLStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 serviceURLIndex = 0; + serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex); } /* - * Message: SpeedDialStatV2Message + * Message: SpeedDialStatV2ResMessage * Opcode: 0x0149 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: yes + * MsgType: response */ static void -handle_SpeedDialStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SpeedDialStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 speedDialNumber = 0; guint32 speedDialDirNumber_len = 0; guint32 speedDialDisplayName_len = 0; + speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN); speedDialDirNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1; if (speedDialDirNumber_len > 1) { @@ -6836,6 +7209,7 @@ handle_SpeedDialStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, 1); } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber); } /* @@ -6844,9 +7218,10 @@ handle_SpeedDialStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: yes + * MsgType: event */ static void -handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4); guint32 callingParty_len = 0; @@ -6992,17 +7367,20 @@ handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: request */ static void -handle_PortReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_PortReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_mediaTransportType, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_ipAddressType, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x014b); } /* @@ -7011,14 +7389,16 @@ handle_PortReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_PortCloseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_PortCloseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN); } @@ -7028,14 +7408,16 @@ handle_PortCloseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN); @@ -7064,14 +7446,16 @@ handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN); @@ -7099,14 +7483,16 @@ handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSTeardownMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSTeardownMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN); @@ -7118,14 +7504,16 @@ handle_QoSTeardownMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_UpdateDSCPMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_UpdateDSCPMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN); @@ -7137,14 +7525,16 @@ handle_UpdateDSCPMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: IntraCCM * Direction: pbx2pbx * VarLength: no + * MsgType: event */ static void -handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN); @@ -7163,19 +7553,23 @@ handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } /* - * Message: SubscriptionStatMessage + * Message: SubscriptionStatResMessage * Opcode: 0x0152 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SubscriptionStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SubscriptionStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 transactionID = 0; + transactionID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_subscriptionoFeatureID, 4, ENC_LITTLE_ENDIAN); + ptvcursor_add(cursor, hf_skinny_subscriptionFeatureID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_cause, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0048 ^ transactionID); } /* @@ -7184,13 +7578,14 @@ handle_SubscriptionStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_NotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_NotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_subscriptionFeatureID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_status, 4, ENC_LITTLE_ENDIAN); + ptvcursor_add(cursor, hf_skinny_notificationStatus, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_text, 97, ENC_ASCII|ENC_NA); } @@ -7200,18 +7595,23 @@ handle_NotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); si->mediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_mediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x008a ^ passThruPartyId); } /* @@ -7220,18 +7620,23 @@ handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo * Type: MediaControl * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + guint32 passThruPartyId = 0; ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN); - ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN); + passThruPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->passThruId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + ptvcursor_add(cursor, hf_skinny_passThruPartyId, 4, ENC_LITTLE_ENDIAN); si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); si->multimediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_multimediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0132 ^ passThruPartyId); } /* @@ -7240,9 +7645,10 @@ handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_CallHistoryInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallHistoryInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_callHistoryDisposition, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -7253,30 +7659,33 @@ handle_CallHistoryInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) /* * Message: LocationInfoMessage - * Opcode: 0x0156 + * Opcode: 0x0157 * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event * Comment: Sent by wifi devices, contains xml information about connected SSID */ static void -handle_LocationInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_LocationInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_locationInfo, 2401, ENC_ASCII|ENC_NA); } /* - * Message: MwiResponseMessage + * Message: MwiResMessage * Opcode: 0x0158 * Type: RegistrationAndManagement - * Direction: pbx2dev + * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_MwiResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_MwiResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII|ENC_NA); ptvcursor_add(cursor, hf_skinny_mwi_notification_result, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x004c); } /* @@ -7285,9 +7694,10 @@ handle_MwiResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: event */ static void -handle_AddOnDeviceCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_AddOnDeviceCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_unknown1_0159, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_unknown2_0159, 4, ENC_LITTLE_ENDIAN); @@ -7301,9 +7711,10 @@ handle_AddOnDeviceCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _ * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_EnhancedAlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_EnhancedAlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { dissect_skinny_xml(cursor, hf_skinny_alarmInfo, pinfo, 0, 2048); } @@ -7312,11 +7723,12 @@ handle_EnhancedAlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Message: CallCountRespMessage * Opcode: 0x015f * Type: CallControl - * Direction: pbx2dev + * Direction: pbx2pbx * VarLength: no + * MsgType: response */ static void -handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { guint32 lineDataEntries = 0; ptvcursor_add(cursor, hf_skinny_totalNumOfConfiguredLines, 4, ENC_LITTLE_ENDIAN); @@ -7342,6 +7754,7 @@ handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) } else { ptvcursor_advance(cursor, (lineDataEntries * 4)); /* guard kicked in -> skip the rest */; } + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x015e); } /* @@ -7350,9 +7763,10 @@ handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: CallControl * Direction: pbx2dev * VarLength: no + * MsgType: event */ static void -handle_RecordingStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_RecordingStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); @@ -7365,9 +7779,10 @@ handle_RecordingStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: dev2pbx * VarLength: no + * MsgType: request */ static void -handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { { ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid"); @@ -7379,6 +7794,7 @@ handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x8000); } /* @@ -7387,11 +7803,13 @@ handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SPCPRegisterTokenAck(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SPCPRegisterTokenAck(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_features, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x8000); } /* @@ -7400,191 +7818,197 @@ handle_SPCPRegisterTokenAck(ptvcursor_t *cursor, packet_info * pinfo _U_) * Type: RegistrationAndManagement * Direction: pbx2dev * VarLength: no + * MsgType: response */ static void -handle_SPCPRegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_) +handle_SPCPRegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN); + skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x8000); } -/* Messages Handler Array */ -typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo); -static const struct opcode2handler { - guint16 opcode; +typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo, skinny_conv_info_t * skinny_conv); + +typedef struct _skinny_opcode_map_t { + guint32 opcode; message_handler handler; + skinny_message_type_t type; const char *name; -} skinny_opcode2handler[] = { - {0x0000, NULL , "KeepAliveMessage"}, - {0x0001, handle_RegisterMessage , "RegisterMessage"}, - {0x0002, handle_IpPortMessage , "IpPortMessage"}, - {0x0003, handle_KeypadButtonMessage , "KeypadButtonMessage"}, - {0x0004, handle_EnblocCallMessage , "EnblocCallMessage"}, - {0x0005, handle_StimulusMessage , "StimulusMessage"}, - {0x0006, handle_OffHookMessage , "OffHookMessage"}, - {0x0007, handle_OnHookMessage , "OnHookMessage"}, - {0x0008, handle_HookFlashMessage , "HookFlashMessage"}, - {0x0009, handle_ForwardStatReqMessage , "ForwardStatReqMessage"}, - {0x000a, handle_SpeedDialStatReqMessage , "SpeedDialStatReqMessage"}, - {0x000b, handle_LineStatReqMessage , "LineStatReqMessage"}, - {0x000c, NULL , "ConfigStatReqMessage"}, - {0x000d, NULL , "TimeDateReqMessage"}, - {0x000e, NULL , "ButtonTemplateReqMessage"}, - {0x000f, NULL , "VersionReqMessage"}, - {0x0010, handle_CapabilitiesRes , "CapabilitiesRes"}, - {0x0012, NULL , "ServerReqMessage"}, - {0x0020, handle_AlarmMessage , "AlarmMessage"}, - {0x0021, handle_MulticastMediaReceptionAckMessage , "MulticastMediaReceptionAckMessage"}, - {0x0022, handle_OpenReceiveChannelAckMessage , "OpenReceiveChannelAckMessage"}, - {0x0023, handle_ConnectionStatisticsResMessage , "ConnectionStatisticsResMessage"}, - {0x0024, handle_OffHookWithCgpnMessage , "OffHookWithCgpnMessage"}, - {0x0025, NULL , "SoftKeySetReqMessage"}, - {0x0026, handle_SoftKeyEventMessage , "SoftKeyEventMessage"}, - {0x0027, handle_UnregisterMessage , "UnregisterMessage"}, - {0x0028, NULL , "SoftKeyTemplateReqMessage"}, - {0x0029, handle_RegisterTokenReq , "RegisterTokenReq"}, - {0x002a, handle_MediaTransmissionFailureMessage , "MediaTransmissionFailureMessage"}, - {0x002b, handle_HeadsetStatusMessage , "HeadsetStatusMessage"}, - {0x002c, handle_MediaResourceNotificationMessage , "MediaResourceNotificationMessage"}, - {0x002d, handle_RegisterAvailableLinesMessage , "RegisterAvailableLinesMessage"}, - {0x002e, handle_DeviceToUserDataMessage , "DeviceToUserDataMessage"}, - {0x002f, handle_DeviceToUserDataResponseMessage , "DeviceToUserDataResponseMessage"}, - {0x0030, handle_UpdateCapabilitiesMessage , "UpdateCapabilitiesMessage"}, - {0x0031, handle_OpenMultiMediaReceiveChannelAckMessage , "OpenMultiMediaReceiveChannelAckMessage"}, - {0x0032, handle_ClearConferenceMessage , "ClearConferenceMessage"}, - {0x0033, handle_ServiceURLStatReqMessage , "ServiceURLStatReqMessage"}, - {0x0034, handle_FeatureStatReqMessage , "FeatureStatReqMessage"}, - {0x0035, handle_CreateConferenceResMessage , "CreateConferenceResMessage"}, - {0x0036, handle_DeleteConferenceResMessage , "DeleteConferenceResMessage"}, - {0x0037, handle_ModifyConferenceResMessage , "ModifyConferenceResMessage"}, - {0x0038, handle_AddParticipantResMessage , "AddParticipantResMessage"}, - {0x0039, handle_AuditConferenceResMessage , "AuditConferenceResMessage"}, - {0x0040, handle_AuditParticipantResMessage , "AuditParticipantResMessage"}, - {0x0041, handle_DeviceToUserDataMessageVersion1 , "DeviceToUserDataMessageVersion1"}, - {0x0042, handle_DeviceToUserDataResponseMessageVersion1 , "DeviceToUserDataResponseMessageVersion1"}, - {0x0043, handle_UpdateCapabilitiesV2Message , "UpdateCapabilitiesV2Message"}, - {0x0044, handle_UpdateCapabilitiesV3Message , "UpdateCapabilitiesV3Message"}, - {0x0045, handle_PortResMessage , "PortResMessage"}, - {0x0046, handle_QoSResvNotifyMessage , "QoSResvNotifyMessage"}, - {0x0047, handle_QoSErrorNotifyMessage , "QoSErrorNotifyMessage"}, - {0x0048, handle_SubscriptionStatReqMessage , "SubscriptionStatReqMessage"}, - {0x0049, handle_MediaPathEventMessage , "MediaPathEventMessage"}, - {0x004a, handle_MediaPathCapabilityMessage , "MediaPathCapabilityMessage"}, - {0x004c, handle_MwiNotificationMessage , "MwiNotificationMessage"}, - {0x0081, handle_RegisterAckMessage , "RegisterAckMessage"}, - {0x0082, handle_StartToneMessage , "StartToneMessage"}, - {0x0083, handle_StopToneMessage , "StopToneMessage"}, - {0x0085, handle_SetRingerMessage , "SetRingerMessage"}, - {0x0086, handle_SetLampMessage , "SetLampMessage"}, - {0x0088, handle_SetSpeakerModeMessage , "SetSpeakerModeMessage"}, - {0x0089, handle_SetMicroModeMessage , "SetMicroModeMessage"}, - {0x008a, handle_StartMediaTransmissionMessage , "StartMediaTransmissionMessage"}, - {0x008b, handle_StopMediaTransmissionMessage , "StopMediaTransmissionMessage"}, - {0x008f, handle_CallInfoMessage , "CallInfoMessage"}, - {0x0090, handle_ForwardStatMessage , "ForwardStatMessage"}, - {0x0091, handle_SpeedDialStatMessage , "SpeedDialStatMessage"}, - {0x0092, handle_LineStatMessage , "LineStatMessage"}, - {0x0093, handle_ConfigStatMessage , "ConfigStatMessage"}, - {0x0094, handle_DefineTimeDate , "DefineTimeDate"}, - {0x0095, handle_StartSessionTransmissionMessage , "StartSessionTransmissionMessage"}, - {0x0096, handle_StopSessionTransmissionMessage , "StopSessionTransmissionMessage"}, - {0x0097, handle_ButtonTemplateMessage , "ButtonTemplateMessage"}, - {0x0098, handle_VersionMessage , "VersionMessage"}, - {0x0099, handle_DisplayTextMessage , "DisplayTextMessage"}, - {0x009a, NULL , "ClearDisplay"}, - {0x009b, NULL , "CapabilitiesReq"}, - {0x009d, handle_RegisterRejectMessage , "RegisterRejectMessage"}, - {0x009e, handle_ServerResMessage , "ServerResMessage"}, - {0x009f, handle_Reset , "Reset"}, - {0x0100, NULL , "KeepAliveAckMessage"}, - {0x0101, handle_StartMulticastMediaReceptionMessage , "StartMulticastMediaReceptionMessage"}, - {0x0102, handle_StartMulticastMediaTransmissionMessage , "StartMulticastMediaTransmissionMessage"}, - {0x0103, handle_StopMulticastMediaReceptionMessage , "StopMulticastMediaReceptionMessage"}, - {0x0104, handle_StopMulticastMediaTransmissionMessage , "StopMulticastMediaTransmissionMessage"}, - {0x0105, handle_OpenReceiveChannelMessage , "OpenReceiveChannelMessage"}, - {0x0106, handle_CloseReceiveChannelMessage , "CloseReceiveChannelMessage"}, - {0x0107, handle_ConnectionStatisticsReqMessage , "ConnectionStatisticsReqMessage"}, - {0x0108, handle_SoftKeyTemplateResMessage , "SoftKeyTemplateResMessage"}, - {0x0109, handle_SoftKeySetResMessage , "SoftKeySetResMessage"}, - {0x0110, handle_SelectSoftKeysMessage , "SelectSoftKeysMessage"}, - {0x0111, handle_CallStateMessage , "CallStateMessage"}, - {0x0112, handle_DisplayPromptStatusMessage , "DisplayPromptStatusMessage"}, - {0x0113, handle_ClearPromptStatusMessage , "ClearPromptStatusMessage"}, - {0x0114, handle_DisplayNotifyMessage , "DisplayNotifyMessage"}, - {0x0115, NULL , "ClearNotifyMessage"}, - {0x0116, handle_ActivateCallPlaneMessage , "ActivateCallPlaneMessage"}, - {0x0117, NULL , "DeactivateCallPlaneMessage"}, - {0x0118, handle_UnregisterAckMessage , "UnregisterAckMessage"}, - {0x0119, handle_BackSpaceReqMessage , "BackSpaceReqMessage"}, - {0x011a, NULL , "RegisterTokenAck"}, - {0x011b, handle_RegisterTokenReject , "RegisterTokenReject"}, - {0x011c, handle_StartMediaFailureDetectionMessage , "StartMediaFailureDetectionMessage"}, - {0x011d, handle_DialedNumberMessage , "DialedNumberMessage"}, - {0x011e, handle_UserToDeviceDataMessage , "UserToDeviceDataMessage"}, - {0x011f, handle_FeatureStatMessage , "FeatureStatMessage"}, - {0x0120, handle_DisplayPriNotifyMessage , "DisplayPriNotifyMessage"}, - {0x0121, handle_ClearPriNotifyMessage , "ClearPriNotifyMessage"}, - {0x0122, handle_StartAnnouncementMessage , "StartAnnouncementMessage"}, - {0x0123, handle_StopAnnouncementMessage , "StopAnnouncementMessage"}, - {0x0124, handle_AnnouncementFinishMessage , "AnnouncementFinishMessage"}, - {0x0127, handle_NotifyDtmfToneMessage , "NotifyDtmfToneMessage"}, - {0x0128, handle_SendDtmfToneMessage , "SendDtmfToneMessage"}, - {0x0129, handle_SubscribeDtmfPayloadReqMessage , "SubscribeDtmfPayloadReqMessage"}, - {0x012a, handle_SubscribeDtmfPayloadResMessage , "SubscribeDtmfPayloadResMessage"}, - {0x012b, handle_SubscribeDtmfPayloadErrMessage , "SubscribeDtmfPayloadErrMessage"}, - {0x012c, handle_UnSubscribeDtmfPayloadReqMessage , "UnSubscribeDtmfPayloadReqMessage"}, - {0x012d, handle_UnSubscribeDtmfPayloadResMessage , "UnSubscribeDtmfPayloadResMessage"}, - {0x012e, handle_UnSubscribeDtmfPayloadErrMessage , "UnSubscribeDtmfPayloadErrMessage"}, - {0x012f, handle_ServiceURLStatMessage , "ServiceURLStatMessage"}, - {0x0130, handle_CallSelectStatMessage , "CallSelectStatMessage"}, - {0x0131, handle_OpenMultiMediaReceiveChannelMessage , "OpenMultiMediaReceiveChannelMessage"}, - {0x0132, handle_StartMultiMediaTransmissionMessage , "StartMultiMediaTransmissionMessage"}, - {0x0133, handle_StopMultiMediaTransmissionMessage , "StopMultiMediaTransmissionMessage"}, - {0x0134, handle_MiscellaneousCommandMessage , "MiscellaneousCommandMessage"}, - {0x0135, handle_FlowControlCommandMessage , "FlowControlCommandMessage"}, - {0x0136, handle_CloseMultiMediaReceiveChannelMessage , "CloseMultiMediaReceiveChannelMessage"}, - {0x0137, handle_CreateConferenceReqMessage , "CreateConferenceReqMessage"}, - {0x0138, handle_DeleteConferenceReqMessage , "DeleteConferenceReqMessage"}, - {0x0139, handle_ModifyConferenceReqMessage , "ModifyConferenceReqMessage"}, - {0x013a, handle_AddParticipantReqMessage , "AddParticipantReqMessage"}, - {0x013b, handle_DropParticipantReqMessage , "DropParticipantReqMessage"}, - {0x013c, NULL , "AuditConferenceReqMessage"}, - {0x013d, handle_AuditParticipantReqMessage , "AuditParticipantReqMessage"}, - {0x013e, handle_ChangeParticipantReqMessage , "ChangeParticipantReqMessage"}, - {0x013f, handle_UserToDeviceDataMessageVersion1 , "UserToDeviceDataMessageVersion1"}, - {0x0140, handle_VideoDisplayCommandMessage , "VideoDisplayCommandMessage"}, - {0x0141, handle_FlowControlNotifyMessage , "FlowControlNotifyMessage"}, - {0x0142, handle_ConfigStatV2Message , "ConfigStatV2Message"}, - {0x0143, handle_DisplayNotifyV2Message , "DisplayNotifyV2Message"}, - {0x0144, handle_DisplayPriNotifyV2Message , "DisplayPriNotifyV2Message"}, - {0x0145, handle_DisplayPromptStatusV2Message , "DisplayPromptStatusV2Message"}, - {0x0146, handle_FeatureStatV2Message , "FeatureStatV2Message"}, - {0x0147, handle_LineStatV2Message , "LineStatV2Message"}, - {0x0148, handle_ServiceURLStatV2Message , "ServiceURLStatV2Message"}, - {0x0149, handle_SpeedDialStatV2Message , "SpeedDialStatV2Message"}, - {0x014a, handle_CallInfoV2Message , "CallInfoV2Message"}, - {0x014b, handle_PortReqMessage , "PortReqMessage"}, - {0x014c, handle_PortCloseMessage , "PortCloseMessage"}, - {0x014d, handle_QoSListenMessage , "QoSListenMessage"}, - {0x014e, handle_QoSPathMessage , "QoSPathMessage"}, - {0x014f, handle_QoSTeardownMessage , "QoSTeardownMessage"}, - {0x0150, handle_UpdateDSCPMessage , "UpdateDSCPMessage"}, - {0x0151, handle_QoSModifyMessage , "QoSModifyMessage"}, - {0x0152, handle_SubscriptionStatMessage , "SubscriptionStatMessage"}, - {0x0153, handle_NotificationMessage , "NotificationMessage"}, - {0x0154, handle_StartMediaTransmissionAckMessage , "StartMediaTransmissionAckMessage"}, - {0x0155, handle_StartMultiMediaTransmissionAckMessage , "StartMultiMediaTransmissionAckMessage"}, - {0x0156, handle_CallHistoryInfoMessage , "CallHistoryInfoMessage"}, - {0x0156, handle_LocationInfoMessage , "LocationInfoMessage"}, - {0x0158, handle_MwiResponseMessage , "MwiResponseMessage"}, - {0x0159, handle_AddOnDeviceCapabilitiesMessage , "AddOnDeviceCapabilitiesMessage"}, - {0x015a, handle_EnhancedAlarmMessage , "EnhancedAlarmMessage"}, - {0x015e, NULL , "CallCountReqMessage"}, - {0x015f, handle_CallCountRespMessage , "CallCountRespMessage"}, - {0x0160, handle_RecordingStatusMessage , "RecordingStatusMessage"}, - {0x8000, handle_SPCPRegisterTokenReq , "SPCPRegisterTokenReq"}, - {0x8100, handle_SPCPRegisterTokenAck , "SPCPRegisterTokenAck"}, - {0x8101, handle_SPCPRegisterTokenReject , "SPCPRegisterTokenReject"}, +} skinny_opcode_map_t; + +/* Messages Handler Array */ +static const skinny_opcode_map_t skinny_opcode_map[] = { + {0x0000, NULL , SKINNY_MSGTYPE_REQUEST , "KeepAliveReqMessage"}, + {0x0001, handle_RegisterReqMessage , SKINNY_MSGTYPE_REQUEST , "RegisterReqMessage"}, + {0x0002, handle_IpPortMessage , SKINNY_MSGTYPE_EVENT , "IpPortMessage"}, + {0x0003, handle_KeypadButtonMessage , SKINNY_MSGTYPE_EVENT , "KeypadButtonMessage"}, + {0x0004, handle_EnblocCallMessage , SKINNY_MSGTYPE_EVENT , "EnblocCallMessage"}, + {0x0005, handle_StimulusMessage , SKINNY_MSGTYPE_EVENT , "StimulusMessage"}, + {0x0006, handle_OffHookMessage , SKINNY_MSGTYPE_EVENT , "OffHookMessage"}, + {0x0007, handle_OnHookMessage , SKINNY_MSGTYPE_EVENT , "OnHookMessage"}, + {0x0008, handle_HookFlashMessage , SKINNY_MSGTYPE_EVENT , "HookFlashMessage"}, + {0x0009, handle_ForwardStatReqMessage , SKINNY_MSGTYPE_REQUEST , "ForwardStatReqMessage"}, + {0x000a, handle_SpeedDialStatReqMessage , SKINNY_MSGTYPE_REQUEST , "SpeedDialStatReqMessage"}, + {0x000b, handle_LineStatReqMessage , SKINNY_MSGTYPE_REQUEST , "LineStatReqMessage"}, + {0x000c, NULL , SKINNY_MSGTYPE_REQUEST , "ConfigStatReqMessage"}, + {0x000d, NULL , SKINNY_MSGTYPE_REQUEST , "TimeDateReqMessage"}, + {0x000e, NULL , SKINNY_MSGTYPE_REQUEST , "ButtonTemplateReqMessage"}, + {0x000f, NULL , SKINNY_MSGTYPE_REQUEST , "VersionReqMessage"}, + {0x0010, handle_CapabilitiesResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesResMessage"}, + {0x0012, NULL , SKINNY_MSGTYPE_REQUEST , "ServerReqMessage"}, + {0x0020, handle_AlarmMessage , SKINNY_MSGTYPE_EVENT , "AlarmMessage"}, + {0x0021, handle_MulticastMediaReceptionAckMessage , SKINNY_MSGTYPE_RESPONSE , "MulticastMediaReceptionAckMessage"}, + {0x0022, handle_OpenReceiveChannelAckMessage , SKINNY_MSGTYPE_RESPONSE , "OpenReceiveChannelAckMessage"}, + {0x0023, handle_ConnectionStatisticsResMessage , SKINNY_MSGTYPE_RESPONSE , "ConnectionStatisticsResMessage"}, + {0x0024, handle_OffHookWithCgpnMessage , SKINNY_MSGTYPE_EVENT , "OffHookWithCgpnMessage"}, + {0x0025, NULL , SKINNY_MSGTYPE_REQUEST , "SoftKeySetReqMessage"}, + {0x0026, handle_SoftKeyEventMessage , SKINNY_MSGTYPE_EVENT , "SoftKeyEventMessage"}, + {0x0027, handle_UnregisterReqMessage , SKINNY_MSGTYPE_REQUEST , "UnregisterReqMessage"}, + {0x0028, NULL , SKINNY_MSGTYPE_REQUEST , "SoftKeyTemplateReqMessage"}, + {0x0029, handle_RegisterTokenReq , SKINNY_MSGTYPE_REQUEST , "RegisterTokenReq"}, + {0x002a, handle_MediaTransmissionFailureMessage , SKINNY_MSGTYPE_RESPONSE , "MediaTransmissionFailureMessage"}, + {0x002b, handle_HeadsetStatusMessage , SKINNY_MSGTYPE_EVENT , "HeadsetStatusMessage"}, + {0x002c, handle_MediaResourceNotificationMessage , SKINNY_MSGTYPE_EVENT , "MediaResourceNotificationMessage"}, + {0x002d, handle_RegisterAvailableLinesMessage , SKINNY_MSGTYPE_EVENT , "RegisterAvailableLinesMessage"}, + {0x002e, handle_DeviceToUserDataMessage , SKINNY_MSGTYPE_REQUEST , "DeviceToUserDataMessage"}, + {0x002f, handle_DeviceToUserDataResponseMessage , SKINNY_MSGTYPE_RESPONSE , "DeviceToUserDataResponseMessage"}, + {0x0030, handle_UpdateCapabilitiesMessage , SKINNY_MSGTYPE_EVENT , "UpdateCapabilitiesMessage"}, + {0x0031, handle_OpenMultiMediaReceiveChannelAckMessage , SKINNY_MSGTYPE_RESPONSE , "OpenMultiMediaReceiveChannelAckMessage"}, + {0x0032, handle_ClearConferenceMessage , SKINNY_MSGTYPE_EVENT , "ClearConferenceMessage"}, + {0x0033, handle_ServiceURLStatReqMessage , SKINNY_MSGTYPE_REQUEST , "ServiceURLStatReqMessage"}, + {0x0034, handle_FeatureStatReqMessage , SKINNY_MSGTYPE_REQUEST , "FeatureStatReqMessage"}, + {0x0035, handle_CreateConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "CreateConferenceResMessage"}, + {0x0036, handle_DeleteConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "DeleteConferenceResMessage"}, + {0x0037, handle_ModifyConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "ModifyConferenceResMessage"}, + {0x0038, handle_AddParticipantResMessage , SKINNY_MSGTYPE_RESPONSE , "AddParticipantResMessage"}, + {0x0039, handle_AuditConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "AuditConferenceResMessage"}, + {0x0040, handle_AuditParticipantResMessage , SKINNY_MSGTYPE_RESPONSE , "AuditParticipantResMessage"}, + {0x0041, handle_DeviceToUserDataMessageVersion1 , SKINNY_MSGTYPE_REQUEST , "DeviceToUserDataMessageVersion1"}, + {0x0042, handle_DeviceToUserDataResponseMessageVersion1 , SKINNY_MSGTYPE_RESPONSE , "DeviceToUserDataResponseMessageVersion1"}, + {0x0043, handle_CapabilitiesV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesV2ResMessage"}, + {0x0044, handle_CapabilitiesV3ResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesV3ResMessage"}, + {0x0045, handle_PortResMessage , SKINNY_MSGTYPE_RESPONSE , "PortResMessage"}, + {0x0046, handle_QoSResvNotifyMessage , SKINNY_MSGTYPE_EVENT , "QoSResvNotifyMessage"}, + {0x0047, handle_QoSErrorNotifyMessage , SKINNY_MSGTYPE_EVENT , "QoSErrorNotifyMessage"}, + {0x0048, handle_SubscriptionStatReqMessage , SKINNY_MSGTYPE_REQUEST , "SubscriptionStatReqMessage"}, + {0x0049, handle_MediaPathEventMessage , SKINNY_MSGTYPE_EVENT , "MediaPathEventMessage"}, + {0x004a, handle_MediaPathCapabilityMessage , SKINNY_MSGTYPE_EVENT , "MediaPathCapabilityMessage"}, + {0x004c, handle_MwiNotificationMessage , SKINNY_MSGTYPE_REQUEST , "MwiNotificationMessage"}, + {0x0081, handle_RegisterAckMessage , SKINNY_MSGTYPE_RESPONSE , "RegisterAckMessage"}, + {0x0082, handle_StartToneMessage , SKINNY_MSGTYPE_EVENT , "StartToneMessage"}, + {0x0083, handle_StopToneMessage , SKINNY_MSGTYPE_EVENT , "StopToneMessage"}, + {0x0085, handle_SetRingerMessage , SKINNY_MSGTYPE_EVENT , "SetRingerMessage"}, + {0x0086, handle_SetLampMessage , SKINNY_MSGTYPE_EVENT , "SetLampMessage"}, + {0x0088, handle_SetSpeakerModeMessage , SKINNY_MSGTYPE_EVENT , "SetSpeakerModeMessage"}, + {0x0089, handle_SetMicroModeMessage , SKINNY_MSGTYPE_EVENT , "SetMicroModeMessage"}, + {0x008a, handle_StartMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMediaTransmissionMessage"}, + {0x008b, handle_StopMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMediaTransmissionMessage"}, + {0x008f, handle_CallInfoMessage , SKINNY_MSGTYPE_EVENT , "CallInfoMessage"}, + {0x0090, handle_ForwardStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ForwardStatResMessage"}, + {0x0091, handle_SpeedDialStatResMessage , SKINNY_MSGTYPE_RESPONSE , "SpeedDialStatResMessage"}, + {0x0092, handle_LineStatResMessage , SKINNY_MSGTYPE_RESPONSE , "LineStatResMessage"}, + {0x0093, handle_ConfigStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ConfigStatResMessage"}, + {0x0094, handle_TimeDateResMessage , SKINNY_MSGTYPE_RESPONSE , "TimeDateResMessage"}, + {0x0095, handle_StartSessionTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StartSessionTransmissionMessage"}, + {0x0096, handle_StopSessionTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopSessionTransmissionMessage"}, + {0x0097, handle_ButtonTemplateResMessage , SKINNY_MSGTYPE_RESPONSE , "ButtonTemplateResMessage"}, + {0x0098, handle_VersionResMessage , SKINNY_MSGTYPE_RESPONSE , "VersionResMessage"}, + {0x0099, handle_DisplayTextMessage , SKINNY_MSGTYPE_EVENT , "DisplayTextMessage"}, + {0x009a, NULL , SKINNY_MSGTYPE_EVENT , "ClearDisplay"}, + {0x009b, NULL , SKINNY_MSGTYPE_EVENT , "CapabilitiesReq"}, + {0x009d, handle_RegisterRejectMessage , SKINNY_MSGTYPE_EVENT , "RegisterRejectMessage"}, + {0x009e, handle_ServerResMessage , SKINNY_MSGTYPE_RESPONSE , "ServerResMessage"}, + {0x009f, handle_Reset , SKINNY_MSGTYPE_EVENT , "Reset"}, + {0x0100, NULL , SKINNY_MSGTYPE_RESPONSE , "KeepAliveAckMessage"}, + {0x0101, handle_StartMulticastMediaReceptionMessage , SKINNY_MSGTYPE_REQUEST , "StartMulticastMediaReceptionMessage"}, + {0x0102, handle_StartMulticastMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMulticastMediaTransmissionMessage"}, + {0x0103, handle_StopMulticastMediaReceptionMessage , SKINNY_MSGTYPE_EVENT , "StopMulticastMediaReceptionMessage"}, + {0x0104, handle_StopMulticastMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMulticastMediaTransmissionMessage"}, + {0x0105, handle_OpenReceiveChannelMessage , SKINNY_MSGTYPE_REQUEST , "OpenReceiveChannelMessage"}, + {0x0106, handle_CloseReceiveChannelMessage , SKINNY_MSGTYPE_EVENT , "CloseReceiveChannelMessage"}, + {0x0107, handle_ConnectionStatisticsReqMessage , SKINNY_MSGTYPE_REQUEST , "ConnectionStatisticsReqMessage"}, + {0x0108, handle_SoftKeyTemplateResMessage , SKINNY_MSGTYPE_RESPONSE , "SoftKeyTemplateResMessage"}, + {0x0109, handle_SoftKeySetResMessage , SKINNY_MSGTYPE_RESPONSE , "SoftKeySetResMessage"}, + {0x0110, handle_SelectSoftKeysMessage , SKINNY_MSGTYPE_EVENT , "SelectSoftKeysMessage"}, + {0x0111, handle_CallStateMessage , SKINNY_MSGTYPE_EVENT , "CallStateMessage"}, + {0x0112, handle_DisplayPromptStatusMessage , SKINNY_MSGTYPE_EVENT , "DisplayPromptStatusMessage"}, + {0x0113, handle_ClearPromptStatusMessage , SKINNY_MSGTYPE_EVENT , "ClearPromptStatusMessage"}, + {0x0114, handle_DisplayNotifyMessage , SKINNY_MSGTYPE_EVENT , "DisplayNotifyMessage"}, + {0x0115, NULL , SKINNY_MSGTYPE_EVENT , "ClearNotifyMessage"}, + {0x0116, handle_ActivateCallPlaneMessage , SKINNY_MSGTYPE_EVENT , "ActivateCallPlaneMessage"}, + {0x0117, NULL , SKINNY_MSGTYPE_EVENT , "DeactivateCallPlaneMessage"}, + {0x0118, handle_UnregisterAckMessage , SKINNY_MSGTYPE_RESPONSE , "UnregisterAckMessage"}, + {0x0119, handle_BackSpaceResMessage , SKINNY_MSGTYPE_EVENT , "BackSpaceResMessage"}, + {0x011a, NULL , SKINNY_MSGTYPE_RESPONSE , "RegisterTokenAck"}, + {0x011b, handle_RegisterTokenReject , SKINNY_MSGTYPE_RESPONSE , "RegisterTokenReject"}, + {0x011c, handle_StartMediaFailureDetectionMessage , SKINNY_MSGTYPE_EVENT , "StartMediaFailureDetectionMessage"}, + {0x011d, handle_DialedNumberMessage , SKINNY_MSGTYPE_EVENT , "DialedNumberMessage"}, + {0x011e, handle_UserToDeviceDataMessage , SKINNY_MSGTYPE_EVENT , "UserToDeviceDataMessage"}, + {0x011f, handle_FeatureStatResMessage , SKINNY_MSGTYPE_RESPONSE , "FeatureStatResMessage"}, + {0x0120, handle_DisplayPriNotifyMessage , SKINNY_MSGTYPE_EVENT , "DisplayPriNotifyMessage"}, + {0x0121, handle_ClearPriNotifyMessage , SKINNY_MSGTYPE_EVENT , "ClearPriNotifyMessage"}, + {0x0122, handle_StartAnnouncementMessage , SKINNY_MSGTYPE_EVENT , "StartAnnouncementMessage"}, + {0x0123, handle_StopAnnouncementMessage , SKINNY_MSGTYPE_EVENT , "StopAnnouncementMessage"}, + {0x0124, handle_AnnouncementFinishMessage , SKINNY_MSGTYPE_EVENT , "AnnouncementFinishMessage"}, + {0x0127, handle_NotifyDtmfToneMessage , SKINNY_MSGTYPE_EVENT , "NotifyDtmfToneMessage"}, + {0x0128, handle_SendDtmfToneMessage , SKINNY_MSGTYPE_EVENT , "SendDtmfToneMessage"}, + {0x0129, handle_SubscribeDtmfPayloadReqMessage , SKINNY_MSGTYPE_REQUEST , "SubscribeDtmfPayloadReqMessage"}, + {0x012a, handle_SubscribeDtmfPayloadResMessage , SKINNY_MSGTYPE_RESPONSE , "SubscribeDtmfPayloadResMessage"}, + {0x012b, handle_SubscribeDtmfPayloadErrMessage , SKINNY_MSGTYPE_RESPONSE , "SubscribeDtmfPayloadErrMessage"}, + {0x012c, handle_UnSubscribeDtmfPayloadReqMessage , SKINNY_MSGTYPE_REQUEST , "UnSubscribeDtmfPayloadReqMessage"}, + {0x012d, handle_UnSubscribeDtmfPayloadResMessage , SKINNY_MSGTYPE_RESPONSE , "UnSubscribeDtmfPayloadResMessage"}, + {0x012e, handle_UnSubscribeDtmfPayloadErrMessage , SKINNY_MSGTYPE_RESPONSE , "UnSubscribeDtmfPayloadErrMessage"}, + {0x012f, handle_ServiceURLStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ServiceURLStatResMessage"}, + {0x0130, handle_CallSelectStatResMessage , SKINNY_MSGTYPE_EVENT , "CallSelectStatResMessage"}, + {0x0131, handle_OpenMultiMediaReceiveChannelMessage , SKINNY_MSGTYPE_REQUEST , "OpenMultiMediaReceiveChannelMessage"}, + {0x0132, handle_StartMultiMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMultiMediaTransmissionMessage"}, + {0x0133, handle_StopMultiMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMultiMediaTransmissionMessage"}, + {0x0134, handle_MiscellaneousCommandMessage , SKINNY_MSGTYPE_EVENT , "MiscellaneousCommandMessage"}, + {0x0135, handle_FlowControlCommandMessage , SKINNY_MSGTYPE_EVENT , "FlowControlCommandMessage"}, + {0x0136, handle_CloseMultiMediaReceiveChannelMessage , SKINNY_MSGTYPE_EVENT , "CloseMultiMediaReceiveChannelMessage"}, + {0x0137, handle_CreateConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "CreateConferenceReqMessage"}, + {0x0138, handle_DeleteConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "DeleteConferenceReqMessage"}, + {0x0139, handle_ModifyConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "ModifyConferenceReqMessage"}, + {0x013a, handle_AddParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "AddParticipantReqMessage"}, + {0x013b, handle_DropParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "DropParticipantReqMessage"}, + {0x013c, NULL , SKINNY_MSGTYPE_REQUEST , "AuditConferenceReqMessage"}, + {0x013d, handle_AuditParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "AuditParticipantReqMessage"}, + {0x013e, handle_ChangeParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "ChangeParticipantReqMessage"}, + {0x013f, handle_UserToDeviceDataMessageVersion1 , SKINNY_MSGTYPE_EVENT , "UserToDeviceDataMessageVersion1"}, + {0x0140, handle_VideoDisplayCommandMessage , SKINNY_MSGTYPE_EVENT , "VideoDisplayCommandMessage"}, + {0x0141, handle_FlowControlNotifyMessage , SKINNY_MSGTYPE_EVENT , "FlowControlNotifyMessage"}, + {0x0142, handle_ConfigStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "ConfigStatV2ResMessage"}, + {0x0143, handle_DisplayNotifyV2Message , SKINNY_MSGTYPE_EVENT , "DisplayNotifyV2Message"}, + {0x0144, handle_DisplayPriNotifyV2Message , SKINNY_MSGTYPE_EVENT , "DisplayPriNotifyV2Message"}, + {0x0145, handle_DisplayPromptStatusV2Message , SKINNY_MSGTYPE_EVENT , "DisplayPromptStatusV2Message"}, + {0x0146, handle_FeatureStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "FeatureStatV2ResMessage"}, + {0x0147, handle_LineStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "LineStatV2ResMessage"}, + {0x0148, handle_ServiceURLStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "ServiceURLStatV2ResMessage"}, + {0x0149, handle_SpeedDialStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "SpeedDialStatV2ResMessage"}, + {0x014a, handle_CallInfoV2Message , SKINNY_MSGTYPE_EVENT , "CallInfoV2Message"}, + {0x014b, handle_PortReqMessage , SKINNY_MSGTYPE_REQUEST , "PortReqMessage"}, + {0x014c, handle_PortCloseMessage , SKINNY_MSGTYPE_EVENT , "PortCloseMessage"}, + {0x014d, handle_QoSListenMessage , SKINNY_MSGTYPE_EVENT , "QoSListenMessage"}, + {0x014e, handle_QoSPathMessage , SKINNY_MSGTYPE_EVENT , "QoSPathMessage"}, + {0x014f, handle_QoSTeardownMessage , SKINNY_MSGTYPE_EVENT , "QoSTeardownMessage"}, + {0x0150, handle_UpdateDSCPMessage , SKINNY_MSGTYPE_EVENT , "UpdateDSCPMessage"}, + {0x0151, handle_QoSModifyMessage , SKINNY_MSGTYPE_EVENT , "QoSModifyMessage"}, + {0x0152, handle_SubscriptionStatResMessage , SKINNY_MSGTYPE_RESPONSE , "SubscriptionStatResMessage"}, + {0x0153, handle_NotificationMessage , SKINNY_MSGTYPE_EVENT , "NotificationMessage"}, + {0x0154, handle_StartMediaTransmissionAckMessage , SKINNY_MSGTYPE_RESPONSE , "StartMediaTransmissionAckMessage"}, + {0x0155, handle_StartMultiMediaTransmissionAckMessage , SKINNY_MSGTYPE_RESPONSE , "StartMultiMediaTransmissionAckMessage"}, + {0x0156, handle_CallHistoryInfoMessage , SKINNY_MSGTYPE_EVENT , "CallHistoryInfoMessage"}, + {0x0157, handle_LocationInfoMessage , SKINNY_MSGTYPE_EVENT , "LocationInfoMessage"}, + {0x0158, handle_MwiResMessage , SKINNY_MSGTYPE_RESPONSE , "MwiResMessage"}, + {0x0159, handle_AddOnDeviceCapabilitiesMessage , SKINNY_MSGTYPE_EVENT , "AddOnDeviceCapabilitiesMessage"}, + {0x015a, handle_EnhancedAlarmMessage , SKINNY_MSGTYPE_EVENT , "EnhancedAlarmMessage"}, + {0x015e, NULL , SKINNY_MSGTYPE_REQUEST , "CallCountReqMessage"}, + {0x015f, handle_CallCountRespMessage , SKINNY_MSGTYPE_RESPONSE , "CallCountRespMessage"}, + {0x0160, handle_RecordingStatusMessage , SKINNY_MSGTYPE_EVENT , "RecordingStatusMessage"}, + {0x8000, handle_SPCPRegisterTokenReq , SKINNY_MSGTYPE_REQUEST , "SPCPRegisterTokenReq"}, + {0x8100, handle_SPCPRegisterTokenAck , SKINNY_MSGTYPE_RESPONSE , "SPCPRegisterTokenAck"}, + {0x8101, handle_SPCPRegisterTokenReject , SKINNY_MSGTYPE_RESPONSE , "SPCPRegisterTokenReject"}, }; /* Dissect a single SKINNY PDU */ @@ -7593,11 +8017,14 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre guint offset = 0; /*gboolean is_video = FALSE;*/ /* FIX ME: need to indicate video or not */ ptvcursor_t* cursor; + conversation_t *conversation; + skinny_conv_info_t *skinny_conv; + const skinny_opcode_map_t *opcode_entry = NULL; /* Header fields */ guint32 hdr_data_length; guint32 hdr_version; - guint32 data_messageid; + guint32 hdr_opcode; guint16 i; /* Set up structures we will need to add the protocol subtree and manage it */ @@ -7607,9 +8034,29 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre /* Initialization */ hdr_data_length = tvb_get_letohl(tvb, 0); hdr_version = tvb_get_letohl(tvb, 4); - data_messageid = tvb_get_letohl(tvb, 8); + hdr_opcode = tvb_get_letohl(tvb, 8); + + for (i = 0; i < sizeof(skinny_opcode_map)/sizeof(skinny_opcode_map_t) ; i++) { + if (skinny_opcode_map[i].opcode == hdr_opcode) { + opcode_entry = &skinny_opcode_map[i]; + } + } + + conversation = find_or_create_conversation(pinfo); + skinny_conv = (skinny_conv_info_t *)conversation_get_proto_data(conversation, proto_skinny); + if (!skinny_conv) { + skinny_conv = wmem_new0(wmem_file_scope(), skinny_conv_info_t); + //skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), wmem_str_hash, g_str_equal); + skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->requests = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->responses = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->lineId = -1; + skinny_conv->mtype = SKINNY_MSGTYPE_EVENT; + conversation_add_proto_data(conversation, proto_skinny, skinny_conv); + } /* Initialise stat info for passing to tap */ + /* WIP: will be (partially) replaced in favor of conversionation, dependents: ui/voip_calls.c */ pi_current++; if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET) { @@ -7617,13 +8064,12 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre pi_current = 0; } si = &pi_arr[pi_current]; - si->messId = data_messageid; - si->messageName = val_to_str_ext(data_messageid, &message_id_ext, "0x%08X (Unknown)"); + si->messId = hdr_opcode; + si->messageName = val_to_str_ext(hdr_opcode, &message_id_ext, "0x%08X (Unknown)"); si->callId = 0; - si->lineId = -1; + si->lineId = 0; si->passThruId = 0; si->callState = 0; - si->hasCallInfo = FALSE; g_free(si->callingParty); si->callingParty = NULL; g_free(si->calledParty); @@ -7634,27 +8080,33 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre si->multimediaTransmissionStatus = -1; si->multicastReceptionStatus = -1; - /* In the interest of speed, if "tree" is NULL, don't do any work not - * necessary to generate protocol tree items. - */ + col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName); + col_set_fence(pinfo->cinfo, COL_INFO); + if (tree) { ti = proto_tree_add_item(tree, proto_skinny, tvb, offset, hdr_data_length+8, ENC_NA); skinny_tree = proto_item_add_subtree(ti, ett_skinny); - proto_tree_add_uint(skinny_tree, hf_skinny_data_length, tvb, offset, 4, hdr_data_length); - proto_tree_add_uint(skinny_tree, hf_skinny_hdr_version, tvb, offset+4, 4, hdr_version); } - col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName); - col_set_fence(pinfo->cinfo, COL_INFO); + if (opcode_entry && opcode_entry->type != SKINNY_MSGTYPE_EVENT) { + skinny_conv->mtype = opcode_entry->type; + if (opcode_entry->type == SKINNY_MSGTYPE_REQUEST) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/REQ"); + } else { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/RESP"); + } + } - proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb,offset+8, 4, data_messageid ); + if (skinny_tree) { + proto_tree_add_uint(skinny_tree, hf_skinny_data_length, tvb, offset , 4, hdr_data_length); + proto_tree_add_uint(skinny_tree, hf_skinny_hdr_version, tvb, offset+4, 4, hdr_version); + proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb, offset+8, 4, hdr_opcode ); + } offset += 12; cursor = ptvcursor_new(skinny_tree, tvb, offset); - for (i = 0; i < sizeof(skinny_opcode2handler)/sizeof(struct opcode2handler) ; i++) { - if (skinny_opcode2handler[i].opcode == data_messageid && skinny_opcode2handler[i].handler) { - skinny_opcode2handler[i].handler(cursor, pinfo); - } + if (opcode_entry && opcode_entry->handler) { + opcode_entry->handler(cursor, pinfo, skinny_conv); } ptvcursor_free(cursor); @@ -7741,6 +8193,18 @@ proto_register_skinny(void) { "IPv4or6", "skinny.ipv4or6", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &IpAddrType_ext, 0x0, NULL, HFILL }}, + { &hf_skinny_response_in, + { + "Response In", "skinny.response_in", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0, + "The response to this SKINNY request is in this frame", HFILL }}, + { &hf_skinny_response_to, + { + "Request In", "skinny.response_to", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST), 0x0, + "This is a response to the SKINNY request in this frame", HFILL }}, + { &hf_skinny_response_time, + { + "Response Time", "skinny.response_time", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "The time between the Call and the Reply", HFILL }}, { &hf_skinny_CallingPartyName, { "CallingName", "skinny.CallingPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0008, @@ -8557,6 +9021,10 @@ proto_register_skinny(void) { "none", "skinny.none", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_skinny_notificationStatus, + { + "notificationStatus", "skinny.notificationStatus", FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, { &hf_skinny_nse, { "nse", "skinny.nse", FT_UINT8, BASE_DEC, NULL, 0x0, @@ -8649,9 +9117,9 @@ proto_register_skinny(void) { "partyDirection", "skinny.partyDirection", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_skinny_passThruPartyID, + { &hf_skinny_passThruPartyId, { - "passThruPartyID", "skinny.passThruPartyID", FT_UINT32, BASE_DEC, NULL, 0x0, + "passThruPartyId", "skinny.passThruPartyId", FT_UINT32, BASE_DEC, NULL, 0x0, "PassThrough PartyId", HFILL }}, { &hf_skinny_passthruPartyID, { @@ -9489,10 +9957,6 @@ proto_register_skinny(void) { "subscriptionID", "skinny.subscriptionID", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - {&hf_skinny_subscriptionoFeatureID, - { - "subscriptionoFeatureID", "skinny.subscriptionoFeatureID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SubscriptionFeatureID_ext, 0x0, - NULL, HFILL }}, {&hf_skinny_text, { "text", "skinny.text", FT_STRING, BASE_NONE, NULL, 0x0, diff --git a/epan/dissectors/packet-skinny.c.in b/epan/dissectors/packet-skinny.c.in index 961c1b717c..865a27d3ab 100644 --- a/epan/dissectors/packet-skinny.c.in +++ b/epan/dissectors/packet-skinny.c.in @@ -59,6 +59,9 @@ cog.out(' */\n') #include <epan/packet.h> #include <epan/prefs.h> +#include <epan/conversation.h> +#include <epan/wmem/wmem.h> +#include <epan/to_str.h> #include <epan/reassemble.h> #include <epan/tap.h> #include <epan/ptvcursor.h> @@ -68,6 +71,10 @@ cog.out(' */\n') #include "packet-ssl.h" #include "packet-skinny.h" +/* un-comment the following as well as this line in conversation.c, to enable debug printing */ +/* #define DEBUG_CONVERSATION */ +#include "conversation_debug.h" + void proto_register_skinny(void); void proto_reg_handoff_skinny(void); @@ -113,7 +120,7 @@ global message_dissector_functions message_dissector_functions = '' skinny = xml2skinny.xml2obj(xmlfile) -cog.out('static const value_string message_id[] = {\n') +cog.out('static const value_string message_id[] = {\n') for message in skinny.message: message_dissector_functions += '%s' %message.dissect() cog.out(' { %s, "%s" },\n' %(message.opcode, message.name.replace('Message',''))) @@ -123,7 +130,6 @@ cog.out('static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_ ]]]*/ /*[[[end]]]*/ - /* Declare Enums and Defines */ /* [[[cog for enum in skinny.enum: @@ -156,6 +162,9 @@ static int hf_skinny_data_length = -1; static int hf_skinny_hdr_version = -1; static int hf_skinny_xmlData = -1; static int hf_skinny_ipv4or6 = -1; +static int hf_skinny_response_in = -1; +static int hf_skinny_response_to = -1; +static int hf_skinny_response_time = -1; /* [[[cog for key in sorted(xml2skinny.fieldsArray.keys()): @@ -305,23 +314,93 @@ dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, gint length) ptvcursor_advance(cursor, length); } -/*** Messages Handlers ***/ +/*** Request / Response helper functions */ +static void skinny_reqrep_add_request(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key) +{ + proto_tree *tree = ptvcursor_tree(cursor); + tvbuff_t *tvb = ptvcursor_tvbuff(cursor); + skinny_req_resp_t *req_resp = NULL; + + if (!PINFO_FD_VISITED(pinfo)) { + req_resp = wmem_new0(wmem_file_scope(), skinny_req_resp_t); + req_resp->request_frame = pinfo->num; + req_resp->response_frame = 0; + req_resp->request_time = pinfo->fd->abs_ts; + wmem_map_insert(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key), (void *)req_resp); + DPRINT(("SKINNY: setup_request: frame=%d add key=%d to map\n", pinfo->num, request_key)); + } + + req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->requests, GUINT_TO_POINTER(pinfo->num)); + if (req_resp && req_resp->response_frame) { + DPRINT(("SKINNY: show request in tree: frame/key=%d\n", pinfo->num)); + proto_item *it; + it = proto_tree_add_uint(tree, hf_skinny_response_in, tvb, 0, 0, req_resp->response_frame); + PROTO_ITEM_SET_GENERATED(it); + } else { + DPRINT(("SKINNY: no request found for frame/key=%d\n", pinfo->num)); + } +} + + +static void skinny_reqrep_add_response(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key) +{ + proto_tree *tree = ptvcursor_tree(cursor); + tvbuff_t *tvb = ptvcursor_tvbuff(cursor); + skinny_req_resp_t *req_resp = NULL; + + if (!PINFO_FD_VISITED(pinfo)) { + req_resp = (skinny_req_resp_t *) wmem_map_remove(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key)); + if (req_resp) { + DPRINT(("SKINNY: match request:%d with response:%d for key=%d\n", req_resp->request_frame, pinfo->num, request_key)); + req_resp->response_frame = pinfo->num; + wmem_map_insert(skinny_conv->requests, GUINT_TO_POINTER(req_resp->request_frame), (void *)req_resp); + wmem_map_insert(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num), (void *)req_resp); + } else { + DPRINT(("SKINNY: no match found for reponse frame=%d and key=%d\n", pinfo->num, request_key)); + } + } + req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num)); + if (req_resp && req_resp->request_frame) { + DPRINT(("SKINNY: show response in tree: frame/key=%d\n", pinfo->num)); + proto_item *it; + nstime_t ns; + it = proto_tree_add_uint(tree, hf_skinny_response_to, tvb, 0, 0, req_resp->request_frame); + PROTO_ITEM_SET_GENERATED(it); + + nstime_delta(&ns, &pinfo->fd->abs_ts, &req_resp->request_time); + it = proto_tree_add_time(tree, hf_skinny_response_time, tvb, 0, 0, &ns); + PROTO_ITEM_SET_GENERATED(it); + } else { + DPRINT(("SKINNY: no response found for frame/key=%d\n", pinfo->num)); + } +} + +/*** Messages Handlers ***/ /* [[[cog cog.out(message_dissector_functions) ]]]*/ /*[[[end]]]*/ +typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo, skinny_conv_info_t * skinny_conv); + +typedef struct _skinny_opcode_map_t { + guint32 opcode; + message_handler handler; + skinny_message_type_t type; + const char *name; +} skinny_opcode_map_t; + /* Messages Handler Array */ /* [[[cog -cog.out('typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo);\n') -cog.out('static const struct opcode2handler {\n') -cog.out(' guint16 opcode;\n'); -cog.out(' message_handler handler;\n'); -cog.out(' const char *name;\n'); -cog.out('} skinny_opcode2handler[] = {\n') +cog.out('static const skinny_opcode_map_t skinny_opcode_map[] = {\n') for message in skinny.message: - cog.out(' {%-6s, %-47s, "%s"},\n' %(message.opcode, message.gen_handler(), message.name)) + msg_type = "SKINNY_MSGTYPE_EVENT" + if message.msgtype == "request": + msg_type = "SKINNY_MSGTYPE_REQUEST" + if message.msgtype == "response" and message.request is not None: + msg_type = "SKINNY_MSGTYPE_RESPONSE" + cog.out(' {%-6s, %-47s, %-24s, "%s"},\n' %(message.opcode, message.gen_handler(), msg_type, message.name)) cog.out('};\n') ]]]*/ /*[[[end]]]*/ @@ -332,11 +411,14 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre guint offset = 0; /*gboolean is_video = FALSE;*/ /* FIX ME: need to indicate video or not */ ptvcursor_t* cursor; + conversation_t *conversation; + skinny_conv_info_t *skinny_conv; + const skinny_opcode_map_t *opcode_entry = NULL; /* Header fields */ guint32 hdr_data_length; guint32 hdr_version; - guint32 data_messageid; + guint32 hdr_opcode; guint16 i; /* Set up structures we will need to add the protocol subtree and manage it */ @@ -346,9 +428,29 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre /* Initialization */ hdr_data_length = tvb_get_letohl(tvb, 0); hdr_version = tvb_get_letohl(tvb, 4); - data_messageid = tvb_get_letohl(tvb, 8); + hdr_opcode = tvb_get_letohl(tvb, 8); + + for (i = 0; i < sizeof(skinny_opcode_map)/sizeof(skinny_opcode_map_t) ; i++) { + if (skinny_opcode_map[i].opcode == hdr_opcode) { + opcode_entry = &skinny_opcode_map[i]; + } + } + + conversation = find_or_create_conversation(pinfo); + skinny_conv = (skinny_conv_info_t *)conversation_get_proto_data(conversation, proto_skinny); + if (!skinny_conv) { + skinny_conv = wmem_new0(wmem_file_scope(), skinny_conv_info_t); + //skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), wmem_str_hash, g_str_equal); + skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->requests = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->responses = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); + skinny_conv->lineId = -1; + skinny_conv->mtype = SKINNY_MSGTYPE_EVENT; + conversation_add_proto_data(conversation, proto_skinny, skinny_conv); + } /* Initialise stat info for passing to tap */ + /* WIP: will be (partially) replaced in favor of conversionation, dependents: ui/voip_calls.c */ pi_current++; if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET) { @@ -356,13 +458,12 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre pi_current = 0; } si = &pi_arr[pi_current]; - si->messId = data_messageid; - si->messageName = val_to_str_ext(data_messageid, &message_id_ext, "0x%08X (Unknown)"); + si->messId = hdr_opcode; + si->messageName = val_to_str_ext(hdr_opcode, &message_id_ext, "0x%08X (Unknown)"); si->callId = 0; - si->lineId = -1; + si->lineId = 0; si->passThruId = 0; si->callState = 0; - si->hasCallInfo = FALSE; g_free(si->callingParty); si->callingParty = NULL; g_free(si->calledParty); @@ -373,27 +474,33 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre si->multimediaTransmissionStatus = -1; si->multicastReceptionStatus = -1; - /* In the interest of speed, if "tree" is NULL, don't do any work not - * necessary to generate protocol tree items. - */ + col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName); + col_set_fence(pinfo->cinfo, COL_INFO); + if (tree) { ti = proto_tree_add_item(tree, proto_skinny, tvb, offset, hdr_data_length+8, ENC_NA); skinny_tree = proto_item_add_subtree(ti, ett_skinny); - proto_tree_add_uint(skinny_tree, hf_skinny_data_length, tvb, offset, 4, hdr_data_length); - proto_tree_add_uint(skinny_tree, hf_skinny_hdr_version, tvb, offset+4, 4, hdr_version); } - col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName); - col_set_fence(pinfo->cinfo, COL_INFO); + if (opcode_entry && opcode_entry->type != SKINNY_MSGTYPE_EVENT) { + skinny_conv->mtype = opcode_entry->type; + if (opcode_entry->type == SKINNY_MSGTYPE_REQUEST) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/REQ"); + } else { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/RESP"); + } + } - proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb,offset+8, 4, data_messageid ); + if (skinny_tree) { + proto_tree_add_uint(skinny_tree, hf_skinny_data_length, tvb, offset , 4, hdr_data_length); + proto_tree_add_uint(skinny_tree, hf_skinny_hdr_version, tvb, offset+4, 4, hdr_version); + proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb, offset+8, 4, hdr_opcode ); + } offset += 12; cursor = ptvcursor_new(skinny_tree, tvb, offset); - for (i = 0; i < sizeof(skinny_opcode2handler)/sizeof(struct opcode2handler) ; i++) { - if (skinny_opcode2handler[i].opcode == data_messageid && skinny_opcode2handler[i].handler) { - skinny_opcode2handler[i].handler(cursor, pinfo); - } + if (opcode_entry && opcode_entry->handler) { + opcode_entry->handler(cursor, pinfo, skinny_conv); } ptvcursor_free(cursor); @@ -480,6 +587,18 @@ proto_register_skinny(void) { "IPv4or6", "skinny.ipv4or6", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &IpAddrType_ext, 0x0, NULL, HFILL }}, + { &hf_skinny_response_in, + { + "Response In", "skinny.response_in", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0, + "The response to this SKINNY request is in this frame", HFILL }}, + { &hf_skinny_response_to, + { + "Request In", "skinny.response_to", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST), 0x0, + "This is a response to the SKINNY request in this frame", HFILL }}, + { &hf_skinny_response_time, + { + "Response Time", "skinny.response_time", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "The time between the Call and the Reply", HFILL }}, /* [[[cog for valuestr in sorted(xml2skinny.fieldsArray.values()): cog.out('%s' %valuestr) diff --git a/epan/dissectors/packet-skinny.h b/epan/dissectors/packet-skinny.h index 2348e2e0f6..6e71e04acf 100644 --- a/epan/dissectors/packet-skinny.h +++ b/epan/dissectors/packet-skinny.h @@ -37,24 +37,55 @@ * cog.py -D xmlfile=tools/SkinnyProtocolOptimized.xml -d -c -o epan/dissectors/packet-skinny.c epan/dissectors/packet-skinny.c.in */ -/* Container for tapping relevant data */ +#include <epan/wmem/wmem.h> + +/* request response tracking */ +typedef struct _skinny_req_resp_t { + guint32 request_frame; + guint32 response_frame; + nstime_t request_time; +} skinny_req_resp_t; + +/* begin conversaton info*/ +typedef enum _skinny_message_type_t { + SKINNY_MSGTYPE_EVENT = 0, + SKINNY_MSGTYPE_REQUEST = 1, + SKINNY_MSGTYPE_RESPONSE = 2, +} skinny_message_type_t; + +typedef struct _skinny_conv_info_t { + skinny_message_type_t mtype; + wmem_map_t * pending_req_resp; + wmem_map_t * requests; + wmem_map_t * responses; + gint32 lineId; + //guint32 callId; + //guint32 passThruId; + //guint32 transactionId; + //guint32 callState; +} skinny_conv_info_t; +/* end conversation info */ + +/* Containers for tapping relevant data */ +/* WIP: will be (partially) replaced in favor of conversionation, dependents: ui/voip_calls.c */ typedef struct _skinny_info_t { - guint32 messId; - guint32 maxProtocolVersion; - gint32 lineId; - guint32 callId; - guint32 passThruId; - const gchar * messageName; - guint32 callState; - gboolean hasCallInfo; - gchar * callingParty; - gchar * calledParty; - gint32 mediaReceptionStatus; - gint32 mediaTransmissionStatus; - gint32 multimediaReceptionStatus; - gint32 multimediaTransmissionStatus; - gint32 multicastReceptionStatus; + guint32 messId; + guint32 maxProtocolVersion; + gint32 lineId; + guint32 callId; + guint32 passThruId; + const gchar * messageName; + guint32 callState; + gboolean hasCallInfo; + gchar * callingParty; + gchar * calledParty; + gint32 mediaReceptionStatus; + gint32 mediaTransmissionStatus; + gint32 multimediaReceptionStatus; + gint32 multimediaTransmissionStatus; + gint32 multicastReceptionStatus; + //skinny_conv_info_t * skinny_conv; } skinny_info_t; /* diff --git a/epan/dissectors/packet-skinny.h.in b/epan/dissectors/packet-skinny.h.in index 0ef076ab05..368c2e5c96 100644 --- a/epan/dissectors/packet-skinny.h.in +++ b/epan/dissectors/packet-skinny.h.in @@ -49,24 +49,55 @@ cog.out(' */\n') /*]]]*/ /*[[[end]]]*/ -/* Container for tapping relevant data */ +#include <epan/wmem/wmem.h> + +/* request response tracking */ +typedef struct _skinny_req_resp_t { + guint32 request_frame; + guint32 response_frame; + nstime_t request_time; +} skinny_req_resp_t; + +/* begin conversaton info*/ +typedef enum _skinny_message_type_t { + SKINNY_MSGTYPE_EVENT = 0, + SKINNY_MSGTYPE_REQUEST = 1, + SKINNY_MSGTYPE_RESPONSE = 2, +} skinny_message_type_t; + +typedef struct _skinny_conv_info_t { + skinny_message_type_t mtype; + wmem_map_t * pending_req_resp; + wmem_map_t * requests; + wmem_map_t * responses; + gint32 lineId; + //guint32 callId; + //guint32 passThruId; + //guint32 transactionId; + //guint32 callState; +} skinny_conv_info_t; +/* end conversation info */ + +/* Containers for tapping relevant data */ +/* WIP: will be (partially) replaced in favor of conversionation, dependents: ui/voip_calls.c */ typedef struct _skinny_info_t { - guint32 messId; - guint32 maxProtocolVersion; - gint32 lineId; - guint32 callId; - guint32 passThruId; - const gchar * messageName; - guint32 callState; - gboolean hasCallInfo; - gchar * callingParty; - gchar * calledParty; - gint32 mediaReceptionStatus; - gint32 mediaTransmissionStatus; - gint32 multimediaReceptionStatus; - gint32 multimediaTransmissionStatus; - gint32 multicastReceptionStatus; + guint32 messId; + guint32 maxProtocolVersion; + gint32 lineId; + guint32 callId; + guint32 passThruId; + const gchar * messageName; + guint32 callState; + gboolean hasCallInfo; + gchar * callingParty; + gchar * calledParty; + gint32 mediaReceptionStatus; + gint32 mediaTransmissionStatus; + gint32 multimediaReceptionStatus; + gint32 multimediaTransmissionStatus; + gint32 multicastReceptionStatus; + //skinny_conv_info_t * skinny_conv; } skinny_info_t; /* diff --git a/tools/SkinnyProtocolOptimized.xml b/tools/SkinnyProtocolOptimized.xml index e4d57a7808..1b3cf6da8e 100644 --- a/tools/SkinnyProtocolOptimized.xml +++ b/tools/SkinnyProtocolOptimized.xml @@ -274,7 +274,7 @@ <entry name="DisplayLabel_Services_Url" text="Services Url" value="0o0177"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="KeepAliveMessage" opcode="0x0000" status="no" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="KeepAliveReqMessage" opcode="0x0000" type="RegistrationAndManagement"/> <enum name="DeviceType"> <entries> <entry comment="" name="DeviceType_Station30SPplus" text="Station30SPplus" value="0x00001"/> @@ -429,7 +429,7 @@ <entry comment="Abbreviated Dial" name="PhoneFeatures_Abbreviated_Dial" text="AbbrevDial" value="0x8000"/> </entries> </bitfield> - <message comment="" direction="dev2pbx" dynamic="no" name="RegisterMessage" opcode="0x0001" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="RegisterReqMessage" opcode="0x0001" type="RegistrationAndManagement"> <fields> <struct comment="Station Identifier" longcomment="Device Name of this phone / appliance" name="sid" type="struct"> <fields> @@ -502,12 +502,12 @@ <entry comment="" name="KeyPadButton_Plus" text="Plus" value="0x0010"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="IpPortMessage" opcode="0x0002" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="IpPortMessage" opcode="0x0002" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="RTP Media Port" name="rtpMediaPort" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="KeypadButtonMessage" opcode="0x0003" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="KeypadButtonMessage" opcode="0x0003" type="CallControl"> <fields> <enum comment="KeyPad Button which was Pressed" name="kpButton" subtype="KeyPadButton" type="uint32"/> </fields> @@ -516,7 +516,7 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="EnblocCallMessage" opcode="0x0004" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="EnblocCallMessage" opcode="0x0004" type="CallControl"> <fields> <string comment="CalledPartyNumber" declare="yes" name="calledParty" size="VariableDirnumSize" type="char"/> </fields> @@ -575,7 +575,7 @@ <entry boundscheck="max" comment="" name="DeviceStimulus_MaxStimulusValue" text="MaxStimulusValue" value="0x00ff"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="StimulusMessage" opcode="0x0005" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="StimulusMessage" opcode="0x0005" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="Device Stimulus" name="stimulus" subtype="DeviceStimulus" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> @@ -583,43 +583,43 @@ <integer comment="Stimulus Status" name="stimulusStatus" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="OffHookMessage" opcode="0x0006" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="OffHookMessage" opcode="0x0006" type="CallControl"> <fields beginversion="0" endversion="22" size_gt="4"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="OnHookMessage" opcode="0x0007" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="OnHookMessage" opcode="0x0007" type="CallControl"> <fields beginversion="0" endversion="22" size_gt="4"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="HookFlashMessage" opcode="0x0008" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="HookFlashMessage" opcode="0x0008" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="ForwardStatReqMessage" opcode="0x0009" status="request" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="ForwardStatReqMessage" opcode="0x0009" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="lineNumber" type="uint32"/> + <integer comment="" declare="yes" name="lineNumber" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="SpeedDialStatReqMessage" opcode="0x000a" status="request" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="SpeedDialStatReqMessage" opcode="0x000a" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="speedDialNumber" type="uint32"/> + <integer comment="" declare="yes" name="speedDialNumber" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="LineStatReqMessage" opcode="0x000b" status="request" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="LineStatReqMessage" opcode="0x000b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="lineNumber" type="uint32"/> + <integer comment="" declare="yes" name="lineNumber" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="ConfigStatReqMessage" opcode="0x000c" status="request" type="RegistrationAndManagement"/> - <message comment="" direction="dev2pbx" dynamic="no" name="TimeDateReqMessage" opcode="0x000d" status="no" type="RegistrationAndManagement"/> - <message comment="" direction="dev2pbx" dynamic="no" name="ButtonTemplateReqMessage" opcode="0x000e" status="no" type="RegistrationAndManagement"/> - <message comment="" direction="dev2pbx" dynamic="no" name="VersionReqMessage" opcode="0x000f" status="no" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="ConfigStatReqMessage" opcode="0x000c" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="TimeDateReqMessage" opcode="0x000d" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="ButtonTemplateReqMessage" opcode="0x000e" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="VersionReqMessage" opcode="0x000f" type="RegistrationAndManagement"/> <enum define="yes" name="Media_PayloadType"> <entries type="audio"> <entry comment="" name="Media_Payload_G711Alaw64k" text="Media_Payload_G711Alaw64k" value="0x0002"/> @@ -701,7 +701,7 @@ <entry comment="" name="Media_G723BRate_6_3" text="Media_G723BRate_6_3" value="0x0002"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="CapabilitiesRes" opcode="0x0010" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="CapabilitiesResMessage" opcode="0x0010" request="0x009b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" declare="yes" name="capCount" type="uint32"/> <struct comment="" maxsize="18" name="caps" size_fieldname="capCount" type="struct"> @@ -745,7 +745,7 @@ </struct> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="ServerReqMessage" opcode="0x0012" status="no" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="ServerReqMessage" opcode="0x0012" type="RegistrationAndManagement"/> <enum name="DeviceAlarmSeverity"> <entries> <entry comment="" name="DeviceAlarmSeverity_Critical" text="Critical" value="0x0000"/> @@ -758,7 +758,7 @@ <entry comment="" name="DeviceAlarmSeverity_TraceInfo" text="TraceInfo" value="0x0014"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="AlarmMessage" opcode="0x0020" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="AlarmMessage" opcode="0x0020" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <enum comment="" name="alarmSeverity" subtype="DeviceAlarmSeverity" type="uint32"/> <string comment="" name="text" size="80" type="char"/> @@ -772,10 +772,10 @@ <entry comment="" name="MulticastMediaReceptionStatus_Error" text="Error" value="0x0001"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="MulticastMediaReceptionAckMessage" opcode="0x0021" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="MulticastMediaReceptionAckMessage" opcode="0x0021" request="0x0101" type="MediaControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="multicastReceptionStatus" subtype="MulticastMediaReceptionStatus" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> @@ -804,12 +804,12 @@ <entry comment="" name="IpAddrType_Ip_Invalid" text="_Invalid" value="0x0003"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="OpenReceiveChannelAckMessage" opcode="0x0022" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="OpenReceiveChannelAckMessage" opcode="0x0022" request="0x0105" type="MediaControl"> <fields> <enum comment="" name="mediaReceptionStatus" subtype="MediaStatus" type="uint32"/> <ipv4or6 comment="" name="ipAddr" subtype="IPV4orV6Address" type="ipaddr"/> <integer comment="" declare="yes" name="portNumber" subtype="uint32" type="ipport" use_param="ipAddr"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> </fields> <fields beginversion="0" endversion="22" size_gt="20"> <integer comment="CallId" name="callReference" type="uint32"/> @@ -821,20 +821,20 @@ <entry comment="" name="StatsProcessingType_doNotClearStats" text="doNotClearStats" value="0x0001"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="ConnectionStatisticsResMessage" opcode="0x0023" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="ConnectionStatisticsResMessage" opcode="0x0023" request="0x0107" type="CallControl"> <fields endversion="16" fixed="yes"> <string comment="" name="directoryNum" size="24" type="char"/> - <integer comment="CallId" name="callReference" type="uint32"/> + <integer comment="CallId" declare="yes" name="callReference" req_resp_key="1" type="uint32"/> <enum comment="Stats Processing Mode" longcomment="What do do after you send the stats" name="statsProcessingMode" subtype="StatsProcessingType" type="uint32"/> </fields> <fields beginversion="17" endversion="20" fixed="yes"> <string comment="" name="directoryNum" size="28" type="char"/> - <integer comment="CallId" name="callReference" type="uint32"/> + <integer comment="CallId" declare="yes" name="callReference" req_resp_key="1" type="uint32"/> <enum comment="Stats Processing Mode" longcomment="What do do after you send the stats" name="statsProcessingMode" subtype="StatsProcessingType" type="uint32"/> </fields> <fields beginversion="21" endversion="22" fixed="yes"> <string comment="" name="directoryNum" size="28" type="char"/> - <integer comment="CallId" name="callReference" type="uint32"/> + <integer comment="CallId" declare="yes" name="callReference" req_resp_key="1" type="uint32"/> <integer comment="Stats Processing Mode" longcomment="What do do after you send the stats" name="statsProcessingMode" subtype="StatsProcessingType" type="uint8"/> </fields> <fields> @@ -851,14 +851,14 @@ <string comment="Statistics" longcomment="variable field size (max: 600]" maxsize="600" name="data" size_fieldname="dataSize" type="char"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="OffHookWithCgpnMessage" opcode="0x0024" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="OffHookWithCgpnMessage" opcode="0x0024" type="CallControl"> <fields> <string comment="Calling Party Number" declare="yes" name="callingPartyNumber" size="VariableDirnumSize" type="char"/> <string comment="Calling Party Voicemail Box Number" declare="yes" name="cgpnVoiceMailbox" size="VariableDirnumSize" type="char"/> <integer comment="LineId" name="lineInstance" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="SoftKeySetReqMessage" opcode="0x0025" status="no" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="SoftKeySetReqMessage" opcode="0x0025" type="RegistrationAndManagement"/> <enum name="SoftKeySet"> <entries> <entry name="SoftKeySet_OnHook" text="On Hook" value="0"/> @@ -969,7 +969,7 @@ <entry name="SoftKeyEvent_Dial" text="Dial" value="201"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="SoftKeyEventMessage" opcode="0x0026" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="SoftKeyEventMessage" opcode="0x0026" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <enum comment="SoftKey Event" name="softKeyEvent" subtype="SoftKeyEvent" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> @@ -982,13 +982,13 @@ <entry comment="" name="UnRegReasonCode_PowerSaveMode" text="PowerSaveMode" value="0x0001"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="UnregisterMessage" opcode="0x0027" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="UnregisterReqMessage" opcode="0x0027" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22" size_gt="12"> <enum comment="" name="unRegReasonCode" subtype="UnRegReasonCode" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="SoftKeyTemplateReqMessage" opcode="0x0028" status="no" type="RegistrationAndManagement"/> - <message comment="" direction="dev2pbx" dynamic="no" name="RegisterTokenReq" opcode="0x0029" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="SoftKeyTemplateReqMessage" opcode="0x0028" type="RegistrationAndManagement"/> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="RegisterTokenReq" opcode="0x0029" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="sid" type="struct"> <fields> @@ -1002,10 +1002,10 @@ <ipv4or6 comment="" endianness="big" name="stationIpV6Addr" size="16" subtype="uint8" type="ipaddr"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="MediaTransmissionFailureMessage" opcode="0x002a" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="MediaTransmissionFailureMessage" opcode="0x002a" request="0x008a" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="remoteIpAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <integer comment="CallId" name="callReference" type="uint32"/> @@ -1017,12 +1017,12 @@ <entry comment="" name="HeadsetMode_Off" text="Off" value="0x0002"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="HeadsetStatusMessage" opcode="0x002b" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="HeadsetStatusMessage" opcode="0x002b" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="headsetStatus" subtype="HeadsetMode" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="MediaResourceNotificationMessage" opcode="0x002c" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="MediaResourceNotificationMessage" opcode="0x002c" type="MediaControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="deviceType" subtype="DeviceType" type="uint32"/> <integer comment="" name="numberOfInServiceStreams" type="uint32"/> @@ -1030,7 +1030,7 @@ <integer comment="" name="numberOfOutOfServiceStreams" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="RegisterAvailableLinesMessage" opcode="0x002d" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="RegisterAvailableLinesMessage" opcode="0x002d" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="maxNumOfAvailLines" type="uint32"/> </fields> @@ -1042,7 +1042,7 @@ <entry comment="" name="Sequence_Last" text="Last" value="0x0002"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataMessage" opcode="0x002e" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="DeviceToUserDataMessage" opcode="0x002e" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="deviceToUserData" subtype="UserAndDeviceData" type="struct"> <fields> @@ -1056,7 +1056,7 @@ </struct> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataResponseMessage" opcode="0x002f" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="DeviceToUserDataResponseMessage" opcode="0x002f" request="0x002e" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="deviceToUserData" subtype="UserAndDeviceData" type="struct"> <fields> @@ -1093,7 +1093,7 @@ <entry comment="" name="TransmitOrReceive_Both" text="Both" value="0x0003"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="UpdateCapabilitiesMessage" opcode="0x0030" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="UpdateCapabilitiesMessage" opcode="0x0030" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" declare="yes" name="audioCapCount" type="uint32"/> <integer comment="" declare="yes" name="videoCapCount" type="uint32"/> @@ -1255,32 +1255,29 @@ <entry comment="" name="OpenReceiveChanStatus_Error" text="Error" value="0x0001"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="OpenMultiMediaReceiveChannelAckMessage" opcode="0x0031" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="OpenMultiMediaReceiveChannelAckMessage" opcode="0x0031" request="0x0131" type="MediaControl"> <fields> <enum comment="" name="multimediaReceptionStatus" subtype="OpenReceiveChanStatus" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="ipAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="" declare="yes" name="portNumber" subtype="uint32" type="ipport" use_param="ipAddr"/> - <integer comment="CallId" name="callReference" type="uint32"/> - </fields> - <fields beginversion="16" endversion="22"> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="ClearConferenceMessage" opcode="0x0032" status="no" type="Conference"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="ClearConferenceMessage" opcode="0x0032" type="Conference"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="serviceNum" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="ServiceURLStatReqMessage" opcode="0x0033" status="request" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="ServiceURLStatReqMessage" opcode="0x0033" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="serviceURLIndex" type="uint32"/> + <integer comment="" declare="yes" name="serviceURLIndex" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="FeatureStatReqMessage" opcode="0x0034" status="request" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="FeatureStatReqMessage" opcode="0x0034" type="RegistrationAndManagement"> <fields> - <integer comment="" name="featureIndex" type="uint32"/> + <integer comment="" declare="yes" name="featureIndex" req_resp_key="1" type="uint32"/> </fields> <fields beginversion="0" endversion="22" size_gt="16"> <integer comment="" name="featureCapabilities" type="uint32"/> @@ -1294,9 +1291,9 @@ <entry comment="" name="CreateConfResult_SystemErr" text="SystemErr" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="CreateConferenceResMessage" opcode="0x0035" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="CreateConferenceResMessage" opcode="0x0035" request="0x0137" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <enum comment="" name="result" subtype="CreateConfResult" type="uint32"/> <integer comment="" declare="yes" name="dataLength" type="uint32"/> <string comment="variable field size (max: 2000]" maxsize="2000" name="passThruData" size_fieldname="dataLength" type="char"/> @@ -1309,9 +1306,9 @@ <entry comment="" name="DeleteConfResult_SystemErr" text="SystemErr" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="DeleteConferenceResMessage" opcode="0x0036" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="DeleteConferenceResMessage" opcode="0x0036" request="0x0138" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <enum comment="" name="delete_conf_result" subtype="DeleteConfResult" type="uint32"/> </fields> </message> @@ -1326,9 +1323,9 @@ <entry comment="" name="ModifyConfResult_SystemErr" text="SystemErr" value="0x0006"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="ModifyConferenceResMessage" opcode="0x0037" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="ModifyConferenceResMessage" opcode="0x0037" request="0x0139" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <enum comment="" name="modify_conf_result" subtype="ModifyConfResult" type="uint32"/> <integer comment="" declare="yes" name="dataLength" type="uint32"/> <string comment="variable field size (max: 2000]" maxsize="2000" name="passThruData" size_fieldname="dataLength" type="char"/> @@ -1343,9 +1340,9 @@ <entry comment="" name="AddParticipantResult_SystemErr" text="SystemErr" value="0x0004"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="AddParticipantResMessage" opcode="0x0038" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="AddParticipantResMessage" opcode="0x0038" request="0x013a" type="IntraCCM"> <fields alignment="4" beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="add_participant_result" subtype="AddParticipantResult" type="uint32"/> <string comment="" name="bridgeParticipantId" size="257" type="char"/> @@ -1357,7 +1354,7 @@ <entry comment="" name="ResourceType_IVR" text="IVR" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="AuditConferenceResMessage" opcode="0x0039" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="AuditConferenceResMessage" opcode="0x0039" request="0x013c" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="" name="last" type="uint32"/> <integer comment="" declare="yes" name="numberOfEntries" type="uint32"/> @@ -1380,16 +1377,16 @@ <entry comment="" name="AuditParticipantResult_ConferenceNotExist" text="ConferenceNotExist" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="AuditParticipantResMessage" opcode="0x0040" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="AuditParticipantResMessage" opcode="0x0040" request="0x013d" type="IntraCCM"> <fields beginversion="0" endversion="22"> <enum comment="" name="audit_participant_result" subtype="AuditParticipantResult" type="uint32"/> <integer comment="" name="last" type="uint32"/> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="" declare="yes" name="numberOfEntries" type="uint32"/> <integer comment="" maxsize="256" name="participantEntry" size_fieldname="numberOfEntries" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataMessageVersion1" opcode="0x0041" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="DeviceToUserDataMessageVersion1" opcode="0x0041" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="deviceToUserDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct"> <fields> @@ -1408,7 +1405,7 @@ </struct> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataResponseMessageVersion1" opcode="0x0042" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="DeviceToUserDataResponseMessageVersion1" opcode="0x0042" request="0x0041" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="deviceToUserDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct"> <fields> @@ -1427,7 +1424,7 @@ </struct> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="UpdateCapabilitiesV2Message" opcode="0x0043" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="CapabilitiesV2ResMessage" opcode="0x0043" request="0x009b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" declare="yes" name="audioCapCount" type="uint32"/> <integer comment="" declare="yes" name="videoCapCount" type="uint32"/> @@ -1606,7 +1603,7 @@ <entry comment="" name="IpAddrMode_ModeIpv4AndIpv6" text="ModeIpv4AndIpv6" value="0x0002"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="yes" name="UpdateCapabilitiesV3Message" opcode="0x0044" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="yes" msgtype="response" name="CapabilitiesV3ResMessage" opcode="0x0044" request="0x009b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" declare="yes" name="audioCapCount" type="uint32"/> <integer comment="" declare="yes" name="videoCapCount" type="uint32"/> @@ -1791,11 +1788,11 @@ <entry comment="" name="MediaType_Max" text="MediaType_Max" value="0x0008"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="PortResMessage" opcode="0x0045" status="no" type="MediaControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="response" name="PortResMessage" opcode="0x0045" request="0x014b" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="CallId" declare="yes" name="callReference" req_resp_key="1" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="ipAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="" name="portNumber" subtype="uint32" type="ipport" use_param="ipAddr"/> <integer comment="" name="RTCPPortNumber" type="uint32"/> @@ -1811,11 +1808,11 @@ <entry comment="" name="RSVPDirection_SENDRECV" text="SENDRECV" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSResvNotifyMessage" opcode="0x0046" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSResvNotifyMessage" opcode="0x0046" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="direction" subtype="RSVPDirection" type="uint32"/> @@ -1859,11 +1856,11 @@ <entry comment="" name="RSVPErrorCode_ROUTING_PROBLEM" text="ROUTING_PROBLEM" value="0x0018"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSErrorNotifyMessage" opcode="0x0047" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSErrorNotifyMessage" opcode="0x0047" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="direction" subtype="RSVPDirection" type="uint32"/> @@ -1879,9 +1876,9 @@ <entry comment="" name="SubscriptionFeatureID_BLF" text="BLF" value="0x0001"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="SubscriptionStatReqMessage" opcode="0x0048" status="request" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="SubscriptionStatReqMessage" opcode="0x0048" type="CallControl"> <fields beginversion="0" endversion="22"> - <integer comment="" name="transactionID" type="uint32"/> + <integer comment="" declare="yes" name="transactionID" req_resp_key="1" type="uint32"/> <enum comment="" name="subcriptionFeatureID" subtype="SubscriptionFeatureID" type="uint32"/> <integer comment="" name="timer" type="uint32"/> <string comment="" name="subscriptionID" size="64" type="char"/> @@ -1900,7 +1897,7 @@ <entry comment="" name="MediaPathEvent_Off" text="Off" value="0x0002"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="MediaPathEventMessage" opcode="0x0049" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="MediaPathEventMessage" opcode="0x0049" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="mediaPathID" subtype="MediaPathID" type="uint32"/> <enum comment="" name="mediaPathEvent" subtype="MediaPathEvent" type="uint32"/> @@ -1913,13 +1910,13 @@ <entry comment="" name="MediaPathCapabilities_Monitor" text="Monitor" value="0x0003"/> </entries> </enum> - <message comment="" direction="dev2pbx" dynamic="no" name="MediaPathCapabilityMessage" opcode="0x004a" status="no" type="CallControl"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="MediaPathCapabilityMessage" opcode="0x004a" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="mediaPathID" subtype="MediaPathID" type="uint32"/> <enum comment="" name="mediaPathCapabilities" subtype="MediaPathCapabilities" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="MwiNotificationMessage" opcode="0x004c" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="MwiNotificationMessage" opcode="0x004c" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <string comment="" name="mwiTargetNumber" size="25" type="char"/> <string comment="" name="mwiControlNumber" size="25" type="char"/> @@ -1950,7 +1947,7 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="RegisterAckMessage" opcode="0x0081" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="RegisterAckMessage" opcode="0x0081" request="0x0001" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="keepAliveInterval" type="uint32"/> <string comment="" name="dateTemplate" size="6" type="char"/> @@ -2098,7 +2095,7 @@ <entry comment="" name="ToneOutputDirection_All" text="All" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="StartToneMessage" opcode="0x0082" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StartToneMessage" opcode="0x0082" type="MediaControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="tone" subtype="DeviceTone" type="uint32"/> <enum comment="" name="tone_output_direction" subtype="ToneOutputDirection" type="uint32"/> @@ -2106,7 +2103,7 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StopToneMessage" opcode="0x0083" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StopToneMessage" opcode="0x0083" type="MediaControl"> <fields> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> @@ -2131,7 +2128,7 @@ <entry comment="" name="RingDuration_SingleRing" text="SingleRing" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SetRingerMessage" opcode="0x0085" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SetRingerMessage" opcode="0x0085" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="ringMode" subtype="RingMode" type="uint32"/> <enum comment="" name="ringDuration" subtype="RingDuration" type="uint32"/> @@ -2148,7 +2145,7 @@ <entry comment="" name="LampMode_Blink" text="Blink" value="0x0005"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SetLampMessage" opcode="0x0086" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SetLampMessage" opcode="0x0086" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="stimulus" subtype="DeviceStimulus" type="uint32"/> <integer comment="" name="stimulusInstance" type="uint32"/> @@ -2161,7 +2158,7 @@ <entry comment="" name="SpeakerMode_Off" text="Off" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SetSpeakerModeMessage" opcode="0x0088" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SetSpeakerModeMessage" opcode="0x0088" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="speakerMode" subtype="SpeakerMode" type="uint32"/> </fields> @@ -2172,7 +2169,7 @@ <entry comment="" name="MicrophoneMode_Off" text="Off" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SetMicroModeMessage" opcode="0x0089" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SetMicroModeMessage" opcode="0x0089" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="micMode" subtype="MicrophoneMode" type="uint32"/> </fields> @@ -2194,10 +2191,10 @@ <entry comment="" name="MediaEncryptionAlgorithmType_CCM_AEAD_AES_256_GCM" text="CCM_AEAD_AES_256_GCM" value="0x0006"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMediaTransmissionMessage" opcode="0x008a" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="StartMediaTransmissionMessage" opcode="0x008a" priority="send_immediate" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <ipv4or6 comment="" name="remoteIpAddr" subtype="IPV4orV6Address" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <integer comment="" name="millisecondPacketSize" type="uint32"/> @@ -2295,10 +2292,10 @@ <entry comment="" name="PortHandling_KEEP_PORT" text="KEEP_PORT" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="StopMediaTransmissionMessage" opcode="0x008b" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StopMediaTransmissionMessage" opcode="0x008b" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="portHandlingFlag" subtype="PortHandling" type="uint32"/> </fields> @@ -2336,7 +2333,7 @@ <entry comment="" name="RestrictInformationType_BitsReserved" text="BitsReserved" value="0xffffff00"/> </entries> </bitfield> - <message comment="" direction="pbx2dev" dynamic="no" name="CallInfoMessage" opcode="0x008f" priority="send_immediate" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CallInfoMessage" opcode="0x008f" priority="send_immediate" type="CallControl"> <fields beginversion="0" endversion="22"> <string comment="Calling Party Name" name="callingPartyName" size="40" type="char"/> <string comment="Calling Party Number" name="callingParty" size="24" type="char"/> @@ -2376,10 +2373,10 @@ </bitfield> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ForwardStatMessage" opcode="0x0090" priority="send_immediate" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="ForwardStatResMessage" opcode="0x0090" priority="send_immediate" request="0x0009" type="RegistrationAndManagement"> <fields> <integer comment="" name="activeForward" type="uint32"/> - <integer comment="" name="lineNumber" type="uint32"/> + <integer comment="" declare="yes" name="lineNumber" req_resp_key="1" type="uint32"/> <integer comment="" name="forwardAllActive" type="uint32"/> <string comment="" declare="yes" name="forwardAllDirnum" size="VariableDirnumSize" type="char"/> <integer comment="" name="forwardBusyActive" type="uint32"/> @@ -2388,23 +2385,23 @@ <string comment="" declare="yes" name="forwardNoAnswerlDirnum" size="VariableDirnumSize" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SpeedDialStatMessage" opcode="0x0091" priority="send_immediate" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SpeedDialStatResMessage" opcode="0x0091" priority="send_immediate" request="0x000a" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="speedDialNumber" type="uint32"/> + <integer comment="" declare="yes" name="speedDialNumber" req_resp_key="1" type="uint32"/> <string comment="" name="speedDialDirNumber" size="24" type="char"/> <string comment="" name="speedDialDisplayName" size="40" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="LineStatMessage" opcode="0x0092" priority="send_immediate" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="LineStatResMessage" opcode="0x0092" priority="send_immediate" request="0x000b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="lineNumber" type="uint32"/> + <integer comment="" declare="yes" name="lineNumber" req_resp_key="1" type="uint32"/> <string comment="" name="lineDirNumber" size="24" type="char"/> <string comment="" name="lineFullyQualifiedDisplayName" size="40" type="char"/> <string comment="" name="lineTextLabel" size="40" type="char"/> <integer comment="" name="lineDisplayOptions" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ConfigStatMessage" opcode="0x0093" priority="send_immediate" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="ConfigStatResMessage" opcode="0x0093" priority="send_immediate" request="0x000c" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="sid" type="struct"> <fields> @@ -2419,7 +2416,7 @@ <integer comment="" name="numberOfSpeedDials" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DefineTimeDate" opcode="0x0094" priority="send_immediate" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="TimeDateResMessage" opcode="0x0094" priority="send_immediate" request="0x000d" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="timeDataInfo" subtype="Time" type="struct"> <fields> @@ -2445,13 +2442,13 @@ <entry comment="" name="SessionType_Video" text="Video" value="0x0010"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="StartSessionTransmissionMessage" opcode="0x0095" priority="send_immediate" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="StartSessionTransmissionMessage" opcode="0x0095" priority="send_immediate" type="IntraCCM"> <fields> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="remoteIpAddr" subtype="IpAddress" type="ipaddr"/> <enum comment="" name="sessionType" subtype="SessionType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="StopSessionTransmissionMessage" opcode="0x0096" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="StopSessionTransmissionMessage" opcode="0x0096" type="IntraCCM"> <fields> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="remoteIpAddr" subtype="IpAddress" type="ipaddr"/> <enum comment="" name="sessionType" subtype="SessionType" type="uint32"/> @@ -2517,7 +2514,7 @@ <entry comment="" name="ButtonType_Undefined" text="Undefined" value="0xFF"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="ButtonTemplateMessage" opcode="0x0097" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="ButtonTemplateResMessage" opcode="0x0097" request="0x000e" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="buttonTemplate" subtype="ButtonTemplate" type="struct"> <fields> @@ -2534,24 +2531,24 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="VersionMessage" opcode="0x0098" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="VersionResMessage" opcode="0x0098" request="0x000f" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <string comment="" name="version" size="16" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DisplayTextMessage" opcode="0x0099" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DisplayTextMessage" opcode="0x0099" type="CallControl"> <fields beginversion="0" endversion="22"> <string comment="" name="text" size="32" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ClearDisplay" opcode="0x009a" status="no" type="CallControl"/> - <message comment="" direction="pbx2dev" dynamic="no" name="CapabilitiesReq" opcode="0x009b" status="no" type="RegistrationAndManagement"/> - <message comment="" direction="pbx2dev" dynamic="no" name="RegisterRejectMessage" opcode="0x009d" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="ClearDisplay" opcode="0x009a" type="CallControl"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CapabilitiesReq" opcode="0x009b" type="RegistrationAndManagement"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="RegisterRejectMessage" opcode="0x009d" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <string comment="" name="text" size="32" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ServerResMessage" opcode="0x009e" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="ServerResMessage" opcode="0x009e" request="0x0012" type="RegistrationAndManagement"> <fields> <struct comment="" name="server" size="5" subtype="ServerIdentifier" type="struct"> <fields> @@ -2582,22 +2579,22 @@ <entry comment="" name="DeviceResetType_APPLY_CONFIG" text="APPLY_CONFIG" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="Reset" opcode="0x009f" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="Reset" opcode="0x009f" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <enum comment="" name="resetType" subtype="DeviceResetType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="KeepAliveAckMessage" opcode="0x0100" status="no" type="RegistrationAndManagement"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="KeepAliveAckMessage" opcode="0x0100" request="0x0000" type="RegistrationAndManagement"/> <enum name="Media_EchoCancellation"> <entries> <entry comment="" name="Media_EchoCancellation_Off" text="Media_EchoCancellation_Off" value="0x0000"/> <entry comment="" name="Media_EchoCancellation_On" text="Media_EchoCancellation_On" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMulticastMediaReceptionMessage" opcode="0x0101" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="StartMulticastMediaReceptionMessage" opcode="0x0101" priority="send_immediate" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="multicastIpAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="" name="multicastPortNumber" subtype="uint32" type="ipport" use_param="multicastIpAddr"/> <integer comment="" name="millisecondPacketSize" type="uint32"/> @@ -2628,10 +2625,10 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMulticastMediaTransmissionMessage" opcode="0x0102" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="StartMulticastMediaTransmissionMessage" opcode="0x0102" priority="send_immediate" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="multicastIpAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="" name="multicastPortNumber" subtype="uint32" type="ipport" use_param="multicastIpAddr"/> <integer comment="" name="millisecondPacketSize" type="uint32"/> @@ -2665,24 +2662,24 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StopMulticastMediaReceptionMessage" opcode="0x0103" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StopMulticastMediaReceptionMessage" opcode="0x0103" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StopMulticastMediaTransmissionMessage" opcode="0x0104" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StopMulticastMediaTransmissionMessage" opcode="0x0104" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="OpenReceiveChannelMessage" opcode="0x0105" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="OpenReceiveChannelMessage" opcode="0x0105" priority="send_immediate" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <integer comment="" name="millisecondPacketSize" type="uint32"/> <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/> <struct comment="" name="qualifierIn" subtype="Media_QualifierIncoming" type="struct"> @@ -2777,15 +2774,15 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="CloseReceiveChannelMessage" opcode="0x0106" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CloseReceiveChannelMessage" opcode="0x0106" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="portHandlingFlag" subtype="PortHandling" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ConnectionStatisticsReqMessage" opcode="0x0107" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="ConnectionStatisticsReqMessage" opcode="0x0107" type="CallControl"> <fields endversion="16" fixed="yes"> <string comment="" name="directoryNum" size="24" type="char"/> </fields> @@ -2793,11 +2790,11 @@ <string comment="" name="directoryNum" size="28" type="char"/> </fields> <fields> - <integer comment="CallId" name="callReference" type="uint32"/> + <integer comment="CallId" declare="yes" name="callReference" req_resp_key="1" type="uint32"/> <enum comment="" name="statsProcessingMode" subtype="StatsProcessingType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SoftKeyTemplateResMessage" opcode="0x0108" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SoftKeyTemplateResMessage" opcode="0x0108" request="0x0028" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="softKeyTemplate" subtype="SoftKeyTemplate" type="struct"> <fields> @@ -2888,7 +2885,7 @@ <entry name="SoftKeyInfoIndex_CBarge" text="Conference Barge" value="333"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SoftKeySetResMessage" opcode="0x0109" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SoftKeySetResMessage" opcode="0x0109" request="0x0025" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="softKeySets" subtype="SoftKeySets" type="struct"> <fields> @@ -2925,7 +2922,7 @@ <entry comment="" name="SoftKeyMask_SoftKey16" text="SoftKey16" value="0x8000"/> </entries> </bitfield> - <message comment="" direction="pbx2dev" dynamic="no" name="SelectSoftKeysMessage" opcode="0x0110" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SelectSoftKeysMessage" opcode="0x0110" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> @@ -2982,7 +2979,7 @@ <entry comment="" name="CallPrivacy_Full" text="Full" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="CallStateMessage" opcode="0x0111" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CallStateMessage" opcode="0x0111" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="CallState" name="callState" subtype="DCallState" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> @@ -2996,7 +2993,7 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DisplayPromptStatusMessage" opcode="0x0112" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DisplayPromptStatusMessage" opcode="0x0112" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <string comment="" name="promptStatus" size="32" subtype="DisplayLabel" type="char"/> @@ -3004,25 +3001,25 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ClearPromptStatusMessage" opcode="0x0113" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="ClearPromptStatusMessage" opcode="0x0113" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DisplayNotifyMessage" opcode="0x0114" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DisplayNotifyMessage" opcode="0x0114" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <string comment="" name="notify" size="32" subtype="DisplayLabel" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ClearNotifyMessage" opcode="0x0115" status="no" type="CallControl"/> - <message comment="" direction="pbx2dev" dynamic="no" name="ActivateCallPlaneMessage" opcode="0x0116" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="ClearNotifyMessage" opcode="0x0115" type="CallControl"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="ActivateCallPlaneMessage" opcode="0x0116" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="LineId" name="lineInstance" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DeactivateCallPlaneMessage" opcode="0x0117" status="no" type="CallControl"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DeactivateCallPlaneMessage" opcode="0x0117" type="CallControl"/> <enum name="DeviceUnregisterStatus"> <entries> <entry comment="" name="DeviceUnregisterStatus_Ok" text="Ok" value="0x0000"/> @@ -3030,27 +3027,27 @@ <entry comment="" name="DeviceUnregisterStatus_NAK" text="NAK" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="UnregisterAckMessage" opcode="0x0118" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="UnregisterAckMessage" opcode="0x0118" request="0x0027" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <enum comment="" name="status" subtype="DeviceUnregisterStatus" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="BackSpaceReqMessage" opcode="0x0119" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="BackSpaceResMessage" opcode="0x0119" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="RegisterTokenAck" opcode="0x011a" status="no" type="RegistrationAndManagement"/> - <message comment="" direction="pbx2dev" dynamic="no" name="RegisterTokenReject" opcode="0x011b" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="RegisterTokenAck" opcode="0x011a" request="0x0029" type="RegistrationAndManagement"/> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="RegisterTokenReject" opcode="0x011b" request="0x0029" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="waitTimeBeforeNextReq" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMediaFailureDetectionMessage" opcode="0x011c" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StartMediaFailureDetectionMessage" opcode="0x011c" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="" name="millisecondPacketSize" type="uint32"/> <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/> <struct comment="" name="qualifierIn" subtype="Media_QualifierIncoming" type="struct"> @@ -3079,7 +3076,7 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DialedNumberMessage" opcode="0x011d" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DialedNumberMessage" opcode="0x011d" type="CallControl"> <fields endversion="17" fixed="yes"> <string comment="" name="dialedNumber" size="24" type="char"/> <integer comment="LineId" name="lineInstance" type="uint32"/> @@ -3091,7 +3088,7 @@ <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="UserToDeviceDataMessage" opcode="0x011e" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="UserToDeviceDataMessage" opcode="0x011e" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="userToDeviceData" subtype="UserAndDeviceData" type="struct"> <fields> @@ -3105,22 +3102,22 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="FeatureStatMessage" opcode="0x011f" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="FeatureStatResMessage" opcode="0x011f" request="0x0034" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="featureIndex" type="uint32"/> + <integer comment="" declare="yes" name="featureIndex" req_resp_key="1" type="uint32"/> <enum comment="" name="featureID" subtype="ButtonType" type="uint32"/> <string comment="" name="featureTextLabel" size="40" type="char"/> <integer comment="" name="featureStatus" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="DisplayPriNotifyMessage" opcode="0x0120" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="DisplayPriNotifyMessage" opcode="0x0120" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <integer comment="" name="priority" type="uint32"/> <string comment="" name="notify" size="32" subtype="DisplayLabel" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ClearPriNotifyMessage" opcode="0x0121" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="ClearPriNotifyMessage" opcode="0x0121" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="priority" type="uint32"/> </fields> @@ -3138,7 +3135,7 @@ <entry comment="" name="AnnPlayMode_ContinuousMode" text="ContinuousMode" value="0x0002"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="StartAnnouncementMessage" opcode="0x0122" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="StartAnnouncementMessage" opcode="0x0122" type="IntraCCM"> <fields beginversion="0" endversion="22"> <struct comment="" name="AnnList" size="32" type="struct"> <fields> @@ -3154,7 +3151,7 @@ <enum comment="" name="annPlayMode" subtype="AnnPlayMode" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="StopAnnouncementMessage" opcode="0x0123" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="StopAnnouncementMessage" opcode="0x0123" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> </fields> @@ -3165,27 +3162,27 @@ <entry comment="" name="PlayAnnStatus_Err" text="Err" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="AnnouncementFinishMessage" opcode="0x0124" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="AnnouncementFinishMessage" opcode="0x0124" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <enum comment="" name="annStatus" subtype="PlayAnnStatus" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="NotifyDtmfToneMessage" opcode="0x0127" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="NotifyDtmfToneMessage" opcode="0x0127" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="tone" subtype="DeviceTone" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="passthruPartyID" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SendDtmfToneMessage" opcode="0x0128" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="SendDtmfToneMessage" opcode="0x0128" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="tone" subtype="DeviceTone" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="passthruPartyID" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SubscribeDtmfPayloadReqMessage" opcode="0x0129" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="SubscribeDtmfPayloadReqMessage" opcode="0x0129" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> @@ -3193,60 +3190,60 @@ <integer comment="" name="dtmfType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SubscribeDtmfPayloadResMessage" opcode="0x012a" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SubscribeDtmfPayloadResMessage" opcode="0x012a" request="0x0129" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SubscribeDtmfPayloadErrMessage" opcode="0x012b" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SubscribeDtmfPayloadErrMessage" opcode="0x012b" request="0x0129" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadReqMessage" opcode="0x012c" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="UnSubscribeDtmfPayloadReqMessage" opcode="0x012c" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> <integer comment="" name="dtmfType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadResMessage" opcode="0x012d" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="UnSubscribeDtmfPayloadResMessage" opcode="0x012d" request="0x012d" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadErrMessage" opcode="0x012e" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="UnSubscribeDtmfPayloadErrMessage" opcode="0x012e" request="0x012d" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="payloadDtmf" type="uint32"/> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="ServiceURLStatMessage" opcode="0x012f" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="ServiceURLStatResMessage" opcode="0x012f" request="0x0033" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="serviceURLIndex" type="uint32"/> + <integer comment="" declare="yes" name="serviceURLIndex" req_resp_key="1" type="uint32"/> <string comment="" name="serviceURL" size="256" type="char"/> <string comment="" name="serviceURLDisplayName" size="40" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="CallSelectStatMessage" opcode="0x0130" status="result" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CallSelectStatResMessage" opcode="0x0130" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="" name="callSelectStat" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="OpenMultiMediaReceiveChannelMessage" opcode="0x0131" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="OpenMultiMediaReceiveChannelMessage" opcode="0x0131" priority="send_immediate" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> @@ -3397,10 +3394,10 @@ <enum comment="" name="requestedIpAddrType" subtype="IpAddrType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMultiMediaTransmissionMessage" opcode="0x0132" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="StartMultiMediaTransmissionMessage" opcode="0x0132" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="" name="passthruPartyID" type="uint32"/> + <integer comment="" declare="yes" name="passthruPartyID" req_resp_key="1" type="uint32"/> <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> @@ -3545,10 +3542,10 @@ <integer comment="" name="associatedStreamID" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StopMultiMediaTransmissionMessage" opcode="0x0133" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="StopMultiMediaTransmissionMessage" opcode="0x0133" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="portHandlingFlag" subtype="PortHandling" type="uint32"/> </fields> @@ -3565,7 +3562,7 @@ <entry comment="" name="MiscCommandType_temporalSpatialTradeOff" text="temporalSpatialTradeOff" value="0x0007"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="MiscellaneousCommandMessage" opcode="0x0134" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="MiscellaneousCommandMessage" opcode="0x0134" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="passthruPartyID" type="uint32"/> @@ -3627,7 +3624,7 @@ </union> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="FlowControlCommandMessage" opcode="0x0135" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="FlowControlCommandMessage" opcode="0x0135" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="passthruPartyID" type="uint32"/> @@ -3635,17 +3632,17 @@ <integer comment="" name="maximumBitRate" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="CloseMultiMediaReceiveChannelMessage" opcode="0x0136" priority="send_immediate" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CloseMultiMediaReceiveChannelMessage" opcode="0x0136" priority="send_immediate" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="portHandlingFlag" subtype="PortHandling" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="CreateConferenceReqMessage" opcode="0x0137" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="CreateConferenceReqMessage" opcode="0x0137" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="" name="numberOfReservedParticipants" type="uint32"/> <enum comment="" name="resourceType" subtype="ResourceType" type="uint32"/> <integer comment="" name="appID" type="uint32"/> @@ -3655,14 +3652,14 @@ <string comment="variable field size (max: 2000]" maxsize="2000" name="passThruData" size_fieldname="dataLength" type="char"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="DeleteConferenceReqMessage" opcode="0x0138" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="DeleteConferenceReqMessage" opcode="0x0138" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="ModifyConferenceReqMessage" opcode="0x0139" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="ModifyConferenceReqMessage" opcode="0x0139" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="" name="numberOfReservedParticipants" type="uint32"/> <integer comment="" name="appID" type="uint32"/> <string comment="" name="appConfID" size="32" type="char"/> @@ -3671,9 +3668,9 @@ <string comment="variable field size (max: 2000]" maxsize="2000" name="passThruData" size_fieldname="dataLength" type="char"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="AddParticipantReqMessage" opcode="0x013a" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="AddParticipantReqMessage" opcode="0x013a" type="IntraCCM"> <fields> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield"> <entries> @@ -3697,21 +3694,21 @@ <string comment="" name="conferenceName" size="32" type="char"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="DropParticipantReqMessage" opcode="0x013b" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="DropParticipantReqMessage" opcode="0x013b" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="AuditConferenceReqMessage" opcode="0x013c" status="no" type="IntraCCM"/> - <message comment="" direction="pbx2pbx" dynamic="no" name="AuditParticipantReqMessage" opcode="0x013d" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="AuditConferenceReqMessage" opcode="0x013c" type="IntraCCM"/> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="AuditParticipantReqMessage" opcode="0x013d" type="IntraCCM"> <fields beginversion="0" endversion="22"> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="ChangeParticipantReqMessage" opcode="0x013e" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="ChangeParticipantReqMessage" opcode="0x013e" type="IntraCCM"> <fields> - <integer comment="Conference ID" name="conferenceID" type="uint32"/> + <integer comment="Conference ID" declare="yes" name="conferenceID" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield"> <entries> @@ -3735,7 +3732,7 @@ <string comment="" name="conferenceName" size="32" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="UserToDeviceDataMessageVersion1" opcode="0x013f" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="UserToDeviceDataMessageVersion1" opcode="0x013f" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="userToDeviceDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct"> <fields> @@ -3754,14 +3751,14 @@ </struct> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="VideoDisplayCommandMessage" opcode="0x0140" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="VideoDisplayCommandMessage" opcode="0x0140" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <integer comment="" name="layoutID" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="FlowControlNotifyMessage" opcode="0x0141" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="FlowControlNotifyMessage" opcode="0x0141" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="" name="passthruPartyID" type="uint32"/> @@ -3769,7 +3766,7 @@ <integer comment="" name="maximumBitRate" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="ConfigStatV2Message" opcode="0x0142" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="response" name="ConfigStatV2ResMessage" opcode="0x0142" request="0x000c" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="sid" type="struct"> <fields> @@ -3784,20 +3781,20 @@ <string comment="" name="serverName" size="121" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="DisplayNotifyV2Message" opcode="0x0143" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="event" name="DisplayNotifyV2Message" opcode="0x0143" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <string comment="" name="notify" size="97" subtype="DisplayLabel" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="DisplayPriNotifyV2Message" opcode="0x0144" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="event" name="DisplayPriNotifyV2Message" opcode="0x0144" type="RegistrationAndManagement"> <fields alignment="4" beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <integer comment="" name="priority" type="uint32"/> <string comment="" name="notify" size="97" subtype="DisplayLabel" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="DisplayPromptStatusV2Message" opcode="0x0145" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="event" name="DisplayPromptStatusV2Message" opcode="0x0145" type="CallControl"> <fields alignment="4" beginversion="0" endversion="22"> <integer comment="" name="timeOutValue" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> @@ -3805,7 +3802,7 @@ <string comment="" name="promptStatus" size="97" subtype="DisplayLabel" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="FeatureStatV2Message" opcode="0x0146" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="response" name="FeatureStatV2ResMessage" opcode="0x0146" request="0x0034" type="RegistrationAndManagement"> <fields alignment="4" beginversion="0" endversion="22"> <integer comment="" name="featureIndex" type="uint32"/> <enum comment="" name="featureID" subtype="ButtonType" type="uint32"/> @@ -3821,9 +3818,9 @@ <entry comment="" name="CallingPartyName" text="CallingName" value="0x0008"/> </entries> </bitfield> - <message comment="" direction="pbx2dev" dynamic="yes" name="LineStatV2Message" opcode="0x0147" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="response" name="LineStatV2ResMessage" opcode="0x0147" request="0x000b" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="lineNumber" type="uint32"/> + <integer comment="" declare="yes" name="lineNumber" req_resp_key="1" type="uint32"/> <bitfield comment="" name="lineType" size="uint32" subtype="LineTypeBits" type="bitfield"> <entries> <entry comment="" name="OrigDialed" text="Originaly Dialed" value="0x0001"/> @@ -3837,19 +3834,19 @@ <string comment="" name="lineTextLabel" size="40" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="ServiceURLStatV2Message" opcode="0x0148" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="response" name="ServiceURLStatV2ResMessage" opcode="0x0148" request="0x0033" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="serviceURLIndex" type="uint32"/> + <integer comment="" declare="yes" name="serviceURLIndex" req_resp_key="1" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="SpeedDialStatV2Message" opcode="0x0149" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="response" name="SpeedDialStatV2ResMessage" opcode="0x0149" request="0x000a" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="speedDialNumber" type="uint32"/> + <integer comment="" declare="yes" name="speedDialNumber" req_resp_key="1" type="uint32"/> <string comment="" name="speedDialDirNumber" size="24" type="char"/> <string comment="" name="speedDialDisplayName" size="40" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="yes" name="CallInfoV2Message" opcode="0x014a" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="yes" msgtype="event" name="CallInfoV2Message" opcode="0x014a" type="CallControl"> <fields alignment="2"> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> @@ -3901,21 +3898,21 @@ <entry comment="" name="MediaTransportType_TCP" text="TCP" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="PortReqMessage" opcode="0x014b" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="request" name="PortReqMessage" opcode="0x014b" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <enum comment="" name="mediaTransportType" subtype="MediaTransportType" type="uint32"/> <enum comment="" name="ipAddressType" subtype="IpAddrType" type="uint32"/> <enum comment="" name="mediaType" subtype="MediaType" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="PortCloseMessage" opcode="0x014c" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="PortCloseMessage" opcode="0x014c" type="MediaControl"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <enum comment="" name="mediaType" subtype="MediaType" type="uint32"/> </fields> </message> @@ -3926,11 +3923,11 @@ <entry comment="" name="ResvStyle_WF" text="WF" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSListenMessage" opcode="0x014d" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSListenMessage" opcode="0x014d" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="resvStyle" subtype="ResvStyle" type="uint32"/> @@ -3953,11 +3950,11 @@ </struct> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSPathMessage" opcode="0x014e" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSPathMessage" opcode="0x014e" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="resvStyle" subtype="ResvStyle" type="uint32"/> @@ -3979,31 +3976,31 @@ </struct> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSTeardownMessage" opcode="0x014f" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSTeardownMessage" opcode="0x014f" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="direction" subtype="RSVPDirection" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="UpdateDSCPMessage" opcode="0x0150" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="UpdateDSCPMessage" opcode="0x0150" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <integer comment="" name="DSCPValue" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2pbx" dynamic="no" name="QoSModifyMessage" opcode="0x0151" status="no" type="IntraCCM"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="event" name="QoSModifyMessage" opcode="0x0151" type="IntraCCM"> <fields beginversion="0" endversion="22"> <integer comment="Conference ID" name="conferenceID" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" name="passThruPartyId" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endianness="big" name="remoteIpAddr" subtype="uint32" type="ipaddr"/> <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/> <enum comment="" name="direction" subtype="RSVPDirection" type="uint32"/> @@ -4032,36 +4029,36 @@ <entry comment="" name="SubscribeCause_Throttle" text="Throttle" value="0x0006"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="SubscriptionStatMessage" opcode="0x0152" status="result" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SubscriptionStatResMessage" opcode="0x0152" request="0x0048" status="result" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> - <integer comment="" name="transactionID" type="uint32"/> - <enum comment="" name="subscriptionoFeatureID" subtype="SubscriptionFeatureID" type="uint32"/> + <integer comment="" declare="yes" name="transactionID" req_resp_key="1" type="uint32"/> + <enum comment="" name="subscriptionFeatureID" subtype="SubscriptionFeatureID" type="uint32"/> <integer comment="" name="timer" type="uint32"/> <enum comment="" name="cause" subtype="SubscribeCause" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="NotificationMessage" opcode="0x0153" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="NotificationMessage" opcode="0x0153" type="RegistrationAndManagement"> <fields alignment="4" beginversion="0" endversion="22"> <integer comment="" name="transactionID" type="uint32"/> <enum comment="" name="subscriptionFeatureID" subtype="SubscriptionFeatureID" type="uint32"/> - <integer comment="" name="status" type="uint32"/> + <integer comment="" name="notificationStatus" type="uint32"/> <string comment="" name="text" size="97" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMediaTransmissionAckMessage" opcode="0x0154" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="StartMediaTransmissionAckMessage" opcode="0x0154" request="0x008a" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="transmitIpAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="transmit Port" declare="yes" name="portNumber" subtype="uint32" type="ipport"/> <enum comment="" name="mediaTransmissionStatus" subtype="MediaStatus" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="StartMultiMediaTransmissionAckMessage" opcode="0x0155" status="no" type="MediaControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="StartMultiMediaTransmissionAckMessage" opcode="0x0155" request="0x0132" type="MediaControl"> <fields> <integer comment="Conference ID" name="conferenceID" type="uint32"/> - <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/> + <integer comment="PassThrough PartyId" declare="yes" name="passThruPartyId" req_resp_key="1" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> <ipv4or6 comment="ipaddress in big endian" endiannes="big" endianness="big" name="transmitIpAddr" subtype="IpAddress" type="ipaddr"/> <integer comment="transmit Port" declare="yes" name="portNumber" subtype="uint32" type="ipport"/> @@ -4077,14 +4074,14 @@ <entry comment="" name="CallHistoryDisposition_MissedCalls" text="MissedCalls" value="0x0003"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="CallHistoryInfoMessage" opcode="0x0156" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="CallHistoryInfoMessage" opcode="0x0156" type="CallControl"> <fields beginversion="0" endversion="22"> <enum comment="" name="callHistoryDisposition" subtype="CallHistoryDisposition" type="uint32"/> <integer comment="LineId" name="lineInstance" type="uint32"/> <integer comment="CallId" name="callReference" type="uint32"/> </fields> </message> - <message comment="Sent by wifi devices, contains xml information about connected SSID" direction="pbx2dev" dynamic="no" name="LocationInfoMessage" opcode="0x0156" status="no" type="RegistrationAndManagement"> + <message comment="Sent by wifi devices, contains xml information about connected SSID" direction="pbx2dev" dynamic="no" msgtype="event" name="LocationInfoMessage" opcode="0x0157" type="RegistrationAndManagement"> <fields alignment="4" beginversion="0" endversion="22"> <string comment="" name="locationInfo" size="2401" type="char"/> </fields> @@ -4100,13 +4097,13 @@ <entry comment="" name="MwiNotificationResult_InvalidPriorityFaxCount" text="InvalidPriorityFaxCount" value="0x0006"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="MwiResponseMessage" opcode="0x0158" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="MwiResMessage" opcode="0x0158" request="0x004c" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <string comment="" name="mwiTargetNumber" size="25" type="char"/> <enum comment="" name="mwi_notification_result" subtype="MwiNotificationResult" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="AddOnDeviceCapabilitiesMessage" opcode="0x0159" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="event" name="AddOnDeviceCapabilitiesMessage" opcode="0x0159" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="unknown1_0159" type="uint32"/> <integer comment="" name="unknown2_0159" type="uint32"/> @@ -4114,13 +4111,13 @@ <string comment="" name="unknownString_0159" size="152" type="char"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="EnhancedAlarmMessage" opcode="0x015a" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="EnhancedAlarmMessage" opcode="0x015a" type="RegistrationAndManagement"> <fields alignment="4" beginversion="0" endversion="22"> <xml comment="" name="alarmInfo" size="2048" type="xml"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="CallCountReqMessage" opcode="0x015e" status="no" type="CallControl"/> - <message comment="" direction="pbx2dev" dynamic="no" name="CallCountRespMessage" opcode="0x015f" status="no" type="CallControl"> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="request" name="CallCountReqMessage" opcode="0x015e" type="CallControl"/> + <message comment="" direction="pbx2pbx" dynamic="no" msgtype="response" name="CallCountRespMessage" opcode="0x015f" request="0x015e" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="Total Number of Configured Lines" name="totalNumOfConfiguredLines" type="uint32"/> <integer comment="Starting Line Instance" name="startingLineInstance" type="uint32"/> @@ -4139,13 +4136,13 @@ <entry comment="" name="RecordingStatus__ON" text="_ON" value="0x0001"/> </entries> </enum> - <message comment="" direction="pbx2dev" dynamic="no" name="RecordingStatusMessage" opcode="0x0160" status="no" type="CallControl"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="event" name="RecordingStatusMessage" opcode="0x0160" type="CallControl"> <fields beginversion="0" endversion="22"> <integer comment="CallId" name="callReference" type="uint32"/> <enum comment="" name="recording_status" subtype="RecordingStatus" type="uint32"/> </fields> </message> - <message comment="" direction="dev2pbx" dynamic="no" name="SPCPRegisterTokenReq" opcode="0x8000" status="no" type="RegistrationAndManagement"> + <message comment="" direction="dev2pbx" dynamic="no" msgtype="request" name="SPCPRegisterTokenReq" opcode="0x8000" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <struct comment="" name="sid" type="struct"> <fields> @@ -4159,12 +4156,12 @@ <integer comment="" name="maxStreams" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SPCPRegisterTokenAck" opcode="0x8100" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SPCPRegisterTokenAck" opcode="0x8100" request="0x8000" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="features" type="uint32"/> </fields> </message> - <message comment="" direction="pbx2dev" dynamic="no" name="SPCPRegisterTokenReject" opcode="0x8101" status="no" type="RegistrationAndManagement"> + <message comment="" direction="pbx2dev" dynamic="no" msgtype="response" name="SPCPRegisterTokenReject" opcode="0x8101" request="0x8000" type="RegistrationAndManagement"> <fields beginversion="0" endversion="22"> <integer comment="" name="waitTimeBeforeNextReq" type="uint32"/> </fields> diff --git a/tools/parse_xml2skinny_dissector.py b/tools/parse_xml2skinny_dissector.py index d6fea70be0..8acb50fdba 100755 --- a/tools/parse_xml2skinny_dissector.py +++ b/tools/parse_xml2skinny_dissector.py @@ -128,6 +128,14 @@ def xml2obj(src): def getfieldnames(self): return '' + def get_req_resp_keys(self, req_resp_keys): + return [] + + def get_req_resp_key(self): + if self.req_resp_key == "1": + return self.name + return None + def declaration(self): global fieldsArray if self.name not in fieldsArray: @@ -177,16 +185,18 @@ def xml2obj(src): ret += self.indent_out("/*\n") ret += self.indent_out(" * Message: %s\n" %self.name) ret += self.indent_out(" * Opcode: %s\n" %self.opcode) - ret += self.indent_out(" * Type: %s\n" %self.type) + ret += self.indent_out(" * Type: %s\n" %self.type) ret += self.indent_out(" * Direction: %s\n" %self.direction) ret += self.indent_out(" * VarLength: %s\n" %self.dynamic) + ret += self.indent_out(" * MsgType: %s\n" %self.msgtype) if self.comment: ret += self.indent_out(" * Comment: %s\n" %self.comment) ret += self.indent_out(" */\n") ret += self.indent_out("static void\n") - ret += self.indent_out("handle_%s(ptvcursor_t *cursor, packet_info * pinfo _U_)\n" %self.name) + ret += self.indent_out("handle_%s(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)\n" %self.name) ret += self.indent_out("{\n") self.incr_indent() + for fields in self.fields: if fields.size_lt or fields.size_gt: if self.basemessage.declared is None or "hdr_data_length" not in self.basemessage.declared: @@ -202,7 +212,10 @@ def xml2obj(src): ret += self.indent_out("guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n") self.basemessage.declared.append("hdr_version") declarations += 1 + + req_resp_keys = [] for fields in self.fields: + fields.get_req_resp_keys(req_resp_keys) ret += '%s' %fields.declaration() declarations += 1 @@ -213,6 +226,19 @@ def xml2obj(src): for fields in self.fields: ret += '%s' %fields.dissect() + # setup request/response + if self.msgtype == "request": + if req_resp_keys and req_resp_keys[0] != '': + ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.opcode, req_resp_keys[0])) + else: + ret += self.indent_out('skinny_reqrep_add_request(cursor, pinfo, skinny_conv, %s);\n' %(self.opcode)) + + if self.msgtype == "response": + if req_resp_keys and req_resp_keys[0] != '': + ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s ^ %s);\n' %(self.request, req_resp_keys[0])) + else: + ret += self.indent_out('skinny_reqrep_add_response(cursor, pinfo, skinny_conv, %s);\n' %(self.request)) + self.decr_indent() ret += "}\n\n" @@ -222,6 +248,12 @@ def xml2obj(src): ''' Fields ''' size_fieldnames= [] + def get_req_resp_keys(self, req_resp): + for field in self._children: + key = field.get_req_resp_key() + if not key is None and not key in req_resp: + req_resp.append(key) + def declaration(self): ret = '' @@ -474,6 +506,11 @@ def xml2obj(src): def __str__(self): return '%s:%s' %(self.__class__,self.name) + def get_req_resp_key(self): + if self.req_resp_key == "1": + return 'wmem_str_hash(%s)' %self.name + return None + def declaration(self): ret = '' self.intsize = 0 @@ -494,10 +531,10 @@ def xml2obj(src): self.basemessage.declared.append("hdr_version") ret += self.indent_out('guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;\n') self.basemessage.declared.append("VariableDirnumSize") - else: - if self.basemessage.declared is None or self.name not in self.basemessage.declared: - ret += self.indent_out('guint32 %s = 0;\n' %self.name) - self.basemessage.declared.append(self.name) + #else: + # if self.basemessage.declared is None or self.name not in self.basemessage.declared: + # ret += self.indent_out('gchar *%s = NULL;\n' %self.name) + # self.basemessage.declared.append(self.name) if self.basemessage.dynamic == "yes" and not self.subtype == "DisplayLabel": if self.basemessage.declared is None or self.name + '_len' not in self.basemessage.declared: @@ -513,7 +550,7 @@ def xml2obj(src): ret = '' if self.declare == "yes" and self.size != "VariableDirnumSize": - ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n' %self.name) + ret += self.indent_out('const gchar * %s = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), %s));\n' %(self.name, self.size)) if self.subtype == "DisplayLabel": if self.basemessage.dynamic == "yes": |