summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-skinny.c14091
-rw-r--r--epan/dissectors/packet-skinny.c.in559
-rw-r--r--epan/dissectors/packet-skinny.h3
-rw-r--r--epan/dissectors/packet-skinny.h.in40
-rw-r--r--tools/SkinnyProtocolOptimized.xml4062
-rwxr-xr-xtools/parse_xml2skinny_dissector.py888
6 files changed, 14731 insertions, 4912 deletions
diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c
index aa6ab687df..f8e0eb5c0b 100644
--- a/epan/dissectors/packet-skinny.c
+++ b/epan/dissectors/packet-skinny.c
@@ -1,19 +1,21 @@
+/* Do not modify this file. Changes will be overwritten */
+/* Generated Automatically */
+/* packet-skinny.c */
+
/* packet-skinny.c
- *
* Dissector for the Skinny Client Control Protocol
* (The "D-Channel"-Protocol for Cisco Systems' IP-Phones)
- * Copyright 2001, Joerg Mayer (see AUTHORS file)
- *
- * Paul E. Erkkila (pee@erkkila.org) - fleshed out the decode
- * skeleton to report values for most message/message fields.
- * Much help from Guy Harris on figuring out the wireshark api.
*
- * This file is based on packet-aim.c, which is
- * Copyright 2000, Ralf Hoelzer <ralf@well.com>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
+ * Author: Diederik de Groot <ddegroot@user.sf.net>, Copyright 2014
+ * Rewritten to support newer skinny protocolversions (V0-V22)
+ * Based on previous versions/contributions:
+ * - Joerg Mayer <jmayer@loplof.de>, Copyright 2001
+ * - Paul E. Erkkila (pee@erkkila.org) - fleshed out the decode
+ * skeleton to report values for most message/message fields.
+ * Much help from Guy Harris on figuring out the wireshark api.
+ * - packet-aim.c by Ralf Hoelzer <ralf@well.com>, Copyright 2000
+ * - Wireshark - Network traffic analyzer,
+ * By Gerald Combs <gerald@wireshark.org>, Copyright 1998
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -30,8 +32,14 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-/* This implementation is based on a draft version of the 3.0
- * specification
+/*
+ * Generated Automatically Using:
+ * cog.py -D xmlfile=SkinnyProtocolOptimized.xml -d -c -o packet-skinny.c packet-skinny.c.in
+ */
+
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
*/
#include "config.h"
@@ -39,6 +47,7 @@
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/tap.h>
+#include <epan/ptvcursor.h>
#include "packet-rtp.h"
#include "packet-tcp.h"
@@ -48,1331 +57,2111 @@
void proto_register_skinny(void);
void proto_reg_handoff_skinny(void);
+
#define TCP_PORT_SKINNY 2000
#define SSL_PORT_SKINNY 2443 /* IANA assigned to PowerClient Central Storage Facility */
-#define SKINNY_SOFTKEY0 0x01
-#define SKINNY_SOFTKEY1 0x02
-#define SKINNY_SOFTKEY2 0x04
-#define SKINNY_SOFTKEY3 0x08
-#define SKINNY_SOFTKEY4 0x10
-#define SKINNY_SOFTKEY5 0x20
-#define SKINNY_SOFTKEY6 0x40
-#define SKINNY_SOFTKEY7 0x80
-#define SKINNY_SOFTKEY8 0x100
-#define SKINNY_SOFTKEY9 0x200
-#define SKINNY_SOFTKEY10 0x400
-#define SKINNY_SOFTKEY11 0x800
-#define SKINNY_SOFTKEY12 0x1000
-#define SKINNY_SOFTKEY13 0x2000
-#define SKINNY_SOFTKEY14 0x4000
-#define SKINNY_SOFTKEY15 0x8000
-
-/* KeyMap Show/No Show */
-static const true_false_string softKeyMapValues = {
- "Show",
- "Do Not Show"
-};
-
#define BASIC_MSG_TYPE 0x00
-#define CM7_MSG_TYPE_A 0x12
-#define CM7_MSG_TYPE_B 0x11
-#define CM7_MSG_TYPE_UNKNOWN 0x13
-#define CM7_MSG_TYPE_C 0x14
-#define CM7_MSG_TYPE_D 0x16
+#define V10_MSG_TYPE 0x0A
+#define V11_MSG_TYPE 0x0B
+#define V15_MSG_TYPE 0x0F
+#define V16_MSG_TYPE 0x10
+#define V17_MSG_TYPE 0x11
+#define V18_MSG_TYPE 0x12
+#define V19_MSG_TYPE 0x13
+#define V20_MSG_TYPE 0x14
+#define V21_MSG_TYPE 0x15
+#define V22_MSG_TYPE 0x16
static const value_string header_version[] = {
{ BASIC_MSG_TYPE, "Basic" },
- { CM7_MSG_TYPE_A, "CM7 type A" },
- { CM7_MSG_TYPE_B, "CM7 type B" },
- { CM7_MSG_TYPE_UNKNOWN, "CM7 type unknown (0x13)" },
- { CM7_MSG_TYPE_C, "CM7 type C" },
- { CM7_MSG_TYPE_D, "CM7 type SPCP" },
+ { V10_MSG_TYPE, "V10" },
+ { V11_MSG_TYPE, "V11" },
+ { V15_MSG_TYPE, "V15" },
+ { V16_MSG_TYPE, "V16" },
+ { V17_MSG_TYPE, "V17" },
+ { V18_MSG_TYPE, "V18" },
+ { V19_MSG_TYPE, "V19" },
+ { V20_MSG_TYPE, "V20" },
+ { V21_MSG_TYPE, "V21" },
+ { V22_MSG_TYPE, "V22" },
{ 0 , NULL }
};
-/* I will probably need this again when I change things
- * to function pointers, but let me use the existing
- * infrastructure for now
- *
- * typedef struct {
- * guint32 id;
- * char *name;
- * } message_id_t;
- */
-
+/* Declare MessageId */
static const value_string message_id[] = {
-
- /* Station -> Callmanager */
- {0x0000, "KeepAliveMessage"},
- {0x0001, "RegisterMessage"},
- {0x0002, "IpPortMessage"},
- {0x0003, "KeypadButtonMessage"},
- {0x0004, "EnblocCallMessage"},
- {0x0005, "StimulusMessage"},
- {0x0006, "OffHookMessage"},
- {0x0007, "OnHookMessage"},
- {0x0008, "HookFlashMessage"},
- {0x0009, "ForwardStatReqMessage"},
- {0x000A, "SpeedDialStatReqMessage"},
- {0x000B, "LineStatReqMessage"},
- {0x000C, "ConfigStatReqMessage"},
- {0x000D, "TimeDateReqMessage"},
- {0x000E, "ButtonTemplateReqMessage"},
- {0x000F, "VersionReqMessage"},
- {0x0010, "CapabilitiesResMessage"},
- {0x0011, "MediaPortListMessage"},
- {0x0012, "ServerReqMessage"},
- {0x0020, "AlarmMessage"},
- {0x0021, "MulticastMediaReceptionAck"},
- {0x0022, "OpenReceiveChannelAck"},
- {0x0023, "ConnectionStatisticsRes"},
- {0x0024, "OffHookWithCgpnMessage"},
- {0x0025, "SoftKeySetReqMessage"},
- {0x0026, "SoftKeyEventMessage"},
- {0x0027, "UnregisterMessage"},
- {0x0028, "SoftKeyTemplateReqMessage"},
- {0x0029, "RegisterTokenReq"},
- {0x002A, "MediaTransmissionFailure"},
- {0x002B, "HeadsetStatusMessage"},
- {0x002C, "MediaResourceNotification"},
- {0x002D, "RegisterAvailableLinesMessage"},
- {0x002E, "DeviceToUserDataMessage"},
- {0x002F, "DeviceToUserDataResponseMessage"},
- {0x0030, "UpdateCapabilitiesMessage"},
- {0x0031, "OpenMultiMediaReceiveChannelAckMessage"},
- {0x0032, "ClearConferenceMessage"},
- {0x0033, "ServiceURLStatReqMessage"},
- {0x0034, "FeatureStatReqMessage"},
- {0x0035, "CreateConferenceResMessage"},
- {0x0036, "DeleteConferenceResMessage"},
- {0x0037, "ModifyConferenceResMessage"},
- {0x0038, "AddParticipantResMessage"},
- {0x0039, "AuditConferenceResMessage"},
- {0x0040, "AuditParticipantResMessage"},
- {0x0041, "DeviceToUserDataVersion1Message"},
- {0x0042, "DeviceToUserDataResponseVersion1Message"},
- {0x0044, "DynUpdateCapabilitiesMessage"},
- {0x0048, "DialedPhoneBookMessage"},
- {0x0049, "AccessoryStatusMessage"},
- {0x004A, "Unknown_Message_0x004A"},
- {0x004C, "MwiNotificationMessage"},
-
- /* Callmanager -> Station */
- /* 0x0000, 0x0003? */
- {0x0081, "RegisterAckMessage"},
- {0x0082, "StartToneMessage"},
- {0x0083, "StopToneMessage"},
- {0x0085, "SetRingerMessage"},
- {0x0086, "SetLampMessage"},
- {0x0087, "SetHkFDetectMessage"},
- {0x0088, "SetSpeakerModeMessage"},
- {0x0089, "SetMicroModeMessage"},
- {0x008A, "StartMediaTransmission"},
- {0x008B, "StopMediaTransmission"},
- {0x008C, "StartMediaReception"},
- {0x008D, "StopMediaReception"},
- {0x008F, "CallInfoMessage"},
- {0x0090, "ForwardStatMessage"},
- {0x0091, "SpeedDialStatMessage"},
- {0x0092, "LineStatMessage"},
- {0x0093, "ConfigStatMessage"},
- {0x0094, "DefineTimeDate"},
- {0x0095, "StartSessionTransmission"},
- {0x0096, "StopSessionTransmission"},
- {0x0097, "ButtonTemplateMessage"},
- {0x0098, "VersionMessage"},
- {0x0099, "DisplayTextMessage"},
- {0x009A, "ClearDisplay"},
- {0x009B, "CapabilitiesReqMessage"},
- {0x009C, "EnunciatorCommandMessage"},
- {0x009D, "RegisterRejectMessage"},
- {0x009E, "ServerResMessage"},
- {0x009F, "Reset"},
- {0x0100, "KeepAliveAckMessage"},
- {0x0101, "StartMulticastMediaReception"},
- {0x0102, "StartMulticastMediaTransmission"},
- {0x0103, "StopMulticastMediaReception"},
- {0x0104, "StopMulticastMediaTransmission"},
- {0x0105, "OpenReceiveChannel"},
- {0x0106, "CloseReceiveChannel"},
- {0x0107, "ConnectionStatisticsReq"},
- {0x0108, "SoftKeyTemplateResMessage"},
- {0x0109, "SoftKeySetResMessage"},
- {0x0110, "SelectSoftKeysMessage"},
- {0x0111, "CallStateMessage"},
- {0x0112, "DisplayPromptStatusMessage"},
- {0x0113, "ClearPromptStatusMessage"},
- {0x0114, "DisplayNotifyMessage"},
- {0x0115, "ClearNotifyMessage"},
- {0x0116, "ActivateCallPlaneMessage"},
- {0x0117, "DeactivateCallPlaneMessage"},
- {0x0118, "UnregisterAckMessage"},
- {0x0119, "BackSpaceReqMessage"},
- {0x011A, "RegisterTokenAck"},
- {0x011B, "RegisterTokenReject"},
-
- {0x011C, "StartMediaFailureDetection"},
- {0x011D, "DialedNumberMessage"},
- {0x011E, "UserToDeviceDataMessage"},
- {0x011F, "FeatureStatMessage"},
- {0x0120, "DisplayPriNotifyMessage"},
- {0x0121, "ClearPriNotifyMessage"},
- {0x0122, "StartAnnouncementMessage"},
- {0x0123, "StopAnnouncementMessage"},
- {0x0124, "AnnouncementFinishMessage"},
- {0x0127, "NotifyDtmfToneMessage"},
- {0x0128, "SendDtmfToneMessage"},
- {0x0129, "SubscribeDtmfPayloadReqMessage"},
- {0x012A, "SubscribeDtmfPayloadResMessage"},
- {0x012B, "SubscribeDtmfPayloadErrMessage"},
- {0x012C, "UnSubscribeDtmfPayloadReqMessage"},
- {0x012D, "UnSubscribeDtmfPayloadResMessage"},
- {0x012E, "UnSubscribeDtmfPayloadErrMessage"},
- {0x012F, "ServiceURLStatMessage"},
- {0x0130, "CallSelectStatMessage"},
- {0x0131, "OpenMultiMediaChannelMessage"},
- {0x0132, "StartMultiMediaTransmission"},
- {0x0133, "StopMultiMediaTransmission"},
- {0x0134, "MiscellaneousCommandMessage"},
- {0x0135, "FlowControlCommandMessage"},
- {0x0136, "CloseMultiMediaReceiveChannel"},
- {0x0137, "CreateConferenceReqMessage"},
- {0x0138, "DeleteConferenceReqMessage"},
- {0x0139, "ModifyConferenceReqMessage"},
- {0x013A, "AddParticipantReqMessage"},
- {0x013B, "DropParticipantReqMessage"},
- {0x013C, "AuditConferenceReqMessage"},
- {0x013D, "AuditParticipantReqMessage"},
- {0x013F, "UserToDeviceDataVersion1Message"},
- {0x0140, "VideoDisplayCommandMessage"},
- {0x0141, "Unknown_Message_0x0141"},
-
- /* Dynamic Length Messages */
- {0x0143, "DynDisplayNotifyMessage"},
- {0x0144, "DynDisplayPriNotifyMessage"},
- {0x0145, "DynDisplayPromptStatusMessage"},
- {0x0146, "DynFeatureStatMessage"},
- {0x0147, "DynLineStatMessage"},
- {0x0148, "DynServiceURLStatMessage"},
- {0x0149, "DynSpeedDialStatMessage"},
- {0x014A, "DynCallInfoMessage"},
- /* End Dynamic Length Messages */
-
- {0x0152, "DialedPhoneBookAckMessage"},
- {0x0153, "CallListStateUpdate"},
- {0x0154, "StartMediaTransmissionAck"},
- {0x0155, "StartMultiMediaTransmissionAck"},
- {0x0156, "CallHistoryInfoMessage"},
- {0x0159, "ExtensionDeviceCaps"},
- {0x015A, "XMLAlarmMessage"},
- {0x015E, "Unknown_Message_0x015E"},
-
- /* SPCP Messages (SubClass of SCCP Messages ) */
- /* Station -> Callmanager */
- {0x8000, "SPCPRegisterTokenRequest"},
-
- /* Callmanager -> Station */
- {0x8100, "SPCPRegisterTokenAck"},
- {0x8101, "SPCPRegisterTokenReject"},
-
- {0 , NULL} /* terminator */
+ { 0x0000, "KeepAlive" },
+ { 0x0001, "Register" },
+ { 0x0002, "IpPort" },
+ { 0x0003, "KeypadButton" },
+ { 0x0004, "EnblocCall" },
+ { 0x0005, "Stimulus" },
+ { 0x0006, "OffHook" },
+ { 0x0007, "OnHook" },
+ { 0x0008, "HookFlash" },
+ { 0x0009, "ForwardStatReq" },
+ { 0x000a, "SpeedDialStatReq" },
+ { 0x000b, "LineStatReq" },
+ { 0x000c, "ConfigStatReq" },
+ { 0x000d, "TimeDateReq" },
+ { 0x000e, "ButtonTemplateReq" },
+ { 0x000f, "VersionReq" },
+ { 0x0010, "CapabilitiesRes" },
+ { 0x0012, "ServerReq" },
+ { 0x0020, "Alarm" },
+ { 0x0021, "MulticastMediaReceptionAck" },
+ { 0x0022, "OpenReceiveChannelAck" },
+ { 0x0023, "ConnectionStatisticsRes" },
+ { 0x0024, "OffHookWithCgpn" },
+ { 0x0025, "SoftKeySetReq" },
+ { 0x0026, "SoftKeyEvent" },
+ { 0x0027, "Unregister" },
+ { 0x0028, "SoftKeyTemplateReq" },
+ { 0x0029, "RegisterTokenReq" },
+ { 0x002a, "MediaTransmissionFailure" },
+ { 0x002b, "HeadsetStatus" },
+ { 0x002c, "MediaResourceNotification" },
+ { 0x002d, "RegisterAvailableLines" },
+ { 0x002e, "DeviceToUserData" },
+ { 0x002f, "DeviceToUserDataResponse" },
+ { 0x0030, "UpdateCapabilities" },
+ { 0x0031, "OpenMultiMediaReceiveChannelAck" },
+ { 0x0032, "ClearConference" },
+ { 0x0033, "ServiceURLStatReq" },
+ { 0x0034, "FeatureStatReq" },
+ { 0x0035, "CreateConferenceRes" },
+ { 0x0036, "DeleteConferenceRes" },
+ { 0x0037, "ModifyConferenceRes" },
+ { 0x0038, "AddParticipantRes" },
+ { 0x0039, "AuditConferenceRes" },
+ { 0x0040, "AuditParticipantRes" },
+ { 0x0041, "DeviceToUserDataVersion1" },
+ { 0x0042, "DeviceToUserDataResponseVersion1" },
+ { 0x0043, "UpdateCapabilitiesV2" },
+ { 0x0044, "UpdateCapabilitiesV3" },
+ { 0x0045, "PortRes" },
+ { 0x0046, "QoSResvNotify" },
+ { 0x0047, "QoSErrorNotify" },
+ { 0x0048, "SubscriptionStatReq" },
+ { 0x0049, "MediaPathEvent" },
+ { 0x004a, "MediaPathCapability" },
+ { 0x004c, "MwiNotification" },
+ { 0x0081, "RegisterAck" },
+ { 0x0082, "StartTone" },
+ { 0x0083, "StopTone" },
+ { 0x0085, "SetRinger" },
+ { 0x0086, "SetLamp" },
+ { 0x0088, "SetSpeakerMode" },
+ { 0x0089, "SetMicroMode" },
+ { 0x008a, "StartMediaTransmission" },
+ { 0x008b, "StopMediaTransmission" },
+ { 0x008f, "CallInfo" },
+ { 0x0090, "ForwardStat" },
+ { 0x0091, "SpeedDialStat" },
+ { 0x0092, "LineStat" },
+ { 0x0093, "ConfigStat" },
+ { 0x0094, "DefineTimeDate" },
+ { 0x0095, "StartSessionTransmission" },
+ { 0x0096, "StopSessionTransmission" },
+ { 0x0097, "ButtonTemplate" },
+ { 0x0098, "Version" },
+ { 0x0099, "DisplayText" },
+ { 0x009a, "ClearDisplay" },
+ { 0x009b, "CapabilitiesReq" },
+ { 0x009d, "RegisterReject" },
+ { 0x009e, "ServerRes" },
+ { 0x009f, "Reset" },
+ { 0x0100, "KeepAliveAck" },
+ { 0x0101, "StartMulticastMediaReception" },
+ { 0x0102, "StartMulticastMediaTransmission" },
+ { 0x0103, "StopMulticastMediaReception" },
+ { 0x0104, "StopMulticastMediaTransmission" },
+ { 0x0105, "OpenReceiveChannel" },
+ { 0x0106, "CloseReceiveChannel" },
+ { 0x0107, "ConnectionStatisticsReq" },
+ { 0x0108, "SoftKeyTemplateRes" },
+ { 0x0109, "SoftKeySetRes" },
+ { 0x0110, "SelectSoftKeys" },
+ { 0x0111, "CallState" },
+ { 0x0112, "DisplayPromptStatus" },
+ { 0x0113, "ClearPromptStatus" },
+ { 0x0114, "DisplayNotify" },
+ { 0x0115, "ClearNotify" },
+ { 0x0116, "ActivateCallPlane" },
+ { 0x0117, "DeactivateCallPlane" },
+ { 0x0118, "UnregisterAck" },
+ { 0x0119, "BackSpaceReq" },
+ { 0x011a, "RegisterTokenAck" },
+ { 0x011b, "RegisterTokenReject" },
+ { 0x011c, "StartMediaFailureDetection" },
+ { 0x011d, "DialedNumber" },
+ { 0x011e, "UserToDeviceData" },
+ { 0x011f, "FeatureStat" },
+ { 0x0120, "DisplayPriNotify" },
+ { 0x0121, "ClearPriNotify" },
+ { 0x0122, "StartAnnouncement" },
+ { 0x0123, "StopAnnouncement" },
+ { 0x0124, "AnnouncementFinish" },
+ { 0x0127, "NotifyDtmfTone" },
+ { 0x0128, "SendDtmfTone" },
+ { 0x0129, "SubscribeDtmfPayloadReq" },
+ { 0x012a, "SubscribeDtmfPayloadRes" },
+ { 0x012b, "SubscribeDtmfPayloadErr" },
+ { 0x012c, "UnSubscribeDtmfPayloadReq" },
+ { 0x012d, "UnSubscribeDtmfPayloadRes" },
+ { 0x012e, "UnSubscribeDtmfPayloadErr" },
+ { 0x012f, "ServiceURLStat" },
+ { 0x0130, "CallSelectStat" },
+ { 0x0131, "OpenMultiMediaReceiveChannel" },
+ { 0x0132, "StartMultiMediaTransmission" },
+ { 0x0133, "StopMultiMediaTransmission" },
+ { 0x0134, "MiscellaneousCommand" },
+ { 0x0135, "FlowControlCommand" },
+ { 0x0136, "CloseMultiMediaReceiveChannel" },
+ { 0x0137, "CreateConferenceReq" },
+ { 0x0138, "DeleteConferenceReq" },
+ { 0x0139, "ModifyConferenceReq" },
+ { 0x013a, "AddParticipantReq" },
+ { 0x013b, "DropParticipantReq" },
+ { 0x013c, "AuditConferenceReq" },
+ { 0x013d, "AuditParticipantReq" },
+ { 0x013e, "ChangeParticipantReq" },
+ { 0x013f, "UserToDeviceDataVersion1" },
+ { 0x0140, "VideoDisplayCommand" },
+ { 0x0141, "FlowControlNotify" },
+ { 0x0142, "ConfigStatV2" },
+ { 0x0143, "DisplayNotifyV2" },
+ { 0x0144, "DisplayPriNotifyV2" },
+ { 0x0145, "DisplayPromptStatusV2" },
+ { 0x0146, "FeatureStatV2" },
+ { 0x0147, "LineStatV2" },
+ { 0x0148, "ServiceURLStatV2" },
+ { 0x0149, "SpeedDialStatV2" },
+ { 0x014a, "CallInfoV2" },
+ { 0x014b, "PortReq" },
+ { 0x014c, "PortClose" },
+ { 0x014d, "QoSListen" },
+ { 0x014e, "QoSPath" },
+ { 0x014f, "QoSTeardown" },
+ { 0x0150, "UpdateDSCP" },
+ { 0x0151, "QoSModify" },
+ { 0x0152, "SubscriptionStat" },
+ { 0x0153, "Notification" },
+ { 0x0154, "StartMediaTransmissionAck" },
+ { 0x0155, "StartMultiMediaTransmissionAck" },
+ { 0x0156, "CallHistoryInfo" },
+ { 0x0158, "MwiResponse" },
+ { 0x015a, "EnhancedAlarm" },
+ { 0x015e, "CallCountReq" },
+ { 0x015f, "CallCountResp" },
+ { 0x0160, "RecordingStatus" },
+ { 0x8000, "SPCPRegisterTokenReq" },
+ { 0x8100, "SPCPRegisterTokenAck" },
+ { 0x8101, "SPCPRegisterTokenReject" },
+ {0 , NULL}
};
static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id);
-/*
- * Device type to text conversion table
- */
-static const value_string deviceTypes[] = {
- {1, "30SPplus"},
- {2, "12SPplus"},
- {3, "12SP"},
- {4, "12"},
- {5, "30VIP"},
- {6, "Cisco 7910"}, /* {6 , "Telecaster"}, */
- {7, "Cisco 7960"}, /* {7 , "TelecasterMgr"}, */
- {8, "Cisco 7940"}, /* {8 , "TelecasterBus"}, */
- {9, "Cisco 7935"}, /* {9 , "Polycom"}, */
- {10, "VGC"},
- {12, "ATA"},
- {20, "Virtual30SPplus"},
- {21, "PhoneApplication"},
- {30, "AnalogAccess"},
- {40, "DigitalAccessPRI"},
- {41, "DigitalAccessT1"},
- {42, "DigitalAccessTitan2"},
- {43, "DigitalAccessLennon"},
- {47, "AnalogAccessElvis"},
- {50, "ConferenceBridge"},
- {51, "ConferenceBridgeYoko"},
- {52, "ConferenceBridgeDixieLand"},
- {53, "ConferenceBridgeSummit"},
- {60, "H225"},
- {61, "H323Phone"},
- {62, "H323Trunk"},
- {70, "MusicOnHold"},
- {71, "Pilot"},
- {72, "TapiPort"},
- {73, "TapiRoutePoint"},
- {80, "VoiceInBox"},
- {81, "VoiceInboxAdmin"},
- {82, "LineAnnunciator"},
- {83, "SoftwareMtpDixieLand"},
- {84, "CiscoMediaServer"},
- {85, "ConferenceBridgeFlint"},
- {90, "RouteList"},
- {100, "LoadSimulator"},
- {110, "MediaTerminationPoint"},
- {111, "MediaTerminationPointYoko"},
- {112, "MediaTerminationPointDixieLand"},
- {113, "MediaTerminationPointSummit"},
- {115, "Cisco 7941"},
- {119, "Cisco 7971"},
- {120, "MGCPStation"},
- {121, "MGCPTrunk"},
- {122, "RASProxy"},
- {124, "Cisco 7914"},
- {125, "Trunk"},
- {126, "Annunciator"},
- {127, "MonitorBridge"},
- {128, "Recorder"},
- {129, "MonitorBridgeYoko"},
- {131, "SipTrunk"},
- {227, "Cisco 7915 (12BUTTONS)"},
- {228, "Cisco 7915"},
- {229, "Cisco 7916 (12BUTTONS)"},
- {230, "Cisco 7916"},
- {254, "UnknownMGCPGateway"},
- {255, "NotDefined"},
- {275, "Nokia E-Series"},
- {302, "Cisco 7985"},
- {307, "Cisco 7911"},
- {308, "Cisco 7961GE"},
- {309, "Cisco 7941GE"},
- {348, "Cisco 7931"},
- {365, "Cisco 7921"},
- {369, "Cisco 7906"},
- {376, "Nokia Mobile"},
- {404, "Cisco 7962"},
- {431, "Cisco 7937"},
- {434, "Cisco 7942"},
- {435, "Cisco 7945"},
- {436, "Cisco 7965"},
- {437, "Cisco 7975"},
- {484, "Cisco 7925"},
- {495, "Cisco 6921"},
- {496, "Cisco 6941"},
- {497, "Cisco 6961"},
- {540, "Cisco 8961"},
- {547, "Cisco 6901"},
- {548, "Cisco 6911"},
- {564, "Cisco 6945"},
- {585, "Cisco 8945"},
- {586, "Cisco 8941"},
- {20000, "Cisco 7905"},
- {30002, "Cisco 7920"},
- {30006, "Cisco 7970"},
- {30007, "Cisco 7912"},
- {30008, "Cisco 7902"},
- {30016, "Cisco IP Communicator"},
- {30018, "Cisco 7961"},
- {30019, "Cisco 7936"},
- {30027, "Cisco Gateway AN"},
- {30028, "Cisco Gateway BRI"},
- {80000, "Linksys SPA521S"},
- {80005, "Linksys SPA525G"},
- {80009, "Linksys SPA525G2"},
-
- { 0 , NULL}
+
+/* Declare Enums and Defines */
+static const value_string DisplayLabels_36[] = {
+ { 0x00000, "Empty" },
+ { 0x00002, "Acct" },
+ { 0x00003, "Flash" },
+ { 0x00004, "Login" },
+ { 0x00005, "Device In Home Location" },
+ { 0x00006, "Device In Roaming Location" },
+ { 0x00007, "Enter Authorization Code" },
+ { 0x00008, "Enter Client Matter Code" },
+ { 0x00009, "Calls Available For Pickup" },
+ { 0x0000a, "Cm Fallback Service Operating" },
+ { 0x0000b, "Max Phones Exceeded" },
+ { 0x0000c, "Waiting To Rehome" },
+ { 0x0000d, "Please End Call" },
+ { 0x0000e, "Paging" },
+ { 0x0000f, "Select Line" },
+ { 0x00010, "Transfer Destination Is Busy" },
+ { 0x00011, "Select A Service" },
+ { 0x00012, "Local Services" },
+ { 0x00013, "Enter Search Criteria" },
+ { 0x00014, "Night Service" },
+ { 0x00015, "Night Service Active" },
+ { 0x00016, "Night Service Disabled" },
+ { 0x00017, "Login Successful" },
+ { 0x00018, "Wrong Pin" },
+ { 0x00019, "Please Enter Pin" },
+ { 0x0001a, "Of" },
+ { 0x0001b, "Records 1 To" },
+ { 0x0001c, "No Record Found" },
+ { 0x0001d, "Search Results" },
+ { 0x0001e, "Calls In Queue" },
+ { 0x0001f, "Join To Hunt Group" },
+ { 0x00020, "Ready" },
+ { 0x00021, "Notready" },
+ { 0x00022, "Call On Hold" },
+ { 0x00023, "Hold Reversion" },
+ { 0x00024, "Setup Failed" },
+ { 0x00025, "No Resources" },
+ { 0x00026, "Device Not Authorized" },
+ { 0x00027, "Monitoring" },
+ { 0x00028, "Recording Awaiting Call To Be Active" },
+ { 0x00029, "Recording Already In Progress" },
+ { 0x0002a, "Inactive Recording Session" },
+ { 0x0002b, "Mobility" },
+ { 0x0002c, "Whisper" },
+ { 0x0002d, "Forward All" },
+ { 0x0002e, "Malicious Call Id" },
+ { 0x0002f, "Group Pickup" },
+ { 0x00030, "Remove Last Participant" },
+ { 0x00031, "Other Pickup" },
+ { 0x00032, "Video" },
+ { 0x00033, "End Call" },
+ { 0x00034, "Conference List" },
+ { 0x00035, "Quality Reporting Tool" },
+ { 0x00036, "Hunt Group" },
+ { 0x00037, "Use Line Or Join To Complete" },
+ { 0x00038, "Do Not Disturb" },
+ { 0x00039, "Do Not Disturb Is Active" },
+ { 0x0003a, "Cfwdall Loop Detected" },
+ { 0x0003b, "Cfwdall Hops Exceeded" },
+ { 0x0003c, "Abbrdial" },
+ { 0x0003d, "Pickup Is Unavailable" },
+ { 0x0003e, "Conference Is Unavailable" },
+ { 0x0003f, "Meetme Is Unavailable" },
+ { 0x00040, "Cannot Retrieve Parked Call" },
+ { 0x00041, "Cannot Send Call To Mobile" },
+ { 0x00043, "Record" },
+ { 0x00044, "Cannot Move Conversation" },
+ { 0x00045, "Cw Off" },
+ { 0x00046, "Coaching" },
+ { 0x0004f, "Recording" },
+ { 0x00050, "Recording Failed" },
+ { 0x00051, "Connecting" },
+ { 0x00000, NULL }
};
-static value_string_ext deviceTypes_ext = VALUE_STRING_EXT_INIT(deviceTypes);
-
-/*
- * keypad button -> text conversion
- */
-static const value_string keypadButtons[] = {
- {0x0 , "Zero"},
- {0x1 , "One"},
- {0x2 , "Two"},
- {0x3 , "Three"},
- {0x4 , "Four"},
- {0x5 , "Five"},
- {0x6 , "Six"},
- {0x7 , "Seven"},
- {0x8 , "Eight"},
- {0x9 , "Nine"},
- {0xa , "A"},
- {0xb , "B"},
- {0xc , "C"},
- {0xd , "D"},
- {0xe , "Star"},
- {0xf , "Pound"},
- {0 , NULL}
+static value_string_ext DisplayLabels_36_ext = VALUE_STRING_EXT_INIT(DisplayLabels_36);
+
+static const value_string DisplayLabels_200[] = {
+ { 0x00001, "Redial" },
+ { 0x00002, "Newcall" },
+ { 0x00003, "Hold" },
+ { 0x00004, "Transfer" },
+ { 0x00005, "Cfwdall" },
+ { 0x00006, "Cfwdbusy" },
+ { 0x00007, "Cfwdnoanswer" },
+ { 0x00008, "Backspace" },
+ { 0x00009, "Endcall" },
+ { 0x0000a, "Resume" },
+ { 0x0000b, "Answer" },
+ { 0x0000c, "Info" },
+ { 0x0000d, "Confrn" },
+ { 0x0000e, "Park" },
+ { 0x0000f, "Join" },
+ { 0x00010, "Meetme" },
+ { 0x00011, "Pickup" },
+ { 0x00012, "Gpickup" },
+ { 0x00013, "Your Current Options" },
+ { 0x00014, "Off Hook" },
+ { 0x00015, "On Hook" },
+ { 0x00016, "Ring Out" },
+ { 0x00017, "From" },
+ { 0x00018, "Connected" },
+ { 0x00019, "Busy" },
+ { 0x0001a, "Line In Use" },
+ { 0x0001b, "Call Waiting" },
+ { 0x0001c, "Call Transfer" },
+ { 0x0001d, "Call Park" },
+ { 0x0001e, "Call Proceed" },
+ { 0x0001f, "In Use Remote" },
+ { 0x00020, "Enter Number" },
+ { 0x00021, "Call Park At" },
+ { 0x00022, "Primary Only" },
+ { 0x00023, "Temp Fail" },
+ { 0x00024, "You Have Voicemail" },
+ { 0x00025, "Forwarded To" },
+ { 0x00026, "Can Not Complete Conference" },
+ { 0x00027, "No Conference Bridge" },
+ { 0x00028, "Can Not Hold Primary Control" },
+ { 0x00029, "Invalid Conference Participant" },
+ { 0x0002a, "In Conference Already" },
+ { 0x0002b, "No Participant Info" },
+ { 0x0002c, "Exceed Maximum Parties" },
+ { 0x0002d, "Key Is Not Active" },
+ { 0x0002e, "Error No License" },
+ { 0x0002f, "Error Dbconfig" },
+ { 0x00030, "Error Database" },
+ { 0x00031, "Error Pass Limit" },
+ { 0x00032, "Error Unknown" },
+ { 0x00033, "Error Mismatch" },
+ { 0x00034, "Conference" },
+ { 0x00035, "Park Number" },
+ { 0x00036, "Private" },
+ { 0x00037, "Not Enough Bandwidth" },
+ { 0x00038, "Unknown Number" },
+ { 0x00039, "Rmlstc" },
+ { 0x0003a, "Voicemail" },
+ { 0x0003b, "Immdiv" },
+ { 0x0003c, "Intrcpt" },
+ { 0x0003d, "Setwtch" },
+ { 0x0003e, "Trnsfvm" },
+ { 0x0003f, "Dnd" },
+ { 0x00040, "Divall" },
+ { 0x00041, "Callback" },
+ { 0x00042, "Network Congestion Rerouting" },
+ { 0x00043, "Barge" },
+ { 0x00044, "Failed To Setup Barge" },
+ { 0x00045, "Another Barge Exists" },
+ { 0x00046, "Incompatible Device Type" },
+ { 0x00047, "No Park Number Available" },
+ { 0x00048, "Callpark Reversion" },
+ { 0x00049, "Service Is Not Active" },
+ { 0x0004a, "High Traffic Try Again Later" },
+ { 0x0004b, "Qrt" },
+ { 0x0004c, "Mcid" },
+ { 0x0004d, "Dirtrfr" },
+ { 0x0004e, "Select" },
+ { 0x0004f, "Conflist" },
+ { 0x00050, "Idivert" },
+ { 0x00051, "Cbarge" },
+ { 0x00052, "Can Not Complete Transfer" },
+ { 0x00053, "Can Not Join Calls" },
+ { 0x00054, "Mcid Successful" },
+ { 0x00055, "Number Not Configured" },
+ { 0x00056, "Security Error" },
+ { 0x00057, "Video Bandwidth Unavailable" },
+ { 0x00058, "Vidmode" },
+ { 0x00059, "Max Call Duration Timeout" },
+ { 0x0005a, "Max Hold Duration Timeout" },
+ { 0x0005b, "Opickup" },
+ { 0x0005c, "Hlog" },
+ { 0x0005d, "Logged Out Of Hunt Group" },
+ { 0x0005e, "Park Slot Unavailable" },
+ { 0x0005f, "No Call Available For Pickup" },
+ { 0x00061, "External Transfer Restricted" },
+ { 0x00062, "No Line Available For Pickup" },
+ { 0x00063, "Path Replacement In Progress" },
+ { 0x00064, "Unknown 2" },
+ { 0x00065, "Mac Address" },
+ { 0x00066, "Host Name" },
+ { 0x00067, "Domain Name" },
+ { 0x00068, "Ip Address" },
+ { 0x00069, "Subnet Mask" },
+ { 0x0006a, "Tftp Server 1" },
+ { 0x0006b, "Default Router 1" },
+ { 0x0006c, "Default Router 2" },
+ { 0x0006d, "Default Router 3" },
+ { 0x0006e, "Default Router 4" },
+ { 0x0006f, "Default Router 5" },
+ { 0x00070, "Dns Server 1" },
+ { 0x00071, "Dns Server 2" },
+ { 0x00072, "Dns Server 3" },
+ { 0x00073, "Dns Server 4" },
+ { 0x00074, "Dns Server 5" },
+ { 0x00075, "Operational Vlan Id" },
+ { 0x00076, "Admin Vlan Id" },
+ { 0x00077, "Call Manager 1" },
+ { 0x00078, "Call Manager 2" },
+ { 0x00079, "Call Manager 3" },
+ { 0x0007a, "Call Manager 4" },
+ { 0x0007b, "Call Manager 5" },
+ { 0x0007c, "Information Url" },
+ { 0x0007d, "Directories Url" },
+ { 0x0007e, "Messages Url" },
+ { 0x0007f, "Services Url" },
+ { 0x00000, NULL }
};
-static value_string_ext keypadButtons_ext = VALUE_STRING_EXT_INIT(keypadButtons);
-
-static const value_string deviceStimuli[] = {
- {0x1 , "LastNumberRedial"},
- {0x2 , "SpeedDial"},
- {0x3 , "Hold"},
- {0x4 , "Transfer"},
- {0x5 , "ForwardAll"},
- {0x6 , "ForwardBusy"},
- {0x7 , "ForwardNoAnswer"},
- {0x8 , "Display"},
- {0x9 , "Line"},
- {0xa , "T120Chat"},
- {0xb , "T120Whiteboard"},
- {0xc , "T120ApplicationSharing"},
- {0xd , "T120FileTransfer"},
- {0xe , "Video"},
- {0xf , "VoiceMail"},
- {0x10 , "AutoAnswerRelease"},
- {0x11 , "AutoAnswer"},
- {0x12 , "Select"},
- {0x13 , "Privacy"},
- {0x14 , "ServiceURL"},
- {0x1B , "MaliciousCall"},
- {0x21 , "GenericAppB1"},
- {0x22 , "GenericAppB2"},
- {0x23 , "GenericAppB3"},
- {0x24 , "GenericAppB4"},
- {0x25 , "GenericAppB5"},
- {0x7b , "MeetMeConference"},
- {0x7d , "Conference"},
- {0x7e , "CallPark"},
- {0x7f , "CallPickup"},
- {0x80 , "GroupCallPickup"},
- {0,NULL}
+static value_string_ext DisplayLabels_200_ext = VALUE_STRING_EXT_INIT(DisplayLabels_200);
+
+static const value_string DeviceType[] = {
+ { 0x00001, "Station30SPplus" },
+ { 0x00002, "Station12SPplus" },
+ { 0x00003, "Station12SP" },
+ { 0x00004, "Station12" },
+ { 0x00005, "Station30VIP" },
+ { 0x00006, "StationTelecaster" },
+ { 0x00006, "Cisco 7910" },
+ { 0x00007, "StationTelecasterMgr" },
+ { 0x00008, "StationTelecasterBus" },
+ { 0x00008, "Cisco 7940" },
+ { 0x00009, "StationPolycom" },
+ { 0x00009, "Cisco 7935" },
+ { 0x0000a, "StationVGC" },
+ { 0x0000b, "VGCVirtualPhone" },
+ { 0x0000c, "StationATA186" },
+ { 0x0000d, "StationATA188" },
+ { 0x0000f, "EmccBase" },
+ { 0x00014, "Virtual30SPplus" },
+ { 0x00015, "StationPhoneApplication" },
+ { 0x0001e, "AnalogAccess" },
+ { 0x00028, "DigitalAccessTitan1" },
+ { 0x00029, "Digital Access T1" },
+ { 0x0002a, "DigitalAccessTitan2" },
+ { 0x0002b, "DigitalAccessLennon" },
+ { 0x0002f, "AnalogAccessElvis" },
+ { 0x00030, "VGCGateway" },
+ { 0x00032, "ConferenceBridge" },
+ { 0x00033, "ConferenceBridgeYoko" },
+ { 0x00034, "ConferenceBridgeDixieLand" },
+ { 0x00035, "ConferenceBridgeSummit" },
+ { 0x0003c, "H225" },
+ { 0x0003d, "H323Phone" },
+ { 0x0003e, "H323Gateway" },
+ { 0x00046, "MusicOnHold" },
+ { 0x00047, "Pilot" },
+ { 0x00048, "TapiPort" },
+ { 0x00049, "TapiRoutePoint" },
+ { 0x00050, "VoiceInBox" },
+ { 0x00051, "VoiceInboxAdmin" },
+ { 0x00052, "LineAnnunciator" },
+ { 0x00053, "SoftwareMtpDixieLand" },
+ { 0x00054, "CiscoMediaServer" },
+ { 0x00055, "ConferenceBridgeFlint" },
+ { 0x00056, "ConferenceBridgeHetroGen" },
+ { 0x00057, "ConferenceBridgeAudVid" },
+ { 0x00058, "ConferenceHVideoBridge" },
+ { 0x0005a, "RouteList" },
+ { 0x00064, "LoadSimulator" },
+ { 0x0006e, "MediaTerminationPoint" },
+ { 0x0006f, "MediaTerminationPointYoko" },
+ { 0x00070, "MediaTerminationPointDixieLand" },
+ { 0x00071, "MediaTerminationPointSummit" },
+ { 0x00073, "7941G" },
+ { 0x00077, "7971" },
+ { 0x00078, "MGCPStation" },
+ { 0x00079, "MGCPTrunk" },
+ { 0x0007a, "RASProxy" },
+ { 0x0007c, "Cisco 7914 AddOn" },
+ { 0x0007d, "Trunk" },
+ { 0x0007e, "Annunciator" },
+ { 0x0007f, "MonitorBridge" },
+ { 0x00080, "Recorder" },
+ { 0x00081, "MonitorBridgeYoko" },
+ { 0x00083, "SipTrunk" },
+ { 0x00084, "SipGateway" },
+ { 0x00085, "WsmTrunk" },
+ { 0x00086, "RemoteDestination" },
+ { 0x000e3, "Cisco 7915 AddOn" },
+ { 0x000e4, "Cisco 7915 AddOn" },
+ { 0x000e5, "Cisco 7916 AddOn" },
+ { 0x000e6, "Cisco 7916 AddOn" },
+ { 0x000fd, "GenericDevice" },
+ { 0x000fe, "UnknownMGCPGateway" },
+ { 0x000ff, "NotDefined" },
+ { 0x00113, "Nokia E Series" },
+ { 0x0012e, "7989" },
+ { 0x0012e, "Cisco 7985" },
+ { 0x00133, "7911" },
+ { 0x00134, "7941G_GE" },
+ { 0x00134, "Cisco 7961 GE" },
+ { 0x00135, "7961G_GE" },
+ { 0x0014f, "MotorolaCN622" },
+ { 0x00150, "3rdPartySipBasic" },
+ { 0x0015c, "StationGoPed" },
+ { 0x0015c, "Cisco 7931" },
+ { 0x00166, "UnifiedCommunicator" },
+ { 0x0016d, "7921" },
+ { 0x00171, "7906" },
+ { 0x00176, "3rdPartySipAdv" },
+ { 0x00177, "Telepresence" },
+ { 0x00178, "Nokia ICC client" },
+ { 0x00194, "7962" },
+ { 0x0019c, "3951" },
+ { 0x001af, "7937" },
+ { 0x001b2, "7942" },
+ { 0x001b3, "7945" },
+ { 0x001b4, "7965" },
+ { 0x001b5, "7975" },
+ { 0x001d4, "UnifiedMobileCommunicator" },
+ { 0x001e4, "Cisco 7925" },
+ { 0x001ed, "9971_CE" },
+ { 0x001ef, "Cisco 6921" },
+ { 0x001f0, "Cisco 6941" },
+ { 0x001f1, "Cisco 6961" },
+ { 0x001f7, "CSF" },
+ { 0x00223, "Cisco 6901" },
+ { 0x00224, "Cisco 6911" },
+ { 0x00234, "Cisco 6945" },
+ { 0x00249, "Cisco 8945" },
+ { 0x0024a, "Cisco 8941" },
+ { 0x00255, "CiscoTelepresenceMcu" },
+ { 0x00257, "CiscoTelePresenceExchange" },
+ { 0x00258, "CiscoTelePresenceSoftwareConferenceBridge" },
+ { 0x00277, "ASSip" },
+ { 0x0027b, "CtiRemoteDevice" },
+ { 0x04e20, "7905" },
+ { 0x07532, "7920" },
+ { 0x07536, "7970" },
+ { 0x07537, "7912" },
+ { 0x07538, "7902" },
+ { 0x07540, "SoftPhone" },
+ { 0x07540, "Cisco IP Communicator" },
+ { 0x07542, "7961G" },
+ { 0x07543, "7936" },
+ { 0x0754b, "AnalogPhone" },
+ { 0x0754c, "ISDNBRIPhone" },
+ { 0x07550, "SCCPGwVirtualPhone" },
+ { 0x07553, "IP_STE" },
+ { 0x08cc9, "CiscoTelePresenceConductor" },
+ { 0x13880, "Cisco SPA 521S" },
+ { 0x13883, "Cisco SPA 502G" },
+ { 0x13884, "Cisco SPA 504G" },
+ { 0x13885, "Cisco SPA 525G" },
+ { 0x13887, "Cisco SPA 509G" },
+ { 0x13889, "Cisco SPA 525G2" },
+ { 0x1388b, "Cisco SPA 303G" },
+ { 0x00000, NULL }
};
-static value_string_ext deviceStimuli_ext = VALUE_STRING_EXT_INIT(deviceStimuli);
-
-
-/* Note i'm only using 7 later on cuz i'm lazy ;) */
-#define DeviceMaxCapabilities 18 /* max capabilities allowed in Cap response message */
-
-static const value_string mediaPayloads[] = {
- {1 , "Non-standard codec"},
- {2 , "G.711 A-law 64k"},
- {3 , "G.711 A-law 56k"},
- {4 , "G.711 u-law 64k"},
- {5 , "G.711 u-law 56k"},
- {6 , "G.722 64k"},
- {7 , "G.722 56k"},
- {8 , "G.722 48k"},
- {9 , "G.723.1"},
- {10 , "G.728"},
- {11 , "G.729"},
- {12 , "G.729 Annex A"},
- {13 , "IS11172 AudioCap"}, /* IS11172 is an ISO MPEG standard */
- {14 , "IS13818 AudioCap"}, /* IS13818 is an ISO MPEG standard */
- {15 , "G.729 Annex B"},
- {16 , "G.729 Annex A+Annex B"},
- {18 , "GSM Full Rate"},
- {19 , "GSM Half Rate"},
- {20 , "GSM Enhanced Full Rate"},
- {25 , "Wideband 256k"},
- {32 , "Data 64k"},
- {33 , "Data 56k"},
- {80 , "GSM"},
- {81 , "ActiveVoice"},
- {82 , "G.726 32K"},
- {83 , "G.726 24K"},
- {84 , "G.726 16K"},
- {85 , "G.729B"},
- {86 , "G.729B Low Complexity"},
- {100 , "H261"},
- {101 , "H263"},
- {102 , "Video"},
- {105 , "T120"},
- {106 , "H224"},
- {257 , "RFC2833_DynPayload"},
- {0 , NULL}
+static value_string_ext DeviceType_ext = VALUE_STRING_EXT_INIT(DeviceType);
+
+static const value_string KeyPadButton[] = {
+ { 0x00000, "Zero" },
+ { 0x00001, "One" },
+ { 0x00002, "Two" },
+ { 0x00003, "Three" },
+ { 0x00004, "Four" },
+ { 0x00005, "Five" },
+ { 0x00006, "Six" },
+ { 0x00007, "Seven" },
+ { 0x00008, "Eight" },
+ { 0x00009, "Nine" },
+ { 0x0000a, "A" },
+ { 0x0000b, "B" },
+ { 0x0000c, "C" },
+ { 0x0000d, "D" },
+ { 0x0000e, "Star" },
+ { 0x0000f, "Pound" },
+ { 0x00010, "Plus" },
+ { 0x00000, NULL }
};
-static value_string_ext mediaPayloads_ext = VALUE_STRING_EXT_INIT(mediaPayloads);
-
-static const value_string alarmSeverities[] = {
- {0 , "Critical"},
- {1 , "Warning"},
- {2 , "Informational"},
- {4 , "Unknown"},
- {7 , "Major"},
- {8 , "Minor"},
- {10 , "Marginal"},
- {20 , "TraceInfo"},
- {0 , NULL}
+static value_string_ext KeyPadButton_ext = VALUE_STRING_EXT_INIT(KeyPadButton);
+
+static const value_string DeviceStimulus[] = {
+ { 0x00001, "LastNumberRedial" },
+ { 0x00002, "SpeedDial" },
+ { 0x00003, "Hold" },
+ { 0x00004, "Transfer" },
+ { 0x00005, "ForwardAll" },
+ { 0x00006, "ForwardBusy" },
+ { 0x00007, "ForwardNoAnswer" },
+ { 0x00008, "Display" },
+ { 0x00009, "Line" },
+ { 0x0000a, "T120Chat" },
+ { 0x0000b, "T120Whiteboard" },
+ { 0x0000c, "T120ApplicationSharing" },
+ { 0x0000d, "T120FileTransfer" },
+ { 0x0000e, "Video" },
+ { 0x0000f, "VoiceMail" },
+ { 0x00010, "AnswerRelease" },
+ { 0x00011, "AutoAnswer" },
+ { 0x00012, "Select" },
+ { 0x00013, "Privacy" },
+ { 0x00014, "ServiceURL" },
+ { 0x00015, "BLFSpeedDial" },
+ { 0x00016, "DPark" },
+ { 0x00017, "Intercom" },
+ { 0x0001b, "MaliciousCall" },
+ { 0x00021, "GenericAppB1" },
+ { 0x00022, "GenericAppB2" },
+ { 0x00023, "GenericAppB3" },
+ { 0x00024, "GenericAppB4" },
+ { 0x00025, "GenericAppB5" },
+ { 0x0007b, "MeetMeConference" },
+ { 0x0007d, "Conference" },
+ { 0x0007e, "CallPark" },
+ { 0x0007f, "CallPickUp" },
+ { 0x00080, "GroupCallPickUp" },
+ { 0x00081, "Mobility" },
+ { 0x00082, "DoNotDisturb" },
+ { 0x00083, "ConfList" },
+ { 0x00084, "RemoveLastParticipant" },
+ { 0x00085, "QRT" },
+ { 0x00086, "CallBack" },
+ { 0x00087, "OtherPickup" },
+ { 0x00088, "VideoMode" },
+ { 0x00089, "NewCall" },
+ { 0x0008a, "EndCall" },
+ { 0x0008b, "HLog" },
+ { 0x0008f, "Queuing" },
+ { 0x0008f, "MaxStimulusValue" },
+ { 0x00000, NULL }
};
-static value_string_ext alarmSeverities_ext = VALUE_STRING_EXT_INIT(alarmSeverities);
-
-static const value_string multicastMediaReceptionStatus[] = {
- {0 , "Ok"},
- {1 , "Error"},
- {0 , NULL}
+static value_string_ext DeviceStimulus_ext = VALUE_STRING_EXT_INIT(DeviceStimulus);
+
+#define MEDIA_PAYLOAD_G711ALAW64K 0x00002 /* audio */
+#define MEDIA_PAYLOAD_G711ALAW56K 0x00003 /* audio */
+#define MEDIA_PAYLOAD_G711ULAW64K 0x00004 /* audio */
+#define MEDIA_PAYLOAD_G711ULAW56K 0x00005 /* audio */
+#define MEDIA_PAYLOAD_G722_64K 0x00006 /* audio */
+#define MEDIA_PAYLOAD_G722_56K 0x00007 /* audio */
+#define MEDIA_PAYLOAD_G722_48K 0x00008 /* audio */
+#define MEDIA_PAYLOAD_G7231 0x00009 /* audio */
+#define MEDIA_PAYLOAD_G728 0x0000a /* audio */
+#define MEDIA_PAYLOAD_G729 0x0000b /* audio */
+#define MEDIA_PAYLOAD_G729ANNEXA 0x0000c /* audio */
+#define MEDIA_PAYLOAD_G729ANNEXB 0x0000f /* audio */
+#define MEDIA_PAYLOAD_G729ANNEXAWANNEXB 0x00010 /* audio */
+#define MEDIA_PAYLOAD_GSM_FULL_RATE 0x00012 /* audio */
+#define MEDIA_PAYLOAD_GSM_HALF_RATE 0x00013 /* audio */
+#define MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE 0x00014 /* audio */
+#define MEDIA_PAYLOAD_WIDE_BAND_256K 0x00019 /* audio */
+#define MEDIA_PAYLOAD_DATA64 0x00020 /* audio */
+#define MEDIA_PAYLOAD_DATA56 0x00021 /* audio */
+#define MEDIA_PAYLOAD_G7221_32K 0x00028 /* audio */
+#define MEDIA_PAYLOAD_G7221_24K 0x00029 /* audio */
+#define MEDIA_PAYLOAD_AAC 0x0002a /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_128 0x0002b /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_64 0x0002c /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_56 0x0002d /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_48 0x0002e /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_32 0x0002f /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_24 0x00030 /* audio */
+#define MEDIA_PAYLOAD_MP4ALATM_NA 0x00031 /* audio */
+#define MEDIA_PAYLOAD_GSM 0x00050 /* audio */
+#define MEDIA_PAYLOAD_G726_32K 0x00052 /* audio */
+#define MEDIA_PAYLOAD_G726_24K 0x00053 /* audio */
+#define MEDIA_PAYLOAD_G726_16K 0x00054 /* audio */
+#define MEDIA_PAYLOAD_ILBC 0x00056 /* audio */
+#define MEDIA_PAYLOAD_ISAC 0x00059 /* audio */
+#define MEDIA_PAYLOAD_AMR 0x00061 /* audio */
+#define MEDIA_PAYLOAD_AMR_WB 0x00062 /* audio */
+#define MEDIA_PAYLOAD_H261 0x00064 /* video */
+#define MEDIA_PAYLOAD_H263 0x00065 /* video */
+#define MEDIA_PAYLOAD_VIEO 0x00066 /* video */
+#define MEDIA_PAYLOAD_H264 0x00067 /* video */
+#define MEDIA_PAYLOAD_H264_SVC 0x00068 /* video */
+#define MEDIA_PAYLOAD_T120 0x00069 /* video */
+#define MEDIA_PAYLOAD_H224 0x0006a /* video */
+#define MEDIA_PAYLOAD_T38FAX 0x0006b /* video */
+#define MEDIA_PAYLOAD_TOTE 0x0006c /* video */
+#define MEDIA_PAYLOAD_H265 0x0006d /* video */
+#define MEDIA_PAYLOAD_H264_UC 0x0006e /* video */
+#define MEDIA_PAYLOAD_XV150_MR_711U 0x0006f /* video */
+#define MEDIA_PAYLOAD_NSE_VBD_711U 0x00070 /* video */
+#define MEDIA_PAYLOAD_XV150_MR_729A 0x00071 /* video */
+#define MEDIA_PAYLOAD_NSE_VBD_729A 0x00072 /* video */
+#define MEDIA_PAYLOAD_H264_FEC 0x00073 /* video */
+#define MEDIA_PAYLOAD_CLEAR_CHAN 0x00078 /* data */
+#define MEDIA_PAYLOAD_UNIVERSAL_XCODER 0x000de /* data */
+#define MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD 0x00101 /* data */
+#define MEDIA_PAYLOAD_PASSTHROUGH 0x00102 /* data */
+#define MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU 0x00103 /* data */
+#define MEDIA_PAYLOAD_DTMF_OOB 0x00104 /* data */
+#define MEDIA_PAYLOAD_INBAND_DTMF_RFC2833 0x00105 /* data */
+#define MEDIA_PAYLOAD_NOAUDIO 0x0012b /* data */
+#define MEDIA_PAYLOAD_V150_LC_MODEMRELAY 0x0012c /* data */
+#define MEDIA_PAYLOAD_V150_LC_SPRT 0x0012d /* data */
+#define MEDIA_PAYLOAD_V150_LC_SSE 0x0012e /* data */
+#define MEDIA_PAYLOAD_MAX 0x0012f /* data */
+
+static const value_string Media_PayloadType[] = {
+ { MEDIA_PAYLOAD_G711ALAW64K, "Media_Payload_G711Alaw64k" },
+ { MEDIA_PAYLOAD_G711ALAW56K, "Media_Payload_G711Alaw56k" },
+ { MEDIA_PAYLOAD_G711ULAW64K, "Media_Payload_G711Ulaw64k" },
+ { MEDIA_PAYLOAD_G711ULAW56K, "Media_Payload_G711Ulaw56k" },
+ { MEDIA_PAYLOAD_G722_64K, "Media_Payload_G722_64k" },
+ { MEDIA_PAYLOAD_G722_56K, "Media_Payload_G722_56k" },
+ { MEDIA_PAYLOAD_G722_48K, "Media_Payload_G722_48k" },
+ { MEDIA_PAYLOAD_G7231, "Media_Payload_G7231" },
+ { MEDIA_PAYLOAD_G728, "Media_Payload_G728" },
+ { MEDIA_PAYLOAD_G729, "Media_Payload_G729" },
+ { MEDIA_PAYLOAD_G729ANNEXA, "Media_Payload_G729AnnexA" },
+ { MEDIA_PAYLOAD_G729ANNEXB, "Media_Payload_G729AnnexB" },
+ { MEDIA_PAYLOAD_G729ANNEXAWANNEXB, "Media_Payload_G729AnnexAwAnnexB" },
+ { MEDIA_PAYLOAD_GSM_FULL_RATE, "Media_Payload_GSM_Full_Rate" },
+ { MEDIA_PAYLOAD_GSM_HALF_RATE, "Media_Payload_GSM_Half_Rate" },
+ { MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE, "Media_Payload_GSM_Enhanced_Full_Rate" },
+ { MEDIA_PAYLOAD_WIDE_BAND_256K, "Media_Payload_Wide_Band_256k" },
+ { MEDIA_PAYLOAD_DATA64, "Media_Payload_Data64" },
+ { MEDIA_PAYLOAD_DATA56, "Media_Payload_Data56" },
+ { MEDIA_PAYLOAD_G7221_32K, "Media_Payload_G7221_32K" },
+ { MEDIA_PAYLOAD_G7221_24K, "Media_Payload_G7221_24K" },
+ { MEDIA_PAYLOAD_AAC, "Media_Payload_AAC" },
+ { MEDIA_PAYLOAD_MP4ALATM_128, "Media_Payload_MP4ALATM_128" },
+ { MEDIA_PAYLOAD_MP4ALATM_64, "Media_Payload_MP4ALATM_64" },
+ { MEDIA_PAYLOAD_MP4ALATM_56, "Media_Payload_MP4ALATM_56" },
+ { MEDIA_PAYLOAD_MP4ALATM_48, "Media_Payload_MP4ALATM_48" },
+ { MEDIA_PAYLOAD_MP4ALATM_32, "Media_Payload_MP4ALATM_32" },
+ { MEDIA_PAYLOAD_MP4ALATM_24, "Media_Payload_MP4ALATM_24" },
+ { MEDIA_PAYLOAD_MP4ALATM_NA, "Media_Payload_MP4ALATM_NA" },
+ { MEDIA_PAYLOAD_GSM, "Media_Payload_GSM" },
+ { MEDIA_PAYLOAD_G726_32K, "Media_Payload_G726_32K" },
+ { MEDIA_PAYLOAD_G726_24K, "Media_Payload_G726_24K" },
+ { MEDIA_PAYLOAD_G726_16K, "Media_Payload_G726_16K" },
+ { MEDIA_PAYLOAD_ILBC, "Media_Payload_ILBC" },
+ { MEDIA_PAYLOAD_ISAC, "Media_Payload_ISAC" },
+ { MEDIA_PAYLOAD_AMR, "Media_Payload_AMR" },
+ { MEDIA_PAYLOAD_AMR_WB, "Media_Payload_AMR_WB" },
+ { MEDIA_PAYLOAD_H261, "Media_Payload_H261" },
+ { MEDIA_PAYLOAD_H263, "Media_Payload_H263" },
+ { MEDIA_PAYLOAD_VIEO, "Media_Payload_Vieo" },
+ { MEDIA_PAYLOAD_H264, "Media_Payload_H264" },
+ { MEDIA_PAYLOAD_H264_SVC, "Media_Payload_H264_SVC" },
+ { MEDIA_PAYLOAD_T120, "Media_Payload_T120" },
+ { MEDIA_PAYLOAD_H224, "Media_Payload_H224" },
+ { MEDIA_PAYLOAD_T38FAX, "Media_Payload_T38Fax" },
+ { MEDIA_PAYLOAD_TOTE, "Media_Payload_TOTE" },
+ { MEDIA_PAYLOAD_H265, "Media_Payload_H265" },
+ { MEDIA_PAYLOAD_H264_UC, "Media_Payload_H264_UC" },
+ { MEDIA_PAYLOAD_XV150_MR_711U, "Media_Payload_XV150_MR_711U" },
+ { MEDIA_PAYLOAD_NSE_VBD_711U, "Media_Payload_NSE_VBD_711U" },
+ { MEDIA_PAYLOAD_XV150_MR_729A, "Media_Payload_XV150_MR_729A" },
+ { MEDIA_PAYLOAD_NSE_VBD_729A, "Media_Payload_NSE_VBD_729A" },
+ { MEDIA_PAYLOAD_H264_FEC, "Media_Payload_H264_FEC" },
+ { MEDIA_PAYLOAD_CLEAR_CHAN, "Media_Payload_Clear_Chan" },
+ { MEDIA_PAYLOAD_UNIVERSAL_XCODER, "Media_Payload_Universal_Xcoder" },
+ { MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD, "Media_Payload_RFC2833_DynPayload" },
+ { MEDIA_PAYLOAD_PASSTHROUGH, "Media_Payload_PassThrough" },
+ { MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU, "Media_Payload_Dynamic_Payload_PassThru" },
+ { MEDIA_PAYLOAD_DTMF_OOB, "Media_Payload_DTMF_OOB" },
+ { MEDIA_PAYLOAD_INBAND_DTMF_RFC2833, "Media_Payload_Inband_DTMF_RFC2833" },
+ { MEDIA_PAYLOAD_NOAUDIO, "Media_Payload_NoAudio" },
+ { MEDIA_PAYLOAD_V150_LC_MODEMRELAY, "Media_Payload_v150_LC_ModemRelay" },
+ { MEDIA_PAYLOAD_V150_LC_SPRT, "Media_Payload_v150_LC_SPRT" },
+ { MEDIA_PAYLOAD_V150_LC_SSE, "Media_Payload_v150_LC_SSE" },
+ { MEDIA_PAYLOAD_MAX, "Media_Payload_Max" },
+ { 0x00000, NULL }
};
+static value_string_ext Media_PayloadType_ext = VALUE_STRING_EXT_INIT(Media_PayloadType);
-static const value_string openReceiveChanStatus[] = {
- {0 , "orcOk"},
- {1 , "orcError"},
- {0 , NULL}
+static const value_string Media_G723BitRate[] = {
+ { 0x00001, "Media_G723BRate_5_3" },
+ { 0x00002, "Media_G723BRate_6_3" },
+ { 0x00000, NULL }
};
-
-static const value_string ipVersion[] = {
- {0 , "IPv4"},
- {1 , "IPv6"}, /*Assume IPv6 will be set to be "1"*/
- {0 , NULL}
+static value_string_ext Media_G723BitRate_ext = VALUE_STRING_EXT_INIT(Media_G723BitRate);
+
+static const value_string DeviceAlarmSeverity[] = {
+ { 0x00000, "Critical" },
+ { 0x00001, "Warning" },
+ { 0x00002, "Informational" },
+ { 0x00004, "Unknown" },
+ { 0x00007, "Major" },
+ { 0x00008, "Minor" },
+ { 0x0000a, "Marginal" },
+ { 0x00014, "TraceInfo" },
+ { 0x00000, NULL }
};
+static value_string_ext DeviceAlarmSeverity_ext = VALUE_STRING_EXT_INIT(DeviceAlarmSeverity);
-static const value_string statsProcessingTypes[] = {
- {0 , "clearStats"},
- {1 , "doNotClearStats"},
- {0 , NULL}
+static const value_string MulticastMediaReceptionStatus[] = {
+ { 0x00000, "Ok" },
+ { 0x00001, "Error" },
+ { 0x00000, NULL }
+};
+static value_string_ext MulticastMediaReceptionStatus_ext = VALUE_STRING_EXT_INIT(MulticastMediaReceptionStatus);
+
+static const value_string MediaStatus[] = {
+ { 0x00000, "Ok" },
+ { 0x00001, "Unknown" },
+ { 0x00002, "NotEnoughChannels" },
+ { 0x00003, "CodecTooComplex" },
+ { 0x00004, "InvalidPartyID" },
+ { 0x00005, "InvalidCallRef" },
+ { 0x00006, "InvalidCodec" },
+ { 0x00007, "InvalidPacketSize" },
+ { 0x00008, "OutOfSockets" },
+ { 0x00009, "EncoderOrDecoderFailed" },
+ { 0x0000a, "InvalidDynamicPayloadType" },
+ { 0x0000b, "RequestedIpAddrTypeUnAvailable" },
+ { 0x000ff, "DeviceOnHook" },
+ { 0x00000, NULL }
+};
+static value_string_ext MediaStatus_ext = VALUE_STRING_EXT_INIT(MediaStatus);
+
+#define IPADDRTYPE_IPV4 0x00000
+#define IPADDRTYPE_IPV6 0x00001
+#define IPADDRTYPE_IPV4_V6 0x00002
+#define IPADDRTYPE_IP_INVALID 0x00003
+
+static const value_string IpAddrType[] = {
+ { IPADDRTYPE_IPV4, "v4" },
+ { IPADDRTYPE_IPV6, "v6" },
+ { IPADDRTYPE_IPV4_V6, "v4_v6" },
+ { IPADDRTYPE_IP_INVALID, "_Invalid" },
+ { 0x00000, NULL }
};
+static value_string_ext IpAddrType_ext = VALUE_STRING_EXT_INIT(IpAddrType);
-#define SkMaxSoftKeyCount 18 /* this value should be the same as the max soft key value */
-static const value_string softKeyEvents[] = {
- {1 , "Redial"},
- {2 , "NewCall"},
- {3 , "Hold"},
- {4 , "Transfer"},
- {5 , "CFwdAll"},
- {6 , "CFwdBusy"},
- {7 , "CFwdNoAnswer"},
- {8 , "BackSpace"},
- {9 , "EndCall"},
- {10 , "Resume"},
- {11 , "Answer"},
- {12 , "Info"},
- {13 , "Confrn"},
- {14 , "Park"},
- {15 , "Join"},
- {16 , "MeetMeConfrn"},
- {17 , "CallPickUp"},
- {18 , "GrpCallPickUp"},
- {0 , NULL}
+static const value_string StatsProcessingType[] = {
+ { 0x00000, "clearStats" },
+ { 0x00001, "doNotClearStats" },
+ { 0x00000, NULL }
};
-static value_string_ext softKeyEvents_ext = VALUE_STRING_EXT_INIT(softKeyEvents);
-
-/* Define info index for each softkey event for Telecaster station. */
-static const value_string softKeyIndexes[] = {
- {301 , "RedialInfoIndex"},
- {302 , "NewCallInfoIndex"},
- {303 , "HoldInfoIndex"},
- {304 , "TrnsferInfoIndex"},
- {305 , "CFwdAllInfoIndex"},
- {306 , "CFwdBusyInfoIndex"}, /* not used yet */
- {307 , "CFwdNoAnswerInfoIndex"}, /* not used yet */
- {308 , "BackSpaceInfoIndex"},
- {309 , "EndCallInfoIndex"},
- {310 , "ResumeInfoIndex"},
- {311 , "AnswerInfoIndex"},
- {312 , "InfoInfoIndex"},
- {313 , "ConfrnInfoIndex"},
- {314 , "ParkInfoIndex"},
- {315 , "JoinInfoIndex"},
- {316 , "MeetMeConfrnInfoIndex"},
- {317 , "CallPickUpInfoIndex"},
- {318 , "GrpCallPickUpInfoIndex"},
- {0 , NULL}
+static value_string_ext StatsProcessingType_ext = VALUE_STRING_EXT_INIT(StatsProcessingType);
+
+static const value_string SoftKeySet[] = {
+ { 0x00000, "On Hook" },
+ { 0x00001, "Connected" },
+ { 0x00002, "On Hold" },
+ { 0x00003, "Ring In" },
+ { 0x00004, "Off Hook" },
+ { 0x00005, "Connected Transfeable" },
+ { 0x00006, "Digits Following" },
+ { 0x00007, "Connected Conference" },
+ { 0x00008, "Ring Out" },
+ { 0x00009, "OffHook with Features" },
+ { 0x0000a, "In Use Hint" },
+ { 0x0000b, "On Hook with Stealable Call" },
+ { 0x00000, NULL }
};
-static value_string_ext softKeyIndexes_ext = VALUE_STRING_EXT_INIT(softKeyIndexes);
-
-
-static const value_string buttonDefinitions[] = {
- {0x01 , "LastNumberRedial"},
- {0x02 , "SpeedDial"},
- {0x03 , "Hold"},
- {0x04 , "Transfer"},
- {0x05 , "ForwardAll"},
- {0x06 , "ForwardBusy"},
- {0x07 , "ForwardNoAnswer"},
- {0x08 , "Display"},
- {0x09 , "Line"},
- {0x0A , "T120Chat"},
- {0x0B , "T120Whiteboard"},
- {0x0C , "T120ApplicationSharing"},
- {0x0D , "T120FileTransfer"},
- {0x0E , "Video"},
- {0x0F , "Voicemail"},
- {0x10 , "AnswerRelease"},
- {0x11 , "Auto Answer"},
- {0x13 , "Feature"},
- {0x14 , "ServiceUrl"},
- {0x15 , "BLF Speeddial"},
- {0x21 , "Generic App B1"},
- {0x22 , "Generic App B2"},
- {0x23 , "Generic App B3"},
- {0x24 , "Generic App B4"},
- {0x25 , "Generic App B5"},
- {0x26 , "Monitor/Multiblink"},
- {0x7B , "Meet Me Conference"},
- {0x7D , "Conference"},
- {0x7E , "Call Park"},
- {0x7F , "Call Pickup"},
- {0x80 , "Group Call Pickup"},
- {0x81 , "Mobility"},
- {0x82 , "Test 6"},
- {0x85 , "Test 8"},
- {0x86 , "Test 9"},
- {0x87 , "Test A"},
- {0x88 , "Test B"},
- {0x89 , "Test C"},
- {0x8A , "Test D"},
- {0x8B , "Test 7"},
- {0xC0 , "Test E"},
- {0xC1 , "Test F"},
- {0xC2 , "Messages"},
- {0xC3 , "Directory"},
- {0xC4 , "Test I"},
- {0xC5 , "Application"},
- {0xC6 , "Headset"},
- {0xF0 , "Keypad"},
- {0xFD , "AEC"},
- {0xFF , "Undefined"},
- {0 , NULL}
+static value_string_ext SoftKeySet_ext = VALUE_STRING_EXT_INIT(SoftKeySet);
+
+static const value_string SoftKeyEvent[] = {
+ { 0x00001, "Redial" },
+ { 0x00002, "NewCall" },
+ { 0x00003, "Hold" },
+ { 0x00004, "Transfer" },
+ { 0x00005, "CfwdAll" },
+ { 0x00006, "CfwdBusy" },
+ { 0x00007, "CfwdNoAnswer" },
+ { 0x00008, "BackSpace" },
+ { 0x00009, "EndCall" },
+ { 0x0000a, "Resume" },
+ { 0x0000b, "Answer" },
+ { 0x0000c, "Info" },
+ { 0x0000d, "Confrn" },
+ { 0x0000e, "Park" },
+ { 0x0000f, "Join" },
+ { 0x00010, "MeetMe" },
+ { 0x00011, "PickUp" },
+ { 0x00012, "GrpPickup" },
+ { 0x00013, "Your current options" },
+ { 0x00014, "Off Hook" },
+ { 0x00015, "On Hook" },
+ { 0x00016, "Ring out" },
+ { 0x00017, "From " },
+ { 0x00018, "Connected" },
+ { 0x00019, "Busy" },
+ { 0x0001a, "Line In Use" },
+ { 0x0001b, "Call Waiting" },
+ { 0x0001c, "Call Transfer" },
+ { 0x0001d, "Call Park" },
+ { 0x0001e, "Call Proceed" },
+ { 0x0001f, "In Use Remote" },
+ { 0x00020, "Enter number" },
+ { 0x00021, "Call park At" },
+ { 0x00022, "Primary Only" },
+ { 0x00023, "Temp Fail" },
+ { 0x00024, "You Have a VoiceMail" },
+ { 0x00025, "Forwarded to" },
+ { 0x00026, "Can Not Complete Conference" },
+ { 0x00027, "No Conference Bridge" },
+ { 0x00028, "Can Not Hold Primary Control" },
+ { 0x00029, "Invalid Conference Participant" },
+ { 0x0002a, "In Conference Already" },
+ { 0x0002b, "No Participant Info" },
+ { 0x0002c, "Exceed Maximum Parties" },
+ { 0x0002d, "Key Is Not Active" },
+ { 0x0002e, "Error No License" },
+ { 0x0002f, "Error DBConfig" },
+ { 0x00030, "Error Database" },
+ { 0x00031, "Error Pass Limit" },
+ { 0x00032, "Error Unknown" },
+ { 0x00033, "Error Mismatch" },
+ { 0x00034, "Conference" },
+ { 0x00035, "Park Number" },
+ { 0x00036, "Private" },
+ { 0x00037, "Not Enough Bandwidth" },
+ { 0x00038, "Unknown Number" },
+ { 0x00039, "RmLstC" },
+ { 0x0003a, "Voicemail" },
+ { 0x0003b, "ImmDiv" },
+ { 0x0003c, "Intrcpt" },
+ { 0x0003d, "SetWtch" },
+ { 0x0003e, "TrnsfVM" },
+ { 0x0003f, "DND" },
+ { 0x00040, "DivAll" },
+ { 0x00041, "CallBack" },
+ { 0x00042, "Network congestion,rerouting" },
+ { 0x00043, "Barge" },
+ { 0x00044, "Failed to setup Barge" },
+ { 0x00045, "Another Barge exists" },
+ { 0x00046, "Incompatible device type" },
+ { 0x00047, "No Park Number Available" },
+ { 0x00048, "CallPark Reversion" },
+ { 0x00049, "Service is not Active" },
+ { 0x0004a, "High Traffic Try Again Later" },
+ { 0x0004b, "QRT" },
+ { 0x0004c, "MCID" },
+ { 0x0004d, "DirTrfr" },
+ { 0x0004e, "Select" },
+ { 0x0004f, "ConfList" },
+ { 0x00050, "iDivert" },
+ { 0x00051, "cBarge" },
+ { 0x00052, "Can Not Complete Transfer" },
+ { 0x00053, "Can Not Join Calls" },
+ { 0x00054, "Mcid Successful" },
+ { 0x00055, "Number Not Configured" },
+ { 0x00056, "Security Error" },
+ { 0x00057, "Video Bandwidth Unavailable" },
+ { 0x00058, "Video Mode" },
+ { 0x000c9, "Dial" },
+ { 0x000ca, "Record" },
+ { 0x00000, NULL }
};
-static value_string_ext buttonDefinitions_ext = VALUE_STRING_EXT_INIT(buttonDefinitions);
-
-#define StationTotalSoftKeySets 10 /* total number of the soft key sets */
-static const value_string keySetNames[] = {
- {0 , "OnHook"},
- {1 , "Connected"},
- {2 , "OnHold"},
- {3 , "RingIn"},
- {4 , "OffHook"},
- {5 , "Connected with transfer"},
- {6 , "Digits after dialing first digit"},
- {7 , "Connected with conference"},
- {8 , "RingOut"},
- {9 , "OffHook with features"},
- {0 , NULL}
+static value_string_ext SoftKeyEvent_ext = VALUE_STRING_EXT_INIT(SoftKeyEvent);
+
+static const value_string UnRegReasonCode[] = {
+ { 0x00000, "Unknown" },
+ { 0x00001, "PowerSaveMode" },
+ { 0x00000, NULL }
};
-static value_string_ext keySetNames_ext = VALUE_STRING_EXT_INIT(keySetNames);
-
-#if 0
-/* Define soft key labels for the Telecaster station */
-static const value_string softKeyLabel[] _U_ = {
- {0 , "undefined"},
- {1 , "Redial"},
- {2 , "NewCall"},
- {3 , "Hold"},
- {4 , "Trnsfer"},
- {5 , "CFwdAll"},
- {6 , "CFwdBusy"},
- {7 , "CFwdNoAnswer"},
- {8 , "<<"},
- {9 , "EndCall"},
- {10 , "Resume"},
- {11 , "Answer"},
- {12 , "Info"},
- {13 , "Confrn"},
- {14 , "Park"},
- {15 , "Join"},
- {16 , "MeetMe"},
- {17 , "PickUp"},
- {18 , "GPickUp"},
- {0 , NULL}
+static value_string_ext UnRegReasonCode_ext = VALUE_STRING_EXT_INIT(UnRegReasonCode);
+
+static const value_string HeadsetMode[] = {
+ { 0x00001, "On" },
+ { 0x00002, "Off" },
+ { 0x00000, NULL }
};
-#endif
-
-/*
- * define lamp modes;
- * lamp cadence is defined as follows
- * Wink (on 80%) = 448msec on / 64msec off
- * Flash (fast flash) = 32msec on / 32msec off
- * Blink (on 50%) = 512msec on / 512msec off
- * On (on steady)
- */
-static const value_string stationLampModes[] = {
- {0 , "Undefined"},
- {0x1 , "Off"},
- {0x2 , "On"},
- {0x3 , "Wink"},
- {0x4 , "Flash"},
- {0x5 , "Blink"},
- {0 , NULL}
+static value_string_ext HeadsetMode_ext = VALUE_STRING_EXT_INIT(HeadsetMode);
+
+static const value_string SequenceFlag[] = {
+ { 0x00000, "First" },
+ { 0x00001, "More" },
+ { 0x00002, "Last" },
+ { 0x00000, NULL }
};
-static value_string_ext stationLampModes_ext = VALUE_STRING_EXT_INIT(stationLampModes);
-
-/* Defined the Call States to be sent to the Telecaste station.
- * These are NOT the call states used in CM internally. Instead,
- * they are the call states sent from CM and understood by the Telecaster station
- */
-static const value_string skinny_stationCallStates[] = {
- {1 , "OffHook"},
- {2 , "OnHook"},
- {3 , "RingOut"},
- {4 , "RingIn"},
- {5 , "Connected"},
- {6 , "Busy"},
- {7 , "Congestion"},
- {8 , "Hold"},
- {9 , "CallWaiting"},
- {10 , "CallTransfer"},
- {11 , "CallPark"},
- {12 , "Proceed"},
- {13 , "CallRemoteMultiline"},
- {14 , "InvalidNumber"},
- {0 , NULL}
+static value_string_ext SequenceFlag_ext = VALUE_STRING_EXT_INIT(SequenceFlag);
+
+static const value_string Layout[] = {
+ { 0x00000, "NoLayout" },
+ { 0x00001, "OneByOne" },
+ { 0x00002, "OneByTwo" },
+ { 0x00003, "TwoByTwo" },
+ { 0x00004, "TwoByTwo3Alt1" },
+ { 0x00005, "TwoByTwo3Alt2" },
+ { 0x00006, "ThreeByThree" },
+ { 0x00007, "ThreeByThree6Alt1" },
+ { 0x00008, "ThreeByThree6Alt2" },
+ { 0x00009, "ThreeByThree4Alt1" },
+ { 0x0000a, "ThreeByThree4Alt2" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_stationCallStates_ext = VALUE_STRING_EXT_INIT(skinny_stationCallStates);
-
-/* Defined Call Type */
-static const value_string skinny_callTypes[] = {
- {1 , "InBoundCall"},
- {2 , "OutBoundCall"},
- {3 , "ForwardCall"},
- {0 , NULL}
+static value_string_ext Layout_ext = VALUE_STRING_EXT_INIT(Layout);
+
+static const value_string TransmitOrReceive[] = {
+ { 0x00000, "None" },
+ { 0x00001, "ReceiveOnly" },
+ { 0x00002, "TransmitOnly" },
+ { 0x00003, "Both" },
+ { 0x00000, NULL }
};
+static value_string_ext TransmitOrReceive_ext = VALUE_STRING_EXT_INIT(TransmitOrReceive);
-/*
- * define station-playable tones;
- * for tone definitions see SR-TSV-002275, "BOC Notes on the LEC Networks -- 1994"
- */
-static const value_string skinny_deviceTones[] = {
- {0x0 , "Silence"},
- {0x1 , "Dtmf1"},
- {0x2 , "Dtmf2"},
- {0x3 , "Dtmf3"},
- {0x4 , "Dtmf4"},
- {0x5 , "Dtmf5"},
- {0x6 , "Dtmf6"},
- {0x7 , "Dtmf7"},
- {0x8 , "Dtmf8"},
- {0x9 , "Dtmf9"},
- {0xa , "Dtmf0"},
- {0xe , "DtmfStar"},
- {0xf , "DtmfPound"},
- {0x10 , "DtmfA"},
- {0x11 , "DtmfB"},
- {0x12 , "DtmfC"},
- {0x13 , "DtmfD"},
- {0x21 , "InsideDialTone"},
- {0x22 , "OutsideDialTone"},
- {0x23 , "LineBusyTone"},
- {0x24 , "AlertingTone"},
- {0x25 , "ReorderTone"},
- {0x26 , "RecorderWarningTone"},
- {0x27 , "RecorderDetectedTone"},
- {0x28 , "RevertingTone"},
- {0x29 , "ReceiverOffHookTone"},
- {0x2a , "PartialDialTone"},
- {0x2b , "NoSuchNumberTone"},
- {0x2c , "BusyVerificationTone"},
- {0x2d , "CallWaitingTone"},
- {0x2e , "ConfirmationTone"},
- {0x2f , "CampOnIndicationTone"},
- {0x30 , "RecallDialTone"},
- {0x31 , "ZipZip"},
- {0x32 , "Zip"},
- {0x33 , "BeepBonk"},
- {0x34 , "MusicTone"},
- {0x35 , "HoldTone"},
- {0x36 , "TestTone"},
- {0x37 , "DtMoniterWarningTone"},
- {0x40 , "AddCallWaiting"},
- {0x41 , "PriorityCallWait"},
- {0x42 , "RecallDial"},
- {0x43 , "BargIn"},
- {0x44 , "DistinctAlert"},
- {0x45 , "PriorityAlert"},
- {0x46 , "ReminderRing"},
- {0x47 , "PrecedenceRingBack"},
- {0x48 , "PreemptionTone"},
- {0x50 , "MF1"},
- {0x51 , "MF2"},
- {0x52 , "MF3"},
- {0x53 , "MF4"},
- {0x54 , "MF5"},
- {0x55 , "MF6"},
- {0x56 , "MF7"},
- {0x57 , "MF8"},
- {0x58 , "MF9"},
- {0x59 , "MF0"},
- {0x5a , "MFKP1"},
- {0x5b , "MFST"},
- {0x5c , "MFKP2"},
- {0x5d , "MFSTP"},
- {0x5e , "MFST3P"},
- {0x5f , "MILLIWATT"},
- {0x60 , "MILLIWATTTEST"},
- {0x61 , "HIGHTONE"},
- {0x62 , "FLASHOVERRIDE"},
- {0x63 , "FLASH"},
- {0x64 , "PRIORITY"},
- {0x65 , "IMMEDIATE"},
- {0x66 , "PREAMPWARN"},
- {0x67 , "2105HZ"},
- {0x68 , "2600HZ"},
- {0x69 , "440HZ"},
- {0x6a , "300HZ"},
- {0x77 , "MLPP_PALA"},
- {0x78 , "MLPP_ICA"},
- {0x79 , "MLPP_VCA"},
- {0x7A , "MLPP_BPA"},
- {0x7B , "MLPP_BNEA"},
- {0x7C , "MLPP_UPA"},
- {0x7f , "NoTone"},
- {0 , NULL}
+static const value_string OpenReceiveChanStatus[] = {
+ { 0x00000, "Ok" },
+ { 0x00001, "Error" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_deviceTones_ext = VALUE_STRING_EXT_INIT(skinny_deviceTones);
-
-/* define ring types */
-static const value_string skinny_ringTypes[] = {
- {0x1 , "RingOff"},
- {0x2 , "InsideRing"},
- {0x3 , "OutsideRing"},
- {0x4 , "FeatureRing"},
- {0x5 , "FlashOnly"},
- {0x6 , "PrecedenceRing"},
- {0 , NULL}
+static value_string_ext OpenReceiveChanStatus_ext = VALUE_STRING_EXT_INIT(OpenReceiveChanStatus);
+
+static const value_string CreateConfResult[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "ResourceNotAvailable" },
+ { 0x00002, "ConferenceAlreadyExist" },
+ { 0x00003, "SystemErr" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_ringTypes_ext = VALUE_STRING_EXT_INIT(skinny_ringTypes);
+static value_string_ext CreateConfResult_ext = VALUE_STRING_EXT_INIT(CreateConfResult);
-static const value_string skinny_ringModes[] = {
- {0x1 , "RingForever"},
- {0x2 , "RingOnce"},
- {0 , NULL}
+static const value_string DeleteConfResult[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "ConferenceNotExist" },
+ { 0x00002, "SystemErr" },
+ { 0x00000, NULL }
};
-
-static const value_string skinny_speakerModes[] = {
- {1 , "SpeakerOn"},
- {2 , "SpeakerOff"},
- {0 , NULL}
+static value_string_ext DeleteConfResult_ext = VALUE_STRING_EXT_INIT(DeleteConfResult);
+
+static const value_string ModifyConfResult[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "ResourceNotAvailable" },
+ { 0x00002, "ConferenceNotExist" },
+ { 0x00003, "InvalidParameter" },
+ { 0x00004, "MoreActiveCallsThanReserved" },
+ { 0x00005, "InvalidResourceType" },
+ { 0x00006, "SystemErr" },
+ { 0x00000, NULL }
};
+static value_string_ext ModifyConfResult_ext = VALUE_STRING_EXT_INIT(ModifyConfResult);
+
+static const value_string AddParticipantResult[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "ResourceNotAvailable" },
+ { 0x00002, "ConferenceNotExist" },
+ { 0x00003, "DuplicateCallRef" },
+ { 0x00004, "SystemErr" },
+ { 0x00000, NULL }
+};
+static value_string_ext AddParticipantResult_ext = VALUE_STRING_EXT_INIT(AddParticipantResult);
-static const value_string skinny_silenceSuppressionModes[] = {
- {0 , "Media_SilenceSuppression_Off"},
- {1 , "Media_SilenceSuppression_On"},
- {0 , NULL}
+static const value_string ResourceType[] = {
+ { 0x00000, "Conference" },
+ { 0x00001, "IVR" },
+ { 0x00000, NULL }
};
+static value_string_ext ResourceType_ext = VALUE_STRING_EXT_INIT(ResourceType);
-static const value_string skinny_g723BitRates[] = {
- {0 , "None"},
- {1 , "Media_G723BRate_5_3"},
- {2 , "Media_G723BRate_6_4"},
- {0 , NULL}
+static const value_string AuditParticipantResult[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "ConferenceNotExist" },
+ { 0x00000, NULL }
};
+static value_string_ext AuditParticipantResult_ext = VALUE_STRING_EXT_INIT(AuditParticipantResult);
-/* define device reset types */
-static const value_string skinny_deviceResetTypes[] = {
- {1 , "DEVICE_RESET"},
- {2 , "DEVICE_RESTART"},
- {0 , NULL}
+static const value_string Media_Encryption_Capability[] = {
+ { 0x00000, "NotEncryptionCapable" },
+ { 0x00001, "EncryptionCapable" },
+ { 0x00000, NULL }
};
+static value_string_ext Media_Encryption_Capability_ext = VALUE_STRING_EXT_INIT(Media_Encryption_Capability);
-static const value_string skinny_echoCancelTypes[] = {
- {0 , "Media_EchoCancellation_Off"},
- {1 , "Media_EchoCancellation_On"},
- {0 , NULL}
+static const value_string IpAddrMode[] = {
+ { 0x00000, "ModeIpv4" },
+ { 0x00001, "ModeIpv6" },
+ { 0x00002, "ModeIpv4AndIpv6" },
+ { 0x00000, NULL }
+};
+static value_string_ext IpAddrMode_ext = VALUE_STRING_EXT_INIT(IpAddrMode);
+
+static const value_string MediaType[] = {
+ { 0x00000, "MediaType_Invalid" },
+ { 0x00001, "MediaType_Audio" },
+ { 0x00002, "MediaType_Main_Video" },
+ { 0x00003, "MediaType_FECC" },
+ { 0x00004, "MediaType_Presentation_Video" },
+ { 0x00005, "MediaType_DataApp_BFCP" },
+ { 0x00006, "MediaType_DataApp_IXChannel" },
+ { 0x00007, "MediaType_T38" },
+ { 0x00008, "MediaType_Max" },
+ { 0x00000, NULL }
};
+static value_string_ext MediaType_ext = VALUE_STRING_EXT_INIT(MediaType);
-static const value_string skinny_deviceUnregisterStatusTypes[] = {
- {0 , "Ok"},
- {1 , "Error"},
- {2 , "NAK"}, /* Unregister request is rejected for reaso n such as existence of a call */
- {0 , NULL}
+static const value_string RSVPDirection[] = {
+ { 0x00001, "SEND" },
+ { 0x00002, "RECV" },
+ { 0x00003, "SENDRECV" },
+ { 0x00000, NULL }
+};
+static value_string_ext RSVPDirection_ext = VALUE_STRING_EXT_INIT(RSVPDirection);
+
+static const value_string QoSErrorCode[] = {
+ { 0x00000, "QOS_CAUSE_RESERVATION_TIMEOUT" },
+ { 0x00001, "QOS_CAUSE_PATH_FAIL" },
+ { 0x00002, "QOS_CAUSE_RESV_FAIL" },
+ { 0x00003, "QOS_CAUSE_LISTEN_FAIL" },
+ { 0x00004, "QOS_CAUSE_RESOURCE_UNAVAILABLE" },
+ { 0x00005, "QOS_CAUSE_LISTEN_TIMEOUT" },
+ { 0x00006, "QOS_CAUSE_RESV_RETRIES_FAIL" },
+ { 0x00007, "QOS_CAUSE_PATH_RETRIES_FAIL" },
+ { 0x00008, "QOS_CAUSE_RESV_PREEMPTION" },
+ { 0x00009, "QOS_CAUSE_PATH_PREEMPTION" },
+ { 0x0000a, "QOS_CAUSE_RESV_MODIFY_FAIL" },
+ { 0x0000b, "QOS_CAUSE_PATH_MODIFY_FAIL" },
+ { 0x0000c, "QOS_CAUSE_RESV_TEAR" },
+ { 0x00000, NULL }
};
+static value_string_ext QoSErrorCode_ext = VALUE_STRING_EXT_INIT(QoSErrorCode);
+
+static const value_string RSVPErrorCode[] = {
+ { 0x00000, "CONFIRM" },
+ { 0x00001, "ADMISSION" },
+ { 0x00002, "ADMINISTRATIVE" },
+ { 0x00003, "NO_PATH_INFORMATION" },
+ { 0x00004, "NO_SENDER_INFORMATION" },
+ { 0x00005, "CONFLICTING_STYLE" },
+ { 0x00006, "UNKNOWN_STYLE" },
+ { 0x00007, "CONFLICTING_DST_PORTS" },
+ { 0x00008, "CONFLICTING_SRC_PORTS" },
+ { 0x0000c, "SERVICE_PREEMPTED" },
+ { 0x0000d, "UNKNOWN_OBJECT_CLASS" },
+ { 0x0000e, "UNKNOWN_CLASS_TYPE" },
+ { 0x00014, "API" },
+ { 0x00015, "TRAFFIC" },
+ { 0x00016, "TRAFFIC_SYSTEM" },
+ { 0x00017, "SYSTEM" },
+ { 0x00018, "ROUTING_PROBLEM" },
+ { 0x00000, NULL }
+};
+static value_string_ext RSVPErrorCode_ext = VALUE_STRING_EXT_INIT(RSVPErrorCode);
-static const value_string skinny_createConfResults[] = {
- {0 , "Ok"},
- {1 , "ResourceNotAvailable"},
- {2 , "ConferenceAlreadyExist"},
- {3 , "SystemErr"},
- {0 , NULL}
+static const value_string SubscriptionFeatureID[] = {
+ { 0x00001, "BLF" },
+ { 0x00000, NULL }
};
+static value_string_ext SubscriptionFeatureID_ext = VALUE_STRING_EXT_INIT(SubscriptionFeatureID);
-static const value_string skinny_modifyConfResults[] = {
- {0 , "Ok"},
- {1 , "ResourceNotAvailable"},
- {2 , "ConferenceNotExist"},
- {3 , "InvalidParameter"},
- {4 , "MoreActiveCallsThanReserved"},
- {5 , "InvalidResourceType"},
- {6 , "SystemErr"},
- {0 , NULL}
+static const value_string MediaPathID[] = {
+ { 0x00001, "Headset" },
+ { 0x00002, "Handset" },
+ { 0x00003, "Speaker" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_modifyConfResults_ext = VALUE_STRING_EXT_INIT(skinny_modifyConfResults);
+static value_string_ext MediaPathID_ext = VALUE_STRING_EXT_INIT(MediaPathID);
-static const value_string skinny_deleteConfResults[] = {
- {0 , "Ok"},
- {1 , "ConferenceNotExist"},
- {2 , "SystemErr"},
- {0 , NULL}
+static const value_string MediaPathEvent[] = {
+ { 0x00001, "On" },
+ { 0x00002, "Off" },
+ { 0x00000, NULL }
};
+static value_string_ext MediaPathEvent_ext = VALUE_STRING_EXT_INIT(MediaPathEvent);
-static const value_string skinny_addParticipantResults[] = {
- {0 , "Ok"},
- {1 , "ResourceNotAvailable"},
- {2 , "ConferenceNotExist"},
- {3 , "DuplicateCallRef"},
- {4 , "SystemErr"},
- {0 , NULL}
+static const value_string MediaPathCapabilities[] = {
+ { 0x00001, "Enable" },
+ { 0x00002, "Disable" },
+ { 0x00003, "Monitor" },
+ { 0x00000, NULL }
+};
+static value_string_ext MediaPathCapabilities_ext = VALUE_STRING_EXT_INIT(MediaPathCapabilities);
+
+static const value_string DeviceTone[] = {
+ { 0x00000, "Silence" },
+ { 0x00001, "Dtmf1" },
+ { 0x00002, "Dtmf2" },
+ { 0x00003, "Dtmf3" },
+ { 0x00004, "Dtmf4" },
+ { 0x00005, "Dtmf5" },
+ { 0x00006, "Dtmf6" },
+ { 0x00007, "Dtmf7" },
+ { 0x00008, "Dtmf8" },
+ { 0x00009, "Dtmf9" },
+ { 0x0000a, "Dtmf0" },
+ { 0x0000e, "DtmfStar" },
+ { 0x0000f, "DtmfPound" },
+ { 0x00010, "DtmfA" },
+ { 0x00011, "DtmfB" },
+ { 0x00012, "DtmfC" },
+ { 0x00013, "DtmfD" },
+ { 0x00021, "InsideDialTone" },
+ { 0x00022, "OutsideDialTone" },
+ { 0x00023, "LineBusyTone" },
+ { 0x00024, "AlertingTone" },
+ { 0x00025, "ReorderTone" },
+ { 0x00026, "RecorderWarningTone" },
+ { 0x00027, "RecorderDetectedTone" },
+ { 0x00028, "RevertingTone" },
+ { 0x00029, "ReceiverOffHookTone" },
+ { 0x0002a, "MessageWaitingIndicatorTone" },
+ { 0x0002b, "NoSuchNumberTone" },
+ { 0x0002c, "BusyVerificationTone" },
+ { 0x0002d, "CallWaitingTone" },
+ { 0x0002e, "ConfirmationTone" },
+ { 0x0002f, "CampOnIndicationTone" },
+ { 0x00030, "RecallDialTone" },
+ { 0x00031, "ZipZip" },
+ { 0x00032, "Zip" },
+ { 0x00033, "BeepBonk" },
+ { 0x00034, "MusicTone" },
+ { 0x00035, "HoldTone" },
+ { 0x00036, "TestTone" },
+ { 0x00038, "MonitorWarningTone" },
+ { 0x00039, "SecureWarningTone" },
+ { 0x00040, "AddCallWaiting" },
+ { 0x00041, "PriorityCallWait" },
+ { 0x00042, "RecallDial" },
+ { 0x00043, "BargIn" },
+ { 0x00044, "DistinctAlert" },
+ { 0x00045, "PriorityAlert" },
+ { 0x00046, "ReminderRing" },
+ { 0x00047, "PrecedenceRingBack" },
+ { 0x00048, "PreemptionTone" },
+ { 0x00049, "NonSecureWarningTone" },
+ { 0x00050, "MF1" },
+ { 0x00051, "MF2" },
+ { 0x00052, "MF3" },
+ { 0x00053, "MF4" },
+ { 0x00054, "MF5" },
+ { 0x00055, "MF6" },
+ { 0x00056, "MF7" },
+ { 0x00057, "MF8" },
+ { 0x00058, "MF9" },
+ { 0x00059, "MF0" },
+ { 0x0005a, "MFKP1" },
+ { 0x0005b, "MFST" },
+ { 0x0005c, "MFKP2" },
+ { 0x0005d, "MFSTP" },
+ { 0x0005e, "MFST3P" },
+ { 0x0005f, "MILLIWATT" },
+ { 0x00060, "MILLIWATTTEST" },
+ { 0x00061, "HIGHTONE" },
+ { 0x00062, "FLASHOVERRIDE" },
+ { 0x00063, "FLASH" },
+ { 0x00064, "PRIORITY" },
+ { 0x00065, "IMMEDIATE" },
+ { 0x00066, "PREAMPWARN" },
+ { 0x00067, "2105HZ" },
+ { 0x00068, "2600HZ" },
+ { 0x00069, "440HZ" },
+ { 0x0006a, "300HZ" },
+ { 0x0006b, "Mobility_WP" },
+ { 0x0006c, "Mobility_UAC" },
+ { 0x0006d, "Mobility_WTDN" },
+ { 0x0006e, "Mobility_MON" },
+ { 0x0006f, "Mobility_MOFF" },
+ { 0x00070, "Mobility_UKC" },
+ { 0x00071, "Mobility_VMA" },
+ { 0x00072, "Mobility_FAC" },
+ { 0x00073, "Mobility_CMC" },
+ { 0x00077, "MLPP_PALA" },
+ { 0x00078, "MLPP_ICA" },
+ { 0x00079, "MLPP_VCA" },
+ { 0x0007a, "MLPP_BPA" },
+ { 0x0007b, "MLPP_BNEA" },
+ { 0x0007c, "MLPP_UPA" },
+ { 0x0007d, "TUA" },
+ { 0x0007e, "GONE" },
+ { 0x0007f, "NoTone" },
+ { 0x00080, "MAX" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_addParticipantResults_ext = VALUE_STRING_EXT_INIT(skinny_addParticipantResults);
+static value_string_ext DeviceTone_ext = VALUE_STRING_EXT_INIT(DeviceTone);
-static const value_string skinny_auditParticipantResults[] = {
- {0 , "Ok"},
- {1 , "ConferenceNotExist"},
- {0 , NULL}
+static const value_string ToneOutputDirection[] = {
+ { 0x00000, "User" },
+ { 0x00001, "Network" },
+ { 0x00002, "All" },
+ { 0x00000, NULL }
};
+static value_string_ext ToneOutputDirection_ext = VALUE_STRING_EXT_INIT(ToneOutputDirection);
+
+static const value_string RingMode[] = {
+ { 0x00001, "RingOff" },
+ { 0x00002, "InsideRing" },
+ { 0x00003, "OutsideRing" },
+ { 0x00004, "FeatureRing" },
+ { 0x00005, "FlashOnly" },
+ { 0x00006, "PrecedenceRing" },
+ { 0x00000, NULL }
+};
+static value_string_ext RingMode_ext = VALUE_STRING_EXT_INIT(RingMode);
-/* define hook flash detection mode */
-static const value_string skinny_hookFlashDetectModes[] = {
- {1 , "HookFlashOn"},
- {2 , "HookFlashOff"},
- {0 , NULL}
+static const value_string RingDuration[] = {
+ { 0x00001, "NormalRing" },
+ { 0x00002, "SingleRing" },
+ { 0x00000, NULL }
+};
+static value_string_ext RingDuration_ext = VALUE_STRING_EXT_INIT(RingDuration);
+
+static const value_string LampMode[] = {
+ { 0x00001, "Off" },
+ { 0x00002, "On" },
+ { 0x00003, "Wink" },
+ { 0x00004, "Flash" },
+ { 0x00005, "Blink" },
+ { 0x00000, NULL }
};
+static value_string_ext LampMode_ext = VALUE_STRING_EXT_INIT(LampMode);
-/* define headset mode */
-static const value_string skinny_headsetModes[] = {
- {1 , "HeadsetOn"},
- {2 , "HeadsetOff"},
- {0 , NULL}
+static const value_string SpeakerMode[] = {
+ { 0x00001, "On" },
+ { 0x00002, "Off" },
+ { 0x00000, NULL }
};
+static value_string_ext SpeakerMode_ext = VALUE_STRING_EXT_INIT(SpeakerMode);
-/* define station microphone modes;
- * Mic On - The speakerphone's microphone is turned on ONLY if the phone is in the "Speaker On (Off Hook)"
- * state (see above).
- * Mic Off - The microphone is turned off or, if it's not on, the command is ignored.
- */
-static const value_string skinny_microphoneModes[] = {
- {1 , "MicOn"},
- {2 , "MicOff"},
- {0 , NULL}
+static const value_string MicrophoneMode[] = {
+ { 0x00001, "On" },
+ { 0x00002, "Off" },
+ { 0x00000, NULL }
};
+static value_string_ext MicrophoneMode_ext = VALUE_STRING_EXT_INIT(MicrophoneMode);
-/* define the session request types */
-static const value_string skinny_sessionTypes[] = {
- {1 , "Chat"},
- {2 , "Whiteboard"},
- {4 , "ApplicationSharing"},
- {8 , "FileTransfer"},
- {10 , "Video"},
- {0 , NULL}
+static const value_string Media_SilenceSuppression[] = {
+ { 0x00000, "Media_SilenceSuppression_Off" },
+ { 0x00001, "Media_SilenceSuppression_On" },
+ { 0x00000, NULL }
+};
+static value_string_ext Media_SilenceSuppression_ext = VALUE_STRING_EXT_INIT(Media_SilenceSuppression);
+
+static const value_string MediaEncryptionAlgorithmType[] = {
+ { 0x00000, "NO_ENCRYPTION" },
+ { 0x00001, "CCM_AES_CM_128_HMAC_SHA1_32" },
+ { 0x00002, "CCM_AES_CM_128_HMAC_SHA1_80" },
+ { 0x00003, "CCM_F8_128_HMAC_SHA1_32" },
+ { 0x00004, "CCM_F8_128_HMAC_SHA1_80" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_sessionTypes_ext = VALUE_STRING_EXT_INIT(skinny_sessionTypes);
+static value_string_ext MediaEncryptionAlgorithmType_ext = VALUE_STRING_EXT_INIT(MediaEncryptionAlgorithmType);
-static const value_string skinny_mediaEnunciationTypes[] = {
- {1 , "None"},
- {2 , "CallPark"},
- {0 , NULL}
+static const value_string PortHandling[] = {
+ { 0x00000, "CLOSE_PORT" },
+ { 0x00001, "KEEP_PORT" },
+ { 0x00000, NULL }
};
+static value_string_ext PortHandling_ext = VALUE_STRING_EXT_INIT(PortHandling);
-static const value_string skinny_resourceTypes[] = {
- {1 , "Conference"},
- {2 , "IVR"},
- {0 , NULL}
+static const value_string CallType[] = {
+ { 0x00001, "InBoundCall" },
+ { 0x00002, "OutBoundCall" },
+ { 0x00003, "ForwardCall" },
+ { 0x00000, NULL }
};
+static value_string_ext CallType_ext = VALUE_STRING_EXT_INIT(CallType);
+
+static const value_string CallSecurityStatusType[] = {
+ { 0x00000, "Unknown" },
+ { 0x00001, "NotAuthenticated" },
+ { 0x00002, "Authenticated" },
+ { 0x00003, "Encrypted" },
+ { 0x00004, "Max" },
+ { 0x00000, NULL }
+};
+static value_string_ext CallSecurityStatusType_ext = VALUE_STRING_EXT_INIT(CallSecurityStatusType);
+
+static const value_string SessionType[] = {
+ { 0x00001, "Chat" },
+ { 0x00002, "Whiteboard" },
+ { 0x00004, "ApplicationSharing" },
+ { 0x00008, "FileTransfer" },
+ { 0x00010, "Video" },
+ { 0x00000, NULL }
+};
+static value_string_ext SessionType_ext = VALUE_STRING_EXT_INIT(SessionType);
+
+static const value_string ButtonType[] = {
+ { 0x00000, "Unused" },
+ { 0x00001, "Last Number Redial" },
+ { 0x00002, "SpeedDial" },
+ { 0x00003, "Hold" },
+ { 0x00004, "Transfer" },
+ { 0x00005, "Forward All" },
+ { 0x00006, "Forward Busy" },
+ { 0x00007, "Forward No Answer" },
+ { 0x00008, "Display" },
+ { 0x00009, "Line" },
+ { 0x0000a, "T120 Chat" },
+ { 0x0000b, "T120 Whiteboard" },
+ { 0x0000c, "T120 Application Sharing" },
+ { 0x0000d, "T120 File Transfer" },
+ { 0x0000e, "Video" },
+ { 0x0000f, "Voicemail" },
+ { 0x00010, "Answer Release" },
+ { 0x00011, "Auto Answer" },
+ { 0x00012, "Select" },
+ { 0x00013, "Feature" },
+ { 0x00014, "ServiceURL" },
+ { 0x00015, "BusyLampField Speeddial" },
+ { 0x0001b, "Malicious Call" },
+ { 0x00021, "Generic App B1" },
+ { 0x00022, "Generic App B2" },
+ { 0x00023, "Generic App B3" },
+ { 0x00024, "Generic App B4" },
+ { 0x00025, "Generic App B5" },
+ { 0x00026, "Monitor/Multiblink" },
+ { 0x0007b, "Meet Me Conference" },
+ { 0x0007d, "Conference" },
+ { 0x0007e, "Call Park" },
+ { 0x0007f, "Call Pickup" },
+ { 0x00080, "Group Call Pickup" },
+ { 0x00081, "Mobility" },
+ { 0x00082, "DoNotDisturb" },
+ { 0x00083, "ConfList" },
+ { 0x00084, "RemoveLastParticipant" },
+ { 0x00085, "QRT" },
+ { 0x00086, "CallBack" },
+ { 0x00087, "OtherPickup" },
+ { 0x00088, "VideoMode" },
+ { 0x00089, "NewCall" },
+ { 0x0008a, "EndCall" },
+ { 0x0008b, "HLog" },
+ { 0x0008f, "Queuing" },
+ { 0x000c0, "Test E" },
+ { 0x000c1, "Test F" },
+ { 0x000c2, "Messages" },
+ { 0x000c3, "Directory" },
+ { 0x000c4, "Test I" },
+ { 0x000c5, "Application" },
+ { 0x000c6, "Headset" },
+ { 0x000f0, "Keypad" },
+ { 0x000fd, "Aec" },
+ { 0x000ff, "Undefined" },
+ { 0x00000, NULL }
+};
+static value_string_ext ButtonType_ext = VALUE_STRING_EXT_INIT(ButtonType);
-static const value_string skinny_sequenceFlags[] = {
- {0 , "StationSequenceFirst"},
- {1 , "StationSequenceMore"},
- {2 , "StationSequenceLast"},
- {0 , NULL}
+static const value_string DeviceResetType[] = {
+ { 0x00001, "RESET" },
+ { 0x00002, "RESTART" },
+ { 0x00003, "APPLY_CONFIG" },
+ { 0x00000, NULL }
};
+static value_string_ext DeviceResetType_ext = VALUE_STRING_EXT_INIT(DeviceResetType);
-static const value_string skinny_Layouts[] = {
- {0 , "NoLayout"},
- {1 , "OneByOne"},
- {2 , "OneByTwo"},
- {3 , "TwoByTwo"},
- {4 , "TwoByTwo3Alt1"},
- {5 , "TwoByTwo3Alt2"},
- {6 , "ThreeByThree"},
- {7 , "ThreeByThree6Alt1"},
- {8 , "ThreeByThree6Alt2"},
- {9 , "ThreeByThree4Alt1"},
- {10 , "ThreeByThree4Alt2"},
- {0 , NULL}
+static const value_string Media_EchoCancellation[] = {
+ { 0x00000, "Media_EchoCancellation_Off" },
+ { 0x00001, "Media_EchoCancellation_On" },
+ { 0x00000, NULL }
+};
+static value_string_ext Media_EchoCancellation_ext = VALUE_STRING_EXT_INIT(Media_EchoCancellation);
+
+static const value_string SoftKeyTemplateIndex[] = {
+ { 0x00001, "Redial" },
+ { 0x00002, "NewCall" },
+ { 0x00003, "Hold" },
+ { 0x00004, "Transfer" },
+ { 0x00005, "CfwdAll" },
+ { 0x00006, "CfwdBusy" },
+ { 0x00007, "CfwdNoAnswer" },
+ { 0x00008, "BackSpace" },
+ { 0x00009, "EndCall" },
+ { 0x0000a, "Resume" },
+ { 0x0000b, "Answer" },
+ { 0x0000c, "Info" },
+ { 0x0000d, "Confrn" },
+ { 0x0000e, "Park" },
+ { 0x0000f, "Join" },
+ { 0x00010, "MeetMe" },
+ { 0x00011, "PickUp" },
+ { 0x00012, "GrpPickup" },
+ { 0x00013, "Monitor" },
+ { 0x00014, "CallBack" },
+ { 0x00015, "Barge" },
+ { 0x00016, "DND" },
+ { 0x00017, "ConfList" },
+ { 0x00018, "Select" },
+ { 0x00019, "Private" },
+ { 0x0001a, "Transfer Voicemail" },
+ { 0x0001b, "Direct Transfer" },
+ { 0x0001c, "Immediate Divert" },
+ { 0x0001d, "Video Mode" },
+ { 0x0001e, "Intercept" },
+ { 0x0001f, "Empty" },
+ { 0x00020, "Dial" },
+ { 0x00021, "Conference Barge" },
+ { 0x00000, NULL }
+};
+static value_string_ext SoftKeyTemplateIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyTemplateIndex);
+
+static const value_string SoftKeyInfoIndex[] = {
+ { 0x0012d, "Redial" },
+ { 0x0012e, "NewCall" },
+ { 0x0012f, "Hold" },
+ { 0x00130, "Transfer" },
+ { 0x00131, "CfwdAll" },
+ { 0x00132, "CfwdBusy" },
+ { 0x00133, "CfwdNoAnswer" },
+ { 0x00134, "BackSpace" },
+ { 0x00135, "EndCall" },
+ { 0x00136, "Resume" },
+ { 0x00137, "Answer" },
+ { 0x00138, "Info" },
+ { 0x00139, "Confrn" },
+ { 0x0013a, "Park" },
+ { 0x0013b, "Join" },
+ { 0x0013c, "MeetMe" },
+ { 0x0013d, "PickUp" },
+ { 0x0013e, "GrpPickup" },
+ { 0x0013f, "Monitor" },
+ { 0x00140, "CallBack" },
+ { 0x00141, "Barge" },
+ { 0x00142, "DND" },
+ { 0x00143, "ConfList" },
+ { 0x00144, "Select" },
+ { 0x00145, "Private" },
+ { 0x00146, "Transfer Voicemail" },
+ { 0x00147, "Direct Transfer" },
+ { 0x00148, "Immediate Divert" },
+ { 0x00149, "Video Mode" },
+ { 0x0014a, "Intercept" },
+ { 0x0014b, "Empty" },
+ { 0x0014c, "Dial" },
+ { 0x0014d, "Conference Barge" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_Layouts_ext = VALUE_STRING_EXT_INIT(skinny_Layouts);
+static value_string_ext SoftKeyInfoIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyInfoIndex);
+
+static const value_string DCallState[] = {
+ { 0x00000, "Idle" },
+ { 0x00001, "OffHook" },
+ { 0x00002, "OnHook" },
+ { 0x00003, "RingOut" },
+ { 0x00004, "RingIn" },
+ { 0x00005, "Connected" },
+ { 0x00006, "Busy" },
+ { 0x00007, "Congestion" },
+ { 0x00008, "Hold" },
+ { 0x00009, "CallWaiting" },
+ { 0x0000a, "CallTransfer" },
+ { 0x0000b, "CallPark" },
+ { 0x0000c, "Proceed" },
+ { 0x0000d, "CallRemoteMultiline" },
+ { 0x0000e, "InvalidNumber" },
+ { 0x0000f, "HoldRevert" },
+ { 0x00010, "Whisper" },
+ { 0x00011, "RemoteHold" },
+ { 0x00012, "MaxState" },
+ { 0x00000, NULL }
+};
+static value_string_ext DCallState_ext = VALUE_STRING_EXT_INIT(DCallState);
-static const value_string skinny_transmitOrReceive[] = {
- {1 , "Station_Receive_only"},
- {2 , "Station_Transmit_only"},
- {3 , "Station_Receive_Transmit"},
- {0 , NULL}
+static const value_string CallPrivacy[] = {
+ { 0x00000, "None" },
+ { 0x00001, "Limited" },
+ { 0x00002, "Full" },
+ { 0x00000, NULL }
};
+static value_string_ext CallPrivacy_ext = VALUE_STRING_EXT_INIT(CallPrivacy);
-static const value_string skinny_endOfAnnAck[] = {
- {0 , "NoAnnAckRequired"},
- {1 , "AnnAckRequired"},
- {0 , NULL}
+static const value_string DeviceUnregisterStatus[] = {
+ { 0x00000, "Ok" },
+ { 0x00001, "Error" },
+ { 0x00002, "NAK" },
+ { 0x00000, NULL }
};
+static value_string_ext DeviceUnregisterStatus_ext = VALUE_STRING_EXT_INIT(DeviceUnregisterStatus);
-static const value_string skinny_annPlayMode[] = {
- {0 , "AnnXmlConfigMode"},
- {1 , "AnnOneShotMode"},
- {2 , "AnnContinuousMode"},
- {0 , NULL}
+static const value_string EndOfAnnAck[] = {
+ { 0x00000, "NoAnnAckRequired" },
+ { 0x00001, "AnnAckRequired" },
+ { 0x00000, NULL }
};
+static value_string_ext EndOfAnnAck_ext = VALUE_STRING_EXT_INIT(EndOfAnnAck);
-static const value_string skinny_annPlayStatus[] = {
- {0 , "PlayToneOK"},
- {1 , "PlayToneErr"},
- {0 , NULL}
+static const value_string AnnPlayMode[] = {
+ { 0x00000, "XmlConfigMode" },
+ { 0x00001, "OneShotMode" },
+ { 0x00002, "ContinuousMode" },
+ { 0x00000, NULL }
};
+static value_string_ext AnnPlayMode_ext = VALUE_STRING_EXT_INIT(AnnPlayMode);
-static const value_string skinny_miscCommandType[] = {
- {0 , "videoFreezePicture"},
- {1 , "videoFastUpdatePicture"},
- {2 , "videoFastUpdateGOB"},
- {3 , "videoFastUpdateMB"},
- {4 , "lostPicture"},
- {5 , "lostPartialPicture"},
- {6 , "recoveryReferencePicture"},
- {7 , "temporalSpatialTradeOff"},
- {0 , NULL}
+static const value_string PlayAnnStatus[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "Err" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_miscCommandType_ext = VALUE_STRING_EXT_INIT(skinny_miscCommandType);
-
-static const value_string skinny_formatTypes[] = {
- {1 , "sqcif (128x96)"},
- {2 , "qcif (176x144)"},
- {3 , "cif (352x288)"},
- {4 , "4cif (704x576)"},
- {5 , "16cif (1408x1152)"},
- {6 , "custom_base"},
- {0 , NULL}
+static value_string_ext PlayAnnStatus_ext = VALUE_STRING_EXT_INIT(PlayAnnStatus);
+
+#define MISCCOMMANDTYPE_VIDEOFREEZEPICTURE 0x00000
+#define MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE 0x00001
+#define MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB 0x00002
+#define MISCCOMMANDTYPE_VIDEOFASTUPDATEMB 0x00003
+#define MISCCOMMANDTYPE_LOSTPICTURE 0x00004
+#define MISCCOMMANDTYPE_LOSTPARTIALPICTURE 0x00005
+#define MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE 0x00006
+#define MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF 0x00007
+
+static const value_string MiscCommandType[] = {
+ { MISCCOMMANDTYPE_VIDEOFREEZEPICTURE, "videoFreezePicture" },
+ { MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE, "videoFastUpdatePicture" },
+ { MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB, "videoFastUpdateGOB" },
+ { MISCCOMMANDTYPE_VIDEOFASTUPDATEMB, "videoFastUpdateMB" },
+ { MISCCOMMANDTYPE_LOSTPICTURE, "lostPicture" },
+ { MISCCOMMANDTYPE_LOSTPARTIALPICTURE, "lostPartialPicture" },
+ { MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE, "recoveryReferencePicture" },
+ { MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF, "temporalSpatialTradeOff" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_formatTypes_ext = VALUE_STRING_EXT_INIT(skinny_formatTypes);
+static value_string_ext MiscCommandType_ext = VALUE_STRING_EXT_INIT(MiscCommandType);
-static const value_string skinny_callSecurityStatusTypes[] = {
- {0 , "CallSecurityStatusUnknown"},
- {1 , "CallSecurityStatusNotAuthenticated"},
- {2 , "CallSecurityStatusAuthenticated"},
- {0 , NULL}
+static const value_string MediaTransportType[] = {
+ { 0x00001, "RTP" },
+ { 0x00002, "UDP" },
+ { 0x00003, "TCP" },
+ { 0x00000, NULL }
};
+static value_string_ext MediaTransportType_ext = VALUE_STRING_EXT_INIT(MediaTransportType);
-static const value_string skinny_accessories[] = {
- {1 , "Headset"},
- {2 , "Handset"},
- {3 , "Speaker"},
- {0 , NULL}
+static const value_string ResvStyle[] = {
+ { 0x00001, "FF" },
+ { 0x00002, "SE" },
+ { 0x00003, "WF" },
+ { 0x00000, NULL }
+};
+static value_string_ext ResvStyle_ext = VALUE_STRING_EXT_INIT(ResvStyle);
+
+static const value_string SubscribeCause[] = {
+ { 0x00000, "OK" },
+ { 0x00001, "RouteFail" },
+ { 0x00002, "AuthFail" },
+ { 0x00003, "Timeout" },
+ { 0x00004, "TrunkTerm" },
+ { 0x00005, "TrunkForbidden" },
+ { 0x00006, "Throttle" },
+ { 0x00000, NULL }
+};
+static value_string_ext SubscribeCause_ext = VALUE_STRING_EXT_INIT(SubscribeCause);
+
+static const value_string CallHistoryDisposition[] = {
+ { 0x00000, "Ignore" },
+ { 0x00001, "PlacedCalls" },
+ { 0x00002, "ReceivedCalls" },
+ { 0x00003, "MissedCalls" },
+ { 0xffffffff, "UnknownDisp" },
+ { 0x00000, NULL }
+};
+static value_string_ext CallHistoryDisposition_ext = VALUE_STRING_EXT_INIT(CallHistoryDisposition);
+
+static const value_string MwiNotificationResult[] = {
+ { 0x00000, "Ok" },
+ { 0x00001, "GeneralError" },
+ { 0x00002, "RequestRejected" },
+ { 0x00003, "VmCountOutOfBounds" },
+ { 0x00004, "FaxCountOutOfBounds" },
+ { 0x00005, "InvalidPriorityVmCount" },
+ { 0x00006, "InvalidPriorityFaxCount" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_accessories_ext = VALUE_STRING_EXT_INIT(skinny_accessories);
+static value_string_ext MwiNotificationResult_ext = VALUE_STRING_EXT_INIT(MwiNotificationResult);
-static const value_string skinny_accessoryStates[] = {
- {0 , "None"},
- {1 , "Offhook"},
- {2 , "Onhook"},
- {0 , NULL}
+static const value_string RecordingStatus[] = {
+ { 0x00000, "_OFF" },
+ { 0x00001, "_ON" },
+ { 0x00000, NULL }
};
-static value_string_ext skinny_accessoryStates_ext = VALUE_STRING_EXT_INIT(skinny_accessoryStates);
-
-#define StationMaxDirnumSize 24 /* max size of calling or called party dirnum */
-#define StationMaxNameSize 40 /* max size of calling party's name */
-#define StationMaxDisplayNameSize 44 /* max size of display name */
-#define StationMaxDeviceNameSize 16 /* max size of station's IP name */
-#define StationMaxSpeedDials 10 /* max number of speed dial numbers allowed on a station */
-#define StationMaxVersionSize 16 /* max chars in version string */
-#define StationMaxButtonTemplateSize 42 /* max button template size */
-#define StationMaxDisplayTextSize 33 /* max text size in DisplayText message */
-#define StationMaxPorts 10 /* max number of ports on one device */
-#define StationDateTemplateSize 6 /* date template in the form M/D/Y, D/M/Y, ... */
-#define StationMaxServerNameSize 48 /* max size of server name */
-#define StationMaxServers 5 /* max servers */
-#define StationMaxDeviceDirnums 1024 /* max dir numbers per SCM device */
-#define StationMaxDirnums 64 /* max dir numbers per physical station (also used in db request msg); */
-#define StationMaxSoftKeyLabelSize 16 /* max label size in the message */
-#define StationMaxSoftKeyDefinition 32 /* max number of soft key definition in the message */
-#define StationMaxSoftKeySetDefinition 16 /* max number of soft key set definition in the message */
-#define StationMaxSoftKeyIndex 16 /* max number of soft key indices in a station soft key set */
-#define StationMaxDisplayPromptStatusSize 32 /* max status text size in the display status message */
-#define StationMaxDisplayNotifySize 32 /* max prompt text size in the display prompt message */
-#define StationMaxAlarmMessageSize 80 /* max size for an alarm message */
-#define StationMaxUserDeviceDataSize 2000 /* max size of user data between application and device */
-#define StationMaxConference 32
-#define AppConferenceIDSize 32
-#define AppDataSize 24
-#define MAX_CUSTOM_PICTURES 6
-#define MAX_LAYOUT_WITH_SAME_SERVICE 5
-#define MAX_SERVICE_TYPE 4
-#define DeviceMaxCapabilities 18 /* max capabilities allowed in Cap response message */
-#define StationMaxCapabilities DeviceMaxCapabilities
-#define StationMaxVideoCapabilities 10
-#define StationMaxDataCapabilities 5
-#define MAX_LEVEL_PREFERENCE 4
-#define MaxAnnouncementList 32
-#define StationMaxMonitorParties 16 /* Max Monitor Bridge whisper matrix parties, rm, M&R in Parche */
-#define StationMaxServiceURLSize 256 /* max number of service URLs length */
-#define MAX_PICTURE_FORMAT 5
-#define MAX_REFERENCE_PICTURE 4
-
-/* Initialize the protocol and registered fields */
-static int proto_skinny = -1;
-static int hf_skinny_data_length = -1;
-static int hf_skinny_hdr_version = -1;
-static int hf_skinny_messageid = -1;
-static int hf_skinny_deviceName = -1;
-static int hf_skinny_stationUserId = -1;
-static int hf_skinny_stationInstance = -1;
-static int hf_skinny_deviceType = -1;
-static int hf_skinny_maxStreams = -1;
-static int hf_skinny_stationIpPort = -1;
-static int hf_skinny_stationKeypadButton = -1;
-static int hf_skinny_calledPartyNumber = -1;
-static int hf_skinny_stimulus = -1;
-static int hf_skinny_stimulusInstance = -1;
-static int hf_skinny_lineNumber = -1;
-static int hf_skinny_speedDialNumber = -1;
-static int hf_skinny_speedDialType = -1;
-static int hf_skinny_speedDialStatus = -1;
-static int hf_skinny_capCount = -1;
-static int hf_skinny_payloadCapability = -1;
-static int hf_skinny_maxFramesPerPacket = -1;
+static value_string_ext RecordingStatus_ext = VALUE_STRING_EXT_INIT(RecordingStatus);
+
+
+/* Staticly Declared Variables */
+static int proto_skinny = -1;
+static int hf_skinny_messageId = -1;
+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_AlternateCallingParty = -1;
+static int hf_skinny_DSCPValue = -1;
+static int hf_skinny_DeviceName = -1;
+static int hf_skinny_FutureUse1 = -1;
+static int hf_skinny_FutureUse2 = -1;
+static int hf_skinny_FutureUse3 = -1;
+static int hf_skinny_Generic_Bitfield_Bit1 = -1;
+static int hf_skinny_Generic_Bitfield_Bit10 = -1;
+static int hf_skinny_Generic_Bitfield_Bit11 = -1;
+static int hf_skinny_Generic_Bitfield_Bit12 = -1;
+static int hf_skinny_Generic_Bitfield_Bit13 = -1;
+static int hf_skinny_Generic_Bitfield_Bit14 = -1;
+static int hf_skinny_Generic_Bitfield_Bit15 = -1;
+static int hf_skinny_Generic_Bitfield_Bit16 = -1;
+static int hf_skinny_Generic_Bitfield_Bit17 = -1;
+static int hf_skinny_Generic_Bitfield_Bit18 = -1;
+static int hf_skinny_Generic_Bitfield_Bit19 = -1;
+static int hf_skinny_Generic_Bitfield_Bit2 = -1;
+static int hf_skinny_Generic_Bitfield_Bit20 = -1;
+static int hf_skinny_Generic_Bitfield_Bit21 = -1;
+static int hf_skinny_Generic_Bitfield_Bit22 = -1;
+static int hf_skinny_Generic_Bitfield_Bit23 = -1;
+static int hf_skinny_Generic_Bitfield_Bit24 = -1;
+static int hf_skinny_Generic_Bitfield_Bit25 = -1;
+static int hf_skinny_Generic_Bitfield_Bit26 = -1;
+static int hf_skinny_Generic_Bitfield_Bit27 = -1;
+static int hf_skinny_Generic_Bitfield_Bit28 = -1;
+static int hf_skinny_Generic_Bitfield_Bit29 = -1;
+static int hf_skinny_Generic_Bitfield_Bit3 = -1;
+static int hf_skinny_Generic_Bitfield_Bit30 = -1;
+static int hf_skinny_Generic_Bitfield_Bit31 = -1;
+static int hf_skinny_Generic_Bitfield_Bit32 = -1;
+static int hf_skinny_Generic_Bitfield_Bit4 = -1;
+static int hf_skinny_Generic_Bitfield_Bit5 = -1;
+static int hf_skinny_Generic_Bitfield_Bit6 = -1;
+static int hf_skinny_Generic_Bitfield_Bit7 = -1;
+static int hf_skinny_Generic_Bitfield_Bit8 = -1;
+static int hf_skinny_Generic_Bitfield_Bit9 = -1;
+static int hf_skinny_HuntPilotName = -1;
+static int hf_skinny_HuntPilotNumber = -1;
+static int hf_skinny_MPI = -1;
+static int hf_skinny_PhoneFeatures_Abbreviated_Dial = -1;
+static int hf_skinny_PhoneFeatures_Bit1 = -1;
+static int hf_skinny_PhoneFeatures_Bit11 = -1;
+static int hf_skinny_PhoneFeatures_Bit12 = -1;
+static int hf_skinny_PhoneFeatures_Bit13 = -1;
+static int hf_skinny_PhoneFeatures_Bit14 = -1;
+static int hf_skinny_PhoneFeatures_Bit15 = -1;
+static int hf_skinny_PhoneFeatures_Bit2 = -1;
+static int hf_skinny_PhoneFeatures_Bit3 = -1;
+static int hf_skinny_PhoneFeatures_Bit4 = -1;
+static int hf_skinny_PhoneFeatures_Bit6 = -1;
+static int hf_skinny_PhoneFeatures_Bit7 = -1;
+static int hf_skinny_PhoneFeatures_Bit9 = -1;
+static int hf_skinny_PhoneFeatures_DynamicMessages = -1;
+static int hf_skinny_PhoneFeatures_RFC2833 = -1;
+static int hf_skinny_PhoneFeatures_UTF8 = -1;
+static int hf_skinny_RFC2833PayloadType = -1;
+static int hf_skinny_RTCPPortNumber = -1;
+static int hf_skinny_RTPPayloadFormat = -1;
+static int hf_skinny_RestrictInformationType_BitsReserved = -1;
+static int hf_skinny_RestrictInformationType_CalledParty = -1;
+static int hf_skinny_RestrictInformationType_CalledPartyName = -1;
+static int hf_skinny_RestrictInformationType_CalledPartyNumber = -1;
+static int hf_skinny_RestrictInformationType_CallingParty = -1;
+static int hf_skinny_RestrictInformationType_CallingPartyName = -1;
+static int hf_skinny_RestrictInformationType_CallingPartyNumber = -1;
+static int hf_skinny_RestrictInformationType_LastRedirectParty = -1;
+static int hf_skinny_RestrictInformationType_LastRedirectPartyName = -1;
+static int hf_skinny_RestrictInformationType_LastRedirectPartyNumber = -1;
+static int hf_skinny_RestrictInformationType_OriginalCalledParty = -1;
+static int hf_skinny_RestrictInformationType_OriginalCalledPartyName = -1;
+static int hf_skinny_RestrictInformationType_OriginalCalledPartyNumber = -1;
+static int hf_skinny_ServerName = -1;
+static int hf_skinny_SoftKeyMask_SoftKey1 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey10 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey11 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey12 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey13 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey14 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey15 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey16 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey2 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey3 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey4 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey5 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey6 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey7 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey8 = -1;
+static int hf_skinny_SoftKeyMask_SoftKey9 = -1;
+static int hf_skinny_Unknown = -1;
+static int hf_skinny_active = -1;
+static int hf_skinny_activeConferenceOnRegistration = -1;
+static int hf_skinny_activeConferences = -1;
+static int hf_skinny_activeForward = -1;
+static int hf_skinny_activeStreams = -1;
+static int hf_skinny_activeStreamsOnRegistration = -1;
+static int hf_skinny_add_participant_result = -1;
+static int hf_skinny_alarmInfo = -1;
static int hf_skinny_alarmSeverity = -1;
-static int hf_skinny_alarmParam1 = -1;
-static int hf_skinny_alarmParam2 = -1;
-static int hf_skinny_receptionStatus = -1;
-static int hf_skinny_passThruPartyID = -1;
-static int hf_skinny_ORCStatus = -1;
-static int hf_skinny_IPVersion = -1;
-static int hf_skinny_ipAddress = -1;
-static int hf_skinny_ipV6Address = -1;
-static int hf_skinny_portNumber = -1;
-static int hf_skinny_statsProcessingType = -1;
-static int hf_skinny_callIdentifier = -1;
-static int hf_skinny_packetsSent = -1;
-static int hf_skinny_octetsSent = -1;
-static int hf_skinny_packetsRecv = -1;
-static int hf_skinny_octetsRecv = -1;
-static int hf_skinny_packetsLost = -1;
-static int hf_skinny_latency = -1;
-static int hf_skinny_jitter = -1;
-static int hf_skinny_directoryNumber = -1;
-static int hf_skinny_softKeyEvent = -1;
-static int hf_skinny_lineInstance = -1;
-static int hf_skinny_keepAliveInterval = -1;
-static int hf_skinny_dateTemplate = -1;
-static int hf_skinny_secondaryKeepAliveInterval = -1;
-static int hf_skinny_buttonOffset = -1;
+static int hf_skinny_algorithmID = -1;
+static int hf_skinny_alignmentPadding = -1;
+static int hf_skinny_annAckReq = -1;
+static int hf_skinny_annPlayMode = -1;
+static int hf_skinny_annStatus = -1;
+static int hf_skinny_annexNandWFutureUse = -1;
+static int hf_skinny_appConfID = -1;
+static int hf_skinny_appData = -1;
+static int hf_skinny_appID = -1;
+static int hf_skinny_appInstanceID = -1;
+static int hf_skinny_appName = -1;
+static int hf_skinny_applicationID = -1;
+static int hf_skinny_areMessagesWaiting = -1;
+static int hf_skinny_associatedStreamID = -1;
+static int hf_skinny_audioCapCount = -1;
+static int hf_skinny_audioLevelAdjustment = -1;
+static int hf_skinny_audit_participant_result = -1;
+static int hf_skinny_averageBitRate = -1;
+static int hf_skinny_bandwidth = -1;
+static int hf_skinny_bitRate = -1;
+static int hf_skinny_bridgeParticipantId = -1;
+static int hf_skinny_burstSize = -1;
+static int hf_skinny_busyTrigger = -1;
static int hf_skinny_buttonCount = -1;
-static int hf_skinny_totalButtonCount = -1;
-static int hf_skinny_buttonInstanceNumber = -1;
static int hf_skinny_buttonDefinition = -1;
-static int hf_skinny_softKeyOffset = -1;
-static int hf_skinny_softKeyCount = -1;
-static int hf_skinny_totalSoftKeyCount = -1;
-static int hf_skinny_softKeyLabel = -1;
-static int hf_skinny_softKeySetOffset = -1;
-static int hf_skinny_softKeySetCount = -1;
-static int hf_skinny_totalSoftKeySetCount = -1;
-static int hf_skinny_softKeyTemplateIndex = -1;
-static int hf_skinny_softKeyInfoIndex = -1;
-static int hf_skinny_softKeySetDescription = -1;
-static int hf_skinny_softKeyMap = -1;
-static int hf_skinny_softKey0 = -1;
-static int hf_skinny_softKey1 = -1;
-static int hf_skinny_softKey2 = -1;
-static int hf_skinny_softKey3 = -1;
-static int hf_skinny_softKey4 = -1;
-static int hf_skinny_softKey5 = -1;
-static int hf_skinny_softKey6 = -1;
-static int hf_skinny_softKey7 = -1;
-static int hf_skinny_softKey8 = -1;
-static int hf_skinny_softKey9 = -1;
-static int hf_skinny_softKey10 = -1;
-static int hf_skinny_softKey11 = -1;
-static int hf_skinny_softKey12 = -1;
-static int hf_skinny_softKey13 = -1;
-static int hf_skinny_softKey14 = -1;
-static int hf_skinny_softKey15 = -1;
-static int hf_skinny_lampMode = -1;
-static int hf_skinny_messageTimeOutValue = -1;
-static int hf_skinny_displayMessage = -1;
-static int hf_skinny_lineDirNumber = -1;
-static int hf_skinny_lineFullyQualifiedDisplayName = -1;
-static int hf_skinny_lineDisplayName = -1;
-static int hf_skinny_speedDialDirNumber = -1;
-static int hf_skinny_speedDialDisplayName = -1;
-static int hf_skinny_dateYear = -1;
-static int hf_skinny_dateMonth = -1;
-static int hf_skinny_dayOfWeek = -1;
-static int hf_skinny_dateDay = -1;
-static int hf_skinny_dateHour = -1;
-static int hf_skinny_dateMinute = -1;
-static int hf_skinny_dateSeconds = -1;
-static int hf_skinny_dateMilliseconds = -1;
-static int hf_skinny_timeStamp = -1;
+static int hf_skinny_buttonOffset = -1;
+static int hf_skinny_callHistoryDisposition = -1;
+static int hf_skinny_callInstance = -1;
+static int hf_skinny_callReference = -1;
+static int hf_skinny_callSecurityStatus = -1;
+static int hf_skinny_callSelectStat = -1;
static int hf_skinny_callState = -1;
-static int hf_skinny_deviceTone = -1;
+static int hf_skinny_callType = -1;
+static int hf_skinny_calledParty = -1;
+static int hf_skinny_calledPartyName = -1;
+static int hf_skinny_callingParty = -1;
static int hf_skinny_callingPartyName = -1;
static int hf_skinny_callingPartyNumber = -1;
-static int hf_skinny_calledPartyName = -1;
-static int hf_skinny_callType = -1;
-static int hf_skinny_originalCalledPartyName = -1;
-static int hf_skinny_originalCalledParty = -1;
-static int hf_skinny_ringType = -1;
-static int hf_skinny_ringMode = -1;
-static int hf_skinny_speakerMode = -1;
-static int hf_skinny_remoteIpAddr = -1;
-static int hf_skinny_remotePortNumber = -1;
-static int hf_skinny_millisecondPacketSize = -1;
-static int hf_skinny_precedenceValue = -1;
-static int hf_skinny_silenceSuppression = -1;
-static int hf_skinny_g723BitRate = -1;
+static int hf_skinny_capAndVer = -1;
+static int hf_skinny_capCount = -1;
+static int hf_skinny_cause = -1;
+static int hf_skinny_cdpnVoiceMailbox = -1;
+static int hf_skinny_cgpnVoiceMailbox = -1;
+static int hf_skinny_chan0MaxPayload = -1;
+static int hf_skinny_chan2MaxPayload = -1;
+static int hf_skinny_chan2MaxWindow = -1;
+static int hf_skinny_chan3MaxPayload = -1;
+static int hf_skinny_clockConversionCode = -1;
+static int hf_skinny_clockDivisor = -1;
+static int hf_skinny_codecMode = -1;
+static int hf_skinny_codecParam1 = -1;
+static int hf_skinny_codecParam2 = -1;
+static int hf_skinny_command = -1;
+static int hf_skinny_compressionType = -1;
+static int hf_skinny_confServiceNum = -1;
static int hf_skinny_conferenceID = -1;
-static int hf_skinny_deviceResetType = -1;
-static int hf_skinny_echoCancelType = -1;
-static int hf_skinny_deviceUnregisterStatus = -1;
-static int hf_skinny_hookFlashDetectMode = -1;
-static int hf_skinny_detectInterval = -1;
-static int hf_skinny_microphoneMode = -1;
-static int hf_skinny_headsetMode = -1;
-static int hf_skinny_unknown = -1;
-static int hf_skinny_rawData = -1;
-static int hf_skinny_xmlData = -1;
-static int hf_skinny_activeForward = -1;
+static int hf_skinny_conferenceName = -1;
+static int hf_skinny_confirmRequired = -1;
+static int hf_skinny_country = -1;
+static int hf_skinny_customMaxBRandCPB = -1;
+static int hf_skinny_customMaxDPB = -1;
+static int hf_skinny_customMaxFS = -1;
+static int hf_skinny_customMaxMBPS = -1;
+static int hf_skinny_customPictureFormatCount = -1;
+static int hf_skinny_data = -1;
+static int hf_skinny_dataCapCount = -1;
+static int hf_skinny_dataCapabilityDirection = -1;
+static int hf_skinny_dataLength = -1;
+static int hf_skinny_dataSize = -1;
+static int hf_skinny_dateTemplate = -1;
+static int hf_skinny_defendingPriority = -1;
+static int hf_skinny_delete_conf_result = -1;
+static int hf_skinny_deviceType = -1;
+static int hf_skinny_dialedNumber = -1;
+static int hf_skinny_direction = -1;
+static int hf_skinny_directoryNum = -1;
+static int hf_skinny_displayPriority = -1;
+static int hf_skinny_dtmfType = -1;
+static int hf_skinny_dynamicPayload = -1;
+static int hf_skinny_ecValue = -1;
+static int hf_skinny_encryptionCapability = -1;
+static int hf_skinny_errorCode = -1;
+static int hf_skinny_failureNodeIpAddr = -1;
+static int hf_skinny_featureCapabilities = -1;
+static int hf_skinny_featureID = -1;
+static int hf_skinny_featureIndex = -1;
+static int hf_skinny_featureStatus = -1;
+static int hf_skinny_featureTextLabel = -1;
+static int hf_skinny_features = -1;
+static int hf_skinny_firmwareLoadName = -1;
+static int hf_skinny_firstGOB = -1;
+static int hf_skinny_firstMB = -1;
+static int hf_skinny_format = -1;
static int hf_skinny_forwardAllActive = -1;
+static int hf_skinny_forwardAllDirnum = -1;
static int hf_skinny_forwardBusyActive = -1;
+static int hf_skinny_forwardBusyDirnum = -1;
static int hf_skinny_forwardNoAnswerActive = -1;
-static int hf_skinny_forwardNumber = -1;
-static int hf_skinny_serverName = -1;
-static int hf_skinny_numberLines = -1;
-static int hf_skinny_numberSpeedDials = -1;
-static int hf_skinny_userName = -1;
-static int hf_skinny_sessionType = -1;
-static int hf_skinny_version = -1;
-static int hf_skinny_mediaEnunciationType = -1;
-static int hf_skinny_serverIdentifier = -1;
-static int hf_skinny_serverListenPort = -1;
-static int hf_skinny_serverIpAddress = -1;
-static int hf_skinny_multicastIpAddress = -1;
-static int hf_skinny_multicastPort = -1;
-static int hf_skinny_tokenRejWaitTime = -1;
-static int hf_skinny_numberOfInServiceStreams = -1;
-static int hf_skinny_maxStreamsPerConf = -1;
-static int hf_skinny_numberOfOutOfServiceStreams = -1;
-static int hf_skinny_applicationID = -1;
-static int hf_skinny_serviceNum = -1;
-static int hf_skinny_serviceURLIndex = -1;
-static int hf_skinny_featureIndex = -1;
-static int hf_skinny_createConfResults = -1;
-static int hf_skinny_modifyConfResults = -1;
-static int hf_skinny_deleteConfResults = -1;
-static int hf_skinny_addParticipantResults = -1;
-static int hf_skinny_passThruData = -1;
+static int hf_skinny_forwardNoAnswerlDirnum = -1;
+static int hf_skinny_g723BitRate = -1;
+static int hf_skinny_headsetStatus = -1;
+static int hf_skinny_hearingConfPartyMask = -1;
+static int hf_skinny_instance = -1;
+static int hf_skinny_instanceNumber = -1;
+static int hf_skinny_ipAddr_ipv4 = -1;
+static int hf_skinny_ipAddr_ipv6 = -1;
+static int hf_skinny_ipAddressType = -1;
+static int hf_skinny_ipAddressingMode = -1;
+static int hf_skinny_ipV4AddressScope = -1;
+static int hf_skinny_ipV6AddressScope = -1;
+static int hf_skinny_isConferenceCreator = -1;
+static int hf_skinny_isMKIPresent = -1;
+static int hf_skinny_jitter = -1;
+static int hf_skinny_keepAliveInterval = -1;
+static int hf_skinny_key = -1;
+static int hf_skinny_keyDerivationRate = -1;
+static int hf_skinny_keylen = -1;
+static int hf_skinny_kpButton = -1;
+static int hf_skinny_lampMode = -1;
static int hf_skinny_last = -1;
-static int hf_skinny_numberOfEntries = -1;
-static int hf_skinny_auditParticipantResults = -1;
-static int hf_skinny_participantEntry = -1;
-static int hf_skinny_resourceTypes = -1;
-static int hf_skinny_numberOfReservedParticipants = -1;
-static int hf_skinny_numberOfActiveParticipants = -1;
-static int hf_skinny_appID = -1;
-static int hf_skinny_appData = -1;
-static int hf_skinny_appConfID = -1;
-static int hf_skinny_sequenceFlag = -1;
-static int hf_skinny_displayPriority = -1;
-static int hf_skinny_appInstanceID = -1;
-static int hf_skinny_routingID = -1;
-static int hf_skinny_audioCapCount = -1;
-static int hf_skinny_videoCapCount = -1;
-static int hf_skinny_dataCapCount = -1;
-static int hf_skinny_RTPPayloadFormat = -1;
-static int hf_skinny_customPictureFormatCount = -1;
-static int hf_skinny_pictureWidth = -1;
-static int hf_skinny_pictureHeight = -1;
-static int hf_skinny_pixelAspectRatio = -1;
-static int hf_skinny_clockConversionCode = -1;
-static int hf_skinny_clockDivisor = -1;
-static int hf_skinny_activeStreamsOnRegistration = -1;
-static int hf_skinny_maxBW = -1;
-static int hf_skinny_serviceResourceCount = -1;
+static int hf_skinny_lastRedirectingParty = -1;
+static int hf_skinny_lastRedirectingPartyName = -1;
+static int hf_skinny_lastRedirectingReason = -1;
+static int hf_skinny_lastRedirectingVoiceMailbox = -1;
+static int hf_skinny_latency = -1;
static int hf_skinny_layoutCount = -1;
-static int hf_skinny_layout = -1;
-static int hf_skinny_maxConferences = -1;
-static int hf_skinny_activeConferenceOnRegistration = -1;
-static int hf_skinny_transmitOrReceive = -1;
+static int hf_skinny_layoutID = -1;
+static int hf_skinny_layouts = -1;
+static int hf_skinny_level = -1;
static int hf_skinny_levelPreferenceCount = -1;
-static int hf_skinny_transmitPreference = -1;
-static int hf_skinny_format = -1;
+static int hf_skinny_lineDataEntries = -1;
+static int hf_skinny_lineDirNumber = -1;
+static int hf_skinny_lineDisplayOptions = -1;
+static int hf_skinny_lineFullyQualifiedDisplayName = -1;
+static int hf_skinny_lineInstance = -1;
+static int hf_skinny_lineNumber = -1;
+static int hf_skinny_lineTextLabel = -1;
+static int hf_skinny_locale = -1;
+static int hf_skinny_longTermPictureIndex = -1;
+static int hf_skinny_macAddress = -1;
+static int hf_skinny_matrixConfPartyID = -1;
+static int hf_skinny_maxBW = -1;
static int hf_skinny_maxBitRate = -1;
+static int hf_skinny_maxConferences = -1;
+static int hf_skinny_maxFramesPerPacket = -1;
+static int hf_skinny_maxNumCalls = -1;
+static int hf_skinny_maxNumOfAvailLines = -1;
+static int hf_skinny_maxNumberOfLines = -1;
+static int hf_skinny_maxProtocolVer = -1;
+static int hf_skinny_maxRetryNumber = -1;
+static int hf_skinny_maxStreams = -1;
+static int hf_skinny_maxStreamsPerConf = -1;
+static int hf_skinny_maximumBitRate = -1;
+static int hf_skinny_mediaPathCapabilities = -1;
+static int hf_skinny_mediaPathEvent = -1;
+static int hf_skinny_mediaPathID = -1;
+static int hf_skinny_mediaTransportType = -1;
+static int hf_skinny_mediaType = -1;
+static int hf_skinny_micMode = -1;
+static int hf_skinny_millisecondPacketSize = -1;
static int hf_skinny_minBitRate = -1;
-static int hf_skinny_MPI = -1;
-static int hf_skinny_serviceNumber = -1;
-static int hf_skinny_temporalSpatialTradeOffCapability = -1;
-static int hf_skinny_stillImageTransmission = -1;
-static int hf_skinny_h263_capability_bitfield = -1;
-static int hf_skinny_annexNandWFutureUse = -1;
+static int hf_skinny_mixingMode = -1;
+static int hf_skinny_modAnd2833 = -1;
static int hf_skinny_modelNumber = -1;
-static int hf_skinny_bandwidth = -1;
-static int hf_skinny_protocolDependentData = -1;
-static int hf_skinny_priority = -1;
-static int hf_skinny_payloadDtmf = -1;
-static int hf_skinny_featureID = -1;
-static int hf_skinny_featureTextLabel = -1;
-static int hf_skinny_featureStatus = -1;
+static int hf_skinny_modify_conf_result = -1;
+static int hf_skinny_multicastIpAddr_ipv4 = -1;
+static int hf_skinny_multicastIpAddr_ipv6 = -1;
+static int hf_skinny_multicastPortNumber = -1;
+static int hf_skinny_multimediaOpenReceiveChannelStatus = -1;
+static int hf_skinny_mwiControlNumber = -1;
+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_notify = -1;
-static int hf_skinny_endOfAnnAck = -1;
-static int hf_skinny_annPlayMode = -1;
-static int hf_skinny_annPlayStatus = -1;
-static int hf_skinny_locale = -1;
-static int hf_skinny_country = -1;
-static int hf_skinny_matrixConfPartyID = -1;
-static int hf_skinny_hearingConfPartyMask = -1;
-static int hf_skinny_serviceURL = -1;
-static int hf_skinny_serviceURLDisplayName = -1;
-static int hf_skinny_callSelectStat = -1;
-static int hf_skinny_isConferenceCreator = -1;
-static int hf_skinny_payload_rfc_number = -1;
-static int hf_skinny_payloadType = -1;
-static int hf_skinny_bitRate = -1;
-static int hf_skinny_pictureFormatCount = -1;
-static int hf_skinny_confServiceNum = -1;
-static int hf_skinny_DSCPValue = -1;
-static int hf_skinny_miscCommandType = -1;
-static int hf_skinny_temporalSpatialTradeOff = -1;
-static int hf_skinny_firstGOB = -1;
+static int hf_skinny_nse = -1;
+static int hf_skinny_numNewMsgs = -1;
+static int hf_skinny_numOldMsgs = -1;
+static int hf_skinny_numberOctetsReceived = -1;
+static int hf_skinny_numberOctetsSent = -1;
+static int hf_skinny_numberOfActiveParticipants = -1;
+static int hf_skinny_numberOfEntries = -1;
static int hf_skinny_numberOfGOBs = -1;
-static int hf_skinny_firstMB = -1;
+static int hf_skinny_numberOfInServiceStreams = -1;
+static int hf_skinny_numberOfLines = -1;
static int hf_skinny_numberOfMBs = -1;
+static int hf_skinny_numberOfOutOfServiceStreams = -1;
+static int hf_skinny_numberOfReservedParticipants = -1;
+static int hf_skinny_numberOfSpeedDials = -1;
+static int hf_skinny_numberPacketsLost = -1;
+static int hf_skinny_numberPacketsReceived = -1;
+static int hf_skinny_numberPacketsSent = -1;
+static int hf_skinny_openReceiveChannelStatus = -1;
+static int hf_skinny_originalCalledParty = -1;
+static int hf_skinny_originalCalledPartyName = -1;
+static int hf_skinny_originalCdpnRedirectReason = -1;
+static int hf_skinny_originalCdpnVoiceMailbox = -1;
+static int hf_skinny_parm1 = -1;
+static int hf_skinny_parm2 = -1;
+static int hf_skinny_participantEntry = -1;
+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_payloadCapability = -1;
+static int hf_skinny_payloadDtmf = -1;
+static int hf_skinny_payloadType = -1;
+static int hf_skinny_payload_rfc_number = -1;
+static int hf_skinny_peakRate = -1;
+static int hf_skinny_pictureFormatCount = -1;
+static int hf_skinny_pictureHeight = -1;
static int hf_skinny_pictureNumber = -1;
-static int hf_skinny_longTermPictureIndex = -1;
+static int hf_skinny_pictureWidth = -1;
+static int hf_skinny_pixelAspectRatio = -1;
+static int hf_skinny_portHandlingFlag = -1;
+static int hf_skinny_portNumber = -1;
+static int hf_skinny_precedenceDm = -1;
+static int hf_skinny_precedenceLv = -1;
+static int hf_skinny_precedenceValue = -1;
+static int hf_skinny_preemptionPriority = -1;
+static int hf_skinny_priority = -1;
+static int hf_skinny_privacy = -1;
+static int hf_skinny_profile = -1;
+static int hf_skinny_promptStatus = -1;
+static int hf_skinny_protocolDependentData = -1;
+static int hf_skinny_protocolVer = -1;
+static int hf_skinny_receptionStatus = -1;
+static int hf_skinny_recording_status = -1;
static int hf_skinny_recoveryReferencePictureCount = -1;
-static int hf_skinny_transactionID = -1;
-static int hf_skinny_lastRedirectingPartyName = -1;
-static int hf_skinny_lastRedirectingParty = -1;
-static int hf_skinny_cgpnVoiceMailbox = -1;
-static int hf_skinny_cdpnVoiceMailbox = -1;
-static int hf_skinny_originalCdpnVoiceMailbox = -1;
-static int hf_skinny_lastRedirectingVoiceMailbox = -1;
-static int hf_skinny_originalCdpnRedirectReason = -1;
-static int hf_skinny_lastRedirectingReason = -1;
-static int hf_skinny_callInstance = -1;
-static int hf_skinny_callSecurityStatus = -1;
-static int hf_skinny_partyPIRestrictionBits_CallingPartyName = -1;
-static int hf_skinny_partyPIRestrictionBits_CallingPartyNumber = -1;
-static int hf_skinny_partyPIRestrictionBits_CalledPartyName = -1;
-static int hf_skinny_partyPIRestrictionBits_CalledPartyNumber = -1;
-static int hf_skinny_partyPIRestrictionBits_OriginalCalledPartyName = -1;
-static int hf_skinny_partyPIRestrictionBits_OriginalCalledPartyNumber = -1;
-static int hf_skinny_partyPIRestrictionBits_LastRedirectPartyName = -1;
-static int hf_skinny_partyPIRestrictionBits_LastRedirectPartyNumber = -1;
-static int hf_skinny_directoryIndex = -1;
-static int hf_skinny_directoryPhoneNumber = -1;
+static int hf_skinny_remoteIpAddr_ipv4 = -1;
+static int hf_skinny_remoteIpAddr_ipv6 = -1;
+static int hf_skinny_remotePortNumber = -1;
+static int hf_skinny_requestedIpAddrType = -1;
+static int hf_skinny_reserved_for_future_use = -1;
+static int hf_skinny_resetType = -1;
+static int hf_skinny_resourceType = -1;
+static int hf_skinny_result = -1;
+static int hf_skinny_resultCode = -1;
+static int hf_skinny_resvStyle = -1;
+static int hf_skinny_retryTimer = -1;
+static int hf_skinny_rfc2833 = -1;
+static int hf_skinny_ringDuration = -1;
+static int hf_skinny_ringMode = -1;
+static int hf_skinny_routingID = -1;
+static int hf_skinny_rsvpErrorCode = -1;
+static int hf_skinny_rsvpErrorFlag = -1;
+static int hf_skinny_rsvpErrorSubCodeVal = -1;
+static int hf_skinny_rtpMediaPort = -1;
+static int hf_skinny_salt = -1;
+static int hf_skinny_saltlen = -1;
+static int hf_skinny_secondaryKeepAliveInterval = -1;
+static int hf_skinny_sequenceFlag = -1;
+static int hf_skinny_serverInstance = -1;
+static int hf_skinny_serverName = -1;
+static int hf_skinny_serverTcpListenPort = -1;
+static int hf_skinny_serviceNum = -1;
+static int hf_skinny_serviceNumber = -1;
+static int hf_skinny_serviceResourceCount = -1;
+static int hf_skinny_serviceURL = -1;
+static int hf_skinny_serviceURLDisplayName = -1;
+static int hf_skinny_serviceURLIndex = -1;
+static int hf_skinny_sessionType = -1;
+static int hf_skinny_softKeyCount = -1;
+static int hf_skinny_softKeyEvent = -1;
+static int hf_skinny_softKeyInfoIndex = -1;
+static int hf_skinny_softKeyLabel = -1;
+static int hf_skinny_softKeyOffset = -1;
+static int hf_skinny_softKeySetCount = -1;
+static int hf_skinny_softKeySetIndex = -1;
+static int hf_skinny_softKeySetOffset = -1;
+static int hf_skinny_softKeyTemplateIndex = -1;
+static int hf_skinny_sourceIpAddr_ipv4 = -1;
+static int hf_skinny_sourceIpAddr_ipv6 = -1;
+static int hf_skinny_sourcePortNumber = -1;
+static int hf_skinny_speakerMode = -1;
+static int hf_skinny_speedDialDirNumber = -1;
+static int hf_skinny_speedDialDisplayName = -1;
+static int hf_skinny_speedDialNumber = -1;
+static int hf_skinny_ssValue = -1;
+static int hf_skinny_sse = -1;
+static int hf_skinny_standard = -1;
static int hf_skinny_startMediaTransmissionStatus = -1;
-static int hf_skinny_startMultiMediaTransmissionStatus = -1;
-static int hf_skinny_qualityStats = -1;
-static int hf_skinny_accessory = -1;
-static int hf_skinny_accessoryState = -1;
-static int hf_skinny_macAddress = -1;
-static int hf_skinny_activeStreams = -1;
-static int hf_skinny_phoneFeatures = -1;
-static int hf_skinny_maxButtons = -1;
-static int hf_skinny_loadInfo = -1;
-static int hf_skinny_visibility = -1;
-
-/* Skinny content type and internet media type used by other dissectors
- * * are the same. List of media types from IANA at:
- * * http://www.iana.org/assignments/media-types/index.html */
+static int hf_skinny_startingLineInstance = -1;
+static int hf_skinny_stationIpAddr = -1;
+static int hf_skinny_stationIpAddr_ipv4 = -1;
+static int hf_skinny_stationIpAddr_ipv6 = -1;
+static int hf_skinny_stationIpV6Addr = -1;
+static int hf_skinny_stationIpV6Addr_ipv4 = -1;
+static int hf_skinny_stationIpV6Addr_ipv6 = -1;
+static int hf_skinny_statsProcessingMode = -1;
+static int hf_skinny_status = -1;
+static int hf_skinny_stillImageTransmission = -1;
+static int hf_skinny_stimulus = -1;
+static int hf_skinny_stimulusInstance = -1;
+static int hf_skinny_stimulusStatus = -1;
+static int hf_skinny_streamPassThroughID = -1;
+static int hf_skinny_subAppID = -1;
+static int hf_skinny_subscriptionID = -1;
+static int hf_skinny_systemTime = -1;
+static int hf_skinny_temporalSpatialTradeOff = -1;
+static int hf_skinny_temporalSpatialTradeOffCapability = -1;
+static int hf_skinny_text = -1;
+static int hf_skinny_timeOutValue = -1;
+static int hf_skinny_timer = -1;
+static int hf_skinny_tone = -1;
+static int hf_skinny_toneAnnouncement = -1;
+static int hf_skinny_tone_output_direction = -1;
+static int hf_skinny_totalButtonCount = -1;
+static int hf_skinny_totalNumOfConfiguredLines = -1;
+static int hf_skinny_totalSoftKeyCount = -1;
+static int hf_skinny_totalSoftKeySetCount = -1;
+static int hf_skinny_transactionID = -1;
+static int hf_skinny_transmitIpAddr_ipv4 = -1;
+static int hf_skinny_transmitIpAddr_ipv6 = -1;
+static int hf_skinny_transmitPort = -1;
+static int hf_skinny_transmitPreference = -1;
+static int hf_skinny_unRegReasonCode = -1;
+static int hf_skinny_unknown2 = -1;
+static int hf_skinny_userName = -1;
+static int hf_skinny_v150sprt = -1;
+static int hf_skinny_vendor = -1;
+static int hf_skinny_vendorID = -1;
+static int hf_skinny_version = -1;
+static int hf_skinny_videoCapCount = -1;
+static int hf_skinny_videoCapabilityDirection = -1;
+static int hf_skinny_wDay = -1;
+static int hf_skinny_wDayOfWeek = -1;
+static int hf_skinny_wHour = -1;
+static int hf_skinny_wMilliseconds = -1;
+static int hf_skinny_wMinute = -1;
+static int hf_skinny_wMonth = -1;
+static int hf_skinny_wSecond = -1;
+static int hf_skinny_wYear = -1;
+static int hf_skinny_waitTimeBeforeNextReq = -1;
+
static dissector_table_t media_type_dissector_table;
/* Initialize the subtree pointers */
static gint ett_skinny = -1;
static gint ett_skinny_tree = -1;
-static gint ett_skinny_softKeyMap = -1;
/* desegmentation of SCCP */
static gboolean skinny_desegment = TRUE;
@@ -1386,3929 +2175,7394 @@ static skinny_info_t pi_arr[MAX_SKINNY_MESSAGES_IN_PACKET];
static int pi_current = 0;
static skinny_info_t *si;
+dissector_handle_t skinny_handle;
+
/* Get the length of a single SCCP PDU */
static guint
get_skinny_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
{
guint32 hdr_data_length;
- /*
- * Get the length of the SCCP packet.
- */
+ /* Get the length of the SCCP packet. */
hdr_data_length = tvb_get_letohl(tvb, offset);
- /*
- * That length doesn't include the length of the header itself;
- * add that in.
- */
+ /* That length doesn't include the length of the header itself. */
return hdr_data_length + 8;
}
static void
-dissect_skinny_xml(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, const gint start, gint length)
+dissect_skinny_xml(ptvcursor_t *cursor, int hfindex, packet_info *pinfo, guint32 length, guint32 maxlength)
{
- proto_item *item = NULL;
- proto_tree *subtree = NULL;
+ proto_item *item = NULL;
+ proto_tree *subtree = NULL;
+ dissector_handle_t handle = NULL;
+ proto_tree *tree = ptvcursor_tree(cursor);
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
tvbuff_t *next_tvb;
- dissector_handle_t handle;
- item = proto_tree_add_item(tree, hf_skinny_xmlData, tvb, start, length, ENC_ASCII|ENC_NA);
+ if (length == 0) {
+ length = tvb_strnlen(tvb, offset, -1);
+ }
+ if (length >= maxlength) {
+ length = maxlength;
+ }
+
+ ptvcursor_add_no_advance(cursor, hfindex, length, ENC_ASCII|ENC_NA);
+
+ item = proto_tree_add_item(tree, hf_skinny_xmlData, tvb, offset, length, ENC_ASCII|ENC_NA);
subtree = proto_item_add_subtree(item, 0);
- next_tvb = tvb_new_subset(tvb, start, length, -1);
+ next_tvb = tvb_new_subset(tvb, offset, length, -1);
handle = dissector_get_string_handle(media_type_dissector_table, "text/xml");
if (handle != NULL) {
call_dissector(handle, next_tvb, pinfo, subtree);
- }
+ }
+ ptvcursor_advance(cursor, maxlength);
}
-/* Dissect a single SCCP PDU */
-static int
-dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+static void
+dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6, packet_info *pinfo)
{
- int offset = 0;
- gboolean is_video = FALSE; /* FIX ME: need to indicate video or not */
+ address src_addr;
+ guint32 ipversion = 0;
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
+ guint32 hdr_version = tvb_get_letohl(tvb, 4);
+ gboolean is_video = 0;
+
+ /* ProtocolVersion > 18 include and extra field to declare IPv4 (0) / IPv6 (1) */
+ if (hdr_version >= V18_MSG_TYPE) {
+ ipversion = tvb_get_letohl(tvb, offset);
+ ptvcursor_add(cursor, hf_skinny_ipv4or6, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (ipversion == IPADDRTYPE_IPV4) {
+ guint32 ip_address;
+ src_addr.type = AT_IPv4;
+ src_addr.len = 4;
+ src_addr.data = (guint8 *)&ip_address;
+ ip_address = tvb_get_ipv4(tvb, offset);
+ rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
+ ptvcursor_add(cursor, hfindex_ipv4, 4, ENC_BIG_ENDIAN);
+ if (hdr_version >= V18_MSG_TYPE) {
+ /* skip over the extra room for ipv6 addresses */
+ ptvcursor_advance(cursor, 12);
+ }
+ } else if (ipversion == IPADDRTYPE_IPV6 || ipversion == IPADDRTYPE_IPV4_V6) {
+ struct e_in6_addr IPv6;
+ src_addr.type = AT_IPv6;
+ src_addr.len = 16;
+ src_addr.data = (guint16 *)&IPv6;
+ tvb_get_ipv6(tvb, offset, &IPv6);
+ rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
+ ptvcursor_add(cursor, hfindex_ipv6, 16, ENC_BIG_ENDIAN);
+ } else {
+ /* Invalid : skip over ipv6 space completely */
+ ptvcursor_advance(cursor, 16);
+ }
+}
- /* Header fields */
- guint32 hdr_data_length;
- guint32 hdr_version;
- guint32 data_messageid;
- /* guint32 data_size; */
+static void
+dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, guint32 length, guint32 maxlength)
+{
+ proto_item *item = NULL;
+ proto_tree *tree = ptvcursor_tree(cursor);
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
+
+ const gchar *disp_string = NULL;
+ wmem_strbuf_t *wmem_new = NULL;
+ const gchar *replacestr = NULL;
+ guint x = 0;
+ guint append_replaced_str = 0;
+
+ if (length == 0) {
+ length = tvb_strnlen(tvb, offset, -1) + 1;
+ }
+ if (length >= maxlength) {
+ length = maxlength;
+ }
- guint i = 0;
- guint t = 0;
- int j = 0;
- guint count;
- int val;
- guint32 ipversion;
+ disp_string = (const gchar *) tvb_memdup(wmem_packet_scope(), tvb, offset, length);
+ item = proto_tree_add_item(tree, hfindex, tvb, offset, length, ENC_ASCII | ENC_NA);
- guint32 capCount;
- guint32 softKeyCount;
- guint32 softKeySetCount;
- guint16 validKeyMask;
+ wmem_new = wmem_strbuf_sized_new(wmem_packet_scope(), strlen(disp_string), maxlength);
- /* Set up structures we will need to add the protocol subtree and manage it */
- proto_item *ti;
- proto_tree *skinny_tree = NULL;
- proto_tree *skinny_sub_tree;
- proto_tree *skinny_sub_tree_sav;
- proto_tree *skinny_sub_tree_sav_sav;
+ while (*disp_string) {
+ replacestr = '\0';
+ if (strlen(disp_string) > x+1) {
+ if (*disp_string == '\36') {
+ replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_36_ext);
+ } else if (*disp_string == '\200') {
+ replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_200_ext);
+ }
+ }
+ if (replacestr) {
+ disp_string++; x++; /* swallow replaced characters */
+ wmem_strbuf_append(wmem_new, replacestr);
+ append_replaced_str = 1;
+ } else {
+ wmem_strbuf_append_c(wmem_new, *disp_string);
+ }
+ x++;
+ disp_string++;
+ }
- proto_item *skm = NULL;
- proto_item *skm_tree = NULL;
+ if (append_replaced_str) {
+ proto_item_append_text(item, " => \"%s\"" , wmem_strbuf_get_str(wmem_new));
+ }
+ ptvcursor_advance(cursor, length);
+}
- hdr_data_length = tvb_get_letohl(tvb, offset);
- hdr_version = tvb_get_letohl(tvb, offset+4);
- data_messageid = tvb_get_letohl(tvb, offset+8);
+/*** Messages Handlers ***/
+
+/*
+ * Message: RegisterMessage
+ * Opcode: 0x0001
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
- /* Initialise stat info for passing to tap */
- pi_current++;
- if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET)
{
- /* Overwrite info in first struct if run out of space... */
- pi_current = 0;
+ /* start struct : sid / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
+ ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sid */
}
- si = &pi_arr[pi_current];
- si->messId = data_messageid;
- si->messageName = val_to_str_ext(data_messageid, &message_id_ext, "0x%08X (Unknown)");
- si->callId = 0;
- si->lineId = 0;
- si->passThruId = 0;
- si->callState = 0;
- g_free(si->callingParty);
- si->callingParty = NULL;
- g_free(si->calledParty);
- si->calledParty = NULL;
+ ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_data_length > 52) {
+ ptvcursor_add(cursor, hf_skinny_activeStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolVer, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "PhoneFeatures");
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit1, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit2, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit3, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit4, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_UTF8, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit6, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit7, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_DynamicMessages, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit9, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_RFC2833, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit11, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit12, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit13, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit14, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit15, 2, ENC_LITTLE_ENDIAN);
+ 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 */
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_data_length > 100) {
+ ptvcursor_add(cursor, hf_skinny_activeConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_macAddress, 6, ENC_NA);
+ ptvcursor_advance(cursor, 12 - 6);
+ ptvcursor_add(cursor, hf_skinny_ipV4AddressScope, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxNumberOfLines, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stationIpV6Addr, 16, ENC_BIG_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_ipV6AddressScope, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_firmwareLoadName, 32, ENC_ASCII|ENC_NA);
+ }
+}
- /* In the interest of speed, if "tree" is NULL, don't do any work not
- * necessary to generate protocol tree items. */
- 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);
+/*
+ * Message: IpPortMessage
+ * Opcode: 0x0002
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_rtpMediaPort, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: KeypadButtonMessage
+ * Opcode: 0x0003
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+
+ ptvcursor_add(cursor, hf_skinny_kpButton, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_data_length > 8) {
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
}
+}
- col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName);
- col_set_fence(pinfo->cinfo, COL_INFO);
+/*
+ * Message: EnblocCallMessage
+ * Opcode: 0x0004
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
+ si->calledParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), VariableDirnumSize));
+ ptvcursor_add(cursor, hf_skinny_calledParty, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: StimulusMessage
+ * Opcode: 0x0005
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_stimulusStatus, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: OffHookMessage
+ * Opcode: 0x0006
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+
+ if (hdr_data_length > 4) {
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+ }
+}
+
+/*
+ * Message: OnHookMessage
+ * Opcode: 0x0007
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+
+ if (hdr_data_length > 4) {
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+ }
+}
+
+/*
+ * Message: HookFlashMessage
+ * Opcode: 0x0008
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
+
+/*
+ * Message: ForwardStatReqMessage
+ * Opcode: 0x0009
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: SpeedDialStatReqMessage
+ * Opcode: 0x000a
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN);
+}
- proto_tree_add_uint(skinny_tree, hf_skinny_messageid, tvb,offset+8, 4, data_messageid );
+/*
+ * Message: LineStatReqMessage
+ * Opcode: 0x000b
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_LineStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
+}
+/*
+ * Message: CapabilitiesRes
+ * Opcode: 0x0010
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 capCount = 0;
+ guint32 payloadCapability = 0;
+ capCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_capCount, 4, ENC_LITTLE_ENDIAN);
{
- switch(data_messageid) {
-
- case 0x0000: /* KeepAliveMessage */
- break;
-
- case 0x0001: /* RegisterMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+36, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxStreams, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 52) {
- proto_tree_add_item(skinny_tree, hf_skinny_activeStreams, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_phoneFeatures, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_IPVersion, tvb, offset+56, 4, ENC_LITTLE_ENDIAN);
- }
- if (hdr_data_length > 100) {
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+60, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_macAddress, tvb, offset+64, 12, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+76, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxButtons, tvb, offset+80, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipV6Address, tvb, offset+84, 16, ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+100, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_loadInfo, tvb, offset+104, hdr_data_length-96, ENC_ASCII|ENC_NA);
- }
- break;
-
- case 0x0002: /* IpPortMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_stationIpPort, tvb, offset+12, 2, ENC_BIG_ENDIAN);
- break;
-
- case 0x0003: /* KeypadButtonMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_stationKeypadButton, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 8) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- }
- break;
-
- case 0x0004: /* EnblocCallMessage -- This decode NOT verified*/
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, offset+12, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0005: /* StimulusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_stimulus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_stimulusInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 12) {
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, offset+20);
- }
- break;
-
- case 0x0006: /* OffHookMessage */
- if (hdr_data_length > 4) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
- }
- break;
-
- case 0x0007: /* OnHookMessage */
- if (hdr_data_length > 4) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
+ /* start struct : caps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [ref: capCount = %d, max:18]", capCount);
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < capCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [%d / %d]", counter_1 + 1, capCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ }
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- break;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: caps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: caps */
+ }
+}
- case 0x0008: /* HookFlashMessage */
- break;
+/*
+ * Message: AlarmMessage
+ * Opcode: 0x0020
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_alarmSeverity, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_text, 80, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_parm1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_parm2, 4, ENC_LITTLE_ENDIAN);
+}
- case 0x0009: /* ForwardStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
+/*
+ * Message: MulticastMediaReceptionAckMessage
+ * Opcode: 0x0021
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_receptionStatus, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- case 0x000a: /* SpeedDialStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
+/*
+ * Message: OpenReceiveChannelAckMessage
+ * Opcode: 0x0022
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+
+ si->openreceiveStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_openReceiveChannelStatus, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
+ 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);
+ }
+}
- case 0x000b: /* LineStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
+/*
+ * Message: ConnectionStatisticsResMessage
+ * Opcode: 0x0023
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
+ guint32 dataSize = 0;
+
+ ptvcursor_add(cursor, hf_skinny_directoryNum, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ 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);
+ ptvcursor_add(cursor, hf_skinny_numberPacketsSent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOctetsSent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberPacketsReceived, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOctetsReceived, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberPacketsLost, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_jitter, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_latency, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_data_length > 64) {
+ dataSize = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_dataSize, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_data, dataSize, ENC_ASCII|ENC_NA);
+ }
+}
- case 0x000c: /* ConfigStatReqMessage */
- break;
+/*
+ * Message: OffHookWithCgpnMessage
+ * Opcode: 0x0024
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_OffHookWithCgpnMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
+ ptvcursor_add(cursor, hf_skinny_callingPartyNumber, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
+}
- case 0x000d: /* TimeDateReqMessage */
- break;
+/*
+ * Message: SoftKeyEventMessage
+ * Opcode: 0x0026
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- case 0x000e: /* ButtonTemplateReqMessage */
- break;
+/*
+ * Message: UnregisterMessage
+ * Opcode: 0x0027
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_UnregisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_unRegReasonCode, 4, ENC_LITTLE_ENDIAN);
+}
- case 0x000f: /* VersionReqMessage */
- break;
+/*
+ * Message: RegisterTokenReq
+ * Opcode: 0x0029
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ {
+ /* start struct : sid / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
+ ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sid */
+ }
+ 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, pinfo);
+}
- case 0x0010: /* CapabilitiesResMessage - VERIFIED AS IS */
- capCount = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_capCount, tvb, offset+12, 4, capCount);
- for (i = 0; i < capCount; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+(i*16)+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+(i*16)+20, 2, ENC_LITTLE_ENDIAN);
+/*
+ * Message: MediaTransmissionFailureMessage
+ * Opcode: 0x002a
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ 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);
+}
- /* FIXME -- decode the union (should be interpreted per payloadCapability) */
- /*proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+(i*16)+22, 2, ENC_LITTLE_ENDIAN);*/
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+(i*16)+24, 2, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+(i*16)+26, 2, ENC_LITTLE_ENDIAN);
- }
- break;
-
- case 0x0011: /* MediaPortListMessage */
- break;
-
- case 0x0012: /* ServerReqMessage */
- break;
-
- case 0x0020: /* AlarmMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_alarmSeverity, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, StationMaxAlarmMessageSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_alarmParam1, tvb, offset+96, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_alarmParam2, tvb, offset+100, 4, ENC_BIG_ENDIAN);
- break;
-
- case 0x0021: /* MulticastMediaReceptionAck - This decode NOT verified */
- proto_tree_add_item(skinny_tree, hf_skinny_receptionStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0022: /* OpenReceiveChannelAck */
- if (hdr_version == BASIC_MSG_TYPE) {
- address src_addr;
- guint32 ipv4_address;
- proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
-
- src_addr.type = AT_IPv4;
- src_addr.len = 4;
- src_addr.data = (guint8 *)&ipv4_address;
- ipv4_address = tvb_get_ipv4(tvb, offset+16);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num, is_video, NULL);
-
- si->passThruId = tvb_get_letohl(tvb, offset+24);
- } else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D) {
- address src_addr;
- guint32 ipv4_address;
-
- proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- /*Assume the field of next 4 bytes is IP Version*/
- ipversion = tvb_get_ntohl(tvb, offset+16);
- proto_tree_add_item(skinny_tree, hf_skinny_IPVersion, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- /*Here we take "0" as IPv4, "others" as IPv6, maybe we need to fix it later*/
- if (ipversion == 0) {
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+20, 4, ENC_BIG_ENDIAN);
- } else {
- proto_tree_add_item(skinny_tree, hf_skinny_ipV6Address, tvb, offset+20, 16, ENC_NA);
- }
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
+/*
+ * Message: HeadsetStatusMessage
+ * Opcode: 0x002b
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_headsetStatus, 4, ENC_LITTLE_ENDIAN);
+}
- src_addr.type = AT_IPv4;
- src_addr.len = 4;
- src_addr.data = (guint8 *)&ipv4_address;
- ipv4_address = tvb_get_ipv4(tvb, offset+20);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+36), 0, "Skinny", pinfo->fd->num, is_video, NULL);
+/*
+ * Message: MediaResourceNotificationMessage
+ * Opcode: 0x002c
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfInServiceStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreamsPerConf, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfOutOfServiceStreams, 4, ENC_LITTLE_ENDIAN);
+}
- si->passThruId = tvb_get_letohl(tvb, offset+40);
- }
- break;
-
- case 0x0023: /* ConnectionStatisticsRes */
- proto_tree_add_item(skinny_tree, hf_skinny_directoryNumber, tvb, offset+12, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- if (hdr_version == BASIC_MSG_TYPE || hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B) {
- proto_tree_add_item(skinny_tree, hf_skinny_statsProcessingType, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsSent, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsSent, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsRecv, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsRecv, tvb, offset+56, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsLost, tvb, offset+60, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_jitter, tvb, offset+64, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_latency, tvb, offset+68, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+72, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+76, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+80, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+84, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_qualityStats, tvb, offset+88, hdr_data_length-80, ENC_ASCII|ENC_NA);
- } else if (hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D) {
- proto_tree_add_item(skinny_tree, hf_skinny_packetsSent, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsSent, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsRecv, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsRecv, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsLost, tvb, offset+56, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_jitter, tvb, offset+60, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_latency, tvb, offset+64, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+68, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+72, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+76, 1, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_qualityStats, tvb, offset+77, hdr_data_length-69, ENC_ASCII|ENC_NA);
+/*
+ * Message: RegisterAvailableLinesMessage
+ * Opcode: 0x002d
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_maxNumOfAvailLines, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: DeviceToUserDataMessage
+ * Opcode: 0x002e
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : deviceToUserData / size: 2020 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: deviceToUserData */
+ }
+}
+
+/*
+ * Message: DeviceToUserDataResponseMessage
+ * Opcode: 0x002f
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : deviceToUserData / size: 2020 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: deviceToUserData */
+ }
+}
+
+/*
+ * Message: UpdateCapabilitiesMessage
+ * Opcode: 0x0030
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 audioCapCount = 0;
+ guint32 videoCapCount = 0;
+ guint32 dataCapCount = 0;
+ guint32 customPictureFormatCount = 0;
+ guint32 serviceResourceCount = 0;
+ guint32 layoutCount = 0;
+ guint32 payloadCapability = 0;
+ guint32 levelPreferenceCount = 0;
+ audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
+ videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
+ dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
+ customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : customPictureFormat / size: 20 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
+ for (counter_1 = 0; counter_1 < 6; counter_1++) {
+ if (counter_1 < customPictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
}
- si->callId = tvb_get_letohl(tvb, offset+36);
- break;
-
- case 0x0024: /* OffHookWithCgpnMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, offset+12,StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0025: /* SoftKeySetReqMessage */
- break;
-
- case 0x0026: /* SoftKeyEventMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyEvent, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0027: /* UnregisterMessage */
- break;
-
- case 0x0028: /* softKeyTemplateRequest */
- break;
-
- case 0x0029: /* RegisterTokenReq */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, ENC_ASCII|ENC_NA);
- i = offset+12+StationMaxDeviceNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, i+4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, i+8, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, i+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x002A: /* MediaTransmissionFailure */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+20, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+28);
- break;
-
- case 0x002B: /* HeadsetStatusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_headsetMode, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x002C: /* MediaResourceNotification */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfInServiceStreams, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxStreamsPerConf, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfOutOfServiceStreams, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x002D: /* RegisterAvailableLinesMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_numberLines, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x002E: /* DeviceToUserDataMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+30, count);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x002F: /* DeviceToUserDataResponseMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+30, count);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0030: /* UpdateCapabilitiesMessage */
- /* to do - this message is very large and will span multiple packets, it would be nice to someday */
- /* find out a way to join the next packet and get the complete message to decode */
- proto_tree_add_item(skinny_tree, hf_skinny_audioCapCount, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_videoCapCount, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dataCapCount, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_RTPPayloadFormat, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_customPictureFormatCount, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = offset+32;
- capCount=tvb_get_letohl(tvb, offset+28);
- for ( i = 0; i < MAX_CUSTOM_PICTURES; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL,
- "customPictureFormat[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureWidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureHeight, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pixelAspectRatio, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_clockConversionCode, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_clockDivisor, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: customPictureFormat */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: customPictureFormat */
+ }
+ {
+ /* start struct : confResources / size: 36 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
+ ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
+ serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : serviceResource / size: 24 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
+ for (counter_2 = 0; counter_2 < 4; counter_2++) {
+ if (counter_2 < serviceResourceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
+ layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
+ for (counter_5 = 0; counter_5 < 5; counter_5++) {
+ if (counter_5 < layoutCount) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ }
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
} else {
- count+=20;
+ ptvcursor_advance(cursor, 24);
}
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: serviceResource */
}
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "confResources");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_activeStreamsOnRegistration, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBW, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceResourceCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav = skinny_sub_tree;
- for ( i = 0; i < MAX_SERVICE_TYPE; i++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL,
- "serviceResource[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_layoutCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav_sav = skinny_sub_tree_sav;
- for ( t = 0; t < MAX_LAYOUT_WITH_SAME_SERVICE; t++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL, "layouts[%d]", t);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_layout, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- }
- skinny_sub_tree = skinny_sub_tree_sav_sav;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNum, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxStreams, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxConferences, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_activeConferenceOnRegistration, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- }
- capCount=tvb_get_letohl(tvb, offset+12);
- for ( i = 0; i < StationMaxCapabilities; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "audiocaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxFramesPerPacket, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 2;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_g723BitRate, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 2;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_unknown, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 8;
- } else {
- count+= 16;
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: serviceResource */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: confResources */
+ }
+ {
+ /* start struct : audiocaps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < audioCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
}
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- capCount=tvb_get_letohl(tvb, offset+16);
- for ( i = 0; i < StationMaxVideoCapabilities; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "vidCaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_levelPreferenceCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav = skinny_sub_tree;
- for ( t = 0; t < MAX_LEVEL_PREFERENCE; t++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL, "levelPreference[%d]", t);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitPreference, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_minBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: audiocaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: audiocaps */
+ }
+ {
+ /* start struct : vidCaps / size: 44 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
+ for (counter_1 = 0; counter_1 < 10; counter_1++) {
+ if (counter_1 < videoCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : levelPreference / size: 24 */
+ guint32 counter_4 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
+ for (counter_4 = 0; counter_4 < 4; counter_4++) {
+ if (counter_4 < levelPreferenceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
+ ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: levelPreference */
}
- val = count;
-
- /* H.261 */
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h261VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, ENC_LITTLE_ENDIAN);
- /*count+= 4;*/
-
- /* H.263 */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h263VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, ENC_LITTLE_ENDIAN);
- /*count+= 4;*/
-
- /* Video */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "vieoVideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- } else {
- count+=28 + (MAX_LEVEL_PREFERENCE-1)*4;
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: levelPreference */
}
- }
- capCount=tvb_get_letohl(tvb, offset+20);
- for ( i = 0; i < StationMaxDataCapabilities; i++ ) {
- if ( i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "dataCaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- } else {
- count+= 16;
+ if (payloadCapability == MEDIA_PAYLOAD_H261) {
+ /* start union : capability / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
+ {
+ /* start struct : h261VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h261VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
+ /* start union : capability / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
+ {
+ /* start struct : h263VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h263VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
+ /* start union : capability / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
+ {
+ /* start struct : vieoVideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vieoVideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
}
+ } else {
+ ptvcursor_advance(cursor, 44);
}
- break;
-
- case 0x0031: /* OpenMultiMediaReceiveChannelAckMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+24);
- si->callId = tvb_get_letohl(tvb, offset+28);
- break;
-
- case 0x0032: /* ClearConferenceMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_serviceNum, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0033: /* ServiceURLStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURLIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0034: /* FeatureStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_featureIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0035: /* CreateConferenceResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_createConfResults, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_passThruData, tvb, offset+24, 1, count);
- break;
-
- case 0x0036: /* DeleteConferenceResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_deleteConfResults, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0037: /* ModifyConferenceResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_modifyConfResults, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_passThruData, tvb, offset+24, 1, count);
- break;
-
- case 0x0038: /* AddParticipantResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_addParticipantResults, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0039: /* AuditConferenceResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_last, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfEntries, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- count = offset+20;
- for ( i = 0; i < StationMaxConference; i++ ) {
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_resourceTypes, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfReservedParticipants, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfActiveParticipants, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_appID, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_uint(skinny_tree, hf_skinny_appConfID, tvb, count, 1, AppConferenceIDSize);
- count += AppConferenceIDSize;
- proto_tree_add_uint(skinny_tree, hf_skinny_appData, tvb, count, 1, AppDataSize);
- count += AppDataSize;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: vidCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vidCaps */
+ }
+ {
+ /* start struct : dataCaps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ if (counter_1 < dataCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- break;
-
- case 0x0040: /* AuditParticipantResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_auditParticipantResults, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_last, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfEntries, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+24);
- for ( i = 0; i < count; i++ ) {
- proto_tree_add_item(skinny_tree, hf_skinny_participantEntry, tvb, offset+28+(i*4), 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: dataCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: dataCaps */
+ }
+}
+
+/*
+ * Message: OpenMultiMediaReceiveChannelAckMessage
+ * Opcode: 0x0031
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_multimediaOpenReceiveChannelStatus, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
+
+/*
+ * Message: ClearConferenceMessage
+ * Opcode: 0x0032
+ * Type: Conference
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: ServiceURLStatReqMessage
+ * Opcode: 0x0033
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: FeatureStatReqMessage
+ * Opcode: 0x0034
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_featureCapabilities, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: CreateConferenceResMessage
+ * Opcode: 0x0035
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ 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);
+}
+
+/*
+ * Message: DeleteConferenceResMessage
+ * Opcode: 0x0036
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_delete_conf_result, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: ModifyConferenceResMessage
+ * Opcode: 0x0037
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ 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);
+}
+
+/*
+ * Message: AddParticipantResMessage
+ * Opcode: 0x0038
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _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_add_participant_result, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bridgeParticipantId, 257, ENC_ASCII|ENC_NA);
+}
+
+/*
+ * Message: AuditConferenceResMessage
+ * Opcode: 0x0039
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 numberOfEntries = 0;
+ ptvcursor_add(cursor, hf_skinny_last, 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);
+ {
+ /* start struct : conferenceEntry / size: 76 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [ref: numberOfEntries = %d, max:32]", numberOfEntries);
+ for (counter_1 = 0; counter_1 < 32; counter_1++) {
+ if (counter_1 < numberOfEntries) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [%d / %d]", counter_1 + 1, numberOfEntries);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfActiveParticipants, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 76);
}
- break;
-
- case 0x0041: /* DeviceToUserDataVersion1Message */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- proto_tree_add_item(skinny_tree, hf_skinny_sequenceFlag, tvb, offset+30, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayPriority, tvb, offset+34, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+38, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_appInstanceID, tvb, offset+42, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_routingID, tvb, offset+46, 4, ENC_LITTLE_ENDIAN);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+50, count);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0042: /* DeviceToUserDataResponseVersion1Message */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- proto_tree_add_item(skinny_tree, hf_skinny_sequenceFlag, tvb, offset+30, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayPriority, tvb, offset+34, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+38, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_appInstanceID, tvb, offset+42, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_routingID, tvb, offset+46, 4, ENC_LITTLE_ENDIAN);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+50, count);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0044: /* DynUpdateCapabilitiesMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_audioCapCount, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_videoCapCount, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dataCapCount, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_RTPPayloadFormat, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_customPictureFormatCount, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = offset+32;
- capCount=tvb_get_letohl(tvb, offset+28);
- for ( i = 0; i < MAX_CUSTOM_PICTURES; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "customPictureFormat[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureWidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureHeight, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pixelAspectRatio, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_clockConversionCode, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_clockDivisor, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- } else {
- count+=20;
- }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: conferenceEntry */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: conferenceEntry */
+ }
+}
+
+/*
+ * Message: AuditParticipantResMessage
+ * Opcode: 0x0040
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+ 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);
+ {
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "participantEntry [ref: numberOfEntries = %d, max:256]", numberOfEntries);
+ for (counter_1 = 0; counter_1 < 256; counter_1++) {
+ if (counter_1 < numberOfEntries) {
+ ptvcursor_add(cursor, hf_skinny_participantEntry, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
}
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "confResources");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_activeStreamsOnRegistration, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBW, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceResourceCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav = skinny_sub_tree;
- for ( i = 0; i < MAX_SERVICE_TYPE; i++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL, "serviceResource[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_layoutCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav_sav = skinny_sub_tree_sav;
- for ( t = 0; t < MAX_LAYOUT_WITH_SAME_SERVICE; t++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL, "layouts[%d]", t);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_layout, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- }
- skinny_sub_tree = skinny_sub_tree_sav_sav;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNum, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxStreams, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxConferences, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_activeConferenceOnRegistration, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: participantEntry */
+ }
+}
+
+/*
+ * Message: DeviceToUserDataMessageVersion1
+ * Opcode: 0x0041
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : deviceToUserDataVersion1 / size: 2040 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: deviceToUserDataVersion1 */
+ }
+}
+
+/*
+ * Message: DeviceToUserDataResponseMessageVersion1
+ * Opcode: 0x0042
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : deviceToUserDataVersion1 / size: 2040 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: deviceToUserDataVersion1 */
+ }
+}
+
+/*
+ * Message: UpdateCapabilitiesV2Message
+ * Opcode: 0x0043
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 audioCapCount = 0;
+ guint32 videoCapCount = 0;
+ guint32 dataCapCount = 0;
+ guint32 customPictureFormatCount = 0;
+ guint32 serviceResourceCount = 0;
+ guint32 layoutCount = 0;
+ guint32 payloadCapability = 0;
+ guint32 levelPreferenceCount = 0;
+ audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
+ videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
+ dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
+ customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : customPictureFormat / size: 20 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
+ for (counter_1 = 0; counter_1 < 6; counter_1++) {
+ if (counter_1 < customPictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
}
- capCount=tvb_get_letohl(tvb, offset+12);
- for ( i = 0; i < StationMaxCapabilities; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "audiocaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxFramesPerPacket, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 2;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_g723BitRate, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 2;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_unknown, tvb, count, 2, ENC_LITTLE_ENDIAN);
- count+= 8;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: customPictureFormat */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: customPictureFormat */
+ }
+ {
+ /* start struct : confResources / size: 36 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
+ ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
+ serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : serviceResource / size: 24 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
+ for (counter_2 = 0; counter_2 < 4; counter_2++) {
+ if (counter_2 < serviceResourceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
+ layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
+ for (counter_5 = 0; counter_5 < 5; counter_5++) {
+ if (counter_5 < layoutCount) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ }
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
} else {
- count+= 16;
+ ptvcursor_advance(cursor, 24);
}
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: serviceResource */
}
- capCount=tvb_get_letohl(tvb, offset+16);
- for ( i = 0; i < StationMaxVideoCapabilities; i++ ) {
- if (i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "vidCaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_levelPreferenceCount, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- skinny_sub_tree_sav = skinny_sub_tree;
- for ( t = 0; t < MAX_LEVEL_PREFERENCE; t++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 20, ett_skinny_tree, NULL, "levelPreference[%d]", t);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitPreference, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_minBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: serviceResource */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: confResources */
+ }
+ {
+ /* start struct : audiocaps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < audioCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
}
- val = count;
-
- /* H.261 */
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h261VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, ENC_LITTLE_ENDIAN);
- /*count+= 4;*/
-
- /* H.263 */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h263VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, ENC_LITTLE_ENDIAN);
- /*count+= 4;*/
-
- /* Video */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "vieoVideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- } else {
- count+=28 + (MAX_LEVEL_PREFERENCE-1)*4;
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
}
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- capCount=tvb_get_letohl(tvb, offset+20);
- for ( i = 0; i < StationMaxDataCapabilities; i++ ) {
- if ( i < capCount) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_tree, tvb, offset, 20, ett_skinny_tree, NULL, "dataCaps[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count+= 4;
- } else {
- count+= 16;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: audiocaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: audiocaps */
+ }
+ {
+ /* start struct : vidCaps / size: 60 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
+ for (counter_1 = 0; counter_1 < 10; counter_1++) {
+ if (counter_1 < videoCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : levelPreference / size: 24 */
+ guint32 counter_4 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
+ for (counter_4 = 0; counter_4 < 4; counter_4++) {
+ if (counter_4 < levelPreferenceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
+ ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: levelPreference */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: levelPreference */
}
+ if (payloadCapability == MEDIA_PAYLOAD_H261) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
+ {
+ /* start struct : h261VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h261VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
+ {
+ /* start struct : h263VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h263VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
+ {
+ /* start struct : h264VideoCapability / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h264VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
+ {
+ /* start struct : vieoVideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vieoVideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ }
+ } else {
+ ptvcursor_advance(cursor, 60);
}
- break;
-
- case 0x0048: /* DialedPhoneBookMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_directoryIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_directoryPhoneNumber, tvb, offset+24, hdr_data_length-16, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0049: /* AccessoryStatusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_accessory, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_accessoryState, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 16) {
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: vidCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vidCaps */
+ }
+ {
+ /* start struct : dataCaps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ if (counter_1 < dataCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- break;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: dataCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: dataCaps */
+ }
+}
- case 0x004A: /* Unknown_Message_0x004A */
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 16) {
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- }
- break;
-
- case 0x004C: /* MwiNotificationMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- /*
- *
- * Call manager -> client messages start here(ish)
- *
- */
- case 0x0081: /* RegisterAckMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_keepAliveInterval, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateTemplate, tvb, offset+16, StationDateTemplateSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_secondaryKeepAliveInterval, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0082: /* StartToneMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceTone, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- /* offset 16 to 19: reserved */
- if (hdr_data_length > 12) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+20);
- si->callId = tvb_get_letohl(tvb, offset+24);
- }
- break;
-
- case 0x0083: /* StopToneMessage */
- if (hdr_data_length > 4) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
+/*
+ * Message: UpdateCapabilitiesV3Message
+ * Opcode: 0x0044
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: yes
+ */
+static void
+handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 audioCapCount = 0;
+ guint32 videoCapCount = 0;
+ guint32 dataCapCount = 0;
+ guint32 customPictureFormatCount = 0;
+ guint32 serviceResourceCount = 0;
+ guint32 layoutCount = 0;
+ guint32 payloadCapability = 0;
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 levelPreferenceCount = 0;
+ audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
+ videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
+ dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
+ customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : customPictureFormat / size: 20 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:customPictureFormatCount]", customPictureFormatCount);
+ for (counter_1 = 0; counter_1 < customPictureFormatCount; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: customPictureFormat */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: customPictureFormat */
+ }
+ {
+ /* start struct : confResources / size: 36 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
+ ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
+ serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : serviceResource / size: 24 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:serviceResourceCount]", serviceResourceCount);
+ for (counter_2 = 0; counter_2 < serviceResourceCount; counter_2++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
+ layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_4 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:layoutCount]", layoutCount);
+ for (counter_4 = 0; counter_4 < layoutCount; counter_4++) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ }
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: serviceResource */
}
- break;
-
- case 0x0085: /* SetRingerMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_ringType, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ringMode, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- if (hdr_data_length > 12) {
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+20);
- si->callId = tvb_get_letohl(tvb, offset+24);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: serviceResource */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: confResources */
+ }
+ {
+ /* start struct : audiocaps / size: 16 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:audioCapCount]", audioCapCount);
+ for (counter_1 = 0; counter_1 < audioCapCount; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : PAYLOADS / maxsize: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
}
- break;
-
- case 0x0086: /* SetLampMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_stimulus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_stimulusInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lampMode, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0087: /* SetHookFlashDetectModeMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_hookFlashDetectMode, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_detectInterval, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0088: /* SetSpeakerModeMessage */
-
- proto_tree_add_item(skinny_tree, hf_skinny_speakerMode, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0089: /* SetMicroModeMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_microphoneMode, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x008a: /* StartMediaTransmission */
- if (hdr_version == BASIC_MSG_TYPE) {
- address src_addr;
- guint32 ipv4_address;
-
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr, tvb, offset+20, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_remotePortNumber, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_precedenceValue, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_silenceSuppression, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+44, 2, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
-
- src_addr.type = AT_IPv4;
- src_addr.len = 4;
- src_addr.data = (char *)&ipv4_address;
- ipv4_address = tvb_get_ipv4(tvb, offset+20);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num, is_video, NULL);
-
- si->passThruId = tvb_get_letohl(tvb, offset+16);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: audiocaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: audiocaps */
+ }
+ {
+ /* start struct : vidCaps / size: 72 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:videoCapCount]", videoCapCount);
+ for (counter_1 = 0; counter_1 < videoCapCount; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : levelPreference / size: 24 */
+ guint32 counter_3 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:levelPreferenceCount]", levelPreferenceCount);
+ for (counter_3 = 0; counter_3 < levelPreferenceCount; counter_3++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_3 + 1, levelPreferenceCount);
+ ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: levelPreference */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: levelPreference */
}
- else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D)
- {
- address src_addr;
- guint32 ipv4_address;
-
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- /*Assume the field of next 4 bytes is IP Version*/
- ipversion = tvb_get_ntohl(tvb, offset+20);
- proto_tree_add_item(skinny_tree, hf_skinny_IPVersion, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- /*Here we take "0" as IPv4, "others" as IPv6, maybe we need to fix it later*/
- if (ipversion ==0) {
- proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr, tvb, offset+24, 4, ENC_BIG_ENDIAN);
- } else {
- proto_tree_add_item(skinny_tree, hf_skinny_ipV6Address, tvb, offset+24, 16, ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_H261) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
+ {
+ /* start struct : h261VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h261VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
+ {
+ /* start struct : h263VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h263VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
+ {
+ /* start struct : h264VideoCapability / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h264VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
+ {
+ /* start struct : vieoVideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vieoVideoCapability */
}
- proto_tree_add_item(skinny_tree, hf_skinny_remotePortNumber, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- /* There is some more... */
- proto_tree_add_item(skinny_tree, hf_skinny_precedenceValue, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_silenceSuppression, tvb, offset+56, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+60, 2, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+62, 4, ENC_LITTLE_ENDIAN);
- /* proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+66, 4, ENC_LITTLE_ENDIAN); */
- /* proto_tree_add_item(skinny_tree, hf_skinny_rtpDTMFPayload, tvb, offset+126, 4, ENC_LITTLE_ENDIAN); */
- /* proto_tree_add_item(skinny_tree, hf_skinny_rtptimeout, tvb, offset+130, 4, ENC_LITTLE_ENDIAN); */
-
- src_addr.type = AT_IPv4;
- src_addr.len = 4;
- src_addr.data = (char *)&ipv4_address;
- ipv4_address = tvb_get_ipv4(tvb, offset+24);
- rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+40), 0, "Skinny", pinfo->fd->num, is_video, NULL);
-
- si->passThruId = tvb_get_letohl(tvb, offset+16);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
}
- break;
-
- case 0x008b: /* StopMediaTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x008c: /* StartMediaReception */
- break;
-
- case 0x008d: /* StopMediaReception */
- break;
-
- case 0x008f: /* CallInfoMessage */
- i = offset+12;
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyNumber, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- si->callingParty = g_strdup(tvb_format_stringzpad(tvb, i, StationMaxDirnumSize));
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- si->calledParty = g_strdup(tvb_format_stringzpad(tvb, i, StationMaxDirnumSize));
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, i, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, i);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, i, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, i);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_callType, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledPartyName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledParty, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingPartyName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingParty, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCdpnRedirectReason, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingReason, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_cgpnVoiceMailbox, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_cdpnVoiceMailbox, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCdpnVoiceMailbox, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingVoiceMailbox, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_callInstance, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_callSecurityStatus, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, i, 8, ett_skinny_tree, NULL, "partyPIRestrictionBits");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_CallingPartyName, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_CallingPartyNumber, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_CalledPartyName, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_CalledPartyNumber, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_OriginalCalledPartyName, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_OriginalCalledPartyNumber, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_LastRedirectPartyName, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_partyPIRestrictionBits_LastRedirectPartyNumber, tvb, i, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0090: /* ForwardStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_activeForward, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_forwardAllActive, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_forwardNumber, tvb, offset+24, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i = offset+24+StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_forwardBusyActive, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_forwardNumber, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i += StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_forwardNoAnswerActive, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_forwardNumber, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0091: /* SpeedDialStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialDirNumber, tvb, offset+16, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialDisplayName, tvb, offset+40, StationMaxNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0092: /* LineStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineDirNumber, tvb, offset+16, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineFullyQualifiedDisplayName, tvb, offset+16+StationMaxDirnumSize, StationMaxNameSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineDisplayName, tvb, offset+16+StationMaxDirnumSize+StationMaxNameSize, StationMaxDisplayNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0093: /* ConfigStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, ENC_ASCII|ENC_NA);
- i = offset+12+StationMaxDeviceNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, i, 4, ENC_LITTLE_ENDIAN);
- i += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_userName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_serverName, tvb, i, StationMaxNameSize, ENC_ASCII|ENC_NA);
- i += StationMaxNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_numberLines, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberSpeedDials, tvb, i+4, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0094: /* DefineTimeDate */
- proto_tree_add_item(skinny_tree, hf_skinny_dateYear, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateMonth, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dayOfWeek, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateDay, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateHour, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateMinute, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateSeconds,tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_dateMilliseconds,tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_timeStamp, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0095: /* StartSessionTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr, tvb, offset+12, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_sessionType, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0096: /* StopSessionTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr, tvb, offset+12, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_sessionType, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0097: /* ButtonTemplateMessage */
- /*
- * FIXME
- * This decode prints out oogly subtree maybe? or something besides the VALS...
- * note to self: uint8 != 4 kk thx info ^_^
- *
- */
- proto_tree_add_item(skinny_tree, hf_skinny_buttonOffset, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_buttonCount, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_totalButtonCount, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- for (i = 0; i < StationMaxButtonTemplateSize; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_buttonInstanceNumber, tvb, offset+(i*2)+24, 1, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_buttonDefinition, tvb, offset+(i*2)+25, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version >= V16_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
}
- break;
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: vidCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vidCaps */
+ }
+ {
+ /* start struct : dataCaps / size: 20 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:dataCapCount]", dataCapCount);
+ for (counter_1 = 0; counter_1 < dataCapCount; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: dataCaps */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: dataCaps */
+ }
+}
- case 0x0098: /* VersionMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_version, tvb, offset+12, StationMaxVersionSize, ENC_ASCII|ENC_NA);
- break;
+/*
+ * Message: PortResMessage
+ * Opcode: 0x0045
+ * Type: MediaControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_PortResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+
+ 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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6, pinfo);
+ 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);
+ }
+}
- case 0x0099: /* DisplayTextMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+12, StationMaxDisplayTextSize, ENC_ASCII|ENC_NA);
- break;
+/*
+ * Message: QoSResvNotifyMessage
+ * Opcode: 0x0046
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSResvNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
+}
- case 0x009a: /* ClearDisplay */
- break;
+/*
+ * Message: QoSErrorNotifyMessage
+ * Opcode: 0x0047
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSErrorNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_errorCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_failureNodeIpAddr, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_rsvpErrorCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_rsvpErrorSubCodeVal, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_rsvpErrorFlag, 4, ENC_LITTLE_ENDIAN);
+}
- case 0x009b: /* CapabilitiesReqMessage */
- break;
+/*
+ * Message: SubscriptionStatReqMessage
+ * Opcode: 0x0048
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_SubscriptionStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_subscriptionID, 256, ENC_ASCII|ENC_NA);
+}
- case 0x009c: /* EnunciatorCommandMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_mediaEnunciationType, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- for (i = 0; i < StationMaxDirnumSize; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+16+(i*4), 4, ENC_LITTLE_ENDIAN);
- }
- i = offset+16+StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_mediaEnunciationType, tvb, i, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x009d: /* RegisterRejectMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+12, StationMaxDisplayTextSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x009e: /* ServerResMessage */
- for (i = 0; i < StationMaxServers; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_serverIdentifier,
- tvb, offset+12+(i*StationMaxServers), StationMaxServerNameSize, ENC_ASCII|ENC_NA);
- }
- j = offset+12+(i*StationMaxServers);
- for (i = 0; i < StationMaxServers; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_serverListenPort, tvb, j+(i*4), 4, ENC_LITTLE_ENDIAN);
- }
- j = j+(i*4);
- for (i = 0; i < StationMaxServers; i++) {
- proto_tree_add_item(skinny_tree, hf_skinny_serverIpAddress, tvb, j+(i*4), 4, ENC_BIG_ENDIAN);
- }
- break;
-
- case 0x009f: /* Reset */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceResetType, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0100: /* KeepAliveAckMessage */
- break;
-
- case 0x0101: /* StartMulticastMediaReception */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_multicastPort, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_echoCancelType, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0102: /* StartMulticastMediaTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_multicastPort, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_precedenceValue, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_silenceSuppression, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+44, 2, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0103: /* StopMulticastMediaReception */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0104: /* StopMulticastMediaTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x105: /* OpenReceiveChannel */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_echoCancelType, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0106: /* CloseReceiveChannel */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0107: /* ConnectionStatisticsReq */
- i = 12;
- proto_tree_add_item(skinny_tree, hf_skinny_directoryNumber, tvb, i, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- i = 12 + StationMaxDirnumSize;
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, i, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, i);
- i = i+4;
- proto_tree_add_item(skinny_tree, hf_skinny_statsProcessingType, tvb, i, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0108: /* SoftKeyTemplateResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyOffset, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- softKeyCount = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_softKeyCount, tvb, offset+16, 4, softKeyCount);
- proto_tree_add_item(skinny_tree, hf_skinny_totalSoftKeyCount, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- for (i = 0; ((i < StationMaxSoftKeyDefinition) && (i < softKeyCount)); i++){
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyLabel,
- tvb, offset+(i*20)+24, StationMaxSoftKeyLabelSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyEvent, tvb, offset+(i*20)+40, 4, ENC_LITTLE_ENDIAN);
- }
- /* there is more data here, but it doesn't make a whole lot of sense, I imagine
- * it's just some not zero'd out stuff in the packet or...
- */
- break;
-
- case 0x0109: /* SoftKeySetResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_softKeySetOffset, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- softKeySetCount = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_softKeySetCount, tvb, offset+16, 4, softKeySetCount);
- proto_tree_add_item(skinny_tree, hf_skinny_totalSoftKeySetCount, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- for (i = 0; ((i < StationMaxSoftKeySetDefinition) && (i < softKeySetCount)); i++) {
- proto_tree_add_uint(skinny_tree, hf_skinny_softKeySetDescription, tvb, offset+24+(i*48) , 1, i);
- for (j = 0; j < StationMaxSoftKeyIndex; j++) {
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyTemplateIndex, tvb, offset+24+(i*48)+j, 1, ENC_LITTLE_ENDIAN);
- }
- for (j = 0; j < StationMaxSoftKeyIndex; j++) {
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyInfoIndex,
- tvb, offset+24+(i*48)+StationMaxSoftKeyIndex+(j*2), 2, ENC_LITTLE_ENDIAN);
- }
- }
- break;
-
- case 0x0110: /* SelectSoftKeysMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_softKeySetDescription, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- validKeyMask = tvb_get_letohs(tvb, offset + 24);
- skm = proto_tree_add_uint(skinny_tree, hf_skinny_softKeyMap, tvb, offset + 24, 4, validKeyMask);
- skm_tree = proto_item_add_subtree(skm, ett_skinny_softKeyMap);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey0, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey1, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey2, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey3, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey4, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey5, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey6, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey7, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey8, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey9, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey10, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey11, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey12, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey13, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey14, tvb, offset + 24, 4, validKeyMask);
- proto_tree_add_boolean(skm_tree, hf_skinny_softKey15, tvb, offset + 24, 4, validKeyMask);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0111: /* CallStateMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_callState, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->callState = tvb_get_letohl(tvb, offset+12);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_item(skinny_tree, hf_skinny_visibility, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_priority, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0112: /* DisplayPromptStatusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, StationMaxDisplayPromptStatusSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+48);
- si->callId = tvb_get_letohl(tvb, offset+52);
- break;
-
- case 0x0113: /* ClearPromptStatusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance , tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x0114: /* DisplayNotifyMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, StationMaxDisplayNotifySize , ENC_ASCII|ENC_NA);
- break;
-
- case 0x0115: /* ClearNotifyMessage */
- break;
-
- case 0x0116: /* ActivateCallPlaneMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- break;
-
- case 0x0117: /* DeactivateCallPlaneMessage */
- break;
-
- case 0x0118: /* UnregisterAckMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceUnregisterStatus, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0119: /* BackSpaceReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x011a: /* RegisterTokenAck */
- break;
-
- case 0x011B: /* RegisterTokenReject */
- proto_tree_add_item(skinny_tree, hf_skinny_tokenRejWaitTime, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x011C: /* StartMediaFailureDetection */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_echoCancelType, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+34, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+34);
- break;
-
- case 0x011D: /* DialedNumberMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, offset+12, StationMaxDirnumSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12+StationMaxDirnumSize, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+12+StationMaxDirnumSize+4, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12+StationMaxDirnumSize);
- si->callId = tvb_get_letohl(tvb, offset+16+StationMaxDirnumSize);
- break;
-
- case 0x011E: /* UserToDeviceDataMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+30, count);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x011F: /* FeatureStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_featureIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_featureID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_featureTextLabel, tvb, offset+20, StationMaxNameSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_featureStatus, tvb, offset+20+StationMaxNameSize, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0120: /* DisplayPriNotifyMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_priority, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_notify, tvb, offset+16, StationMaxDisplayNotifySize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0121: /* ClearPriNotifyMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_priority, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0122: /* StartAnnouncementMessage */
- count = offset+12;
- for ( i = 0; i < MaxAnnouncementList; i++ ) {
- proto_tree_add_item(skinny_tree, hf_skinny_locale, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_country, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_deviceTone, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- }
- proto_tree_add_item(skinny_tree, hf_skinny_endOfAnnAck, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
-
- for ( i = 0; i < StationMaxMonitorParties; i++ ) {
- proto_tree_add_item(skinny_tree, hf_skinny_matrixConfPartyID, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- }
- proto_tree_add_item(skinny_tree, hf_skinny_hearingConfPartyMask, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_tree, hf_skinny_annPlayMode, tvb, count, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0123: /* StopAnnouncementMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0124: /* AnnouncementFinishMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_annPlayStatus, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0127: /* NotifyDtmfToneMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceTone, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0128: /* SendDtmfToneMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceTone, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0129: /* SubscribeDtmfPayloadReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012A: /* SubscribeDtmfPayloadResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012B: /* SubscribeDtmfPayloadErrMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012C: /* UnSubscribeDtmfPayloadReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012D: /* UnSubscribeDtmfPayloadResMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012E: /* UnSubscribeDtmfPayloadErrMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_payloadDtmf, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x012F: /* ServiceURLStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURLIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURL, tvb, offset+16, StationMaxServiceURLSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURLDisplayName, tvb, offset+16+StationMaxServiceURLSize, StationMaxNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0130: /* CallSelectStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_callSelectStat, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0131: /* OpenMultiMediaChannelMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payload_rfc_number, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadType, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_isConferenceCreator, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->lineId = tvb_get_letohl(tvb, offset+24);
- si->callId = tvb_get_letohl(tvb, offset+28);
-
- /* add audio part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 12, ett_skinny_tree, NULL, "audioParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_millisecondPacketSize, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_echoCancelType, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_g723BitRate, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
-
- /* add video part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 30, ett_skinny_tree, NULL, "vidParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bitRate, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureFormatCount, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- skinny_sub_tree_sav = skinny_sub_tree;
- count = offset+52;
- for ( i = 0; i < MAX_PICTURE_FORMAT; i++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 8 * MAX_PICTURE_FORMAT,
- ett_skinny_tree, NULL, "pictureFormat[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- }
- skinny_sub_tree = skinny_sub_tree_sav;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_confServiceNum, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
-
- val = count;
- /* add H261 part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h261VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add H263 part of union */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h263VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add Vieo part of union */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "vieoVideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add data part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "dataParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0132: /* StartMultiMediaTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+24, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payload_rfc_number, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_payloadType, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_DSCPValue, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+32);
-
- /* add audio part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 12, ett_skinny_tree, NULL, "audioParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_millisecondPacketSize, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_echoCancelType, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_g723BitRate, tvb, offset+56, 4, ENC_LITTLE_ENDIAN);
-
- /* add video part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 30, ett_skinny_tree, NULL, "vidParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bitRate, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureFormatCount, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- skinny_sub_tree_sav = skinny_sub_tree;
- count = offset+56;
- for ( i = 0; i < MAX_PICTURE_FORMAT; i++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 8 * MAX_PICTURE_FORMAT,
- ett_skinny_tree, NULL, "pictureFormat[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- }
- skinny_sub_tree = skinny_sub_tree_sav;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_confServiceNum, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
-
- val = count;
- /* add H261 part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h261VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add H263 part of union */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "h263VideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add Vieo part of union */
- count = val;
- skinny_sub_tree = proto_tree_add_subtree(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "vieoVideoCapability");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, ENC_LITTLE_ENDIAN);
- count += 4;
- proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, ENC_LITTLE_ENDIAN);
-
- /* add data part of union */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "dataParameters");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, offset+52, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0133: /* StopMultiMediaTransmission */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0134: /* MiscellaneousCommandMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_miscCommandType, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
-
- /* show videoFreezePicture */
- /* not sure of format */
-
- /* show videoFastUpdatePicture */
- /* not sure of format */
-
- /* show videoFastUpdateGOB */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "videoFastUpdateGOB");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_firstGOB, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_numberOfGOBs, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
-
- /* show videoFastUpdateMB */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "videoFastUpdateGOB");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_firstGOB, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_firstMB, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_numberOfMBs, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
-
- /* show lostPicture */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "lostPicture");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureNumber, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_longTermPictureIndex, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
-
- /* show lostPartialPicture */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "lostPartialPicture");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureNumber, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_longTermPictureIndex, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_firstMB, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_numberOfMBs, tvb, offset+40, 4, ENC_LITTLE_ENDIAN);
-
- /* show recoveryReferencePicture */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 8, ett_skinny_tree, NULL, "recoveryReferencePicture");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_recoveryReferencePictureCount, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- skinny_sub_tree_sav = skinny_sub_tree;
- for ( i = 0; i < MAX_REFERENCE_PICTURE; i++ ) {
- skinny_sub_tree = proto_tree_add_subtree_format(skinny_sub_tree_sav, tvb, offset, 8, ett_skinny_tree, NULL, "recoveryReferencePicture[%d]", i);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureNumber, tvb, offset+32+(i*8), 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_sub_tree, hf_skinny_longTermPictureIndex, tvb, offset+36+(i*8), 4, ENC_LITTLE_ENDIAN);
- }
+/*
+ * Message: MediaPathEventMessage
+ * Opcode: 0x0049
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MediaPathEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_mediaPathEvent, 4, ENC_LITTLE_ENDIAN);
+}
- /* show temporalSpatialTradeOff */
- skinny_sub_tree = proto_tree_add_subtree(skinny_tree, tvb, offset, 4, ett_skinny_tree, NULL, "temporalSpatialTradeOff");
- proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOff, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0135: /* FlowControlCommandMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxBitRate, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0136: /* CloseMultiMediaReceiveChannel */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0137: /* CreateConferenceReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfReservedParticipants, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_resourceTypes, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_appID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- count = offset+24;
- proto_tree_add_uint(skinny_tree, hf_skinny_appConfID, tvb, count, 1, AppConferenceIDSize);
- count += AppConferenceIDSize;
- proto_tree_add_uint(skinny_tree, hf_skinny_appData, tvb, count, 1, AppDataSize);
- count += AppDataSize;
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, count, 4, ENC_LITTLE_ENDIAN);
- val = tvb_get_letohl( tvb, count);
- count += 4;
- proto_tree_add_uint(skinny_tree, hf_skinny_passThruData, tvb, count, 1, val);
- break;
-
- case 0x0138: /* DeleteConferenceReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0139: /* ModifyConferenceReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_numberOfReservedParticipants, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_appID, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- count = offset+24;
- proto_tree_add_uint(skinny_tree, hf_skinny_appConfID, tvb, count, 1, AppConferenceIDSize);
- count += AppConferenceIDSize;
- proto_tree_add_uint(skinny_tree, hf_skinny_appData, tvb, count, 1, AppDataSize);
- count += AppDataSize;
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, count, 4, ENC_LITTLE_ENDIAN);
- val = tvb_get_letohl( tvb, count);
- count += 4;
- proto_tree_add_uint(skinny_tree, hf_skinny_passThruData, tvb, count, 1, val);
- break;
-
- case 0x013A: /* AddParticipantReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x013B: /* DropParticipantReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- si->callId = tvb_get_letohl(tvb, offset+16);
- break;
-
- case 0x013C: /* AuditConferenceReqMessage */
- break;
-
- case 0x013D: /* AuditParticipantReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x013F: /* UserToDeviceDataVersion1Message */
- proto_tree_add_item(skinny_tree, hf_skinny_applicationID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_transactionID, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_data_length, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- count = tvb_get_letohl( tvb, offset+28);
- proto_tree_add_item(skinny_tree, hf_skinny_sequenceFlag, tvb, offset+30, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayPriority, tvb, offset+34, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+38, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_appInstanceID, tvb, offset+42, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_routingID, tvb, offset+46, 4, ENC_LITTLE_ENDIAN);
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+50, count);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0140: /* VideoDisplayCommandMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0141: /* Unknown_Message_0x0141 */
- proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxBitRate, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0143: /* DynDisplayNotifyMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, hdr_data_length-8, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0144: /* DynDisplayPriNotifyMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_priority, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+20, hdr_data_length-12, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0145: /* DynDisplayPromptStatusMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+24, hdr_data_length-16, ENC_ASCII|ENC_NA);
- si->lineId = tvb_get_letohl(tvb, offset+16);
- si->callId = tvb_get_letohl(tvb, offset+20);
- break;
-
- case 0x0146: /* DynFeatureStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_featureIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_featureID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_featureStatus, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_featureTextLabel, tvb, offset+24, StationMaxNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0147: /* DynLineStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineDirNumber, tvb, offset+16, 4, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineFullyQualifiedDisplayName, tvb, offset+16+StationMaxDirnumSize, StationMaxNameSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_lineDisplayName, tvb, offset+16+StationMaxDirnumSize+StationMaxNameSize, StationMaxDisplayNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0148: /* DynServiceURLStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURLIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURL, tvb, offset+16, StationMaxServiceURLSize, ENC_ASCII|ENC_NA);
- proto_tree_add_item(skinny_tree, hf_skinny_serviceURLDisplayName, tvb, offset+16+StationMaxServiceURLSize, StationMaxNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x0149: /* DynSpeedDialStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialNumber, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialType, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialStatus, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_speedDialDisplayName, tvb, offset+24, StationMaxNameSize, ENC_ASCII|ENC_NA);
- break;
-
- case 0x014A: /* DynCallInfoMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callType, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- /* 5x unknown uint32_t stuff */
- /* strings */
- {
- i = offset+44;
- if(hdr_version == BASIC_MSG_TYPE)
+/*
+ * Message: MediaPathCapabilityMessage
+ * Opcode: 0x004a
+ * Type: CallControl
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MediaPathCapabilityMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_mediaPathCapabilities, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: MwiNotificationMessage
+ * Opcode: 0x004c
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_mwiControlNumber, 25, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_areMessagesWaiting, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : totalVmCounts / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalVmCounts");
+ ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: totalVmCounts */
+ }
+ {
+ /* start struct : priorityVmCounts / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityVmCounts");
+ ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: priorityVmCounts */
+ }
+ {
+ /* start struct : totalFaxCounts / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalFaxCounts");
+ ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: totalFaxCounts */
+ }
+ {
+ /* start struct : priorityFaxCounts / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityFaxCounts");
+ ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: priorityFaxCounts */
+ }
+}
+
+/*
+ * Message: RegisterAckMessage
+ * Opcode: 0x0081
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_keepAliveInterval, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dateTemplate, 6, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_alignmentPadding, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_secondaryKeepAliveInterval, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxProtocolVer, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: StartToneMessage
+ * Opcode: 0x0082
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_tone_output_direction, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
+
+/*
+ * Message: StopToneMessage
+ * Opcode: 0x0083
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StopToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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 >= V11_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
+ }
+}
+
+/*
+ * Message: SetRingerMessage
+ * Opcode: 0x0085
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SetRingerMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_ringMode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_ringDuration, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
+
+/*
+ * Message: SetLampMessage
+ * Opcode: 0x0086
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SetLampMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stimulusInstance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_lampMode, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: SetSpeakerModeMessage
+ * Opcode: 0x0088
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SetSpeakerModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_speakerMode, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: SetMicroModeMessage
+ * Opcode: 0x0089
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SetMicroModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_micMode, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: StartMediaTransmissionMessage
+ * Opcode: 0x008a
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ 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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 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);
+ {
+ /* start struct : qualifierOut / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
+ ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 2, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE && hdr_version <= V15_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* 8x party numbers */
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyNumber, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledParty, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingParty, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_cgpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_cdpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCdpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- /* 4x party names */
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- }
- else if(hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_A)
- {/* I'm not sure. Not enough examples. */
- /* 8x party numbers */
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyNumber, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_cgpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyNumber, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledParty, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingParty, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_cdpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCdpnVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingVoiceMailbox, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- /* 4x party names */
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_callingPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_calledPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_originalCalledPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
- i += count;
- count = tvb_strnlen(tvb, i, -1)+1;
- proto_tree_add_item(skinny_tree, hf_skinny_lastRedirectingPartyName, tvb, i, count, ENC_ASCII|ENC_NA);
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
}
+ ptvcursor_pop_subtree(cursor);
}
- break;
-
- case 0x0152: /* DialedPhoneBookAckMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_directoryIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0153: /* CallListStateUpdate */
- proto_tree_add_item(skinny_tree, hf_skinny_directoryIndex, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- break;
-
- case 0x0154: /* StartMediaTransmissionAck */
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- if(hdr_version == BASIC_MSG_TYPE)
- {
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+24, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_startMediaTransmissionStatus, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- } else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D) {
- proto_tree_add_item(skinny_tree, hf_skinny_IPVersion, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- ipversion = tvb_get_ntohl(tvb, offset+24);
- if (ipversion == 0) {
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+28, 4, ENC_BIG_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierOut */
+ }
+ si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : mTxMediaEncryptionKeyInfo / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
+ ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
+ keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
+ saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < keylen) {
+ ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
} else {
- proto_tree_add_item(skinny_tree, hf_skinny_ipV6Address, tvb, offset+28, 16, ENC_NA);
+ ptvcursor_advance(cursor, 1);
}
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_startMediaTransmissionStatus, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
}
- break;
-
- case 0x0155: /* StartMultiMediaTransmissionAck */
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, ENC_LITTLE_ENDIAN);
- si->lineId = tvb_get_letohl(tvb, offset+12);
- si->passThruId = tvb_get_letohl(tvb, offset+16);
- if(hdr_version == BASIC_MSG_TYPE)
- {
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+24, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+28, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_startMultiMediaTransmissionStatus, tvb, offset+32, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+36, 4, ENC_LITTLE_ENDIAN);
- } else if (hdr_version == CM7_MSG_TYPE_A || hdr_version == CM7_MSG_TYPE_B || hdr_version == CM7_MSG_TYPE_C || hdr_version == CM7_MSG_TYPE_D) {
- ipversion = tvb_get_ntohl(tvb, offset+24);
- proto_tree_add_item(skinny_tree, hf_skinny_IPVersion, tvb, offset+24, 4, ENC_LITTLE_ENDIAN);
- if (ipversion == 0) {
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+28, 4, ENC_BIG_ENDIAN);
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ }
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < saltlen) {
+ ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
} else {
- proto_tree_add_item(skinny_tree, hf_skinny_ipV6Address, tvb, offset+28, 16, ENC_NA);
+ ptvcursor_advance(cursor, 1);
}
- proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+44, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_startMultiMediaTransmissionStatus, tvb, offset+48, 4, ENC_LITTLE_ENDIAN);
}
- break;
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ }
+ ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: mTxMediaEncryptionKeyInfo */
+ }
+ ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RFC2833PayloadType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_mixingMode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_partyDirection, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version >= V20_MSG_TYPE) {
+ {
+ /* start struct : latentCapsInfo / size: 36 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
+ ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
+ }
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ {
+ /* start struct : payloadParam / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
+ ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_sse, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_v150sprt, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_noaudio, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: payloadParam */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: latentCapsInfo */
+ }
+ }
+}
- case 0x0156: /* CallHistoryInfoMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
+/*
+ * Message: StopMediaTransmissionMessage
+ * Opcode: 0x008b
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StopMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- case 0x0159: /* ExtensionDeviceCaps */
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 672, ENC_ASCII|ENC_NA);
- break;
+/*
+ * Message: CallInfoMessage
+ * Opcode: 0x008f
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _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));
+ ptvcursor_add(cursor, hf_skinny_callingParty, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_calledPartyName, 40, ENC_ASCII|ENC_NA);
+ si->calledParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24));
+ ptvcursor_add(cursor, hf_skinny_calledParty, 24, ENC_ASCII|ENC_NA);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_callType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_originalCalledPartyName, 40, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_originalCalledParty, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingPartyName, 40, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingParty, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_originalCdpnRedirectReason, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingReason, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_cdpnVoiceMailbox, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_originalCdpnVoiceMailbox, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingVoiceMailbox, 24, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_callInstance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_callSecurityStatus, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
+}
+/*
+ * Message: ForwardStatMessage
+ * Opcode: 0x0090
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ForwardStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+ 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);
+ ptvcursor_add(cursor, hf_skinny_forwardBusyActive, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- case 0x015A: /* XMLAlarmMessage */
- dissect_skinny_xml(skinny_tree, tvb, pinfo, offset+12, hdr_data_length-4);
- break;
+/*
+ * Message: SpeedDialStatMessage
+ * Opcode: 0x0091
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SpeedDialStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+}
- case 0x015E: /* Unknown_Message_0x015E */
- if (hdr_data_length > 8) {
- proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
+/*
+ * Message: LineStatMessage
+ * Opcode: 0x0092
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_LineStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+}
+
+/*
+ * Message: ConfigStatMessage
+ * Opcode: 0x0093
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ConfigStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ {
+ /* start struct : sid / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
+ ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sid */
+ }
+ ptvcursor_add(cursor, hf_skinny_userName, 40, ENC_ASCII|ENC_NA);
+ 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);
+}
+
+/*
+ * Message: DefineTimeDate
+ * Opcode: 0x0094
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ {
+ /* start struct : timeDataInfo / size: 32 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "timeDataInfo");
+ ptvcursor_add(cursor, hf_skinny_wYear, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wMonth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wDayOfWeek, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wDay, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wHour, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wMinute, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wSecond, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_wMilliseconds, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: timeDataInfo */
+ }
+ ptvcursor_add(cursor, hf_skinny_systemTime, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: StartSessionTransmissionMessage
+ * Opcode: 0x0095
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_StartSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: StopSessionTransmissionMessage
+ * Opcode: 0x0096
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_StopSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN);
+}
+
+/*
+ * Message: ButtonTemplateMessage
+ * Opcode: 0x0097
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ButtonTemplateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 totalButtonCount = 0;
+ {
+ /* start struct : buttonTemplate / size: 14 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "buttonTemplate");
+ ptvcursor_add(cursor, hf_skinny_buttonOffset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_buttonCount, 4, ENC_LITTLE_ENDIAN);
+ totalButtonCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_totalButtonCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : definition / size: 2 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalButtonCount = %d, max:42]", totalButtonCount);
+ for (counter_2 = 0; counter_2 < 42; counter_2++) {
+ if (counter_2 < totalButtonCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalButtonCount);
+ ptvcursor_add(cursor, hf_skinny_instanceNumber, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_buttonDefinition, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 2);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: definition */
}
- break;
-
- /*
- *
- * SPCP Messages Call manager -> client messages start here
- *
- */
- case 0x8000: /* SPCPRegisterTokenRequest */
- proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, ENC_ASCII|ENC_NA);
- i = offset+12+StationMaxDeviceNameSize;
- proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, i, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, i+4, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, i+8, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, i+12, 4, ENC_LITTLE_ENDIAN);
- proto_tree_add_item(skinny_tree, hf_skinny_maxStreams, tvb, i+16, 4, ENC_LITTLE_ENDIAN);
- break;
-
- /*
- *
- * SPCP Messages Client -> Call manager start here
- *
- */
- case 0x8100: /* SPCPRegisterTokenAck */
- proto_tree_add_item(skinny_tree, hf_skinny_featureID, tvb, offset+12, 4, ENC_ASCII|ENC_NA);
- break;
-
- case 0x8101: /* SPCPRegisterTokenReject */
- proto_tree_add_item(skinny_tree, hf_skinny_tokenRejWaitTime, tvb, offset+12, 4, ENC_LITTLE_ENDIAN);
- break;
-
- default:
- proto_tree_add_item(skinny_tree, hf_skinny_rawData, tvb, offset+12, hdr_data_length-4, ENC_NA);
- break;
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: definition */
}
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: buttonTemplate */
}
- tap_queue_packet(skinny_tap, pinfo, si);
- return tvb_captured_length(tvb);
}
+/*
+ * Message: VersionMessage
+ * Opcode: 0x0098
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_VersionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
+}
-/* Code to actually dissect the packets */
-static int
-dissect_skinny(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
+/*
+ * Message: DisplayTextMessage
+ * Opcode: 0x0099
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DisplayTextMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
- /* The general structure of a packet: {IP-Header|TCP-Header|n*SKINNY}
- * SKINNY-Packet: {Header(Size, Reserved)|Data(MessageID, Message-Data)}
- */
- /* Header fields */
- guint32 hdr_data_length;
- guint32 hdr_version;
+ ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII|ENC_NA);
+}
- /* check, if this is really an SKINNY packet, they start with a length + 0 */
+/*
+ * Message: RegisterRejectMessage
+ * Opcode: 0x009d
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_RegisterRejectMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII|ENC_NA);
+}
- if (tvb_captured_length(tvb) < 8)
+/*
+ * Message: ServerResMessage
+ * Opcode: 0x009e
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
{
- return 0;
+ /* start struct : server / size: 48 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [max:5]");
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [%d / %d]", counter_1 + 1, 5);
+ ptvcursor_add(cursor, hf_skinny_ServerName, 48, ENC_ASCII|ENC_NA);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: server */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: server */
}
- /* get relevant header information */
- hdr_data_length = tvb_get_letohl(tvb, 0);
- hdr_version = tvb_get_letohl(tvb, 4);
+ {
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverTcpListenPort [max:5]");
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ ptvcursor_add(cursor, hf_skinny_serverTcpListenPort, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: serverTcpListenPort */
+ }
+ {
+ /* start struct : serverIpAddr / size: 20 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [max:5]");
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [%d / %d]", counter_1 + 1, 5);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpAddr_ipv4, hf_skinny_stationIpAddr_ipv6, pinfo);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: serverIpAddr */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: serverIpAddr */
+ }
+}
- /* data_size = MIN(8+hdr_data_length, tvb_length(tvb)) - 0xC; */
+/*
+ * Message: Reset
+ * Opcode: 0x009f
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_Reset(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_resetType, 4, ENC_LITTLE_ENDIAN);
+}
- if (
- (hdr_data_length < 4) ||
- ((hdr_version != BASIC_MSG_TYPE) &&
- (hdr_version != CM7_MSG_TYPE_A) &&
- (hdr_version != CM7_MSG_TYPE_B) &&
- (hdr_version != CM7_MSG_TYPE_UNKNOWN) &&
- (hdr_version != CM7_MSG_TYPE_C) &&
- (hdr_version != CM7_MSG_TYPE_D))
- )
+/*
+ * Message: StartMulticastMediaReceptionMessage
+ * Opcode: 0x0101
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 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);
{
- /* Not an SKINNY packet, just happened to use the same port */
- return 0;
+ /* start struct : qualifierIn / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
+ ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierIn */
}
+ si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
+}
- /* Make entries in Protocol column and Info column on summary display */
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY");
+/*
+ * Message: StartMulticastMediaTransmissionMessage
+ * Opcode: 0x0102
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 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);
+ {
+ /* start struct : qualifierOut / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
+ ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 2, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE && hdr_version <= V15_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierOut */
+ }
+ si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
+}
- col_set_str(pinfo->cinfo, COL_INFO, "Skinny Client Control Protocol");
+/*
+ * Message: StopMulticastMediaReceptionMessage
+ * Opcode: 0x0103
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StopMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- tcp_dissect_pdus(tvb, pinfo, tree, skinny_desegment, 4,
- get_skinny_pdu_len, dissect_skinny_pdu, data);
+/*
+ * Message: StopMulticastMediaTransmissionMessage
+ * Opcode: 0x0104
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StopMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- return tvb_captured_length(tvb);
+/*
+ * Message: OpenReceiveChannelMessage
+ * Opcode: 0x0105
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ 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);
+ 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);
+ {
+ /* start struct : qualifierIn / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
+ ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierIn */
+ }
+ si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : mRxMediaEncryptionKeyInfo / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
+ ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
+ keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
+ saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < keylen) {
+ ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ }
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < saltlen) {
+ ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ }
+ ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: mRxMediaEncryptionKeyInfo */
+ }
+ ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RFC2833PayloadType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version >= V11_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_mixingMode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_partyDirection, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_sourceIpAddr_ipv4, hf_skinny_sourceIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_sourcePortNumber, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V16_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_requestedIpAddrType, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V17_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_audioLevelAdjustment, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V20_MSG_TYPE) {
+ {
+ /* start struct : latentCapsInfo / size: 36 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
+ ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : modemRelay / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: modemRelay */
+ }
+ {
+ /* start struct : sprtPayload / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sprtPayload */
+ }
+ {
+ /* start struct : sse / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sse */
+ }
+ {
+ /* start struct : payloadParam / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
+ ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_sse, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_v150sprt, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_noaudio, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: payloadParam */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: latentCapsInfo */
+ }
+ }
}
-/* Register the protocol with Wireshark */
-void
-proto_register_skinny(void)
+/*
+ * Message: CloseReceiveChannelMessage
+ * Opcode: 0x0106
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CloseReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- /* Setup list of header fields */
- static hf_register_info hf[] = {
- { &hf_skinny_data_length,
- { "Data length", "skinny.data_length",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Number of bytes in the data portion.",
- HFILL }
- },
- { &hf_skinny_hdr_version,
- { "Header version", "skinny.hdr_version",
- FT_UINT32, BASE_HEX, VALS(header_version), 0x0,
- NULL,
- HFILL }
- },
- /* FIXME: Enable use of message name ??? */
- { &hf_skinny_messageid,
- { "Message ID", "skinny.messageid",
- FT_UINT32, BASE_HEX|BASE_EXT_STRING, &message_id_ext, 0x0,
- "The function requested/done with this message.",
- HFILL }
- },
-
- { &hf_skinny_deviceName,
- { "Device name", "skinny.deviceName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The device name of the phone.",
- HFILL }
- },
-
- { &hf_skinny_stationUserId,
- { "Station user ID", "skinny.stationUserId",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_stationInstance,
- { "Station instance", "skinny.stationInstance",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_deviceType,
- { "Device type", "skinny.deviceType",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &deviceTypes_ext, 0x0,
- "DeviceType of the station.",
- HFILL }
- },
+/*
+ * Message: ConnectionStatisticsReqMessage
+ * Opcode: 0x0107
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
+ ptvcursor_add(cursor, hf_skinny_directoryNum, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ 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);
+}
- { &hf_skinny_maxStreams,
- { "Max streams", "skinny.maxStreams",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "32 bit unsigned integer indicating the maximum number of simultansous RTP duplex streams that the client can handle.",
- HFILL }
- },
+/*
+ * Message: SoftKeyTemplateResMessage
+ * Opcode: 0x0108
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 totalSoftKeyCount = 0;
+ {
+ /* start struct : softKeyTemplate / size: 32 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplate");
+ ptvcursor_add(cursor, hf_skinny_softKeyOffset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_softKeyCount, 4, ENC_LITTLE_ENDIAN);
+ totalSoftKeyCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_totalSoftKeyCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : definition / size: 20 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalSoftKeyCount = %d, max:32]", totalSoftKeyCount);
+ for (counter_2 = 0; counter_2 < 32; counter_2++) {
+ if (counter_2 < totalSoftKeyCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeyCount);
+ dissect_skinny_displayLabel(cursor, hf_skinny_softKeyLabel, 16, 16);
+ ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: definition */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: definition */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: softKeyTemplate */
+ }
+}
- { &hf_skinny_activeStreams,
- { "Active Streams", "skinny.activeStreams",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_phoneFeatures,
- { "Phone Features", "skinny.phoneFeatures",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_maxButtons,
- { "Maximum number of Buttons", "skinny.maxButtons",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SoftKeySetResMessage
+ * Opcode: 0x0109
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 totalSoftKeySetCount = 0;
+ {
+ /* start struct : softKeySets / size: 15 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeySets");
+ ptvcursor_add(cursor, hf_skinny_softKeySetOffset, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_softKeySetCount, 4, ENC_LITTLE_ENDIAN);
+ totalSoftKeySetCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_totalSoftKeySetCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : definition / size: 3 */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalSoftKeySetCount = %d, max:16]", totalSoftKeySetCount);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < totalSoftKeySetCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeySetCount);
+ {
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplateIndex [max:16]");
+ for (counter_5 = 0; counter_5 < 16; counter_5++) {
+ ptvcursor_add(cursor, hf_skinny_softKeyTemplateIndex, 1, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyTemplateIndex */
+ }
+ {
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyInfoIndex [max:16]");
+ for (counter_5 = 0; counter_5 < 16; counter_5++) {
+ ptvcursor_add(cursor, hf_skinny_softKeyInfoIndex, 2, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyInfoIndex */
+ }
+ } else {
+ ptvcursor_advance(cursor, 3);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: definition */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: definition */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: softKeySets */
+ }
+}
- { &hf_skinny_macAddress,
- { "Mac Address", "skinny.macAddress",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_loadInfo,
- { "Load Information / Firmware", "skinny.loadInfo",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_stationIpPort,
- { "Station ip port", "skinny.stationIpPort",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_stationKeypadButton,
- { "Keypad button", "skinny.stationKeypadButton",
- FT_UINT32, BASE_HEX|BASE_EXT_STRING, &keypadButtons_ext, 0x0,
- "The button pressed on the phone.",
- HFILL }
- },
-
- { &hf_skinny_calledPartyNumber,
- { "Called party number", "skinny.calledParty",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The number called.",
- HFILL }
- },
-
- { &hf_skinny_stimulus,
- { "Stimulus", "skinny.stimulus",
- FT_UINT32, BASE_HEX|BASE_EXT_STRING, &deviceStimuli_ext, 0x0,
- "Reason for the device stimulus message.",
- HFILL }
- },
+/*
+ * Message: SelectSoftKeysMessage
+ * Opcode: 0x0110
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SelectSoftKeysMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_softKeySetIndex, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "validKeyMask");
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: validKeyMask */
+}
- { &hf_skinny_stimulusInstance,
- { "Stimulus instance", "skinny.stimulusInstance",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: CallStateMessage
+ * Opcode: 0x0111
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->callState = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callState, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_privacy, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : precedence / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "precedence");
+ ptvcursor_add(cursor, hf_skinny_precedenceLv, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_precedenceDm, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: precedence */
+ }
+}
- { &hf_skinny_lineNumber,
- { "Line number", "skinny.lineNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DisplayPromptStatusMessage
+ * Opcode: 0x0112
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DisplayPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_displayLabel(cursor, hf_skinny_promptStatus, 32, 32);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- { &hf_skinny_speedDialNumber,
- { "Speed-dial number", "skinny.speedDialNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Which speed dial number",
- HFILL }
- },
+/*
+ * Message: ClearPromptStatusMessage
+ * Opcode: 0x0113
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ClearPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- { &hf_skinny_capCount,
- { "Capabilities count", "skinny.capCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "How many capabilities",
- HFILL }
- },
-
- { &hf_skinny_payloadCapability,
- { "Payload capability", "skinny.payloadCapability",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &mediaPayloads_ext, 0x0,
- "The payload capability for this media capability structure.",
- HFILL }
- },
+/*
+ * Message: DisplayNotifyMessage
+ * Opcode: 0x0114
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DisplayNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_displayLabel(cursor, hf_skinny_notify, 32, 32);
+}
- { &hf_skinny_maxFramesPerPacket,
- { "Max frames per packet", "skinny.maxFramesPerPacket",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_alarmSeverity,
- { "Alarm severity", "skinny.alarmSeverity",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &alarmSeverities_ext, 0x0,
- "The severity of the reported alarm.",
- HFILL }
- },
-
- { &hf_skinny_alarmParam1,
- { "Alarm param 1", "skinny.alarmParam1",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- "An as yet undecoded param1 value from the alarm message",
- HFILL }
- },
-
- { &hf_skinny_alarmParam2,
- { "Alarm param 2", "skinny.alarmParam2",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "This is the second alarm parameter i think it's an ip address",
- HFILL }
- },
-
- { &hf_skinny_receptionStatus,
- { "Reception status", "skinny.receptionStatus",
- FT_UINT32, BASE_DEC, VALS(multicastMediaReceptionStatus), 0x0,
- "The current status of the multicast media.",
- HFILL }
- },
+/*
+ * Message: ActivateCallPlaneMessage
+ * Opcode: 0x0116
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ActivateCallPlaneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_passThruPartyID,
- { "Pass-thru party ID", "skinny.passThruPartyID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_ORCStatus,
- { "Opened receive-channel status", "skinny.openReceiveChannelStatus",
- FT_UINT32, BASE_DEC, VALS(openReceiveChanStatus), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_IPVersion,
- { "IP Version", "skinny.ipversion",
- FT_UINT32, BASE_DEC, VALS(ipVersion), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_ipAddress,
- { "IP address", "skinny.ipAddress",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_ipV6Address,
- { "IPv6 address", "skinny.ipv6Address",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: UnregisterAckMessage
+ * Opcode: 0x0118
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UnregisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_status, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_portNumber,
- { "Port number", "skinny.portNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_statsProcessingType,
- { "Stats processing type", "skinny.statsProcessingType",
- FT_UINT32, BASE_DEC, VALS(statsProcessingTypes), 0x0,
- "What do do after you send the stats.",
- HFILL }
- },
-
- { &hf_skinny_callIdentifier,
- { "Call identifier", "skinny.callIdentifier",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_visibility,
- { "Visibility", "skinny.visibility",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_packetsSent,
- { "Packets sent", "skinny.packetsSent",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_octetsSent,
- { "Octets sent", "skinny.octetsSent",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_packetsRecv,
- { "Packets Received", "skinny.packetsRecv",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_octetsRecv,
- { "Octets received", "skinny.octetsRecv",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_packetsLost,
- { "Packets lost", "skinny.packetsLost",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: BackSpaceReqMessage
+ * Opcode: 0x0119
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_BackSpaceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- { &hf_skinny_latency,
- { "Latency(ms)", "skinny.latency",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Average packet latency during the call.",
- HFILL }
- },
+/*
+ * Message: RegisterTokenReject
+ * Opcode: 0x011b
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_RegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_jitter,
- { "Jitter", "skinny.jitter",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Average jitter during the call.",
- HFILL }
- },
-
- { &hf_skinny_directoryNumber,
- { "Directory number", "skinny.directoryNumber",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The number we are reporting statistics for.",
- HFILL }
- },
+/*
+ * Message: StartMediaFailureDetectionMessage
+ * Opcode: 0x011c
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ 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);
+ {
+ /* start struct : qualifierIn / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
+ ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierIn */
+ }
+ si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_lineInstance,
- { "Line instance", "skinny.lineInstance",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The display call plane associated with this call.",
- HFILL }
- },
-
- { &hf_skinny_softKeyEvent,
- { "Soft-key event", "skinny.softKeyEvent",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &softKeyEvents_ext, 0x0,
- "Which softkey event is being reported.",
- HFILL }
- },
+/*
+ * Message: DialedNumberMessage
+ * Opcode: 0x011d
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
+ ptvcursor_add(cursor, hf_skinny_dialedNumber, VariableDirnumSize, ENC_ASCII|ENC_NA);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- { &hf_skinny_keepAliveInterval,
- { "Keep-alive interval", "skinny.keepAliveInterval",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "How often are keep alives exchanges between the client and the call manager.",
- HFILL }
- },
+/*
+ * Message: UserToDeviceDataMessage
+ * Opcode: 0x011e
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : userToDeviceData / size: 2020 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceData");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: userToDeviceData */
+ }
+}
- { &hf_skinny_secondaryKeepAliveInterval,
- { "Secondary keep-alive interval", "skinny.secondaryKeepAliveInterval",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "How often are keep alives exchanges between the client and the secondary call manager.",
- HFILL }
- },
-
- { &hf_skinny_dateTemplate,
- { "Date template", "skinny.dateTemplate",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The display format for the date/time on the phone.",
- HFILL }
- },
+/*
+ * Message: FeatureStatMessage
+ * Opcode: 0x011f
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_FeatureStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+}
- { &hf_skinny_buttonOffset,
- { "Button offset", "skinny.buttonOffset",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Offset is the number of the first button referenced by this message.",
- HFILL }
- },
+/*
+ * Message: DisplayPriNotifyMessage
+ * Opcode: 0x0120
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_DisplayPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_displayLabel(cursor, hf_skinny_notify, 32, 32);
+}
- { &hf_skinny_buttonCount,
- { "Buttons count", "skinny.buttonCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Number of (VALID) button definitions in this message.",
- HFILL }
- },
+/*
+ * Message: ClearPriNotifyMessage
+ * Opcode: 0x0121
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ClearPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_totalButtonCount,
- { "Total buttons count", "skinny.totalButtonCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The total number of buttons defined for this phone.",
- HFILL }
- },
-
- { &hf_skinny_buttonInstanceNumber,
- { "Instance number", "skinny.buttonInstanceNumber",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keypadButtons_ext, 0x0,
- "The button instance number for a button or the StationKeyPad value, repeats allowed.",
- HFILL }
- },
-
- { &hf_skinny_buttonDefinition,
- { "Button definition", "skinny.buttonDefinition",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &buttonDefinitions_ext, 0x0,
- "The button type for this instance (ie line, speed dial, ....",
- HFILL }
- },
+/*
+ * Message: StartAnnouncementMessage
+ * Opcode: 0x0122
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ {
+ /* start struct : AnnList / size: 12 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "AnnList [max:32]");
+ for (counter_1 = 0; counter_1 < 32; counter_1++) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "AnnList [%d / %d]", counter_1 + 1, 32);
+ ptvcursor_add(cursor, hf_skinny_locale, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_country, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_toneAnnouncement, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: AnnList */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: AnnList */
+ }
+ ptvcursor_add(cursor, hf_skinny_annAckReq, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "matrixConfPartyID [max:16]");
+ for (counter_1 = 0; counter_1 < 16; counter_1++) {
+ ptvcursor_add(cursor, hf_skinny_matrixConfPartyID, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: matrixConfPartyID */
+ }
+ ptvcursor_add(cursor, hf_skinny_hearingConfPartyMask, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_annPlayMode, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_softKeyOffset,
- { "Soft-Key offset", "skinny.softKeyOffset",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The offset for the first soft key in this message.",
- HFILL }
- },
+/*
+ * Message: StopAnnouncementMessage
+ * Opcode: 0x0123
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_StopAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_softKeyCount,
- { "Soft-keys count", "skinny.softKeyCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The number of valid softkeys in this message.",
- HFILL }
- },
+/*
+ * Message: AnnouncementFinishMessage
+ * Opcode: 0x0124
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AnnouncementFinishMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_annStatus, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_totalSoftKeyCount,
- { "Total soft-keys count", "skinny.totalSoftKeyCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The total number of softkeys for this device.",
- HFILL }
- },
-
- { &hf_skinny_softKeyLabel,
- { "Soft-key label", "skinny.softKeyLabel",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The text label for this soft key.",
- HFILL }
- },
+/*
+ * Message: NotifyDtmfToneMessage
+ * Opcode: 0x0127
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_NotifyDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_softKeySetOffset,
- { "Soft-key-set offset", "skinny.softKeySetOffset",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The offset for the first soft key set in this message.",
- HFILL }
- },
+/*
+ * Message: SendDtmfToneMessage
+ * Opcode: 0x0128
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SendDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_softKeySetCount,
- { "Soft-key-sets count", "skinny.softKeySetCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The number of valid softkey sets in this message.",
- HFILL }
- },
+/*
+ * Message: SubscribeDtmfPayloadReqMessage
+ * Opcode: 0x0129
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_totalSoftKeySetCount,
- { "Total soft-key-sets count", "skinny.totalSoftKeySetCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The total number of softkey sets for this device.",
- HFILL }
- },
-
- { &hf_skinny_softKeyTemplateIndex,
- { "Soft-key template index", "skinny.softKeyTemplateIndex",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &softKeyEvents_ext, 0x0,
- "Array of size 16 8-bit unsigned ints containing an index into the softKeyTemplate.",
- HFILL }
- },
-
- { &hf_skinny_softKeyInfoIndex,
- { "Soft-key info index", "skinny.softKeyInfoIndex",
- FT_UINT16, BASE_DEC|BASE_EXT_STRING, &softKeyIndexes_ext, 0x0,
- "Array of size 16 16-bit unsigned integers containing an index into the soft key description information.",
- HFILL }
- },
-
- { &hf_skinny_softKeySetDescription,
- { "Soft-key set description", "skinny.softKeySetDescription",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &keySetNames_ext, 0x0,
- "A text description of what this softkey when this softkey set is displayed",
- HFILL }
- },
-
- { &hf_skinny_softKeyMap,
- { "Soft-key map","skinny.softKeyMap",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey0,
- { "SoftKey0", "skinny.softKeyMap.0",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey1,
- { "SoftKey1", "skinny.softKeyMap.1",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY1,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey2,
- { "SoftKey2", "skinny.softKeyMap.2",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY2,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey3,
- { "SoftKey3", "skinny.softKeyMap.3",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY3,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey4,
- { "SoftKey4", "skinny.softKeyMap.4",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY4,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey5,
- { "SoftKey5", "skinny.softKeyMap.5",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY5,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey6,
- { "SoftKey6", "skinny.softKeyMap.6",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY6,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey7,
- { "SoftKey7", "skinny.softKeyMap.7",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY7,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey8,
- { "SoftKey8", "skinny.softKeyMap.8",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY8,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey9,
- { "SoftKey9", "skinny.softKeyMap.9",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY9,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey10,
- { "SoftKey10", "skinny.softKeyMap.10",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY10,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey11,
- { "SoftKey11", "skinny.softKeyMap.11",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY11,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey12,
- { "SoftKey12", "skinny.softKeyMap.12",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY12,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey13,
- { "SoftKey13", "skinny.softKeyMap.13",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY13,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey14,
- { "SoftKey14", "skinny.softKeyMap.14",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY14,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_softKey15,
- { "SoftKey15", "skinny.softKeyMap.15",
- FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY15,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_lampMode,
- { "Lamp mode", "skinny.lampMode",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &stationLampModes_ext, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_messageTimeOutValue,
- { "Message time-out", "skinny.messageTimeOutValue",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The timeout in seconds for this message",
- HFILL }
- },
-
- { &hf_skinny_displayMessage,
- { "Display message", "skinny.displayMessage",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The message displayed on the phone.",
- HFILL }
- },
-
- { &hf_skinny_lineDirNumber,
- { "Line directory number", "skinny.lineDirNumber",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The directory number for this line.",
- HFILL }
- },
-
- { &hf_skinny_lineFullyQualifiedDisplayName,
- { "Fully qualified display name", "skinny.fqdn",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The full display name for this line.",
- HFILL }
- },
-
- { &hf_skinny_lineDisplayName,
- { "Display name", "skinny.displayName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The display name for this line.",
- HFILL }
- },
-
- { &hf_skinny_speedDialDirNumber,
- { "Speed-dial number", "skinny.speedDialDirNum",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "the number to dial for this speed dial.",
- HFILL }
- },
-
- { &hf_skinny_speedDialDisplayName,
- { "Speed-dial display", "skinny.speedDialDisplay",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The text to display for this speed dial.",
- HFILL }
- },
-
- { &hf_skinny_dateYear,
- { "Year", "skinny.year",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The current year",
- HFILL }
- },
-
- { &hf_skinny_dateMonth,
- { "Month", "skinny.month",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The current month",
- HFILL }
- },
-
- { &hf_skinny_dayOfWeek,
- { "Day of week", "skinny.dayOfWeek",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The day of the week",
- HFILL }
- },
-
- { &hf_skinny_dateDay,
- { "Day", "skinny.day",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The day of the current month",
- HFILL }
- },
-
- { &hf_skinny_dateHour,
- { "Hour", "skinny.hour",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Hour of the day",
- HFILL }
- },
-
- { &hf_skinny_dateMinute,
- { "Minute", "skinny.minute",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_dateSeconds,
- { "Seconds", "skinny.dateSeconds",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_dateMilliseconds,
- { "Milliseconds", "skinny.dateMilliseconds",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_timeStamp,
- { "Timestamp", "skinny.timeStamp",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Time stamp for the call reference",
- HFILL }
- },
- { &hf_skinny_callState,
- { "Call state", "skinny.callState",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_stationCallStates_ext, 0x0,
- "The D channel call state of the call",
- HFILL }
- },
-
- { &hf_skinny_deviceTone,
- { "Tone", "skinny.deviceTone",
- FT_UINT32, BASE_HEX|BASE_EXT_STRING, &skinny_deviceTones_ext, 0x0,
- "Which tone to play",
- HFILL }
- },
-
- { &hf_skinny_callingPartyName,
- { "Calling party name", "skinny.callingPartyName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The passed name of the calling party.",
- HFILL }
- },
-
- { &hf_skinny_callingPartyNumber,
- { "Calling party number", "skinny.callingParty",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The passed number of the calling party.",
- HFILL }
- },
-
- { &hf_skinny_calledPartyName,
- { "Called party name", "skinny.calledPartyName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The name of the party we are calling.",
- HFILL }
- },
-
- { &hf_skinny_callType,
- { "Call type", "skinny.callType",
- FT_UINT32, BASE_DEC, VALS(skinny_callTypes), 0x0,
- "What type of call, in/out/etc",
- HFILL }
- },
-
- { &hf_skinny_originalCalledPartyName,
- { "Original called party name", "skinny.originalCalledPartyName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_originalCalledParty,
- { "Original called party number", "skinny.originalCalledParty",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_ringType,
- { "Ring type", "skinny.ringType",
- FT_UINT32, BASE_HEX|BASE_EXT_STRING, &skinny_ringTypes_ext, 0x0,
- "What type of ring to play",
- HFILL }
- },
-
- { &hf_skinny_ringMode,
- { "Ring mode", "skinny.ringMode",
- FT_UINT32, BASE_HEX, VALS(skinny_ringModes), 0x0,
- "What mode of ring to play",
- HFILL }
- },
-
- { &hf_skinny_speakerMode,
- { "Speaker", "skinny.speakerMode",
- FT_UINT32, BASE_HEX, VALS(skinny_speakerModes), 0x0,
- "This message sets the speaker mode on/off",
- HFILL }
- },
-
- { &hf_skinny_remoteIpAddr,
- { "Remote IP address", "skinny.remoteIpAddr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "The remote end ip address for this stream",
- HFILL }
- },
+/*
+ * Message: SubscribeDtmfPayloadResMessage
+ * Opcode: 0x012a
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_remotePortNumber,
- { "Remote port", "skinny.remotePortNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The remote port number listening for this stream",
- HFILL }
- },
+/*
+ * Message: SubscribeDtmfPayloadErrMessage
+ * Opcode: 0x012b
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_millisecondPacketSize,
- { "MS/packet", "skinny.millisecondPacketSize",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The number of milliseconds of conversation in each packet",
- HFILL }
- },
+/*
+ * Message: UnSubscribeDtmfPayloadReqMessage
+ * Opcode: 0x012c
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UnSubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_precedenceValue,
- { "Precedence", "skinny.precedenceValue",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_silenceSuppression,
- { "Silence suppression", "skinny.silenceSuppression",
- FT_UINT32, BASE_HEX, VALS(skinny_silenceSuppressionModes), 0x0,
- "Mode for silence suppression",
- HFILL }
- },
-
- { &hf_skinny_g723BitRate,
- { "G723 bitrate", "skinny.g723BitRate",
- FT_UINT32, BASE_DEC, VALS(skinny_g723BitRates), 0x0,
- "The G723 bit rate for this stream/JUNK if not g723 stream",
- HFILL }
- },
+/*
+ * Message: UnSubscribeDtmfPayloadResMessage
+ * Opcode: 0x012d
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UnSubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_conferenceID,
- { "Conference ID", "skinny.conferenceID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_deviceResetType,
- { "Reset type", "skinny.deviceResetType",
- FT_UINT32, BASE_DEC, VALS(skinny_deviceResetTypes), 0x0,
- "How the devices it to be reset (reset/restart)",
- HFILL }
- },
-
- { &hf_skinny_echoCancelType,
- { "Echo-cancel type", "skinny.echoCancelType",
- FT_UINT32, BASE_DEC, VALS(skinny_echoCancelTypes), 0x0,
- "Is echo cancelling enabled or not",
- HFILL }
- },
-
- { &hf_skinny_deviceUnregisterStatus,
- { "Unregister status", "skinny.deviceUnregisterStatus",
- FT_UINT32, BASE_DEC, VALS(skinny_deviceUnregisterStatusTypes), 0x0,
- "The status of the device unregister request (*CAN* be refused)",
- HFILL }
- },
-
- { &hf_skinny_hookFlashDetectMode,
- { "Hook flash mode", "skinny.hookFlashDetectMode",
- FT_UINT32, BASE_DEC, VALS(skinny_hookFlashDetectModes), 0x0,
- "Which method to use to detect that a hook flash has occurred",
- HFILL }
- },
-
- { &hf_skinny_detectInterval,
- { "HF Detect Interval", "skinny.detectInterval",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The number of milliseconds that determines a hook flash has occurred",
- HFILL }
- },
-
- { &hf_skinny_headsetMode,
- { "Headset mode", "skinny.headsetMode",
- FT_UINT32, BASE_DEC, VALS(skinny_headsetModes), 0x0,
- "Turns on and off the headset on the set",
- HFILL }
- },
-
- { &hf_skinny_microphoneMode,
- { "Microphone mode", "skinny.microphoneMode",
- FT_UINT32, BASE_DEC, VALS(skinny_microphoneModes), 0x0,
- "Turns on and off the microphone on the set",
- HFILL }
- },
+/*
+ * Message: UnSubscribeDtmfPayloadErrMessage
+ * Opcode: 0x012e
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UnSubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_activeForward,
- { "Active forward", "skinny.activeForward",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "This is non zero to indicate that a forward is active on the line",
- HFILL }
- },
+/*
+ * Message: ServiceURLStatMessage
+ * Opcode: 0x012f
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_ServiceURLStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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);
+}
- { &hf_skinny_forwardAllActive,
- { "Forward all", "skinny.forwardAllActive",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Forward all calls",
- HFILL }
- },
+/*
+ * Message: CallSelectStatMessage
+ * Opcode: 0x0130
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CallSelectStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_callSelectStat, 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);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_forwardBusyActive,
- { "Forward busy", "skinny.forwardBusyActive",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Forward calls when busy",
- HFILL }
- },
+/*
+ * Message: OpenMultiMediaReceiveChannelMessage
+ * Opcode: 0x0131
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 compressionType = 0;
+ guint32 payloadType = 0;
+ guint32 pictureFormatCount = 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);
+ 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));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+ {
+ /* start struct : payloadType / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
+ ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
+ payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: payloadType */
+ }
+ ptvcursor_add(cursor, hf_skinny_isConferenceCreator, 4, ENC_LITTLE_ENDIAN);
+ if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
+ {
+ /* start struct : audioParameters / size: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
+ ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : qualifierIn / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
+ ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierIn */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: audioParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 28);
+ } else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
+ {
+ /* start struct : vidParameters / size: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
+ ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
+ pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : pictureFormat / size: 8 */
+ guint32 counter_3 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref: pictureFormatCount = %d, max:5]", pictureFormatCount);
+ for (counter_3 = 0; counter_3 < 5; counter_3++) {
+ if (counter_3 < pictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: pictureFormat */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: pictureFormat */
+ }
+ ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
+ if (payloadType == MEDIA_PAYLOAD_H261) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
+ {
+ /* start struct : h261VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h261VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadType == MEDIA_PAYLOAD_H263) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
+ {
+ /* start struct : h263VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h263VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadType == MEDIA_PAYLOAD_H264) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
+ {
+ /* start struct : h264VideoCapability / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h264VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadType == MEDIA_PAYLOAD_VIEO) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
+ {
+ /* start struct : vieoVideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vieoVideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vidParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
+ {
+ /* start struct : dataParameters / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: dataParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 36);
+ }
+ {
+ /* start struct : mRxMediaEncryptionKeyInfo / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
+ ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
+ keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
+ saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < keylen) {
+ ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ }
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < saltlen) {
+ ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ }
+ ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: mRxMediaEncryptionKeyInfo */
+ }
+ ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version >= V11_MSG_TYPE) {
+ dissect_skinny_ipv4or6(cursor, hf_skinny_sourceIpAddr_ipv4, hf_skinny_sourceIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_sourcePortNumber, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V16_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_requestedIpAddrType, 4, ENC_LITTLE_ENDIAN);
+ }
+}
- { &hf_skinny_forwardNoAnswerActive,
- { "Forward no answer", "skinny.forwardNoAnswerActive",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Forward only when no answer",
- HFILL }
- },
-
- { &hf_skinny_forwardNumber,
- { "Forward number", "skinny.forwardNumber",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The number to forward calls to.",
- HFILL }
- },
-
- { &hf_skinny_userName,
- { "Username", "skinny.userName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "Username for this device.",
- HFILL }
- },
-
- { &hf_skinny_serverName,
- { "Server name", "skinny.serverName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The server name for this device.",
- HFILL }
- },
-
- { &hf_skinny_numberLines,
- { "Number of lines", "skinny.numberLines",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "How many lines this device has",
- HFILL }
- },
-
- { &hf_skinny_numberSpeedDials,
- { "Number of speed-dials", "skinny.numberSpeedDials",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The number of speed dials this device has",
- HFILL }
- },
-
- { &hf_skinny_sessionType,
- { "Session type", "skinny.sessionType",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_sessionTypes_ext, 0x0,
- "The type of this session.",
- HFILL }
- },
-
- { &hf_skinny_version,
- { "Version", "skinny.version",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_mediaEnunciationType,
- { "Enunciation type", "skinny.mediaEnunciationType",
- FT_UINT32, BASE_DEC, VALS(skinny_mediaEnunciationTypes), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_serverIdentifier,
- { "Server identifier", "skinny.serverIdentifier",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_serverListenPort,
- { "Server port", "skinny.serverListenPort",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_serverIpAddress,
- { "Server IP address", "skinny.serverIpAddress",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_multicastPort,
- { "Multicast port", "skinny.multicastPort",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_multicastIpAddress,
- { "Multicast IP address", "skinny.multicastIpAddress",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_tokenRejWaitTime,
- { "Retry wait time", "skinny.tokenRejWaitTime",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_unknown,
- { "Unknown data", "skinny.unknown",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- "Place holder for unknown data.",
- HFILL }
- },
-
- { &hf_skinny_rawData,
- { "Unknown raw data", "skinny.rawData",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Place holder for unknown raw data.",
- HFILL }
- },
+/*
+ * Message: StartMultiMediaTransmissionMessage
+ * Opcode: 0x0132
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 compressionType = 0;
+ guint32 payloadType = 0;
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 pictureFormatCount = 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);
+ compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ 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);
+ {
+ /* start struct : payloadType / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
+ ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
+ payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: payloadType */
+ }
+ ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN);
+ if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
+ {
+ /* start struct : audioParameters / size: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
+ ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : qualifierIn / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
+ ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version <= V10_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (hdr_version >= V11_MSG_TYPE) {
+ if (compressionType == MEDIA_PAYLOAD_G7231) {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ /* start union : codecParamsUnion / maxsize: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
+ {
+ /* start struct : codecParams / size: 4 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: codecParams */
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: qualifierIn */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: audioParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 28);
+ } else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
+ {
+ /* start struct : vidParameters / size: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
+ ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
+ pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : pictureFormat / size: 8 */
+ guint32 counter_3 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref: pictureFormatCount = %d, max:5]", pictureFormatCount);
+ for (counter_3 = 0; counter_3 < 5; counter_3++) {
+ if (counter_3 < pictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: pictureFormat */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: pictureFormat */
+ }
+ ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
+ if (payloadType == MEDIA_PAYLOAD_H261) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
+ {
+ /* start struct : h261VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h261VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadType == MEDIA_PAYLOAD_H263) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
+ {
+ /* start struct : h263VideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h263VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadType == MEDIA_PAYLOAD_H264) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
+ {
+ /* start struct : h264VideoCapability / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: h264VideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadType == MEDIA_PAYLOAD_VIEO) {
+ /* start union : capability / maxsize: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
+ {
+ /* start struct : vieoVideoCapability / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vieoVideoCapability */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: vidParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
+ /* start union : capability / maxsize: 44 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
+ {
+ /* start struct : dataParameters / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: dataParameters */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 36);
+ }
+ {
+ /* start struct : mTxMediaEncryptionKeyInfo / size: 18 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
+ ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
+ keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
+ saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < keylen) {
+ ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ }
+ {
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < saltlen) {
+ ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ }
+ ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: mTxMediaEncryptionKeyInfo */
+ }
+ ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_xmlData,
- { "XML data", "skinny.xmlData",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: StopMultiMediaTransmissionMessage
+ * Opcode: 0x0133
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StopMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- { &hf_skinny_numberOfInServiceStreams,
- { "Number of in-service streams", "skinny.numberOfInServiceStreams",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: MiscellaneousCommandMessage
+ * Opcode: 0x0134
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 command = 0;
+ guint32 recoveryReferencePictureCount = 0;
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+ command = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_command, 4, ENC_LITTLE_ENDIAN);
+ if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateGOB");
+ {
+ /* start struct : videoFastUpdateGOB / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateGOB");
+ ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfGOBs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: videoFastUpdateGOB */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 8);
+ } else if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEMB) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateMB");
+ {
+ /* start struct : videoFastUpdateMB / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateMB");
+ ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: videoFastUpdateMB */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (command == MISCCOMMANDTYPE_LOSTPICTURE) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPicture");
+ {
+ /* start struct : lostPicture / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPicture");
+ ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: lostPicture */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 8);
+ } else if (command == MISCCOMMANDTYPE_LOSTPARTIALPICTURE) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPartialPicture");
+ {
+ /* start struct : lostPartialPicture / size: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPartialPicture");
+ {
+ /* start struct : pictureReference / size: 8 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureReference");
+ ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: pictureReference */
+ }
+ ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: lostPartialPicture */
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (command == MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_recoveryReferencePicture");
+ {
+ /* start struct : recoveryReferencePictureValue / size: 12 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePictureValue");
+ recoveryReferencePictureCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_recoveryReferencePictureCount, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : recoveryReferencePicture / size: 8 */
+ guint32 counter_3 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [ref: recoveryReferencePictureCount = %d, max:4]", recoveryReferencePictureCount);
+ for (counter_3 = 0; counter_3 < 4; counter_3++) {
+ if (counter_3 < recoveryReferencePictureCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [%d / %d]", counter_3 + 1, recoveryReferencePictureCount);
+ ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: recoveryReferencePicture */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: recoveryReferencePicture */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: recoveryReferencePictureValue */
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (command == MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF) {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_temporalSpatialTradeOff");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOff, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 12);
+ } else {
+ /* start union : u / maxsize: 16 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any command");
+ ptvcursor_add(cursor, hf_skinny_none, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 12);
+ }
+}
- { &hf_skinny_maxStreamsPerConf,
- { "Max streams per conf", "skinny.maxStreamsPerConf",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: FlowControlCommandMessage
+ * Opcode: 0x0135
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_FlowControlCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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_maximumBitRate, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_numberOfOutOfServiceStreams,
- { "Number of out-of-service streams", "skinny.numberOfOutOfServiceStreams",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: CloseMultiMediaReceiveChannelMessage
+ * Opcode: 0x0136
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CloseMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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);
+}
- { &hf_skinny_applicationID,
- { "Application ID", "skinny.applicationID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Application ID.",
- HFILL }
- },
+/*
+ * Message: CreateConferenceReqMessage
+ * Opcode: 0x0137
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ 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);
+ ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
+ 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);
+}
- { &hf_skinny_transactionID,
- { "Transaction ID", "skinny.transactionID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DeleteConferenceReqMessage
+ * Opcode: 0x0138
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_DeleteConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_serviceNum,
- { "Service number", "skinny.serviceNum",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: ModifyConferenceReqMessage
+ * Opcode: 0x0139
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ 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);
+ ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
+ 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);
+}
- { &hf_skinny_serviceURLIndex,
- { "Service URL index", "skinny.serviceURLIndex",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: AddParticipantReqMessage
+ * Opcode: 0x013a
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
+ 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);
+}
- { &hf_skinny_featureIndex,
- { "Feature index", "skinny.featureIndex",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_createConfResults,
- { "Create conf results", "skinny.createConfResults",
- FT_UINT32, BASE_DEC, VALS(skinny_createConfResults), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_modifyConfResults,
- { "Modify conf results", "skinny.modifyConfResults",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_modifyConfResults_ext, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_deleteConfResults,
- { "Delete conf results", "skinny.deleteConfResults",
- FT_UINT32, BASE_DEC, VALS(skinny_deleteConfResults), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_addParticipantResults,
- { "Add participant results", "skinny.addParticipantResults",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_addParticipantResults_ext, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_passThruData,
- { "Pass-thru data", "skinny.passThruData",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_auditParticipantResults,
- { "Audit participant results", "skinny.auditParticipantResults",
- FT_UINT32, BASE_DEC, VALS(skinny_auditParticipantResults), 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DropParticipantReqMessage
+ * Opcode: 0x013b
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_DropParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+}
- { &hf_skinny_last,
- { "Last", "skinny.last",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: AuditParticipantReqMessage
+ * Opcode: 0x013d
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_AuditParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_numberOfEntries,
- { "Number of entries", "skinny.numberOfEntries",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: ChangeParticipantReqMessage
+ * Opcode: 0x013e
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
+ 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);
+}
- { &hf_skinny_participantEntry,
- { "Participant entry", "skinny.participantEntry",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_resourceTypes,
- { "ResourceType", "skinny.resourceTypes",
- FT_UINT32, BASE_DEC, VALS(skinny_resourceTypes), 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: UserToDeviceDataMessageVersion1
+ * Opcode: 0x013f
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 dataLength = 0;
+ {
+ /* start struct : userToDeviceDataVersion1 / size: 2040 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceDataVersion1");
+ ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_transactionID, 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_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_xml(cursor, hf_skinny_data, pinfo, dataLength, 2000);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: userToDeviceDataVersion1 */
+ }
+}
- { &hf_skinny_numberOfReservedParticipants,
- { "Number of reserved participants", "skinny.numberOfReservedParticipants",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: VideoDisplayCommandMessage
+ * Opcode: 0x0140
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_VideoDisplayCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _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_layoutID, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_numberOfActiveParticipants,
- { "Number of active participants", "skinny.numberOfActiveParticipants",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: FlowControlNotifyMessage
+ * Opcode: 0x0141
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_FlowControlNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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_maximumBitRate, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_appID,
- { "Application ID", "skinny.appID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_appData,
- { "Application data", "skinny.appData",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_appConfID,
- { "Application conf ID", "skinny.appConfID",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_sequenceFlag,
- { "Sequence flag", "skinny.sequenceFlag",
- FT_UINT32, BASE_DEC, VALS(skinny_sequenceFlags), 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: ConfigStatV2Message
+ * Opcode: 0x0142
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 DeviceName_len = 0;
+ guint32 serverName_len = 0;
+ {
+ /* start struct : sid / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
+ DeviceName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (DeviceName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_DeviceName, DeviceName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sid */
+ }
+ ptvcursor_add(cursor, hf_skinny_serverInstance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_unknown2, 4, ENC_LITTLE_ENDIAN);
+ serverName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (serverName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_serverName, serverName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+}
- { &hf_skinny_displayPriority,
- { "Display priority", "skinny.displayPriority",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DisplayNotifyV2Message
+ * Opcode: 0x0143
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_DisplayNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_displayLabel(cursor, hf_skinny_notify, 0, 32);
+}
- { &hf_skinny_appInstanceID,
- { "Application instance ID", "skinny.appInstanceID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DisplayPriNotifyV2Message
+ * Opcode: 0x0144
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_DisplayPriNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
+ dissect_skinny_displayLabel(cursor, hf_skinny_notify, 0, 97);
+}
- { &hf_skinny_routingID,
- { "Routing ID", "skinny.routingID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: DisplayPromptStatusV2Message
+ * Opcode: 0x0145
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_DisplayPromptStatusV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_displayLabel(cursor, hf_skinny_promptStatus, 0, 97);
+}
- { &hf_skinny_audioCapCount,
- { "Audio cap count", "skinny.audioCapCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: FeatureStatV2Message
+ * Opcode: 0x0146
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_FeatureStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 featureTextLabel_len = 0;
+ 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_featureStatus, 4, ENC_LITTLE_ENDIAN);
+ featureTextLabel_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (featureTextLabel_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_featureTextLabel, featureTextLabel_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+}
- { &hf_skinny_videoCapCount,
- { "Video cap count", "skinny.videoCapCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: LineStatV2Message
+ * Opcode: 0x0147
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_LineStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 lineDirNumber_len = 0;
+ guint32 lineFullyQualifiedDisplayName_len = 0;
+ guint32 lineTextLabel_len = 0;
+ ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_Unknown, 4, ENC_LITTLE_ENDIAN);
+ lineDirNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lineDirNumber_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lineDirNumber, lineDirNumber_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ lineFullyQualifiedDisplayName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lineFullyQualifiedDisplayName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lineFullyQualifiedDisplayName, lineFullyQualifiedDisplayName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ lineTextLabel_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lineTextLabel_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lineTextLabel, lineTextLabel_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+}
- { &hf_skinny_dataCapCount,
- { "Data cap count", "skinny.dataCapCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: ServiceURLStatV2Message
+ * Opcode: 0x0148
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_ServiceURLStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_RTPPayloadFormat,
- { "RTP payload format", "skinny.RTPPayloadFormat",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SpeedDialStatV2Message
+ * Opcode: 0x0149
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_SpeedDialStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 speedDialDirNumber_len = 0;
+ guint32 speedDialDisplayName_len = 0;
+ 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) {
+ ptvcursor_add(cursor, hf_skinny_speedDialDirNumber, speedDialDirNumber_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ speedDialDisplayName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (speedDialDisplayName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_speedDialDisplayName, speedDialDisplayName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+}
- { &hf_skinny_customPictureFormatCount,
- { "Custom picture format count", "skinny.customPictureFormatCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: CallInfoV2Message
+ * Opcode: 0x014a
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: yes
+ */
+static void
+handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 callingParty_len = 0;
+ guint32 AlternateCallingParty_len = 0;
+ guint32 calledParty_len = 0;
+ guint32 originalCalledParty_len = 0;
+ guint32 lastRedirectingParty_len = 0;
+ guint32 cgpnVoiceMailbox_len = 0;
+ guint32 cdpnVoiceMailbox_len = 0;
+ guint32 originalCdpnVoiceMailbox_len = 0;
+ guint32 lastRedirectingVoiceMailbox_len = 0;
+ guint32 callingPartyName_len = 0;
+ guint32 calledPartyName_len = 0;
+ guint32 originalCalledPartyName_len = 0;
+ guint32 lastRedirectingPartyName_len = 0;
+ guint32 HuntPilotNumber_len = 0;
+ guint32 HuntPilotName_len = 0;
+
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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_callType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_originalCdpnRedirectReason, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingReason, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_callInstance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_callSecurityStatus, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
+ callingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (callingParty_len > 1) {
+ si->callingParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), callingParty_len));
+ ptvcursor_add(cursor, hf_skinny_callingParty, callingParty_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ AlternateCallingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (AlternateCallingParty_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_AlternateCallingParty, AlternateCallingParty_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ calledParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (calledParty_len > 1) {
+ si->calledParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), calledParty_len));
+ ptvcursor_add(cursor, hf_skinny_calledParty, calledParty_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ originalCalledParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (originalCalledParty_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_originalCalledParty, originalCalledParty_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ lastRedirectingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lastRedirectingParty_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingParty, lastRedirectingParty_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ cgpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (cgpnVoiceMailbox_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, cgpnVoiceMailbox_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ cdpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (cdpnVoiceMailbox_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_cdpnVoiceMailbox, cdpnVoiceMailbox_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ originalCdpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (originalCdpnVoiceMailbox_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_originalCdpnVoiceMailbox, originalCdpnVoiceMailbox_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ lastRedirectingVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lastRedirectingVoiceMailbox_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingVoiceMailbox, lastRedirectingVoiceMailbox_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ callingPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (callingPartyName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_callingPartyName, callingPartyName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ calledPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (calledPartyName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_calledPartyName, calledPartyName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ originalCalledPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (originalCalledPartyName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_originalCalledPartyName, originalCalledPartyName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ lastRedirectingPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (lastRedirectingPartyName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_lastRedirectingPartyName, lastRedirectingPartyName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ if (hdr_version >= V17_MSG_TYPE) {
+ HuntPilotNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (HuntPilotNumber_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_HuntPilotNumber, HuntPilotNumber_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ HuntPilotName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
+ if (HuntPilotName_len > 1) {
+ ptvcursor_add(cursor, hf_skinny_HuntPilotName, HuntPilotName_len, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 1);
+ }
+ }
+}
- { &hf_skinny_pictureWidth,
- { "Picture width", "skinny.pictureWidth",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: PortReqMessage
+ * Opcode: 0x014b
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_PortReqMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ 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);
+}
- { &hf_skinny_pictureHeight,
- { "Picture height", "skinny.pictureHeight",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: PortCloseMessage
+ * Opcode: 0x014c
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_PortCloseMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_pixelAspectRatio,
- { "Pixel aspect ratio", "skinny.pixelAspectRatio",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: QoSListenMessage
+ * Opcode: 0x014d
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxRetryNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_retryTimer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_confirmRequired, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_preemptionPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_defendingPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : appID / size: 112 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
+ ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: appID */
+ }
+}
- { &hf_skinny_clockConversionCode,
- { "Clock conversion code", "skinny.clockConversionCode",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: QoSPathMessage
+ * Opcode: 0x014e
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxRetryNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_retryTimer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_preemptionPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_defendingPriority, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : appID / size: 112 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
+ ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: appID */
+ }
+}
- { &hf_skinny_clockDivisor,
- { "Clock divisor", "skinny.clockDivisor",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: QoSTeardownMessage
+ * Opcode: 0x014f
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSTeardownMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_activeStreamsOnRegistration,
- { "Active streams on registration", "skinny.activeStreamsOnRegistration",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: UpdateDSCPMessage
+ * Opcode: 0x0150
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_UpdateDSCPMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_maxBW,
- { "Max BW", "skinny.maxBW",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: QoSModifyMessage
+ * Opcode: 0x0151
+ * Type: IntraCCM
+ * Direction: pbx2pbx
+ * VarLength: no
+ */
+static void
+handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _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);
+ dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
+ ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : appID / size: 112 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
+ ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: appID */
+ }
+}
- { &hf_skinny_serviceResourceCount,
- { "Service resource count", "skinny.serviceResourceCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SubscriptionStatMessage
+ * Opcode: 0x0152
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SubscriptionStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_cause, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_layoutCount,
- { "Layout count", "skinny.layoutCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_layout,
- { "Layout", "skinny.layout",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_Layouts_ext, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: NotificationMessage
+ * Opcode: 0x0153
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_NotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_status, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_text, 97, ENC_ASCII|ENC_NA);
+}
- { &hf_skinny_maxConferences,
- { "Max conferences", "skinny.maxConferences",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: StartMediaTransmissionAckMessage
+ * Opcode: 0x0154
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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, pinfo);
+ ptvcursor_add(cursor, hf_skinny_transmitPort, 4, ENC_LITTLE_ENDIAN);
+ si->startmediatransmisionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_startMediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_activeConferenceOnRegistration,
- { "Active conference on registration", "skinny.activeConferenceOnRegistration",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_transmitOrReceive,
- { "Transmit or receive", "skinny.transmitOrReceive",
- FT_UINT32, BASE_DEC, VALS(skinny_transmitOrReceive), 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: StartMultiMediaTransmissionAckMessage
+ * Opcode: 0x0155
+ * Type: MediaControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ 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, pinfo);
+ ptvcursor_add(cursor, hf_skinny_transmitPort, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_resultCode, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_levelPreferenceCount,
- { "Level preference count", "skinny.levelPreferenceCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: CallHistoryInfoMessage
+ * Opcode: 0x0156
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CallHistoryInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_callHistoryDisposition, 4, ENC_LITTLE_ENDIAN);
+ si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineInstance, 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);
+}
- { &hf_skinny_transmitPreference,
- { "Transmit preference", "skinny.transmitPreference",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: MwiResponseMessage
+ * Opcode: 0x0158
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_MwiResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_mwi_notification_result, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_format,
- { "Format", "skinny.format",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_formatTypes_ext, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: EnhancedAlarmMessage
+ * Opcode: 0x015a
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_EnhancedAlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ dissect_skinny_xml(cursor, hf_skinny_alarmInfo, pinfo, 0, 2000);
+}
- { &hf_skinny_maxBitRate,
- { "Max bitrate", "skinny.maxBitRate",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: CallCountRespMessage
+ * Opcode: 0x015f
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 lineDataEntries = 0;
+ ptvcursor_add(cursor, hf_skinny_totalNumOfConfiguredLines, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_startingLineInstance, 4, ENC_LITTLE_ENDIAN);
+ lineDataEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_lineDataEntries, 4, ENC_LITTLE_ENDIAN);
+ {
+ /* start struct : lineData / size: 4 */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [ref: lineDataEntries = %d, max:42]", lineDataEntries);
+ for (counter_1 = 0; counter_1 < 42; counter_1++) {
+ if (counter_1 < lineDataEntries) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [%d / %d]", counter_1 + 1, lineDataEntries);
+ ptvcursor_add(cursor, hf_skinny_maxNumCalls, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_busyTrigger, 2, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end for loop tree: lineData */
+ }
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: lineData */
+ }
+}
- { &hf_skinny_minBitRate,
- { "Min bitrate", "skinny.minBitRate",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: RecordingStatusMessage
+ * Opcode: 0x0160
+ * Type: CallControl
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_RecordingStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ 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_recording_status, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_MPI,
- { "MPI", "skinny.MPI",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SPCPRegisterTokenReq
+ * Opcode: 0x8000
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: no
+ */
+static void
+handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ {
+ /* start struct : sid / size: 24 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
+ ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ /* end struct: sid */
+ }
+ 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);
+}
- { &hf_skinny_serviceNumber,
- { "Service number", "skinny.serviceNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SPCPRegisterTokenAck
+ * Opcode: 0x8100
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SPCPRegisterTokenAck(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_features, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_temporalSpatialTradeOffCapability,
- { "Temporal spatial trade off capability", "skinny.temporalSpatialTradeOffCapability",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/*
+ * Message: SPCPRegisterTokenReject
+ * Opcode: 0x8101
+ * Type: RegistrationAndManagement
+ * Direction: pbx2dev
+ * VarLength: no
+ */
+static void
+handle_SPCPRegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN);
+}
- { &hf_skinny_stillImageTransmission,
- { "Still image transmission", "skinny.stillImageTransmission",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_h263_capability_bitfield,
- { "H263 capability bitfield", "skinny.h263_capability_bitfield",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
- { &hf_skinny_annexNandWFutureUse,
- { "Annex N and W future use", "skinny.annexNandWFutureUse",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/* Messages Handler Array */
+typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo);
+static const struct opcode2handler {
+ guint16 opcode;
+ message_handler handler;
+ 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"},
+ {0x0158, handle_MwiResponseMessage , "MwiResponseMessage"},
+ {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"},
+};
- { &hf_skinny_modelNumber,
- { "Model number", "skinny.modelNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/* Dissect a single SCCP PDU */
+static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ guint offset = 0;
+ /*gboolean is_video = FALSE;*/ /* FIX ME: need to indicate video or not */
+ ptvcursor_t* cursor;
- { &hf_skinny_bandwidth,
- { "Bandwidth", "skinny.bandwidth",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ /* Header fields */
+ guint32 hdr_data_length;
+ guint32 hdr_version;
+ guint32 data_messageid;
+ guint16 i;
- { &hf_skinny_protocolDependentData,
- { "Protocol dependent data", "skinny.protocolDependentData",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ /* Set up structures we will need to add the protocol subtree and manage it */
+ proto_tree *skinny_tree = NULL;
+ proto_item *ti = NULL;
- { &hf_skinny_priority,
- { "Priority", "skinny.priority",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ /* Initialization */
+ /*
+ hdr_data_length = tvb_get_letohl(tvb, offset);
+ hdr_version = tvb_get_letohl(tvb, offset+4);
+ data_messageid = tvb_get_letohl(tvb, offset+8);
+ */
+ hdr_data_length = tvb_get_letohl(tvb, 0);
+ hdr_version = tvb_get_letohl(tvb, 4);
+ data_messageid = tvb_get_letohl(tvb, 8);
- { &hf_skinny_payloadDtmf,
- { "Payload DTMF", "skinny.payloadDtmf",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "RTP payload type.",
- HFILL }
- },
-
- { &hf_skinny_featureID,
- { "Feature ID", "skinny.featureID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_featureTextLabel,
- { "Feature text label", "skinny.featureTextLabel",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The feature label text that is displayed on the phone.",
- HFILL }
- },
+ /* Initialise stat info for passing to tap */
+ pi_current++;
+ if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET)
+ {
+ /* Overwrite info in first struct if run out of space... */
+ 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->callId = 0;
+ si->lineId = 0;
+ si->passThruId = 0;
+ si->callState = 0;
+ g_free(si->callingParty);
+ si->callingParty = NULL;
+ g_free(si->calledParty);
+ si->calledParty = NULL;
+ si->openreceiveStatus = 0;
+ si->startmediatransmisionStatus = 0;
- { &hf_skinny_featureStatus,
- { "Feature status", "skinny.featureStatus",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_notify,
- { "Notify", "skinny.notify",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "The message notify text that is displayed on the phone.",
- HFILL }
- },
-
- { &hf_skinny_endOfAnnAck,
- { "End of ann. ack", "skinny.endOfAnnAck",
- FT_UINT32, BASE_DEC, VALS(skinny_endOfAnnAck), 0x0,
- "End of announcement ack.",
- HFILL }
- },
-
- { &hf_skinny_annPlayMode,
- { "Ann. play mode", "skinny.annPlayMode",
- FT_UINT32, BASE_DEC, VALS(skinny_annPlayMode), 0x0,
- "Announcement play mode.",
- HFILL }
- },
-
- { &hf_skinny_annPlayStatus,
- { "Ann. play status", "skinny.annPlayStatus",
- FT_UINT32, BASE_DEC, VALS(skinny_annPlayStatus), 0x0,
- "Announcement play status.",
- HFILL }
- },
+ /* In the interest of speed, if "tree" is NULL, don't do any work not
+ * necessary to generate protocol tree items.
+ */
+ 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);
+ }
- { &hf_skinny_locale,
- { "Locale", "skinny.locale",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "User locale ID.",
- HFILL }
- },
+ col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName);
+ col_set_fence(pinfo->cinfo, COL_INFO);
- { &hf_skinny_country,
- { "Country", "skinny.country",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Country ID (Network locale).",
- HFILL }
- },
+ /*offset += 8;*/
+ /*cursor = ptvcursor_new(skinny_tree, tvb, offset);*/
- { &hf_skinny_matrixConfPartyID,
- { "Matrix conf party ID", "skinny.matrixConfPartyID",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Existing conference parties.",
- HFILL }
- },
+ proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb,offset+8, 4, data_messageid );
+ /*ptvcursor_add(cursor, hf_skinny_messageId, 4, data_messageid);*/
- { &hf_skinny_hearingConfPartyMask,
- { "Hearing conf party mask", "skinny.hearingConfPartyMask",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Bit mask of conference parties to hear media received on this stream. Bit0 = matrixConfPartyID[0], Bit1 = matrixConfPartiID[1].",
- HFILL }
- },
-
- { &hf_skinny_serviceURL,
- { "Service URL value", "skinny.serviceURL",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_serviceURLDisplayName,
- { "Service URL display name", "skinny.serviceURLDisplayName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
+ offset += 12;
+ cursor = ptvcursor_new(skinny_tree, tvb, offset);
- { &hf_skinny_callSelectStat,
- { "Call select stat", "skinny.callSelectStat",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ 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);
+ }
+ }
+ ptvcursor_free(cursor);
- { &hf_skinny_isConferenceCreator,
- { "Is conference creator", "skinny.isConferenceCreator",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ tap_queue_packet(skinny_tap, pinfo, si);
+ return tvb_captured_length(tvb);
+}
- { &hf_skinny_payload_rfc_number,
- { "Payload RFC number", "skinny.payload_rfc_number",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+/* Code to actually dissect the packets */
+static int
+dissect_skinny(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
+{
+ /* The general structure of a packet: {IP-Header|TCP-Header|n*SKINNY}
+ * SKINNY-Packet: {Header(Size, Reserved)|Data(MessageID, Message-Data)}
+ */
+ /* Header fields */
+ guint32 hdr_data_length;
+ guint32 hdr_version;
- { &hf_skinny_payloadType,
- { "Payload type", "skinny.payloadType",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ /* check, if this is really an SKINNY packet, they start with a length + 0 */
- { &hf_skinny_bitRate,
- { "Bitrate", "skinny.bitRate",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ if (tvb_captured_length(tvb) < 8)
+ {
+ return 0;
+ }
+ /* get relevant header information */
+ hdr_data_length = tvb_get_letohl(tvb, 0);
+ hdr_version = tvb_get_letohl(tvb, 4);
- { &hf_skinny_pictureFormatCount,
- { "Picture format count", "skinny.pictureFormatCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ /* data_size = MIN(8+hdr_data_length, tvb_length(tvb)) - 0xC; */
- { &hf_skinny_confServiceNum,
- { "Conf service number", "skinny.confServiceNum",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Conference service number.",
- HFILL }
- },
+ if (
+ (hdr_data_length < 4) ||
+ ((hdr_version != BASIC_MSG_TYPE) &&
+ (hdr_version != V10_MSG_TYPE) &&
+ (hdr_version != V11_MSG_TYPE) &&
+ (hdr_version != V15_MSG_TYPE) &&
+ (hdr_version != V16_MSG_TYPE) &&
+ (hdr_version != V17_MSG_TYPE) &&
+ (hdr_version != V18_MSG_TYPE) &&
+ (hdr_version != V19_MSG_TYPE) &&
+ (hdr_version != V20_MSG_TYPE) &&
+ (hdr_version != V21_MSG_TYPE) &&
+ (hdr_version != V22_MSG_TYPE))
+ )
+ {
+ /* Not an SKINNY packet, just happened to use the same port */
+ return 0;
+ }
- { &hf_skinny_DSCPValue,
- { "DSCP value", "skinny.DSCPValue",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_miscCommandType,
- { "Misc command type", "skinny.miscCommandType",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_miscCommandType_ext, 0x0,
- NULL,
- HFILL }
- },
+ /* Make entries in Protocol column and Info column on summary display */
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY");
- { &hf_skinny_temporalSpatialTradeOff,
- { "Temporal spatial trade-off", "skinny.temporalSpatialTradeOff",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ col_set_str(pinfo->cinfo, COL_INFO, "Skinny Client Control Protocol");
- { &hf_skinny_firstGOB,
- { "First GOB", "skinny.firstGOB",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ tcp_dissect_pdus(tvb, pinfo, tree, skinny_desegment, 4, get_skinny_pdu_len, dissect_skinny_pdu, data);
- { &hf_skinny_numberOfGOBs,
- { "Number of GOBs", "skinny.numberOfGOBs",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
+ return tvb_captured_length(tvb);
+}
+/* Register the protocol with Wireshark */
+void
+proto_register_skinny(void)
+{
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+ { &hf_skinny_data_length,
+ {
+ "Data length", "skinny.data_length", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of bytes in the data portion.", HFILL }},
+ { &hf_skinny_hdr_version,
+ {
+ "Header version", "skinny.hdr_version", FT_UINT32, BASE_HEX, VALS(header_version), 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_messageId,
+ {
+ "Message ID", "skinny.messageId", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &message_id_ext, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_xmlData,
+ {
+ "XML data", "skinny.xmlData", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_ipv4or6,
+ {
+ "IPv4or6", "skinny.ipv4or6", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &IpAddrType_ext, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_DSCPValue,
+ {
+ "DSCPValue", "skinny.DSCPValue", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_FutureUse1,
+ {
+ "FutureUse1", "skinny.FutureUse1", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_FutureUse2,
+ {
+ "FutureUse2", "skinny.FutureUse2", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_FutureUse3,
+ {
+ "FutureUse3", "skinny.FutureUse3", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit1,
+ {
+ "Bit1", "skinny.Generic.Bitfield.Bit1", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0001,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit10,
+ {
+ "Bit10", "skinny.Generic.Bitfield.Bit10", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0200,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit11,
+ {
+ "Bit11", "skinny.Generic.Bitfield.Bit11", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0400,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit12,
+ {
+ "Bit12", "skinny.Generic.Bitfield.Bit12", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0800,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit13,
+ {
+ "Bit13", "skinny.Generic.Bitfield.Bit13", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x1000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit14,
+ {
+ "Bit14", "skinny.Generic.Bitfield.Bit14", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x2000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit15,
+ {
+ "Bit14", "skinny.Generic.Bitfield.Bit15", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x4000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit16,
+ {
+ "Bit15", "skinny.Generic.Bitfield.Bit16", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x8000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit17,
+ {
+ "Bit17", "skinny.Generic.Bitfield.Bit17", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x10000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit18,
+ {
+ "Bit18", "skinny.Generic.Bitfield.Bit18", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x20000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit19,
+ {
+ "Bit19", "skinny.Generic.Bitfield.Bit19", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x40000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit2,
+ {
+ "Bit2", "skinny.Generic.Bitfield.Bit2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0002,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit20,
+ {
+ "Bit20", "skinny.Generic.Bitfield.Bit20", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x80000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit21,
+ {
+ "Bit21", "skinny.Generic.Bitfield.Bit21", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x100000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit22,
+ {
+ "Bit22", "skinny.Generic.Bitfield.Bit22", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x200000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit23,
+ {
+ "Bit23", "skinny.Generic.Bitfield.Bit23", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x400000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit24,
+ {
+ "Bit24", "skinny.Generic.Bitfield.Bit24", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x800000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit25,
+ {
+ "Bit25", "skinny.Generic.Bitfield.Bit25", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x1000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit26,
+ {
+ "Bit26", "skinny.Generic.Bitfield.Bit26", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x2000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit27,
+ {
+ "Bit27", "skinny.Generic.Bitfield.Bit27", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x4000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit28,
+ {
+ "Bit28", "skinny.Generic.Bitfield.Bit28", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x8000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit29,
+ {
+ "Bit29", "skinny.Generic.Bitfield.Bit29", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x10000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit3,
+ {
+ "Bit3", "skinny.Generic.Bitfield.Bit3", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0004,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit30,
+ {
+ "Bit30", "skinny.Generic.Bitfield.Bit30", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x20000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit31,
+ {
+ "Bit31", "skinny.Generic.Bitfield.Bit31", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x40000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit32,
+ {
+ "Bit32", "skinny.Generic.Bitfield.Bit32", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x80000000,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit4,
+ {
+ "Bit4", "skinny.Generic.Bitfield.Bit4", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0008,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit5,
+ {
+ "Bit5", "skinny.Generic.Bitfield.Bit5", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0010,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit6,
+ {
+ "Bit6", "skinny.Generic.Bitfield.Bit6", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0020,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit7,
+ {
+ "Bit7", "skinny.Generic.Bitfield.Bit7", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0040,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit8,
+ {
+ "Bit8", "skinny.Generic.Bitfield.Bit8", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0080,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_Generic_Bitfield_Bit9,
+ {
+ "Bit9", "skinny.Generic.Bitfield.Bit9", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0100,
+ "H263 Capability BitField", HFILL }},
+ { &hf_skinny_MPI,
+ {
+ "MPI", "skinny.MPI", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_PhoneFeatures_Abbreviated_Dial,
+ {
+ "AbbrevDial", "skinny.PhoneFeatures.Abbreviated.Dial", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit1,
+ {
+ "Bit1", "skinny.PhoneFeatures.Bit1", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0001,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit11,
+ {
+ "Bit11", "skinny.PhoneFeatures.Bit11", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0400,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit12,
+ {
+ "Bit12", "skinny.PhoneFeatures.Bit12", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0800,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit13,
+ {
+ "Bit13", "skinny.PhoneFeatures.Bit13", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x1000,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit14,
+ {
+ "Bit14", "skinny.PhoneFeatures.Bit14", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x2000,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit15,
+ {
+ "Bit15", "skinny.PhoneFeatures.Bit15", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x4000,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit2,
+ {
+ "Bit2", "skinny.PhoneFeatures.Bit2", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0002,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit3,
+ {
+ "Bit3", "skinny.PhoneFeatures.Bit3", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0004,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit4,
+ {
+ "Bit4", "skinny.PhoneFeatures.Bit4", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0008,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit6,
+ {
+ "Bit6", "skinny.PhoneFeatures.Bit6", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0020,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit7,
+ {
+ "Bit7", "skinny.PhoneFeatures.Bit7", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0040,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_Bit9,
+ {
+ "Bit9", "skinny.PhoneFeatures.Bit9", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_DynamicMessages,
+ {
+ "DynamicMessages", "skinny.PhoneFeatures.DynamicMessages", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_RFC2833,
+ {
+ "RFC2833", "skinny.PhoneFeatures.RFC2833", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0200,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_PhoneFeatures_UTF8,
+ {
+ "UTF8Bit5", "skinny.PhoneFeatures.UTF8", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0010,
+ "Features this device supports", HFILL }},
+ { &hf_skinny_RFC2833PayloadType,
+ {
+ "RFC2833PayloadType", "skinny.RFC2833PayloadType", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_RTCPPortNumber,
+ {
+ "RTCPPortNumber", "skinny.RTCPPortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_RTPPayloadFormat,
+ {
+ "RTPPayloadFormat", "skinny.RTPPayloadFormat", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_BitsReserved,
+ {
+ "BitsReserved", "skinny.RestrictInformationType.BitsReserved", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0xffffff00,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CalledParty,
+ {
+ "CalledParty", "skinny.RestrictInformationType.CalledParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x000c,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CalledPartyName,
+ {
+ "CalledPartyName", "skinny.RestrictInformationType.CalledPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0004,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CalledPartyNumber,
+ {
+ "CalledPartyNumber", "skinny.RestrictInformationType.CalledPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0008,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CallingParty,
+ {
+ "CallingParty", "skinny.RestrictInformationType.CallingParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0003,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CallingPartyName,
+ {
+ "CallingPartyName", "skinny.RestrictInformationType.CallingPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0001,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_CallingPartyNumber,
+ {
+ "CallingPartyNumber", "skinny.RestrictInformationType.CallingPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0002,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_LastRedirectParty,
+ {
+ "LastRedirectParty", "skinny.RestrictInformationType.LastRedirectParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00c0,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_LastRedirectPartyName,
+ {
+ "LastRedirectPartyName", "skinny.RestrictInformationType.LastRedirectPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0040,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_LastRedirectPartyNumber,
+ {
+ "LastRedirectPartyNumber", "skinny.RestrictInformationType.LastRedirectPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0080,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_OriginalCalledParty,
+ {
+ "OriginalCalledParty", "skinny.RestrictInformationType.OriginalCalledParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0030,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_OriginalCalledPartyName,
+ {
+ "OriginalCalledPartyName", "skinny.RestrictInformationType.OriginalCalledPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0010,
+ NULL, HFILL }},
+ { &hf_skinny_RestrictInformationType_OriginalCalledPartyNumber,
+ {
+ "OriginalCalledPartyNumber", "skinny.RestrictInformationType.OriginalCalledPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0020,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey1,
+ {
+ "SoftKey1", "skinny.SoftKeyMask.SoftKey1", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0001,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey10,
+ {
+ "SoftKey10", "skinny.SoftKeyMask.SoftKey10", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0200,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey11,
+ {
+ "SoftKey11", "skinny.SoftKeyMask.SoftKey11", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0400,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey12,
+ {
+ "SoftKey12", "skinny.SoftKeyMask.SoftKey12", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0800,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey13,
+ {
+ "SoftKey13", "skinny.SoftKeyMask.SoftKey13", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x1000,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey14,
+ {
+ "SoftKey14", "skinny.SoftKeyMask.SoftKey14", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x2000,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey15,
+ {
+ "SoftKey15", "skinny.SoftKeyMask.SoftKey15", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x4000,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey16,
+ {
+ "SoftKey16", "skinny.SoftKeyMask.SoftKey16", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x8000,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey2,
+ {
+ "SoftKey2", "skinny.SoftKeyMask.SoftKey2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0002,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey3,
+ {
+ "SoftKey3", "skinny.SoftKeyMask.SoftKey3", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0004,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey4,
+ {
+ "SoftKey4", "skinny.SoftKeyMask.SoftKey4", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0008,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey5,
+ {
+ "SoftKey5", "skinny.SoftKeyMask.SoftKey5", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0010,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey6,
+ {
+ "SoftKey6", "skinny.SoftKeyMask.SoftKey6", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0020,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey7,
+ {
+ "SoftKey7", "skinny.SoftKeyMask.SoftKey7", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0040,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey8,
+ {
+ "SoftKey8", "skinny.SoftKeyMask.SoftKey8", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0080,
+ NULL, HFILL }},
+ { &hf_skinny_SoftKeyMask_SoftKey9,
+ {
+ "SoftKey9", "skinny.SoftKeyMask.SoftKey9", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0100,
+ NULL, HFILL }},
+ { &hf_skinny_Unknown,
+ {
+ "Unknown", "skinny.Unknown", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_active,
+ {
+ "active", "skinny.active", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_activeConferenceOnRegistration,
+ {
+ "Active Conference", "skinny.activeConferenceOnRegistration", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Active conference at Registration", HFILL }},
+ { &hf_skinny_activeConferences,
+ {
+ "Active Conferences", "skinny.activeConferences", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Active Conferences at Registration", HFILL }},
+ { &hf_skinny_activeForward,
+ {
+ "activeForward", "skinny.activeForward", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_activeStreams,
+ {
+ "Active RTP Streams", "skinny.activeStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Active RTP Streams at Registration", HFILL }},
+ { &hf_skinny_activeStreamsOnRegistration,
+ {
+ "activeStreamsOnRegistration", "skinny.activeStreamsOnRegistration", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_alarmInfo,
+ {
+ "alarmInfo", "skinny.alarmInfo", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_alignmentPadding,
+ {
+ "alignmentPadding", "skinny.alignmentPadding", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_annexNandWFutureUse,
+ {
+ "annexNandWFutureUse", "skinny.annexNandWFutureUse", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_appID,
+ {
+ "appID", "skinny.appID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_appInstanceID,
+ {
+ "appInstanceID", "skinny.appInstanceID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_applicationID,
+ {
+ "applicationID", "skinny.applicationID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_areMessagesWaiting,
+ {
+ "areMessagesWaiting", "skinny.areMessagesWaiting", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_associatedStreamID,
+ {
+ "associatedStreamID", "skinny.associatedStreamID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_audioCapCount,
+ {
+ "audioCapCount", "skinny.audioCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_audioLevelAdjustment,
+ {
+ "audioLevelAdjustment", "skinny.audioLevelAdjustment", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_averageBitRate,
+ {
+ "averageBitRate", "skinny.averageBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_bandwidth,
+ {
+ "bandwidth", "skinny.bandwidth", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_bitRate,
+ {
+ "bitRate", "skinny.bitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_burstSize,
+ {
+ "burstSize", "skinny.burstSize", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_busyTrigger,
+ {
+ "busyTrigger", "skinny.busyTrigger", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_buttonCount,
+ {
+ "buttonCount", "skinny.buttonCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_buttonOffset,
+ {
+ "buttonOffset", "skinny.buttonOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_callInstance,
+ {
+ "callInstance", "skinny.callInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "CallId", HFILL }},
+ { &hf_skinny_callReference,
+ {
+ "callReference", "skinny.callReference", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "CallId", HFILL }},
+ { &hf_skinny_callSelectStat,
+ {
+ "callSelectStat", "skinny.callSelectStat", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_capAndVer,
+ {
+ "capAndVer", "skinny.capAndVer", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_capCount,
+ {
+ "capCount", "skinny.capCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_chan0MaxPayload,
+ {
+ "chan0MaxPayload", "skinny.chan0MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_chan2MaxPayload,
+ {
+ "chan2MaxPayload", "skinny.chan2MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_chan2MaxWindow,
+ {
+ "chan2MaxWindow", "skinny.chan2MaxWindow", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_chan3MaxPayload,
+ {
+ "chan3MaxPayload", "skinny.chan3MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_clockConversionCode,
+ {
+ "clockConversionCode", "skinny.clockConversionCode", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_clockDivisor,
+ {
+ "clockDivisor", "skinny.clockDivisor", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_codecMode,
+ {
+ "codecMode", "skinny.codecMode", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_codecParam1,
+ {
+ "codecParam1", "skinny.codecParam1", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_codecParam2,
+ {
+ "codecParam2", "skinny.codecParam2", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_confServiceNum,
+ {
+ "confServiceNum", "skinny.confServiceNum", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_conferenceID,
+ {
+ "conferenceID", "skinny.conferenceID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Conference ID", HFILL }},
+ { &hf_skinny_confirmRequired,
+ {
+ "confirmRequired", "skinny.confirmRequired", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_country,
+ {
+ "country", "skinny.country", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_customMaxBRandCPB,
+ {
+ "customMaxBRandCPB", "skinny.customMaxBRandCPB", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_customMaxDPB,
+ {
+ "customMaxDPB", "skinny.customMaxDPB", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_customMaxFS,
+ {
+ "customMaxFS", "skinny.customMaxFS", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_customMaxMBPS,
+ {
+ "customMaxMBPS", "skinny.customMaxMBPS", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_customPictureFormatCount,
+ {
+ "customPictureFormatCount", "skinny.customPictureFormatCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_dataCapCount,
+ {
+ "dataCapCount", "skinny.dataCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_dataLength,
+ {
+ "dataLength", "skinny.dataLength", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_dataSize,
+ {
+ "dataSize", "skinny.dataSize", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Data Size", HFILL }},
+ { &hf_skinny_defendingPriority,
+ {
+ "defendingPriority", "skinny.defendingPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_displayPriority,
+ {
+ "displayPriority", "skinny.displayPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_dtmfType,
+ {
+ "dtmfType", "skinny.dtmfType", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_dynamicPayload,
+ {
+ "dynamicPayload", "skinny.dynamicPayload", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_failureNodeIpAddr,
+ {
+ "failureNodeIpAddr", "skinny.failureNodeIpAddr", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_featureCapabilities,
+ {
+ "featureCapabilities", "skinny.featureCapabilities", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_featureIndex,
+ {
+ "featureIndex", "skinny.featureIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_featureStatus,
+ {
+ "featureStatus", "skinny.featureStatus", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_features,
+ {
+ "features", "skinny.features", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_firstGOB,
+ {
+ "firstGOB", "skinny.firstGOB", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
{ &hf_skinny_firstMB,
- { "First MB", "skinny.firstMB",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
+ {
+ "firstMB", "skinny.firstMB", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_format,
+ {
+ "format", "skinny.format", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_forwardAllActive,
+ {
+ "forwardAllActive", "skinny.forwardAllActive", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_forwardBusyActive,
+ {
+ "forwardBusyActive", "skinny.forwardBusyActive", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_forwardNoAnswerActive,
+ {
+ "forwardNoAnswerActive", "skinny.forwardNoAnswerActive", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_hearingConfPartyMask,
+ {
+ "hearingConfPartyMask", "skinny.hearingConfPartyMask", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_instance,
+ {
+ "instance", "skinny.instance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Device Instance", HFILL }},
+ { &hf_skinny_instanceNumber,
+ {
+ "instanceNumber", "skinny.instanceNumber", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_ipAddr_ipv4,
+ {
+ "ipAddr IPv4 Address", "skinny.ipAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_ipAddr_ipv6,
+ {
+ "ipAddr IPv6 Address", "skinny.ipAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_ipV4AddressScope,
+ {
+ "ipV4AddressScope", "skinny.ipV4AddressScope", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "IPv4 Address Scope", HFILL }},
+ { &hf_skinny_ipV6AddressScope,
+ {
+ "ipV6AddressScope", "skinny.ipV6AddressScope", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "IPv6 Address Scope", HFILL }},
+ { &hf_skinny_isConferenceCreator,
+ {
+ "isConferenceCreator", "skinny.isConferenceCreator", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_isMKIPresent,
+ {
+ "isMKIPresent", "skinny.isMKIPresent", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_jitter,
+ {
+ "jitter", "skinny.jitter", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Amount of Jitter", HFILL }},
+ { &hf_skinny_keepAliveInterval,
+ {
+ "keepAliveInterval", "skinny.keepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_key,
+ {
+ "key", "skinny.key", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_keyDerivationRate,
+ {
+ "keyDerivationRate", "skinny.keyDerivationRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_keylen,
+ {
+ "keylen", "skinny.keylen", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_last,
+ {
+ "last", "skinny.last", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_lastRedirectingReason,
+ {
+ "lastRedirectingReason", "skinny.lastRedirectingReason", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Last Redirecting Reason", HFILL }},
+ { &hf_skinny_latency,
+ {
+ "latency", "skinny.latency", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Amount of Latency", HFILL }},
+ { &hf_skinny_layoutCount,
+ {
+ "layoutCount", "skinny.layoutCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_layoutID,
+ {
+ "layoutID", "skinny.layoutID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_level,
+ {
+ "level", "skinny.level", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_levelPreferenceCount,
+ {
+ "levelPreferenceCount", "skinny.levelPreferenceCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_lineDataEntries,
+ {
+ "lineDataEntries", "skinny.lineDataEntries", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Line Data Entries", HFILL }},
+ { &hf_skinny_lineDisplayOptions,
+ {
+ "lineDisplayOptions", "skinny.lineDisplayOptions", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_lineInstance,
+ {
+ "lineInstance", "skinny.lineInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "LineId", HFILL }},
+ { &hf_skinny_lineNumber,
+ {
+ "lineNumber", "skinny.lineNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_locale,
+ {
+ "locale", "skinny.locale", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_longTermPictureIndex,
+ {
+ "longTermPictureIndex", "skinny.longTermPictureIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_macAddress,
+ {
+ "Mac Address", "skinny.macAddress", FT_ETHER, BASE_NONE, NULL, 0x0,
+ "Ethernet/Mac Address", HFILL }},
+ { &hf_skinny_matrixConfPartyID,
+ {
+ "matrixConfPartyID", "skinny.matrixConfPartyID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxBW,
+ {
+ "maxBW", "skinny.maxBW", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxBitRate,
+ {
+ "maxBitRate", "skinny.maxBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxConferences,
+ {
+ "Maximum Number of Concurrent Conferences", "skinny.maxConferences", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Indicates the maximum number of simultansous Conferences, which this client/appliance can handle", HFILL }},
+ { &hf_skinny_maxFramesPerPacket,
+ {
+ "maxFramesPerPacket", "skinny.maxFramesPerPacket", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxNumCalls,
+ {
+ "maxNumCalls", "skinny.maxNumCalls", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxNumOfAvailLines,
+ {
+ "maxNumOfAvailLines", "skinny.maxNumOfAvailLines", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxNumberOfLines,
+ {
+ "maxNumberOfLines", "skinny.maxNumberOfLines", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Maximum number of lines", HFILL }},
+ { &hf_skinny_maxProtocolVer,
+ {
+ "maxProtocolVer", "skinny.maxProtocolVer", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxRetryNumber,
+ {
+ "maxRetryNumber", "skinny.maxRetryNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maxStreams,
+ {
+ "Maximum Number of Concurrent RTP Streams", "skinny.maxStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Indicates the maximum number of simultansous RTP duplex streams, which this client/appliance can handle.", HFILL }},
+ { &hf_skinny_maxStreamsPerConf,
+ {
+ "maxStreamsPerConf", "skinny.maxStreamsPerConf", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_maximumBitRate,
+ {
+ "maximumBitRate", "skinny.maximumBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_millisecondPacketSize,
+ {
+ "millisecondPacketSize", "skinny.millisecondPacketSize", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_minBitRate,
+ {
+ "minBitRate", "skinny.minBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_mixingMode,
+ {
+ "mixingMode", "skinny.mixingMode", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_modAnd2833,
+ {
+ "modAnd2833", "skinny.modAnd2833", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_modelNumber,
+ {
+ "modelNumber", "skinny.modelNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_multicastIpAddr_ipv4,
+ {
+ "multicastIpAddr IPv4 Address", "skinny.multicastIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_multicastIpAddr_ipv6,
+ {
+ "multicastIpAddr IPv6 Address", "skinny.multicastIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_multicastPortNumber,
+ {
+ "multicastPortNumber", "skinny.multicastPortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_noaudio,
+ {
+ "noaudio", "skinny.noaudio", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_none,
+ {
+ "none", "skinny.none", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_nse,
+ {
+ "nse", "skinny.nse", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numNewMsgs,
+ {
+ "numNewMsgs", "skinny.numNewMsgs", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numOldMsgs,
+ {
+ "numOldMsgs", "skinny.numOldMsgs", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOctetsReceived,
+ {
+ "numberOctetsReceived", "skinny.numberOctetsReceived", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Octets Received", HFILL }},
+ { &hf_skinny_numberOctetsSent,
+ {
+ "numberOctetsSent", "skinny.numberOctetsSent", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Octets Sent", HFILL }},
+ { &hf_skinny_numberOfActiveParticipants,
+ {
+ "numberOfActiveParticipants", "skinny.numberOfActiveParticipants", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfEntries,
+ {
+ "numberOfEntries", "skinny.numberOfEntries", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfGOBs,
+ {
+ "numberOfGOBs", "skinny.numberOfGOBs", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfInServiceStreams,
+ {
+ "numberOfInServiceStreams", "skinny.numberOfInServiceStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfLines,
+ {
+ "numberOfLines", "skinny.numberOfLines", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
{ &hf_skinny_numberOfMBs,
- { "Number of MBs", "skinny.numberOfMBs",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
+ {
+ "numberOfMBs", "skinny.numberOfMBs", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfOutOfServiceStreams,
+ {
+ "numberOfOutOfServiceStreams", "skinny.numberOfOutOfServiceStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfReservedParticipants,
+ {
+ "numberOfReservedParticipants", "skinny.numberOfReservedParticipants", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberOfSpeedDials,
+ {
+ "numberOfSpeedDials", "skinny.numberOfSpeedDials", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_numberPacketsLost,
+ {
+ "numberPacketsLost", "skinny.numberPacketsLost", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Packets Lost", HFILL }},
+ { &hf_skinny_numberPacketsReceived,
+ {
+ "numberPacketsReceived", "skinny.numberPacketsReceived", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Packets Received", HFILL }},
+ { &hf_skinny_numberPacketsSent,
+ {
+ "numberPacketsSent", "skinny.numberPacketsSent", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of Packets Sent", HFILL }},
+ { &hf_skinny_originalCdpnRedirectReason,
+ {
+ "originalCdpnRedirectReason", "skinny.originalCdpnRedirectReason", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Original Called Party Redirect Reason", HFILL }},
+ { &hf_skinny_parm1,
+ {
+ "parm1", "skinny.parm1", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_parm2,
+ {
+ "parm2", "skinny.parm2", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_participantEntry,
+ {
+ "participantEntry", "skinny.participantEntry", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_partyDirection,
+ {
+ "partyDirection", "skinny.partyDirection", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_passThruPartyID,
+ {
+ "passThruPartyID", "skinny.passThruPartyID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "PassThrough PartyId", HFILL }},
+ { &hf_skinny_passthruPartyID,
+ {
+ "passthruPartyID", "skinny.passthruPartyID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_payloadDtmf,
+ {
+ "payloadDtmf", "skinny.payloadDtmf", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_payloadType,
+ {
+ "payloadType", "skinny.payloadType", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_payload_rfc_number,
+ {
+ "payload_rfc_number", "skinny.payload.rfc.number", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_peakRate,
+ {
+ "peakRate", "skinny.peakRate", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_pictureFormatCount,
+ {
+ "pictureFormatCount", "skinny.pictureFormatCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_pictureHeight,
+ {
+ "pictureHeight", "skinny.pictureHeight", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
{ &hf_skinny_pictureNumber,
- { "Picture number", "skinny.pictureNumber",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_longTermPictureIndex,
- { "Long-term picture index", "skinny.longTermPictureIndex",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
+ {
+ "pictureNumber", "skinny.pictureNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_pictureWidth,
+ {
+ "pictureWidth", "skinny.pictureWidth", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_pixelAspectRatio,
+ {
+ "pixelAspectRatio", "skinny.pixelAspectRatio", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_portNumber,
+ {
+ "portNumber", "skinny.portNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_precedenceDm,
+ {
+ "precedenceDm", "skinny.precedenceDm", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_precedenceLv,
+ {
+ "precedenceLv", "skinny.precedenceLv", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_precedenceValue,
+ {
+ "precedenceValue", "skinny.precedenceValue", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_preemptionPriority,
+ {
+ "preemptionPriority", "skinny.preemptionPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_priority,
+ {
+ "priority", "skinny.priority", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_profile,
+ {
+ "profile", "skinny.profile", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_protocolDependentData,
+ {
+ "protocolDependentData", "skinny.protocolDependentData", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_protocolVer,
+ {
+ "Protocol Version", "skinny.protocolVer", FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Maximum Supported Protocol Version", HFILL }},
{ &hf_skinny_recoveryReferencePictureCount,
- { "Recovery-reference picture count", "skinny.recoveryReferencePictureCount",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_lastRedirectingPartyName,
- { "Last redirecting party name", "skinny.lastRedirectingPartyName",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_lastRedirectingParty,
- { "Last redirecting party", "skinny.lastRedirectingParty",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_cgpnVoiceMailbox,
- { "Calling party voice mailbox", "skinny.cgpnVoiceMailbox",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_cdpnVoiceMailbox,
- { "Called party voice mailbox", "skinny.cdpnVoiceMailbox",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_originalCdpnVoiceMailbox,
- { "Original called party voice mailbox", "skinny.originalCdpnVoiceMailbox",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_lastRedirectingVoiceMailbox,
- { "Last redirecting voice mailbox", "skinny.lastRedirectingVoiceMailbox",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_originalCdpnRedirectReason,
- { "Original called party redirect reason", "skinny.originalCdpnRedirectReason",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_lastRedirectingReason,
- { "Last redirecting reason", "skinny.lastRedirectingReason",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_callInstance,
- { "Call instance", "skinny.callInstance",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_callSecurityStatus,
- { "Call security status", "skinny.callSecurityStatus",
- FT_UINT32, BASE_DEC, VALS(skinny_callSecurityStatusTypes), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_accessory,
- { "Phone accessories", "skinny.accessories",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_accessories_ext, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_accessoryState,
- { "Phone accessory state", "skinny.accessoryState",
- FT_UINT32, BASE_DEC|BASE_EXT_STRING, &skinny_accessoryStates_ext, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_CallingPartyName,
- { "RestrictCallingPartyName", "skinny.partyPIRestrictionBits.CallingPartyName",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x01,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_CallingPartyNumber,
- { "RestrictCallingPartyNumber", "skinny.partyPIRestrictionBits.CallingPartyNumber",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x02,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_CalledPartyName,
- { "RestrictCalledPartyName", "skinny.partyPIRestrictionBits.CalledPartyName",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x04,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_CalledPartyNumber,
- { "RestrictCalledPartyNumber", "skinny.partyPIRestrictionBits.CalledPartyNumber",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x08,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_OriginalCalledPartyName,
- { "RestrictOriginalCalledPartyName", "skinny.partyPIRestrictionBits.OriginalCalledPartyName",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x10,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_OriginalCalledPartyNumber,
- { "RestrictOriginalCalledPartyNumber", "skinny.partyPIRestrictionBits.OriginalCalledPartyNumber",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x20,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_LastRedirectPartyName,
- { "RestrictLastRedirectPartyName", "skinny.partyPIRestrictionBits.LastRedirectPartyName",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x40,
- NULL, HFILL }
- },
-
- { &hf_skinny_partyPIRestrictionBits_LastRedirectPartyNumber,
- { "RestrictLastRedirectPartyNumber", "skinny.partyPIRestrictionBits.LastRedirectPartyNumber",
- FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x80,
- NULL, HFILL }
- },
-
- { &hf_skinny_directoryIndex,
- { "Directory index", "skinny.directoryIndex",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_directoryPhoneNumber,
- { "Directory phone number", "skinny.directoryPhoneNumber",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_qualityStats,
- { "Quality Statistics", "skinny.qualityStats",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_speedDialStatus,
- { "Speeddial Status", "skinny.speedDialStatus",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
-
- { &hf_skinny_speedDialType,
- { "Speeddial Type", "skinny.speedDialType",
- FT_UINT32, BASE_DEC, VALS(buttonDefinitions), 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_startMediaTransmissionStatus,
- { "Start MediaTransmission Status Type", "skinny.startMediaTransmissionStatus",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
- { &hf_skinny_startMultiMediaTransmissionStatus,
- { "Start MultiMediaTransmission Status Type", "skinny.startMultiMediaTransmissionStatus",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL }
- },
-
-
+ {
+ "recoveryReferencePictureCount", "skinny.recoveryReferencePictureCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_remoteIpAddr_ipv4,
+ {
+ "remoteIpAddr IPv4 Address", "skinny.remoteIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_remoteIpAddr_ipv6,
+ {
+ "remoteIpAddr IPv6 Address", "skinny.remoteIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_remotePortNumber,
+ {
+ "remotePortNumber", "skinny.remotePortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_reserved_for_future_use,
+ {
+ "reserved_for_future_use", "skinny.reserved.for.future.use", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "User Id", HFILL }},
+ { &hf_skinny_retryTimer,
+ {
+ "retryTimer", "skinny.retryTimer", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_rfc2833,
+ {
+ "rfc2833", "skinny.rfc2833", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_routingID,
+ {
+ "routingID", "skinny.routingID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_rsvpErrorFlag,
+ {
+ "rsvpErrorFlag", "skinny.rsvpErrorFlag", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_rsvpErrorSubCodeVal,
+ {
+ "rsvpErrorSubCodeVal", "skinny.rsvpErrorSubCodeVal", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_rtpMediaPort,
+ {
+ "rtpMediaPort", "skinny.rtpMediaPort", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "RTP Media Port", HFILL }},
+ { &hf_skinny_salt,
+ {
+ "salt", "skinny.salt", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_saltlen,
+ {
+ "saltlen", "skinny.saltlen", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_secondaryKeepAliveInterval,
+ {
+ "secondaryKeepAliveInterval", "skinny.secondaryKeepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_serverInstance,
+ {
+ "serverInstance", "skinny.serverInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Server Instance", HFILL }},
+ { &hf_skinny_serverTcpListenPort,
+ {
+ "serverTcpListenPort", "skinny.serverTcpListenPort", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_serviceNum,
+ {
+ "serviceNum", "skinny.serviceNum", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_serviceNumber,
+ {
+ "serviceNumber", "skinny.serviceNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_serviceResourceCount,
+ {
+ "serviceResourceCount", "skinny.serviceResourceCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_serviceURLIndex,
+ {
+ "serviceURLIndex", "skinny.serviceURLIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_softKeyCount,
+ {
+ "softKeyCount", "skinny.softKeyCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_softKeyOffset,
+ {
+ "softKeyOffset", "skinny.softKeyOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_softKeySetCount,
+ {
+ "softKeySetCount", "skinny.softKeySetCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_softKeySetOffset,
+ {
+ "softKeySetOffset", "skinny.softKeySetOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_sourceIpAddr_ipv4,
+ {
+ "sourceIpAddr IPv4 Address", "skinny.sourceIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_sourceIpAddr_ipv6,
+ {
+ "sourceIpAddr IPv6 Address", "skinny.sourceIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_sourcePortNumber,
+ {
+ "sourcePortNumber", "skinny.sourcePortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_speedDialNumber,
+ {
+ "speedDialNumber", "skinny.speedDialNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_sse,
+ {
+ "sse", "skinny.sse", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_standard,
+ {
+ "standard", "skinny.standard", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_startingLineInstance,
+ {
+ "startingLineInstance", "skinny.startingLineInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Starting Line Instance", HFILL }},
+ { &hf_skinny_stationIpAddr,
+ {
+ "stationIpAddr", "skinny.stationIpAddr", FT_IPv4, BASE_NONE, NULL, 0x0,
+ "IPv4 Address", HFILL }},
+ { &hf_skinny_stationIpAddr_ipv4,
+ {
+ "stationIpAddr IPv4 Address", "skinny.stationIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_stationIpAddr_ipv6,
+ {
+ "stationIpAddr IPv6 Address", "skinny.stationIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_stationIpV6Addr,
+ {
+ "stationIpV6Addr", "skinny.stationIpV6Addr", FT_IPv6, BASE_NONE, NULL, 0x0,
+ "IPv5 Address", HFILL }},
+ { &hf_skinny_stationIpV6Addr_ipv4,
+ {
+ "stationIpV6Addr IPv4 Address", "skinny.stationIpV6Addr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_stationIpV6Addr_ipv6,
+ {
+ "stationIpV6Addr IPv6 Address", "skinny.stationIpV6Addr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_stillImageTransmission,
+ {
+ "stillImageTransmission", "skinny.stillImageTransmission", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Still Image Transmission", HFILL }},
+ { &hf_skinny_stimulusInstance,
+ {
+ "stimulusInstance", "skinny.stimulusInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_stimulusStatus,
+ {
+ "stimulusStatus", "skinny.stimulusStatus", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Stimulus Status", HFILL }},
+ { &hf_skinny_streamPassThroughID,
+ {
+ "streamPassThroughID", "skinny.streamPassThroughID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_systemTime,
+ {
+ "systemTime", "skinny.systemTime", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_temporalSpatialTradeOff,
+ {
+ "temporalSpatialTradeOff", "skinny.temporalSpatialTradeOff", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_temporalSpatialTradeOffCapability,
+ {
+ "temporalSpatialTradeOffCapability", "skinny.temporalSpatialTradeOffCapability", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Temporal spatial trade off capability", HFILL }},
+ { &hf_skinny_timeOutValue,
+ {
+ "timeOutValue", "skinny.timeOutValue", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_timer,
+ {
+ "timer", "skinny.timer", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_totalButtonCount,
+ {
+ "totalButtonCount", "skinny.totalButtonCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_totalNumOfConfiguredLines,
+ {
+ "totalNumOfConfiguredLines", "skinny.totalNumOfConfiguredLines", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Total Number of Configured Lines", HFILL }},
+ { &hf_skinny_totalSoftKeyCount,
+ {
+ "totalSoftKeyCount", "skinny.totalSoftKeyCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_totalSoftKeySetCount,
+ {
+ "totalSoftKeySetCount", "skinny.totalSoftKeySetCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_transactionID,
+ {
+ "transactionID", "skinny.transactionID", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_transmitIpAddr_ipv4,
+ {
+ "transmitIpAddr IPv4 Address", "skinny.transmitIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_transmitIpAddr_ipv6,
+ {
+ "transmitIpAddr IPv6 Address", "skinny.transmitIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
+ "ipaddress in big endian", HFILL }},
+ { &hf_skinny_transmitPort,
+ {
+ "transmitPort", "skinny.transmitPort", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_transmitPreference,
+ {
+ "transmitPreference", "skinny.transmitPreference", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_unknown2,
+ {
+ "unknown2", "skinny.unknown2", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "unknown", HFILL }},
+ { &hf_skinny_v150sprt,
+ {
+ "v150sprt", "skinny.v150sprt", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_vendor,
+ {
+ "vendor", "skinny.vendor", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_videoCapCount,
+ {
+ "videoCapCount", "skinny.videoCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wDay,
+ {
+ "wDay", "skinny.wDay", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wDayOfWeek,
+ {
+ "wDayOfWeek", "skinny.wDayOfWeek", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wHour,
+ {
+ "wHour", "skinny.wHour", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wMilliseconds,
+ {
+ "wMilliseconds", "skinny.wMilliseconds", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wMinute,
+ {
+ "wMinute", "skinny.wMinute", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wMonth,
+ {
+ "wMonth", "skinny.wMonth", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wSecond,
+ {
+ "wSecond", "skinny.wSecond", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_wYear,
+ {
+ "wYear", "skinny.wYear", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_waitTimeBeforeNextReq,
+ {
+ "waitTimeBeforeNextReq", "skinny.waitTimeBeforeNextReq", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_AlternateCallingParty,
+ {
+ "AlternateCallingParty", "skinny.AlternateCallingParty", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Alternate Calling Party Number", HFILL }},
+ {&hf_skinny_DeviceName,
+ {
+ "DeviceName", "skinny.DeviceName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Device Name", HFILL }},
+ {&hf_skinny_HuntPilotName,
+ {
+ "HuntPilotName", "skinny.HuntPilotName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_HuntPilotNumber,
+ {
+ "HuntPilotNumber", "skinny.HuntPilotNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ServerName,
+ {
+ "ServerName", "skinny.ServerName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_add_participant_result,
+ {
+ "add_participant_result", "skinny.add.participant.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AddParticipantResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_alarmSeverity,
+ {
+ "alarmSeverity", "skinny.alarmSeverity", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceAlarmSeverity_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_algorithmID,
+ {
+ "algorithmID", "skinny.algorithmID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaEncryptionAlgorithmType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_annAckReq,
+ {
+ "annAckReq", "skinny.annAckReq", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &EndOfAnnAck_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_annPlayMode,
+ {
+ "annPlayMode", "skinny.annPlayMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AnnPlayMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_annStatus,
+ {
+ "annStatus", "skinny.annStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &PlayAnnStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_appConfID,
+ {
+ "appConfID", "skinny.appConfID", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_appData,
+ {
+ "appData", "skinny.appData", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_appName,
+ {
+ "appName", "skinny.appName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_audit_participant_result,
+ {
+ "audit_participant_result", "skinny.audit.participant.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AuditParticipantResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_bridgeParticipantId,
+ {
+ "bridgeParticipantId", "skinny.bridgeParticipantId", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_buttonDefinition,
+ {
+ "buttonDefinition", "skinny.buttonDefinition", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &ButtonType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_callHistoryDisposition,
+ {
+ "callHistoryDisposition", "skinny.callHistoryDisposition", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallHistoryDisposition_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_callSecurityStatus,
+ {
+ "callSecurityStatus", "skinny.callSecurityStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallSecurityStatusType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_callState,
+ {
+ "callState", "skinny.callState", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DCallState_ext, 0x0,
+ "CallState", HFILL }},
+ {&hf_skinny_callType,
+ {
+ "callType", "skinny.callType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_calledParty,
+ {
+ "calledParty", "skinny.calledParty", FT_STRING, BASE_NONE, NULL, 0x0,
+ "CalledPartyNumber", HFILL }},
+ {&hf_skinny_calledPartyName,
+ {
+ "calledPartyName", "skinny.calledPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Called Party Name", HFILL }},
+ {&hf_skinny_callingParty,
+ {
+ "callingParty", "skinny.callingParty", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Calling Party Number", HFILL }},
+ {&hf_skinny_callingPartyName,
+ {
+ "callingPartyName", "skinny.callingPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Calling Party Name", HFILL }},
+ {&hf_skinny_callingPartyNumber,
+ {
+ "callingPartyNumber", "skinny.callingPartyNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Calling Party Number", HFILL }},
+ {&hf_skinny_cause,
+ {
+ "cause", "skinny.cause", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SubscribeCause_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_cdpnVoiceMailbox,
+ {
+ "cdpnVoiceMailbox", "skinny.cdpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Called Party Voicemail Box Number", HFILL }},
+ {&hf_skinny_cgpnVoiceMailbox,
+ {
+ "cgpnVoiceMailbox", "skinny.cgpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Calling Party Voicemail Box Number", HFILL }},
+ {&hf_skinny_command,
+ {
+ "command", "skinny.command", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MiscCommandType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_compressionType,
+ {
+ "compressionType", "skinny.compressionType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_PayloadType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_conferenceName,
+ {
+ "conferenceName", "skinny.conferenceName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_data,
+ {
+ "Statistics", "skinny.data", FT_STRING, BASE_NONE, NULL, 0x0,
+ "variable field size (max: 600]", HFILL }},
+ {&hf_skinny_dataCapabilityDirection,
+ {
+ "dataCapabilityDirection", "skinny.dataCapabilityDirection", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &TransmitOrReceive_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_dateTemplate,
+ {
+ "dateTemplate", "skinny.dateTemplate", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_delete_conf_result,
+ {
+ "delete_conf_result", "skinny.delete.conf.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeleteConfResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_deviceType,
+ {
+ "Device Type", "skinny.deviceType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceType_ext, 0x0,
+ "Device Type of this phone / appliance", HFILL }},
+ {&hf_skinny_dialedNumber,
+ {
+ "dialedNumber", "skinny.dialedNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_direction,
+ {
+ "direction", "skinny.direction", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RSVPDirection_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_directoryNum,
+ {
+ "directoryNum", "skinny.directoryNum", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Directory Number", HFILL }},
+ {&hf_skinny_ecValue,
+ {
+ "ecValue", "skinny.ecValue", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_EchoCancellation_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_encryptionCapability,
+ {
+ "encryptionCapability", "skinny.encryptionCapability", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_Encryption_Capability_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_errorCode,
+ {
+ "errorCode", "skinny.errorCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &QoSErrorCode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_featureID,
+ {
+ "featureID", "skinny.featureID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SubscriptionFeatureID_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_featureTextLabel,
+ {
+ "featureTextLabel", "skinny.featureTextLabel", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_firmwareLoadName,
+ {
+ "firmwareLoadName", "skinny.firmwareLoadName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Firmware Load Name", HFILL }},
+ {&hf_skinny_forwardAllDirnum,
+ {
+ "forwardAllDirnum", "skinny.forwardAllDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_forwardBusyDirnum,
+ {
+ "forwardBusyDirnum", "skinny.forwardBusyDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_forwardNoAnswerlDirnum,
+ {
+ "forwardNoAnswerlDirnum", "skinny.forwardNoAnswerlDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_g723BitRate,
+ {
+ "g723BitRate", "skinny.g723BitRate", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_G723BitRate_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_headsetStatus,
+ {
+ "headsetStatus", "skinny.headsetStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &HeadsetMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ipAddressType,
+ {
+ "ipAddressType", "skinny.ipAddressType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ipAddressingMode,
+ {
+ "ipAddressingMode", "skinny.ipAddressingMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_kpButton,
+ {
+ "kpButton", "skinny.kpButton", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &KeyPadButton_ext, 0x0,
+ "KeyPad Button which was Pressed", HFILL }},
+ {&hf_skinny_lampMode,
+ {
+ "lampMode", "skinny.lampMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &LampMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_lastRedirectingParty,
+ {
+ "lastRedirectingParty", "skinny.lastRedirectingParty", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Last Redirecting Party Number", HFILL }},
+ {&hf_skinny_lastRedirectingPartyName,
+ {
+ "lastRedirectingPartyName", "skinny.lastRedirectingPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Last Redirecting Party Name", HFILL }},
+ {&hf_skinny_lastRedirectingVoiceMailbox,
+ {
+ "lastRedirectingVoiceMailbox", "skinny.lastRedirectingVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Last Redirecting Parties Voicemail Box Number", HFILL }},
+ {&hf_skinny_layouts,
+ {
+ "layouts", "skinny.layouts", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Layout_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_lineDirNumber,
+ {
+ "lineDirNumber", "skinny.lineDirNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_lineFullyQualifiedDisplayName,
+ {
+ "lineFullyQualifiedDisplayName", "skinny.lineFullyQualifiedDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_lineTextLabel,
+ {
+ "lineTextLabel", "skinny.lineTextLabel", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mediaPathCapabilities,
+ {
+ "mediaPathCapabilities", "skinny.mediaPathCapabilities", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathCapabilities_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mediaPathEvent,
+ {
+ "mediaPathEvent", "skinny.mediaPathEvent", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathEvent_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mediaPathID,
+ {
+ "mediaPathID", "skinny.mediaPathID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathID_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mediaTransportType,
+ {
+ "mediaTransportType", "skinny.mediaTransportType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaTransportType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mediaType,
+ {
+ "mediaType", "skinny.mediaType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_micMode,
+ {
+ "micMode", "skinny.micMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MicrophoneMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_modify_conf_result,
+ {
+ "modify_conf_result", "skinny.modify.conf.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ModifyConfResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_multimediaOpenReceiveChannelStatus,
+ {
+ "multimediaOpenReceiveChannelStatus", "skinny.multimediaOpenReceiveChannelStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &OpenReceiveChanStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mwiControlNumber,
+ {
+ "mwiControlNumber", "skinny.mwiControlNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mwiTargetNumber,
+ {
+ "mwiTargetNumber", "skinny.mwiTargetNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_mwi_notification_result,
+ {
+ "mwi_notification_result", "skinny.mwi.notification.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MwiNotificationResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_notify,
+ {
+ "notify", "skinny.notify", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_openReceiveChannelStatus,
+ {
+ "openReceiveChannelStatus", "skinny.openReceiveChannelStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_originalCalledParty,
+ {
+ "originalCalledParty", "skinny.originalCalledParty", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Original Called Party Number", HFILL }},
+ {&hf_skinny_originalCalledPartyName,
+ {
+ "originalCalledPartyName", "skinny.originalCalledPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Original Called Party Name", HFILL }},
+ {&hf_skinny_originalCdpnVoiceMailbox,
+ {
+ "originalCdpnVoiceMailbox", "skinny.originalCdpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
+ "Original Called Party Voicemail Box Number", HFILL }},
+ {&hf_skinny_participantName,
+ {
+ "participantName", "skinny.participantName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_participantNumber,
+ {
+ "participantNumber", "skinny.participantNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_passThruData,
+ {
+ "passThruData", "skinny.passThruData", FT_STRING, BASE_NONE, NULL, 0x0,
+ "variable field size (max: 2000]", HFILL }},
+ {&hf_skinny_payloadCapability,
+ {
+ "payloadCapability", "skinny.payloadCapability", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_PayloadType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_portHandlingFlag,
+ {
+ "portHandlingFlag", "skinny.portHandlingFlag", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &PortHandling_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_privacy,
+ {
+ "privacy", "skinny.privacy", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallPrivacy_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_promptStatus,
+ {
+ "promptStatus", "skinny.promptStatus", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_receptionStatus,
+ {
+ "receptionStatus", "skinny.receptionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MulticastMediaReceptionStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_recording_status,
+ {
+ "recording_status", "skinny.recording.status", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RecordingStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_requestedIpAddrType,
+ {
+ "requestedIpAddrType", "skinny.requestedIpAddrType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_resetType,
+ {
+ "resetType", "skinny.resetType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceResetType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_resourceType,
+ {
+ "resourceType", "skinny.resourceType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ResourceType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_result,
+ {
+ "result", "skinny.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CreateConfResult_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_resultCode,
+ {
+ "resultCode", "skinny.resultCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_resvStyle,
+ {
+ "resvStyle", "skinny.resvStyle", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ResvStyle_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ringDuration,
+ {
+ "ringDuration", "skinny.ringDuration", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RingDuration_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ringMode,
+ {
+ "ringMode", "skinny.ringMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RingMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_rsvpErrorCode,
+ {
+ "rsvpErrorCode", "skinny.rsvpErrorCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RSVPErrorCode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_sequenceFlag,
+ {
+ "sequenceFlag", "skinny.sequenceFlag", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SequenceFlag_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_serverName,
+ {
+ "serverName", "skinny.serverName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_serviceURL,
+ {
+ "serviceURL", "skinny.serviceURL", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_serviceURLDisplayName,
+ {
+ "serviceURLDisplayName", "skinny.serviceURLDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_sessionType,
+ {
+ "sessionType", "skinny.sessionType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SessionType_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_softKeyEvent,
+ {
+ "softKeyEvent", "skinny.softKeyEvent", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SoftKeyEvent_ext, 0x0,
+ "SoftKey Event", HFILL }},
+ {&hf_skinny_softKeyInfoIndex,
+ {
+ "softKeyInfoIndex", "skinny.softKeyInfoIndex", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &SoftKeyInfoIndex_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_softKeyLabel,
+ {
+ "softKeyLabel", "skinny.softKeyLabel", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_softKeySetIndex,
+ {
+ "softKeySetIndex", "skinny.softKeySetIndex", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SoftKeySet_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_softKeyTemplateIndex,
+ {
+ "softKeyTemplateIndex", "skinny.softKeyTemplateIndex", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &SoftKeyTemplateIndex_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_speakerMode,
+ {
+ "speakerMode", "skinny.speakerMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SpeakerMode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_speedDialDirNumber,
+ {
+ "speedDialDirNumber", "skinny.speedDialDirNumber", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_speedDialDisplayName,
+ {
+ "speedDialDisplayName", "skinny.speedDialDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_ssValue,
+ {
+ "ssValue", "skinny.ssValue", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_SilenceSuppression_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_startMediaTransmissionStatus,
+ {
+ "startMediaTransmissionStatus", "skinny.startMediaTransmissionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_statsProcessingMode,
+ {
+ "Stats Processing Mode", "skinny.statsProcessingMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &StatsProcessingType_ext, 0x0,
+ "What do do after you send the stats", HFILL }},
+ {&hf_skinny_status,
+ {
+ "status", "skinny.status", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceUnregisterStatus_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_stimulus,
+ {
+ "stimulus", "skinny.stimulus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceStimulus_ext, 0x0,
+ "Device Stimulus", HFILL }},
+ {&hf_skinny_subAppID,
+ {
+ "subAppID", "skinny.subAppID", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_subscriptionID,
+ {
+ "subscriptionID", "skinny.subscriptionID", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_text,
+ {
+ "text", "skinny.text", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_tone,
+ {
+ "tone", "skinny.tone", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceTone_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_toneAnnouncement,
+ {
+ "toneAnnouncement", "skinny.toneAnnouncement", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceTone_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_tone_output_direction,
+ {
+ "tone_output_direction", "skinny.tone.output.direction", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ToneOutputDirection_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_unRegReasonCode,
+ {
+ "unRegReasonCode", "skinny.unRegReasonCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &UnRegReasonCode_ext, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_userName,
+ {
+ "userName", "skinny.userName", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_vendorID,
+ {
+ "vendorID", "skinny.vendorID", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_version,
+ {
+ "version", "skinny.version", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ {&hf_skinny_videoCapabilityDirection,
+ {
+ "videoCapabilityDirection", "skinny.videoCapabilityDirection", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &TransmitOrReceive_ext, 0x0,
+ NULL, HFILL }},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_skinny,
&ett_skinny_tree,
- &ett_skinny_softKeyMap,
};
module_t *skinny_module;
@@ -5336,14 +9590,27 @@ void
proto_reg_handoff_skinny(void)
{
static gboolean skinny_prefs_initialized = FALSE;
- dissector_handle_t skinny_handle;
if (!skinny_prefs_initialized) {
/* Skinny content type and internet media type used by other dissectors are the same */
media_type_dissector_table = find_dissector_table("media_type");
skinny_handle = new_create_dissector_handle(dissect_skinny, proto_skinny);
dissector_add_uint("tcp.port", TCP_PORT_SKINNY, skinny_handle);
+
ssl_dissector_add(SSL_PORT_SKINNY, "skinny", TRUE);
skinny_prefs_initialized = TRUE;
}
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
diff --git a/epan/dissectors/packet-skinny.c.in b/epan/dissectors/packet-skinny.c.in
new file mode 100644
index 0000000000..46897c2b23
--- /dev/null
+++ b/epan/dissectors/packet-skinny.c.in
@@ -0,0 +1,559 @@
+/* Do not modify this file. Changes will be overwritten */
+/* Generated Automatically */
+/* packet-skinny.c */
+
+/* packet-skinny.c
+ * Dissector for the Skinny Client Control Protocol
+ * (The "D-Channel"-Protocol for Cisco Systems' IP-Phones)
+ *
+ * Author: Diederik de Groot <ddegroot@user.sf.net>, Copyright 2014
+ * Rewritten to support newer skinny protocolversions (V0-V22)
+ * Based on previous versions/contributions:
+ * - Joerg Mayer <jmayer@loplof.de>, Copyright 2001
+ * - Paul E. Erkkila (pee@erkkila.org) - fleshed out the decode
+ * skeleton to report values for most message/message fields.
+ * Much help from Guy Harris on figuring out the wireshark api.
+ * - packet-aim.c by Ralf Hoelzer <ralf@well.com>, Copyright 2000
+ * - Wireshark - Network traffic analyzer,
+ * By Gerald Combs <gerald@wireshark.org>, Copyright 1998
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* [[[cog
+#
+# Using Cog.py Inplace Code Generator
+#
+# Dependencies:
+# - python
+# - cog.py: http://nedbatchelder.com/code/cog/
+# - python.xml
+# - python.xml.sax
+#
+cog.out('/*\n')
+cog.out(' * Generated Automatically Using:\n')
+cog.out(' * cog.py -D xmlfile=SkinnyProtocolOptimized.xml -d -c -o packet-skinny.c packet-skinny.c.in\n')
+cog.out(' */\n')
+]]]*/
+/*[[[end]]]*/
+
+/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/prefs.h>
+#include <epan/tap.h>
+#include <epan/ptvcursor.h>
+
+#include "packet-rtp.h"
+#include "packet-tcp.h"
+#include "packet-ssl.h"
+#include "packet-skinny.h"
+
+void proto_register_skinny(void);
+void proto_reg_handoff_skinny(void);
+
+
+#define TCP_PORT_SKINNY 2000
+#define SSL_PORT_SKINNY 2443 /* IANA assigned to PowerClient Central Storage Facility */
+
+#define BASIC_MSG_TYPE 0x00
+#define V10_MSG_TYPE 0x0A
+#define V11_MSG_TYPE 0x0B
+#define V15_MSG_TYPE 0x0F
+#define V16_MSG_TYPE 0x10
+#define V17_MSG_TYPE 0x11
+#define V18_MSG_TYPE 0x12
+#define V19_MSG_TYPE 0x13
+#define V20_MSG_TYPE 0x14
+#define V21_MSG_TYPE 0x15
+#define V22_MSG_TYPE 0x16
+
+static const value_string header_version[] = {
+ { BASIC_MSG_TYPE, "Basic" },
+ { V10_MSG_TYPE, "V10" },
+ { V11_MSG_TYPE, "V11" },
+ { V15_MSG_TYPE, "V15" },
+ { V16_MSG_TYPE, "V16" },
+ { V17_MSG_TYPE, "V17" },
+ { V18_MSG_TYPE, "V18" },
+ { V19_MSG_TYPE, "V19" },
+ { V20_MSG_TYPE, "V20" },
+ { V21_MSG_TYPE, "V21" },
+ { V22_MSG_TYPE, "V22" },
+ { 0 , NULL }
+};
+
+/* Declare MessageId */
+/* [[[cog
+import parse_xml2skinny_dissector as xml2skinny
+global skinny
+global message_dissector_functions
+
+message_dissector_functions = ''
+skinny = xml2skinny.xml2obj(xmlfile)
+
+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','')))
+cog.out(' {0 , NULL}\n')
+cog.out('};\n')
+cog.out('static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id);\n')
+]]]*/
+/*[[[end]]]*/
+
+
+/* Declare Enums and Defines */
+/* [[[cog
+for enum in skinny.enum:
+ name = enum.name[0].upper() + enum.name[1:]
+ if enum.define == "yes":
+ for entries in enum.entries:
+ for entry in sorted(entries.entry, key=lambda x: int(x['value'],0)):
+ if entries.type is not None:
+ cog.out('#define {0:38} 0x{1:05x} /* {2} */\n' .format(entry.name.upper(), int(entry.value,0), entries.type))
+ else:
+ cog.out('#define {0:38} 0x{1:05x}\n' .format(entry.name.upper(), int(entry.value,0)))
+ cog.out('\n')
+ cog.out('static const value_string %s[] = {\n' %(name))
+ for entries in enum.entries:
+ for entry in sorted(entries.entry, key=lambda x: int(x['value'],0)):
+ if enum.define == "yes":
+ cog.out(' { %s, "%s" },\n' %(entry.name.upper(), entry.text))
+ else:
+ cog.out(' { 0x%05x, "%s" },\n' %(int(entry.value,0), entry.text))
+ cog.out(' { 0x00000, NULL }\n')
+ cog.out('};\n')
+ cog.out('static value_string_ext %s_ext = VALUE_STRING_EXT_INIT(%s);\n\n' %(name, name))
+]]]*/
+/*[[[end]]]*/
+
+/* Staticly Declared Variables */
+static int proto_skinny = -1;
+static int hf_skinny_messageId = -1;
+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;
+
+/* [[[cog
+for key in sorted(xml2skinny.fieldsArray.keys()):
+ cog.out('static int hf_skinny_%s = -1;\n' %key)
+]]]*/
+/*[[[end]]]*/
+
+static dissector_table_t media_type_dissector_table;
+
+/* Initialize the subtree pointers */
+static gint ett_skinny = -1;
+static gint ett_skinny_tree = -1;
+
+/* desegmentation of SCCP */
+static gboolean skinny_desegment = TRUE;
+
+/* tap register id */
+static int skinny_tap = -1;
+
+/* skinny protocol tap info */
+#define MAX_SKINNY_MESSAGES_IN_PACKET 10
+static skinny_info_t pi_arr[MAX_SKINNY_MESSAGES_IN_PACKET];
+static int pi_current = 0;
+static skinny_info_t *si;
+
+dissector_handle_t skinny_handle;
+
+/* Get the length of a single SCCP PDU */
+static guint
+get_skinny_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
+{
+ guint32 hdr_data_length;
+
+ /* Get the length of the SCCP packet. */
+ hdr_data_length = tvb_get_letohl(tvb, offset);
+
+ /* That length doesn't include the length of the header itself. */
+ return hdr_data_length + 8;
+}
+
+static void
+dissect_skinny_xml(ptvcursor_t *cursor, int hfindex, packet_info *pinfo, guint32 length, guint32 maxlength)
+{
+ proto_item *item = NULL;
+ proto_tree *subtree = NULL;
+ dissector_handle_t handle = NULL;
+ proto_tree *tree = ptvcursor_tree(cursor);
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
+ tvbuff_t *next_tvb;
+
+ if (length == 0) {
+ length = tvb_strnlen(tvb, offset, -1);
+ }
+ if (length >= maxlength) {
+ length = maxlength;
+ }
+
+ ptvcursor_add_no_advance(cursor, hfindex, length, ENC_ASCII|ENC_NA);
+
+ item = proto_tree_add_item(tree, hf_skinny_xmlData, tvb, offset, length, ENC_ASCII|ENC_NA);
+ subtree = proto_item_add_subtree(item, 0);
+ next_tvb = tvb_new_subset(tvb, offset, length, -1);
+ handle = dissector_get_string_handle(media_type_dissector_table, "text/xml");
+ if (handle != NULL) {
+ call_dissector(handle, next_tvb, pinfo, subtree);
+ }
+ ptvcursor_advance(cursor, maxlength);
+}
+
+static void
+dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6, packet_info *pinfo)
+{
+ address src_addr;
+ guint32 ipversion = 0;
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
+ guint32 hdr_version = tvb_get_letohl(tvb, 4);
+ gboolean is_video = 0;
+
+ /* ProtocolVersion > 18 include and extra field to declare IPv4 (0) / IPv6 (1) */
+ if (hdr_version >= V18_MSG_TYPE) {
+ ipversion = tvb_get_letohl(tvb, offset);
+ ptvcursor_add(cursor, hf_skinny_ipv4or6, 4, ENC_LITTLE_ENDIAN);
+ }
+ if (ipversion == IPADDRTYPE_IPV4) {
+ guint32 ip_address;
+ src_addr.type = AT_IPv4;
+ src_addr.len = 4;
+ src_addr.data = (guint8 *)&ip_address;
+ ip_address = tvb_get_ipv4(tvb, offset);
+ rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
+ ptvcursor_add(cursor, hfindex_ipv4, 4, ENC_BIG_ENDIAN);
+ if (hdr_version >= V18_MSG_TYPE) {
+ /* skip over the extra room for ipv6 addresses */
+ ptvcursor_advance(cursor, 12);
+ }
+ } else if (ipversion == IPADDRTYPE_IPV6 || ipversion == IPADDRTYPE_IPV4_V6) {
+ struct e_in6_addr IPv6;
+ src_addr.type = AT_IPv6;
+ src_addr.len = 16;
+ src_addr.data = (guint16 *)&IPv6;
+ tvb_get_ipv6(tvb, offset, &IPv6);
+ rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
+ ptvcursor_add(cursor, hfindex_ipv6, 16, ENC_BIG_ENDIAN);
+ } else {
+ /* Invalid : skip over ipv6 space completely */
+ ptvcursor_advance(cursor, 16);
+ }
+}
+
+static void
+dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, guint32 length, guint32 maxlength)
+{
+ proto_item *item = NULL;
+ proto_tree *tree = ptvcursor_tree(cursor);
+ guint32 offset = ptvcursor_current_offset(cursor);
+ tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
+
+ const gchar *disp_string = NULL;
+ wmem_strbuf_t *wmem_new = NULL;
+ const gchar *replacestr = NULL;
+ guint x = 0;
+ guint append_replaced_str = 0;
+
+ if (length == 0) {
+ length = tvb_strnlen(tvb, offset, -1) + 1;
+ }
+ if (length >= maxlength) {
+ length = maxlength;
+ }
+
+ disp_string = (const gchar *) tvb_memdup(wmem_packet_scope(), tvb, offset, length);
+ item = proto_tree_add_item(tree, hfindex, tvb, offset, length, ENC_ASCII | ENC_NA);
+
+ wmem_new = wmem_strbuf_sized_new(wmem_packet_scope(), strlen(disp_string), maxlength);
+
+ while (*disp_string) {
+ replacestr = '\0';
+ if (strlen(disp_string) > x+1) {
+ if (*disp_string == '\36') {
+ replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_36_ext);
+ } else if (*disp_string == '\200') {
+ replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_200_ext);
+ }
+ }
+ if (replacestr) {
+ disp_string++; x++; /* swallow replaced characters */
+ wmem_strbuf_append(wmem_new, replacestr);
+ append_replaced_str = 1;
+ } else {
+ wmem_strbuf_append_c(wmem_new, *disp_string);
+ }
+ x++;
+ disp_string++;
+ }
+
+ if (append_replaced_str) {
+ proto_item_append_text(item, " => \"%s\"" , wmem_strbuf_get_str(wmem_new));
+ }
+ ptvcursor_advance(cursor, length);
+}
+
+/*** Messages Handlers ***/
+
+/* [[[cog
+cog.out(message_dissector_functions)
+]]]*/
+/*[[[end]]]*/
+
+/* 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')
+for message in skinny.message:
+ cog.out(' {%-6s, %-47s, "%s"},\n' %(message.opcode, message.gen_handler(), message.name))
+cog.out('};\n')
+]]]*/
+/*[[[end]]]*/
+
+/* Dissect a single SCCP PDU */
+static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ guint offset = 0;
+ /*gboolean is_video = FALSE;*/ /* FIX ME: need to indicate video or not */
+ ptvcursor_t* cursor;
+
+ /* Header fields */
+ guint32 hdr_data_length;
+ guint32 hdr_version;
+ guint32 data_messageid;
+ guint16 i;
+
+ /* Set up structures we will need to add the protocol subtree and manage it */
+ proto_tree *skinny_tree = NULL;
+ proto_item *ti = NULL;
+
+ /* Initialization */
+ /*
+ hdr_data_length = tvb_get_letohl(tvb, offset);
+ hdr_version = tvb_get_letohl(tvb, offset+4);
+ data_messageid = tvb_get_letohl(tvb, offset+8);
+ */
+ hdr_data_length = tvb_get_letohl(tvb, 0);
+ hdr_version = tvb_get_letohl(tvb, 4);
+ data_messageid = tvb_get_letohl(tvb, 8);
+
+ /* Initialise stat info for passing to tap */
+ pi_current++;
+ if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET)
+ {
+ /* Overwrite info in first struct if run out of space... */
+ 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->callId = 0;
+ si->lineId = 0;
+ si->passThruId = 0;
+ si->callState = 0;
+ g_free(si->callingParty);
+ si->callingParty = NULL;
+ g_free(si->calledParty);
+ si->calledParty = NULL;
+ si->openreceiveStatus = 0;
+ si->startmediatransmisionStatus = 0;
+
+ /* In the interest of speed, if "tree" is NULL, don't do any work not
+ * necessary to generate protocol tree items.
+ */
+ 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);
+
+ /*offset += 8;*/
+ /*cursor = ptvcursor_new(skinny_tree, tvb, offset);*/
+
+ proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb,offset+8, 4, data_messageid );
+ /*ptvcursor_add(cursor, hf_skinny_messageId, 4, data_messageid);*/
+
+ 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);
+ }
+ }
+ ptvcursor_free(cursor);
+
+ tap_queue_packet(skinny_tap, pinfo, si);
+ return tvb_captured_length(tvb);
+}
+
+/* Code to actually dissect the packets */
+static int
+dissect_skinny(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
+{
+ /* The general structure of a packet: {IP-Header|TCP-Header|n*SKINNY}
+ * SKINNY-Packet: {Header(Size, Reserved)|Data(MessageID, Message-Data)}
+ */
+ /* Header fields */
+ guint32 hdr_data_length;
+ guint32 hdr_version;
+
+ /* check, if this is really an SKINNY packet, they start with a length + 0 */
+
+ if (tvb_captured_length(tvb) < 8)
+ {
+ return 0;
+ }
+ /* get relevant header information */
+ hdr_data_length = tvb_get_letohl(tvb, 0);
+ hdr_version = tvb_get_letohl(tvb, 4);
+
+ /* data_size = MIN(8+hdr_data_length, tvb_length(tvb)) - 0xC; */
+
+ if (
+ (hdr_data_length < 4) ||
+ ((hdr_version != BASIC_MSG_TYPE) &&
+ (hdr_version != V10_MSG_TYPE) &&
+ (hdr_version != V11_MSG_TYPE) &&
+ (hdr_version != V15_MSG_TYPE) &&
+ (hdr_version != V16_MSG_TYPE) &&
+ (hdr_version != V17_MSG_TYPE) &&
+ (hdr_version != V18_MSG_TYPE) &&
+ (hdr_version != V19_MSG_TYPE) &&
+ (hdr_version != V20_MSG_TYPE) &&
+ (hdr_version != V21_MSG_TYPE) &&
+ (hdr_version != V22_MSG_TYPE))
+ )
+ {
+ /* Not an SKINNY packet, just happened to use the same port */
+ return 0;
+ }
+
+ /* Make entries in Protocol column and Info column on summary display */
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY");
+
+ col_set_str(pinfo->cinfo, COL_INFO, "Skinny Client Control Protocol");
+
+ tcp_dissect_pdus(tvb, pinfo, tree, skinny_desegment, 4, get_skinny_pdu_len, dissect_skinny_pdu, data);
+
+ return tvb_captured_length(tvb);
+}
+
+/* Register the protocol with Wireshark */
+void
+proto_register_skinny(void)
+{
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+ { &hf_skinny_data_length,
+ {
+ "Data length", "skinny.data_length", FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of bytes in the data portion.", HFILL }},
+ { &hf_skinny_hdr_version,
+ {
+ "Header version", "skinny.hdr_version", FT_UINT32, BASE_HEX, VALS(header_version), 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_messageId,
+ {
+ "Message ID", "skinny.messageId", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &message_id_ext, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_xmlData,
+ {
+ "XML data", "skinny.xmlData", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ { &hf_skinny_ipv4or6,
+ {
+ "IPv4or6", "skinny.ipv4or6", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &IpAddrType_ext, 0x0,
+ NULL, HFILL }},
+ /* [[[cog
+ for valuestr in sorted(xml2skinny.fieldsArray.values()):
+ cog.out('%s' %valuestr)
+ ]]]*/
+ /*[[[end]]]*/
+ };
+
+ /* Setup protocol subtree array */
+ static gint *ett[] = {
+ &ett_skinny,
+ &ett_skinny_tree,
+ };
+
+ module_t *skinny_module;
+
+ /* Register the protocol name and description */
+ proto_skinny = proto_register_protocol("Skinny Client Control Protocol",
+ "SKINNY", "skinny");
+
+ /* Required function calls to register the header fields and subtrees used */
+ proto_register_field_array(proto_skinny, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ skinny_module = prefs_register_protocol(proto_skinny, NULL);
+ prefs_register_bool_preference(skinny_module, "desegment",
+ "Reassemble SCCP messages spanning multiple TCP segments",
+ "Whether the SCCP dissector should reassemble messages spanning multiple TCP segments."
+ " To use this option, you must also enable"
+ " \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+ &skinny_desegment);
+
+ skinny_tap = register_tap("skinny");
+}
+
+void
+proto_reg_handoff_skinny(void)
+{
+ static gboolean skinny_prefs_initialized = FALSE;
+
+ if (!skinny_prefs_initialized) {
+ /* Skinny content type and internet media type used by other dissectors are the same */
+ media_type_dissector_table = find_dissector_table("media_type");
+ skinny_handle = new_create_dissector_handle(dissect_skinny, proto_skinny);
+ dissector_add_uint("tcp.port", TCP_PORT_SKINNY, skinny_handle);
+
+ ssl_dissector_add(SSL_PORT_SKINNY, "skinny", TRUE);
+ skinny_prefs_initialized = TRUE;
+ }
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
diff --git a/epan/dissectors/packet-skinny.h b/epan/dissectors/packet-skinny.h
index b9ef275bef..aa75633ab6 100644
--- a/epan/dissectors/packet-skinny.h
+++ b/epan/dissectors/packet-skinny.h
@@ -25,6 +25,7 @@
typedef struct _skinny_info_t
{
guint32 messId;
+ guint32 maxProtocolVersion;
guint32 lineId;
guint32 callId;
guint32 passThruId;
@@ -33,5 +34,7 @@ typedef struct _skinny_info_t
gchar *callingParty;
gchar *calledParty;
gboolean hasCallInfo;
+ guint openreceiveStatus;
+ guint startmediatransmisionStatus;
} skinny_info_t;
diff --git a/epan/dissectors/packet-skinny.h.in b/epan/dissectors/packet-skinny.h.in
new file mode 100644
index 0000000000..aa75633ab6
--- /dev/null
+++ b/epan/dissectors/packet-skinny.h.in
@@ -0,0 +1,40 @@
+/* packet-skinny.h
+ * Routines for skinny packet disassembly
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+
+/* Container for tapping relevant data */
+typedef struct _skinny_info_t
+{
+ guint32 messId;
+ guint32 maxProtocolVersion;
+ guint32 lineId;
+ guint32 callId;
+ guint32 passThruId;
+ const gchar *messageName;
+ guint32 callState;
+ gchar *callingParty;
+ gchar *calledParty;
+ gboolean hasCallInfo;
+ guint openreceiveStatus;
+ guint startmediatransmisionStatus;
+} skinny_info_t;
+
diff --git a/tools/SkinnyProtocolOptimized.xml b/tools/SkinnyProtocolOptimized.xml
new file mode 100644
index 0000000000..adcce7b68c
--- /dev/null
+++ b/tools/SkinnyProtocolOptimized.xml
@@ -0,0 +1,4062 @@
+<?xml version="1.0"?>
+<messages>
+ <bitfield name="Generic_Bitfield_8">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ </entries>
+ </bitfield>
+ <bitfield name="Generic_Bitfield_16">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ </entries>
+ </bitfield>
+ <bitfield name="Generic_Bitfield_32">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <enum name="DisplayLabels_36">
+ <entries>
+ <entry name="DisplayLabel_Empty" text="Empty" value="0o000"/>
+ <entry name="DisplayLabel_Acct" text="Acct" value="0o002"/>
+ <entry name="DisplayLabel_Flash" text="Flash" value="0o003"/>
+ <entry name="DisplayLabel_Login" text="Login" value="0o004"/>
+ <entry name="DisplayLabel_Device_In_Home_Location" text="Device In Home Location" value="0o005"/>
+ <entry name="DisplayLabel_Device_In_Roaming_Location" text="Device In Roaming Location" value="0o006"/>
+ <entry name="DisplayLabel_Enter_Authorization_Code" text="Enter Authorization Code" value="0o007"/>
+ <entry name="DisplayLabel_Enter_Client_Matter_Code" text="Enter Client Matter Code" value="0o010"/>
+ <entry name="DisplayLabel_Calls_Available_For_Pickup" text="Calls Available For Pickup" value="0o011"/>
+ <entry name="DisplayLabel_Cm_Fallback_Service_Operating" text="Cm Fallback Service Operating" value="0o012"/>
+ <entry name="DisplayLabel_Max_Phones_Exceeded" text="Max Phones Exceeded" value="0o013"/>
+ <entry name="DisplayLabel_Waiting_To_Rehome" text="Waiting To Rehome" value="0o014"/>
+ <entry name="DisplayLabel_Please_End_Call" text="Please End Call" value="0o015"/>
+ <entry name="DisplayLabel_Paging" text="Paging" value="0o016"/>
+ <entry name="DisplayLabel_Select_Line" text="Select Line" value="0o017"/>
+ <entry name="DisplayLabel_Transfer_Destination_Is_Busy" text="Transfer Destination Is Busy" value="0o020"/>
+ <entry name="DisplayLabel_Select_A_Service" text="Select A Service" value="0o021"/>
+ <entry name="DisplayLabel_Local_Services" text="Local Services" value="0o022"/>
+ <entry name="DisplayLabel_Enter_Search_Criteria" text="Enter Search Criteria" value="0o023"/>
+ <entry name="DisplayLabel_Night_Service" text="Night Service" value="0o024"/>
+ <entry name="DisplayLabel_Night_Service_Active" text="Night Service Active" value="0o025"/>
+ <entry name="DisplayLabel_Night_Service_Disabled" text="Night Service Disabled" value="0o026"/>
+ <entry name="DisplayLabel_Login_Successful" text="Login Successful" value="0o027"/>
+ <entry name="DisplayLabel_Wrong_Pin" text="Wrong Pin" value="0o030"/>
+ <entry name="DisplayLabel_Please_Enter_Pin" text="Please Enter Pin" value="0o031"/>
+ <entry name="DisplayLabel_Of" text="Of" value="0o032"/>
+ <entry name="DisplayLabel_Records_1_To" text="Records 1 To" value="0o033"/>
+ <entry name="DisplayLabel_No_Record_Found" text="No Record Found" value="0o034"/>
+ <entry name="DisplayLabel_Search_Results" text="Search Results" value="0o035"/>
+ <entry name="DisplayLabel_Calls_In_Queue" text="Calls In Queue" value="0o036"/>
+ <entry name="DisplayLabel_Join_To_Hunt_Group" text="Join To Hunt Group" value="0o037"/>
+ <entry name="DisplayLabel_Ready" text="Ready" value="0o040"/>
+ <entry name="DisplayLabel_Notready" text="Notready" value="0o041"/>
+ <entry name="DisplayLabel_Call_On_Hold" text="Call On Hold" value="0o042"/>
+ <entry name="DisplayLabel_Hold_Reversion" text="Hold Reversion" value="0o043"/>
+ <entry name="DisplayLabel_Setup_Failed" text="Setup Failed" value="0o044"/>
+ <entry name="DisplayLabel_No_Resources" text="No Resources" value="0o045"/>
+ <entry name="DisplayLabel_Device_Not_Authorized" text="Device Not Authorized" value="0o046"/>
+ <entry name="DisplayLabel_Monitoring" text="Monitoring" value="0o047"/>
+ <entry name="DisplayLabel_Recording_Awaiting_Call_To_Be_Active" text="Recording Awaiting Call To Be Active" value="0o050"/>
+ <entry name="DisplayLabel_Recording_Already_In_Progress" text="Recording Already In Progress" value="0o051"/>
+ <entry name="DisplayLabel_Inactive_Recording_Session" text="Inactive Recording Session" value="0o052"/>
+ <entry name="DisplayLabel_Mobility" text="Mobility" value="0o053"/>
+ <entry name="DisplayLabel_Whisper" text="Whisper" value="0o054"/>
+ <entry name="DisplayLabel_Forward_All" text="Forward All" value="0o055"/>
+ <entry name="DisplayLabel_Malicious_Call_Id" text="Malicious Call Id" value="0o056"/>
+ <entry name="DisplayLabel_Group_Pickup" text="Group Pickup" value="0o057"/>
+ <entry name="DisplayLabel_Remove_Last_Participant" text="Remove Last Participant" value="0o060"/>
+ <entry name="DisplayLabel_Other_Pickup" text="Other Pickup" value="0o061"/>
+ <entry name="DisplayLabel_Video" text="Video" value="0o062"/>
+ <entry name="DisplayLabel_End_Call" text="End Call" value="0o063"/>
+ <entry name="DisplayLabel_Conference_List" text="Conference List" value="0o064"/>
+ <entry name="DisplayLabel_Quality_Reporting_Tool" text="Quality Reporting Tool" value="0o065"/>
+ <entry name="DisplayLabel_Hunt_Group" text="Hunt Group" value="0o066"/>
+ <entry name="DisplayLabel_Use_Line_Or_Join_To_Complete" text="Use Line Or Join To Complete" value="0o067"/>
+ <entry name="DisplayLabel_Do_Not_Disturb" text="Do Not Disturb" value="0o070"/>
+ <entry name="DisplayLabel_Do_Not_Disturb_Is_Active" text="Do Not Disturb Is Active" value="0o071"/>
+ <entry name="DisplayLabel_Cfwdall_Loop_Detected" text="Cfwdall Loop Detected" value="0o072"/>
+ <entry name="DisplayLabel_Cfwdall_Hops_Exceeded" text="Cfwdall Hops Exceeded" value="0o073"/>
+ <entry name="DisplayLabel_Abbrdial" text="Abbrdial" value="0o074"/>
+ <entry name="DisplayLabel_Pickup_Is_Unavailable" text="Pickup Is Unavailable" value="0o075"/>
+ <entry name="DisplayLabel_Conference_Is_Unavailable" text="Conference Is Unavailable" value="0o076"/>
+ <entry name="DisplayLabel_Meetme_Is_Unavailable" text="Meetme Is Unavailable" value="0o077"/>
+ <entry name="DisplayLabel_Cannot_Retrieve_Parked_Call" text="Cannot Retrieve Parked Call" value="0o0100"/>
+ <entry name="DisplayLabel_Cannot_Send_Call_To_Mobile" text="Cannot Send Call To Mobile" value="0o0101"/>
+ <entry name="DisplayLabel_Record" text="Record" value="0o0103"/>
+ <entry name="DisplayLabel_Cannot_Move_Conversation" text="Cannot Move Conversation" value="0o0104"/>
+ <entry name="DisplayLabel_Cw_Off" text="Cw Off" value="0o0105"/>
+ <entry name="DisplayLabel_Coaching" text="Coaching" value="0o0106"/>
+ <entry name="DisplayLabel_Recording" text="Recording" value="0o0117"/>
+ <entry name="DisplayLabel_Recording_Failed" text="Recording Failed" value="0o0120"/>
+ <entry name="DisplayLabel_Connecting" text="Connecting" value="0o0121"/>
+ </entries>
+ </enum>
+ <enum name="DisplayLabels_200">
+ <entries>
+ <entry name="DisplayLabel_Redial" text="Redial" value="0o01"/>
+ <entry name="DisplayLabel_Newcall" text="Newcall" value="0o02"/>
+ <entry name="DisplayLabel_Hold" text="Hold" value="0o03"/>
+ <entry name="DisplayLabel_Transfer" text="Transfer" value="0o04"/>
+ <entry name="DisplayLabel_Cfwdall" text="Cfwdall" value="0o05"/>
+ <entry name="DisplayLabel_Cfwdbusy" text="Cfwdbusy" value="0o06"/>
+ <entry name="DisplayLabel_Cfwdnoanswer" text="Cfwdnoanswer" value="0o07"/>
+ <entry name="DisplayLabel_Backspace" text="Backspace" value="0o010"/>
+ <entry name="DisplayLabel_Endcall" text="Endcall" value="0o011"/>
+ <entry name="DisplayLabel_Resume" text="Resume" value="0o012"/>
+ <entry name="DisplayLabel_Answer" text="Answer" value="0o013"/>
+ <entry name="DisplayLabel_Info" text="Info" value="0o014"/>
+ <entry name="DisplayLabel_Confrn" text="Confrn" value="0o015"/>
+ <entry name="DisplayLabel_Park" text="Park" value="0o016"/>
+ <entry name="DisplayLabel_Join" text="Join" value="0o017"/>
+ <entry name="DisplayLabel_Meetme" text="Meetme" value="0o020"/>
+ <entry name="DisplayLabel_Pickup" text="Pickup" value="0o021"/>
+ <entry name="DisplayLabel_Gpickup" text="Gpickup" value="0o022"/>
+ <entry name="DisplayLabel_Your_Current_Options" text="Your Current Options" value="0o023"/>
+ <entry name="DisplayLabel_Off_Hook" text="Off Hook" value="0o024"/>
+ <entry name="DisplayLabel_On_Hook" text="On Hook" value="0o025"/>
+ <entry name="DisplayLabel_Ring_Out" text="Ring Out" value="0o026"/>
+ <entry name="DisplayLabel_From" text="From" value="0o027"/>
+ <entry name="DisplayLabel_Connected" text="Connected" value="0o030"/>
+ <entry name="DisplayLabel_Busy" text="Busy" value="0o031"/>
+ <entry name="DisplayLabel_Line_In_Use" text="Line In Use" value="0o032"/>
+ <entry name="DisplayLabel_Call_Waiting" text="Call Waiting" value="0o033"/>
+ <entry name="DisplayLabel_Call_Transfer" text="Call Transfer" value="0o034"/>
+ <entry name="DisplayLabel_Call_Park" text="Call Park" value="0o035"/>
+ <entry name="DisplayLabel_Call_Proceed" text="Call Proceed" value="0o036"/>
+ <entry name="DisplayLabel_In_Use_Remote" text="In Use Remote" value="0o037"/>
+ <entry name="DisplayLabel_Enter_Number" text="Enter Number" value="0o040"/>
+ <entry name="DisplayLabel_Call_Park_At" text="Call Park At" value="0o041"/>
+ <entry name="DisplayLabel_Primary_Only" text="Primary Only" value="0o042"/>
+ <entry name="DisplayLabel_Temp_Fail" text="Temp Fail" value="0o043"/>
+ <entry name="DisplayLabel_You_Have_Voicemail" text="You Have Voicemail" value="0o044"/>
+ <entry name="DisplayLabel_Forwarded_To" text="Forwarded To" value="0o045"/>
+ <entry name="DisplayLabel_Can_Not_Complete_Conference" text="Can Not Complete Conference" value="0o046"/>
+ <entry name="DisplayLabel_No_Conference_Bridge" text="No Conference Bridge" value="0o047"/>
+ <entry name="DisplayLabel_Can_Not_Hold_Primary_Control" text="Can Not Hold Primary Control" value="0o050"/>
+ <entry name="DisplayLabel_Invalid_Conference_Participant" text="Invalid Conference Participant" value="0o051"/>
+ <entry name="DisplayLabel_In_Conference_Already" text="In Conference Already" value="0o052"/>
+ <entry name="DisplayLabel_No_Participant_Info" text="No Participant Info" value="0o053"/>
+ <entry name="DisplayLabel_Exceed_Maximum_Parties" text="Exceed Maximum Parties" value="0o054"/>
+ <entry name="DisplayLabel_Key_Is_Not_Active" text="Key Is Not Active" value="0o055"/>
+ <entry name="DisplayLabel_Error_No_License" text="Error No License" value="0o056"/>
+ <entry name="DisplayLabel_Error_Dbconfig" text="Error Dbconfig" value="0o057"/>
+ <entry name="DisplayLabel_Error_Database" text="Error Database" value="0o060"/>
+ <entry name="DisplayLabel_Error_Pass_Limit" text="Error Pass Limit" value="0o061"/>
+ <entry name="DisplayLabel_Error_Unknown" text="Error Unknown" value="0o062"/>
+ <entry name="DisplayLabel_Error_Mismatch" text="Error Mismatch" value="0o063"/>
+ <entry name="DisplayLabel_Conference" text="Conference" value="0o064"/>
+ <entry name="DisplayLabel_Park_Number" text="Park Number" value="0o065"/>
+ <entry name="DisplayLabel_Private" text="Private" value="0o066"/>
+ <entry name="DisplayLabel_Not_Enough_Bandwidth" text="Not Enough Bandwidth" value="0o067"/>
+ <entry name="DisplayLabel_Unknown_Number" text="Unknown Number" value="0o070"/>
+ <entry name="DisplayLabel_Rmlstc" text="Rmlstc" value="0o071"/>
+ <entry name="DisplayLabel_Voicemail" text="Voicemail" value="0o072"/>
+ <entry name="DisplayLabel_Immdiv" text="Immdiv" value="0o073"/>
+ <entry name="DisplayLabel_Intrcpt" text="Intrcpt" value="0o074"/>
+ <entry name="DisplayLabel_Setwtch" text="Setwtch" value="0o075"/>
+ <entry name="DisplayLabel_Trnsfvm" text="Trnsfvm" value="0o076"/>
+ <entry name="DisplayLabel_Dnd" text="Dnd" value="0o077"/>
+ <entry name="DisplayLabel_Divall" text="Divall" value="0o0100"/>
+ <entry name="DisplayLabel_Callback" text="Callback" value="0o0101"/>
+ <entry name="DisplayLabel_Network_Congestion_Rerouting" text="Network Congestion Rerouting" value="0o0102"/>
+ <entry name="DisplayLabel_Barge" text="Barge" value="0o0103"/>
+ <entry name="DisplayLabel_Failed_To_Setup_Barge" text="Failed To Setup Barge" value="0o0104"/>
+ <entry name="DisplayLabel_Another_Barge_Exists" text="Another Barge Exists" value="0o0105"/>
+ <entry name="DisplayLabel_Incompatible_Device_Type" text="Incompatible Device Type" value="0o0106"/>
+ <entry name="DisplayLabel_No_Park_Number_Available" text="No Park Number Available" value="0o0107"/>
+ <entry name="DisplayLabel_Callpark_Reversion" text="Callpark Reversion" value="0o0110"/>
+ <entry name="DisplayLabel_Service_Is_Not_Active" text="Service Is Not Active" value="0o0111"/>
+ <entry name="DisplayLabel_High_Traffic_Try_Again_Later" text="High Traffic Try Again Later" value="0o0112"/>
+ <entry name="DisplayLabel_Qrt" text="Qrt" value="0o0113"/>
+ <entry name="DisplayLabel_Mcid" text="Mcid" value="0o0114"/>
+ <entry name="DisplayLabel_Dirtrfr" text="Dirtrfr" value="0o0115"/>
+ <entry name="DisplayLabel_Select" text="Select" value="0o0116"/>
+ <entry name="DisplayLabel_Conflist" text="Conflist" value="0o0117"/>
+ <entry name="DisplayLabel_Idivert" text="Idivert" value="0o0120"/>
+ <entry name="DisplayLabel_Cbarge" text="Cbarge" value="0o0121"/>
+ <entry name="DisplayLabel_Can_Not_Complete_Transfer" text="Can Not Complete Transfer" value="0o0122"/>
+ <entry name="DisplayLabel_Can_Not_Join_Calls" text="Can Not Join Calls" value="0o0123"/>
+ <entry name="DisplayLabel_Mcid_Successful" text="Mcid Successful" value="0o0124"/>
+ <entry name="DisplayLabel_Number_Not_Configured" text="Number Not Configured" value="0o0125"/>
+ <entry name="DisplayLabel_Security_Error" text="Security Error" value="0o0126"/>
+ <entry name="DisplayLabel_Video_Bandwidth_Unavailable" text="Video Bandwidth Unavailable" value="0o0127"/>
+ <entry name="DisplayLabel_Vidmode" text="Vidmode" value="0o0130"/>
+ <entry name="DisplayLabel_Max_Call_Duration_Timeout" text="Max Call Duration Timeout" value="0o0131"/>
+ <entry name="DisplayLabel_Max_Hold_Duration_Timeout" text="Max Hold Duration Timeout" value="0o0132"/>
+ <entry name="DisplayLabel_Opickup" text="Opickup" value="0o0133"/>
+ <entry name="DisplayLabel_Hlog" text="Hlog" value="0o0134"/>
+ <entry name="DisplayLabel_Logged_Out_Of_Hunt_Group" text="Logged Out Of Hunt Group" value="0o0135"/>
+ <entry name="DisplayLabel_Park_Slot_Unavailable" text="Park Slot Unavailable" value="0o0136"/>
+ <entry name="DisplayLabel_No_Call_Available_For_Pickup" text="No Call Available For Pickup" value="0o0137"/>
+ <entry name="DisplayLabel_External_Transfer_Restricted" text="External Transfer Restricted" value="0o0141"/>
+ <entry name="DisplayLabel_No_Line_Available_For_Pickup" text="No Line Available For Pickup" value="0o0142"/>
+ <entry name="DisplayLabel_Path_Replacement_In_Progress" text="Path Replacement In Progress" value="0o0143"/>
+ <entry name="DisplayLabel_Unknown_2" text="Unknown 2" value="0o0144"/>
+ <entry name="DisplayLabel_Mac_Address" text="Mac Address" value="0o0145"/>
+ <entry name="DisplayLabel_Host_Name" text="Host Name" value="0o0146"/>
+ <entry name="DisplayLabel_Domain_Name" text="Domain Name" value="0o0147"/>
+ <entry name="DisplayLabel_Ip_Address" text="Ip Address" value="0o0150"/>
+ <entry name="DisplayLabel_Subnet_Mask" text="Subnet Mask" value="0o0151"/>
+ <entry name="DisplayLabel_Tftp_Server_1" text="Tftp Server 1" value="0o0152"/>
+ <entry name="DisplayLabel_Default_Router_1" text="Default Router 1" value="0o0153"/>
+ <entry name="DisplayLabel_Default_Router_2" text="Default Router 2" value="0o0154"/>
+ <entry name="DisplayLabel_Default_Router_3" text="Default Router 3" value="0o0155"/>
+ <entry name="DisplayLabel_Default_Router_4" text="Default Router 4" value="0o0156"/>
+ <entry name="DisplayLabel_Default_Router_5" text="Default Router 5" value="0o0157"/>
+ <entry name="DisplayLabel_Dns_Server_1" text="Dns Server 1" value="0o0160"/>
+ <entry name="DisplayLabel_Dns_Server_2" text="Dns Server 2" value="0o0161"/>
+ <entry name="DisplayLabel_Dns_Server_3" text="Dns Server 3" value="0o0162"/>
+ <entry name="DisplayLabel_Dns_Server_4" text="Dns Server 4" value="0o0163"/>
+ <entry name="DisplayLabel_Dns_Server_5" text="Dns Server 5" value="0o0164"/>
+ <entry name="DisplayLabel_Operational_Vlan_Id" text="Operational Vlan Id" value="0o0165"/>
+ <entry name="DisplayLabel_Admin_Vlan_Id" text="Admin Vlan Id" value="0o0166"/>
+ <entry name="DisplayLabel_Call_Manager_1" text="Call Manager 1" value="0o0167"/>
+ <entry name="DisplayLabel_Call_Manager_2" text="Call Manager 2" value="0o0170"/>
+ <entry name="DisplayLabel_Call_Manager_3" text="Call Manager 3" value="0o0171"/>
+ <entry name="DisplayLabel_Call_Manager_4" text="Call Manager 4" value="0o0172"/>
+ <entry name="DisplayLabel_Call_Manager_5" text="Call Manager 5" value="0o0173"/>
+ <entry name="DisplayLabel_Information_Url" text="Information Url" value="0o0174"/>
+ <entry name="DisplayLabel_Directories_Url" text="Directories Url" value="0o0175"/>
+ <entry name="DisplayLabel_Messages_Url" text="Messages Url" value="0o0176"/>
+ <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"/>
+ <enum name="DeviceType">
+ <entries>
+ <entry comment="" name="DeviceType_Station30SPplus" text="Station30SPplus" value="0x00001"/>
+ <entry comment="" name="DeviceType_Station12SPplus" text="Station12SPplus" value="0x00002"/>
+ <entry comment="" name="DeviceType_Station12SP" text="Station12SP" value="0x00003"/>
+ <entry comment="" name="DeviceType_Station12" text="Station12" value="0x00004"/>
+ <entry comment="" name="DeviceType_Station30VIP" text="Station30VIP" value="0x00005"/>
+ <entry comment="" name="DeviceType_StationTelecaster" text="StationTelecaster" value="0x00006"/>
+ <entry comment="" name="DeviceType_StationTelecasterMgr" text="StationTelecasterMgr" value="0x00007"/>
+ <entry comment="" name="DeviceType_StationTelecasterBus" text="StationTelecasterBus" value="0x00008"/>
+ <entry comment="" name="DeviceType_StationPolycom" text="StationPolycom" value="0x00009"/>
+ <entry comment="" name="DeviceType_StationVGC" text="StationVGC" value="0x0000a"/>
+ <entry comment="" name="DeviceType_VGCVirtualPhone" text="VGCVirtualPhone" value="0x0000b"/>
+ <entry comment="" name="DeviceType_StationATA186" text="StationATA186" value="0x0000c"/>
+ <entry comment="" name="DeviceType_StationATA188" text="StationATA188" value="0x0000d"/>
+ <entry comment="" name="DeviceType_EmccBase" text="EmccBase" value="0x0000f"/>
+ <entry comment="" name="DeviceType_Virtual30SPplus" text="Virtual30SPplus" value="0x00014"/>
+ <entry comment="" name="DeviceType_StationPhoneApplication" text="StationPhoneApplication" value="0x00015"/>
+ <entry comment="" name="DeviceType_AnalogAccess" text="AnalogAccess" value="0x0001e"/>
+ <entry comment="" name="DeviceType_DigitalAccessTitan1" text="DigitalAccessTitan1" value="0x00028"/>
+ <entry comment="Digital Access T1" name="DeviceType_Digital Access T1" text="Digital Access T1" value="0x00029"/>
+ <entry comment="" name="DeviceType_DigitalAccessTitan2" text="DigitalAccessTitan2" value="0x0002a"/>
+ <entry comment="" name="DeviceType_DigitalAccessLennon" text="DigitalAccessLennon" value="0x0002b"/>
+ <entry comment="" name="DeviceType_AnalogAccessElvis" text="AnalogAccessElvis" value="0x0002f"/>
+ <entry comment="" name="DeviceType_VGCGateway" text="VGCGateway" value="0x00030"/>
+ <entry comment="" name="DeviceType_ConferenceBridge" text="ConferenceBridge" value="0x00032"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeYoko" text="ConferenceBridgeYoko" value="0x00033"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeDixieLand" text="ConferenceBridgeDixieLand" value="0x00034"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeSummit" text="ConferenceBridgeSummit" value="0x00035"/>
+ <entry comment="" name="DeviceType_H225" text="H225" value="0x0003c"/>
+ <entry comment="" name="DeviceType_H323Phone" text="H323Phone" value="0x0003d"/>
+ <entry comment="" name="DeviceType_H323Gateway" text="H323Gateway" value="0x0003e"/>
+ <entry comment="" name="DeviceType_MusicOnHold" text="MusicOnHold" value="0x00046"/>
+ <entry comment="" name="DeviceType_Pilot" text="Pilot" value="0x00047"/>
+ <entry comment="" name="DeviceType_TapiPort" text="TapiPort" value="0x00048"/>
+ <entry comment="" name="DeviceType_TapiRoutePoint" text="TapiRoutePoint" value="0x00049"/>
+ <entry comment="" name="DeviceType_VoiceInBox" text="VoiceInBox" value="0x00050"/>
+ <entry comment="" name="DeviceType_VoiceInboxAdmin" text="VoiceInboxAdmin" value="0x00051"/>
+ <entry comment="" name="DeviceType_LineAnnunciator" text="LineAnnunciator" value="0x00052"/>
+ <entry comment="" name="DeviceType_SoftwareMtpDixieLand" text="SoftwareMtpDixieLand" value="0x00053"/>
+ <entry comment="" name="DeviceType_CiscoMediaServer" text="CiscoMediaServer" value="0x00054"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeFlint" text="ConferenceBridgeFlint" value="0x00055"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeHetroGen" text="ConferenceBridgeHetroGen" value="0x00056"/>
+ <entry comment="" name="DeviceType_ConferenceBridgeAudVid" text="ConferenceBridgeAudVid" value="0x00057"/>
+ <entry comment="" name="DeviceType_ConferenceHVideoBridge" text="ConferenceHVideoBridge" value="0x00058"/>
+ <entry comment="" name="DeviceType_RouteList" text="RouteList" value="0x0005a"/>
+ <entry comment="" name="DeviceType_LoadSimulator" text="LoadSimulator" value="0x00064"/>
+ <entry comment="" name="DeviceType_MediaTerminationPoint" text="MediaTerminationPoint" value="0x0006e"/>
+ <entry comment="" name="DeviceType_MediaTerminationPointYoko" text="MediaTerminationPointYoko" value="0x0006f"/>
+ <entry comment="" name="DeviceType_MediaTerminationPointDixieLand" text="MediaTerminationPointDixieLand" value="0x00070"/>
+ <entry comment="" name="DeviceType_MediaTerminationPointSummit" text="MediaTerminationPointSummit" value="0x00071"/>
+ <entry comment="" name="DeviceType_7941G" text="7941G" value="0x00073"/>
+ <entry comment="" name="DeviceType_7971" text="7971" value="0x00077"/>
+ <entry comment="" name="DeviceType_MGCPStation" text="MGCPStation" value="0x00078"/>
+ <entry comment="" name="DeviceType_MGCPTrunk" text="MGCPTrunk" value="0x00079"/>
+ <entry comment="" name="DeviceType_RASProxy" text="RASProxy" value="0x0007a"/>
+ <entry comment="" name="DeviceType_Trunk" text="Trunk" value="0x0007d"/>
+ <entry comment="" name="DeviceType_Annunciator" text="Annunciator" value="0x0007e"/>
+ <entry comment="" name="DeviceType_MonitorBridge" text="MonitorBridge" value="0x0007f"/>
+ <entry comment="" name="DeviceType_Recorder" text="Recorder" value="0x00080"/>
+ <entry comment="" name="DeviceType_MonitorBridgeYoko" text="MonitorBridgeYoko" value="0x00081"/>
+ <entry comment="" name="DeviceType_SipTrunk" text="SipTrunk" value="0x00083"/>
+ <entry comment="" name="DeviceType_SipGateway" text="SipGateway" value="0x00084"/>
+ <entry comment="" name="DeviceType_WsmTrunk" text="WsmTrunk" value="0x00085"/>
+ <entry comment="" name="DeviceType_RemoteDestination" text="RemoteDestination" value="0x00086"/>
+ <entry comment="" name="DeviceType_GenericDevice" text="GenericDevice" value="0x000fd"/>
+ <entry comment="" name="DeviceType_UnknownMGCPGateway" text="UnknownMGCPGateway" value="0x000fe"/>
+ <entry comment="" name="DeviceType_NotDefined" text="NotDefined" value="0x000ff"/>
+ <entry comment="" name="DeviceType_7989" text="7989" value="0x0012e"/>
+ <entry comment="" name="DeviceType_7911" text="7911" value="0x00133"/>
+ <entry comment="" name="DeviceType_7941G_GE" text="7941G_GE" value="0x00134"/>
+ <entry comment="" name="DeviceType_MotorolaCN622" text="MotorolaCN622" value="0x0014f"/>
+ <entry comment="" name="DeviceType_3rdPartySipBasic" text="3rdPartySipBasic" value="0x00150"/>
+ <entry comment="" name="DeviceType_StationGoPed" text="StationGoPed" value="0x0015c"/>
+ <entry comment="" name="DeviceType_UnifiedCommunicator" text="UnifiedCommunicator" value="0x00166"/>
+ <entry comment="" name="DeviceType_7921" text="7921" value="0x0016d"/>
+ <entry comment="" name="DeviceType_7906" text="7906" value="0x00171"/>
+ <entry comment="" name="DeviceType_3rdPartySipAdv" text="3rdPartySipAdv" value="0x00176"/>
+ <entry comment="" name="DeviceType_Telepresence" text="Telepresence" value="0x00177"/>
+ <entry comment="" name="DeviceType_7962" text="7962" value="0x00194"/>
+ <entry comment="" name="DeviceType_3951" text="3951" value="0x0019c"/>
+ <entry comment="" name="DeviceType_7937" text="7937" value="0x001af"/>
+ <entry comment="" name="DeviceType_7942" text="7942" value="0x001b2"/>
+ <entry comment="" name="DeviceType_7945" text="7945" value="0x001b3"/>
+ <entry comment="" name="DeviceType_7965" text="7965" value="0x001b4"/>
+ <entry comment="" name="DeviceType_7975" text="7975" value="0x001b5"/>
+ <entry comment="" name="DeviceType_9971_CE" text="9971_CE" value="0x001ed"/>
+ <entry comment="" name="DeviceType_UnifiedMobileCommunicator" text="UnifiedMobileCommunicator" value="0x001d4"/>
+ <entry comment="" name="DeviceType_CSF" text="CSF" value="0x001f7"/>
+ <entry comment="" name="DeviceType_CiscoTelepresenceMcu" text="CiscoTelepresenceMcu" value="0x00255"/>
+ <entry comment="" name="DeviceType_CiscoTelePresenceConductor" text="CiscoTelePresenceConductor" value="0x08cc9"/>
+ <entry comment="" name="DeviceType_CiscoTelePresenceExchange" text="CiscoTelePresenceExchange" value="0x00257"/>
+ <entry comment="" name="DeviceType_CiscoTelePresenceSoftwareConferenceBridge" text="CiscoTelePresenceSoftwareConferenceBridge" value="0x00258"/>
+ <entry comment="" name="DeviceType_ASSip" text="ASSip" value="0x00277"/>
+ <entry comment="" name="DeviceType_CtiRemoteDevice" text="CtiRemoteDevice" value="0x0027b"/>
+ <entry comment="" name="DeviceType_7905" text="7905" value="0x04e20"/>
+ <entry comment="" name="DeviceType_7920" text="7920" value="0x07532"/>
+ <entry comment="" name="DeviceType_7970" text="7970" value="0x07536"/>
+ <entry comment="" name="DeviceType_7912" text="7912" value="0x07537"/>
+ <entry comment="" name="DeviceType_7902" text="7902" value="0x07538"/>
+ <entry comment="" name="DeviceType_SoftPhone" text="SoftPhone" value="0x07540"/>
+ <entry comment="" name="DeviceType_7961G" text="7961G" value="0x07542"/>
+ <entry comment="" name="DeviceType_7936" text="7936" value="0x07543"/>
+ <entry comment="" name="DeviceType_AnalogPhone" text="AnalogPhone" value="0x0754b"/>
+ <entry comment="" name="DeviceType_ISDNBRIPhone" text="ISDNBRIPhone" value="0x0754c"/>
+ <entry comment="" name="DeviceType_SCCPGwVirtualPhone" text="SCCPGwVirtualPhone" value="0x07550"/>
+ <entry comment="" name="DeviceType_IP_STE" text="IP_STE" value="0x07553"/>
+ <entry comment="Cisco 7910" name="DeviceType_Cisco_7910" text="Cisco 7910" value="0x00006"/>
+ <entry comment="Cisco 7925" name="DeviceType_Cisco_7925" text="Cisco 7925" value="0x001e4"/>
+ <entry comment="Cisco 7931" name="DeviceType_Cisco_7931" text="Cisco 7931" value="0x0015c"/>
+ <entry comment="Cisco 7935" name="DeviceType_Cisco_7935" text="Cisco 7935" value="0x00009"/>
+ <entry comment="Cisco 7940" name="DeviceType_Cisco_7940" text="Cisco 7940" value="0x00008"/>
+ <entry comment="Cisco 7961 GE" name="DeviceType_Cisco_7961_GE" text="Cisco 7961 GE" value="0x00134"/>
+ <entry comment="" name="DeviceType_7961G_GE" text="7961G_GE" value="0x00135"/>
+ <entry comment="Cisco 7985" name="DeviceType_Cisco_7985" text="Cisco 7985" value="0x0012e"/>
+ <entry comment="Nokia E Series" name="DeviceType_Nokia_E_Series" text="Nokia E Series" value="0x00113"/>
+ <entry comment="Cisco IP Communicator" name="DeviceType_Cisco_IP_Communicator" text="Cisco IP Communicator" value="0x07540"/>
+ <entry comment="Nokia ICC client" name="DeviceType_Nokia_ICC_client" text="Nokia ICC client" value="0x00178"/>
+ <entry comment="Cisco 6901" name="DeviceType_Cisco_6901" text="Cisco 6901" value="0x00223"/>
+ <entry comment="Cisco 6911" name="DeviceType_Cisco_6911" text="Cisco 6911" value="0x00224"/>
+ <entry comment="Cisco 6921" name="DeviceType_Cisco_6921" text="Cisco 6921" value="0x001ef"/>
+ <entry comment="Cisco 6941" name="DeviceType_Cisco_6941" text="Cisco 6941" value="0x001f0"/>
+ <entry comment="Cisco 6945" name="DeviceType_Cisco_6945" text="Cisco 6945" value="0x00234"/>
+ <entry comment="Cisco 6961" name="DeviceType_Cisco_6961" text="Cisco 6961" value="0x001f1"/>
+ <entry comment="Cisco 8941" name="DeviceType_Cisco_8941" text="Cisco 8941" value="0x0024a"/>
+ <entry comment="Cisco 8945" name="DeviceType_Cisco_8945" text="Cisco 8945" value="0x00249"/>
+ <entry comment="Cisco SPA 303G (1 line)" name="DeviceType_Cisco_SPA_303G" text="Cisco SPA 303G" value="0x1388b"/>
+ <entry comment="Cisco SPA 502G (1 line)" name="DeviceType_Cisco_SPA_502G" text="Cisco SPA 502G" value="0x13883"/>
+ <entry comment="Cisco SPA 504G (4 lines)" name="DeviceType_Cisco_SPA_504G" text="Cisco SPA 504G" value="0x13884"/>
+ <entry comment="Cisco SPA 509G (12 lines)" name="DeviceType_Cisco_SPA_509G" text="Cisco SPA 509G" value="0x13887"/>
+ <entry comment="Cisco SPA 521S" name="DeviceType_Cisco_SPA_521S" text="Cisco SPA 521S" value="0x13880"/>
+ <entry comment="Cisco SPA 525G (5 lines / color / wifi / bluetooth)" name="DeviceType_Cisco_SPA_525G" text="Cisco SPA 525G" value="0x13885"/>
+ <entry comment="Cisco SPA 525G2 (5 lines / color / wifi / bluetooth)" name="DeviceType_Cisco_SPA_525G2" text="Cisco SPA 525G2" value="0x13889"/>
+ <entry comment="Cisco 7914 AddOn" name="DeviceType_Cisco_7914_AddOn" text="Cisco 7914 AddOn" value="0x0007c"/>
+ <entry comment="Cisco 7915 AddOn (12 Buttons)" name="DeviceType_Cisco_7915_AddOn" text="Cisco 7915 AddOn" value="0x000e3"/>
+ <entry comment="Cisco 7915 AddOn (24 Buttons)" name="DeviceType_Cisco_7915_AddOn" text="Cisco 7915 AddOn" value="0x000e4"/>
+ <entry comment="Cisco 7916 AddOn (12 Buttons)" name="DeviceType_Cisco_7916_AddOn" text="Cisco 7916 AddOn" value="0x000e5"/>
+ <entry comment="Cisco 7916 AddOn (24 Buttons)" name="DeviceType_Cisco_7916_AddOn" text="Cisco 7916 AddOn" value="0x000e6"/>
+ </entries>
+ </enum>
+ <bitfield name="PhoneFeatures">
+ <entries>
+ <entry comment="" name="PhoneFeatures_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="PhoneFeatures_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="PhoneFeatures_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="PhoneFeatures_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="Supports UTF-8" name="PhoneFeatures_UTF8" text="UTF8Bit5" value="0x0010"/>
+ <entry comment="" name="PhoneFeatures_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="PhoneFeatures_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="Support Dynamic Messages" name="PhoneFeatures_DynamicMessages" text="DynamicMessages" value="0x0080"/>
+ <entry comment="" name="PhoneFeatures_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="Supports DTMF Type RFC2833" name="PhoneFeatures_RFC2833" text="RFC2833" value="0x0200"/>
+ <entry comment="" name="PhoneFeatures_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="PhoneFeatures_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="PhoneFeatures_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="PhoneFeatures_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="PhoneFeatures_Bit15" text="Bit15" value="0x4000"/>
+ <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">
+ <fields>
+ <struct comment="Station Identifier" longcomment="Device Name of this phone / appliance" name="sid" type="struct">
+ <fields>
+ <string comment="Device Name" name="DeviceName" size="16" type="char"/>
+ <integer comment="User Id" name="reserved_for_future_use" type="uint32"/>
+ <integer comment="Device Instance" name="instance" type="uint32"/>
+ </fields>
+ </struct>
+ <ip comment="IPv4 Address" name="stationIpAddr" type="ipv4"/>
+ <enum comment="Device Type" longcomment="Device Type of this phone / appliance" name="deviceType" subtype="DeviceType" type="uint32"/>
+ <integer comment="Maximum Number of Concurrent RTP Streams" longcomment="Indicates the maximum number of simultansous RTP duplex streams, which this client/appliance can handle." name="maxStreams" type="uint32"/>
+ </fields>
+ <fields size_gt="52">
+ <integer comment="Active RTP Streams" longcomment="Active RTP Streams at Registration" name="activeStreams" type="uint32"/>
+ <integer comment="Protocol Version" longcomment="Maximum Supported Protocol Version" name="protocolVer" type="uint16"/>
+ <bitfield comment="Features this device supports" name="PhoneFeatures" size="uint16" subtype="PhoneFeatures" type="bitfield">
+ <entries>
+ <entry comment="" name="PhoneFeatures_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="PhoneFeatures_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="PhoneFeatures_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="PhoneFeatures_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="Supports UTF-8" name="PhoneFeatures_UTF8" text="UTF8Bit5" value="0x0010"/>
+ <entry comment="" name="PhoneFeatures_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="PhoneFeatures_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="Support Dynamic Messages" name="PhoneFeatures_DynamicMessages" text="DynamicMessages" value="0x0080"/>
+ <entry comment="" name="PhoneFeatures_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="Supports DTMF Type RFC2833" name="PhoneFeatures_RFC2833" text="RFC2833" value="0x0200"/>
+ <entry comment="" name="PhoneFeatures_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="PhoneFeatures_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="PhoneFeatures_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="PhoneFeatures_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="PhoneFeatures_Bit15" text="Bit15" value="0x4000"/>
+ <entry comment="Abbreviated Dial" name="PhoneFeatures_Abbreviated_Dial" text="AbbrevDial" value="0x8000"/>
+ </entries>
+ </bitfield>
+ <integer comment="Maximum Number of Concurrent Conferences" longcomment="Indicates the maximum number of simultansous Conferences, which this client/appliance can handle" name="maxConferences" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="22" size_gt="100">
+ <integer comment="Active Conferences" longcomment="Active Conferences at Registration" name="activeConferences" type="uint32"/>
+ <ether comment="Mac Address" longcomment="Ethernet/Mac Address" name="macAddress" size="12" type="ether"/>
+ <integer comment="IPv4 Address Scope" name="ipV4AddressScope" type="uint32"/>
+ <integer comment="Maximum number of lines" name="maxNumberOfLines" type="uint32"/>
+ <ip comment="IPv5 Address" endianness="big" name="stationIpV6Addr" type="ipv6"/>
+ <integer comment="IPv6 Address Scope" name="ipV6AddressScope" type="uint32"/>
+ <string comment="Firmware Load Name" name="firmwareLoadName" size="32" type="char"/>
+ </fields>
+ </message>
+ <enum name="KeyPadButton">
+ <entries>
+ <entry comment="" name="KeyPadButton_Zero" text="Zero" value="0x0000"/>
+ <entry comment="" name="KeyPadButton_One" text="One" value="0x0001"/>
+ <entry comment="" name="KeyPadButton_Two" text="Two" value="0x0002"/>
+ <entry comment="" name="KeyPadButton_Three" text="Three" value="0x0003"/>
+ <entry comment="" name="KeyPadButton_Four" text="Four" value="0x0004"/>
+ <entry comment="" name="KeyPadButton_Five" text="Five" value="0x0005"/>
+ <entry comment="" name="KeyPadButton_Six" text="Six" value="0x0006"/>
+ <entry comment="" name="KeyPadButton_Seven" text="Seven" value="0x0007"/>
+ <entry comment="" name="KeyPadButton_Eight" text="Eight" value="0x0008"/>
+ <entry comment="" name="KeyPadButton_Nine" text="Nine" value="0x0009"/>
+ <entry comment="" name="KeyPadButton_A" text="A" value="0x000a"/>
+ <entry comment="" name="KeyPadButton_B" text="B" value="0x000b"/>
+ <entry comment="" name="KeyPadButton_C" text="C" value="0x000c"/>
+ <entry comment="" name="KeyPadButton_D" text="D" value="0x000d"/>
+ <entry comment="" name="KeyPadButton_Star" text="Star" value="0x000e"/>
+ <entry comment="" name="KeyPadButton_Pound" text="Pound" value="0x000f"/>
+ <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">
+ <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">
+ <fields>
+ <enum comment="KeyPad Button which was Pressed" name="kpButton" subtype="KeyPadButton" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="22" size_gt="8">
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="EnblocCallMessage" opcode="0x0004" status="no" type="CallControl">
+ <fields>
+ <string comment="CalledPartyNumber" declare="yes" name="calledParty" size="VariableDirnumSize" type="char"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="DeviceStimulus">
+ <entries>
+ <entry comment="" name="DeviceStimulus_LastNumberRedial" text="LastNumberRedial" value="0x0001"/>
+ <entry comment="" name="DeviceStimulus_SpeedDial" text="SpeedDial" value="0x0002"/>
+ <entry comment="" name="DeviceStimulus_Hold" text="Hold" value="0x0003"/>
+ <entry comment="" name="DeviceStimulus_Transfer" text="Transfer" value="0x0004"/>
+ <entry comment="" name="DeviceStimulus_ForwardAll" text="ForwardAll" value="0x0005"/>
+ <entry comment="" name="DeviceStimulus_ForwardBusy" text="ForwardBusy" value="0x0006"/>
+ <entry comment="" name="DeviceStimulus_ForwardNoAnswer" text="ForwardNoAnswer" value="0x0007"/>
+ <entry comment="" name="DeviceStimulus_Display" text="Display" value="0x0008"/>
+ <entry comment="" name="DeviceStimulus_Line" text="Line" value="0x0009"/>
+ <entry comment="" name="DeviceStimulus_T120Chat" text="T120Chat" value="0x000a"/>
+ <entry comment="" name="DeviceStimulus_T120Whiteboard" text="T120Whiteboard" value="0x000b"/>
+ <entry comment="" name="DeviceStimulus_T120ApplicationSharing" text="T120ApplicationSharing" value="0x000c"/>
+ <entry comment="" name="DeviceStimulus_T120FileTransfer" text="T120FileTransfer" value="0x000d"/>
+ <entry comment="" name="DeviceStimulus_Video" text="Video" value="0x000e"/>
+ <entry comment="" name="DeviceStimulus_VoiceMail" text="VoiceMail" value="0x000f"/>
+ <entry comment="" name="DeviceStimulus_AnswerRelease" text="AnswerRelease" value="0x0010"/>
+ <entry comment="" name="DeviceStimulus_AutoAnswer" text="AutoAnswer" value="0x0011"/>
+ <entry comment="" name="DeviceStimulus_Select" text="Select" value="0x0012"/>
+ <entry comment="" name="DeviceStimulus_Privacy" text="Privacy" value="0x0013"/>
+ <entry comment="" name="DeviceStimulus_ServiceURL" text="ServiceURL" value="0x0014"/>
+ <entry comment="" name="DeviceStimulus_BLFSpeedDial" text="BLFSpeedDial" value="0x0015"/>
+ <entry comment="" name="DeviceStimulus_DPark" text="DPark" value="0x0016"/>
+ <entry comment="" name="DeviceStimulus_Intercom" text="Intercom" value="0x0017"/>
+ <entry comment="" name="DeviceStimulus_MaliciousCall" text="MaliciousCall" value="0x001b"/>
+ <entry comment="" name="DeviceStimulus_GenericAppB1" text="GenericAppB1" value="0x0021"/>
+ <entry comment="" name="DeviceStimulus_GenericAppB2" text="GenericAppB2" value="0x0022"/>
+ <entry comment="" name="DeviceStimulus_GenericAppB3" text="GenericAppB3" value="0x0023"/>
+ <entry comment="" name="DeviceStimulus_GenericAppB4" text="GenericAppB4" value="0x0024"/>
+ <entry comment="" name="DeviceStimulus_GenericAppB5" text="GenericAppB5" value="0x0025"/>
+ <entry comment="" name="DeviceStimulus_MeetMeConference" text="MeetMeConference" value="0x007b"/>
+ <entry comment="" name="DeviceStimulus_Conference" text="Conference" value="0x007d"/>
+ <entry comment="" name="DeviceStimulus_CallPark" text="CallPark" value="0x007e"/>
+ <entry comment="" name="DeviceStimulus_CallPickUp" text="CallPickUp" value="0x007f"/>
+ <entry comment="" name="DeviceStimulus_GroupCallPickUp" text="GroupCallPickUp" value="0x0080"/>
+ <entry comment="" name="DeviceStimulus_Mobility" text="Mobility" value="0x0081"/>
+ <entry comment="" name="DeviceStimulus_DoNotDisturb" text="DoNotDisturb" value="0x0082"/>
+ <entry comment="" name="DeviceStimulus_ConfList" text="ConfList" value="0x0083"/>
+ <entry comment="" name="DeviceStimulus_RemoveLastParticipant" text="RemoveLastParticipant" value="0x0084"/>
+ <entry comment="" name="DeviceStimulus_QRT" text="QRT" value="0x0085"/>
+ <entry comment="" name="DeviceStimulus_CallBack" text="CallBack" value="0x0086"/>
+ <entry comment="" name="DeviceStimulus_OtherPickup" text="OtherPickup" value="0x0087"/>
+ <entry comment="" name="DeviceStimulus_VideoMode" text="VideoMode" value="0x0088"/>
+ <entry comment="" name="DeviceStimulus_NewCall" text="NewCall" value="0x0089"/>
+ <entry comment="" name="DeviceStimulus_EndCall" text="EndCall" value="0x008a"/>
+ <entry comment="" name="DeviceStimulus_HLog" text="HLog" value="0x008b"/>
+ <entry comment="" name="DeviceStimulus_Queuing" text="Queuing" value="0x008f"/>
+ <entry boundscheck="max" comment="" name="DeviceStimulus_MaxStimulusValue" text="MaxStimulusValue" value="0x008f"/>
+ </entries>
+ </enum>
+ <message comment="" direction="dev2pbx" dynamic="no" name="StimulusMessage" opcode="0x0005" status="no" type="CallControl">
+ <fields beginversion="0" endversion="22">
+ <enum comment="Device Stimulus" name="stimulus" subtype="DeviceStimulus" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="Stimulus Status" name="stimulusStatus" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="OffHookMessage" opcode="0x0006" status="no" 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">
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="lineNumber" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="SpeedDialStatReqMessage" opcode="0x000a" status="request" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="speedDialNumber" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="LineStatReqMessage" opcode="0x000b" status="request" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="lineNumber" 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"/>
+ <enum define="yes" name="Media_PayloadType">
+ <entries type="audio">
+ <entry comment="" name="Media_Payload_G711Alaw64k" text="Media_Payload_G711Alaw64k" value="0x0002"/>
+ <entry comment="" name="Media_Payload_G711Alaw56k" text="Media_Payload_G711Alaw56k" value="0x0003"/>
+ <entry comment="" name="Media_Payload_G711Ulaw64k" text="Media_Payload_G711Ulaw64k" value="0x0004"/>
+ <entry comment="" name="Media_Payload_G711Ulaw56k" text="Media_Payload_G711Ulaw56k" value="0x0005"/>
+ <entry comment="" name="Media_Payload_G722_64k" text="Media_Payload_G722_64k" value="0x0006"/>
+ <entry comment="" name="Media_Payload_G722_56k" text="Media_Payload_G722_56k" value="0x0007"/>
+ <entry comment="" name="Media_Payload_G722_48k" text="Media_Payload_G722_48k" value="0x0008"/>
+ <entry comment="" name="Media_Payload_G7231" text="Media_Payload_G7231" value="0x0009"/>
+ <entry comment="" name="Media_Payload_G728" text="Media_Payload_G728" value="0x000a"/>
+ <entry comment="" name="Media_Payload_G729" text="Media_Payload_G729" value="0x000b"/>
+ <entry comment="" name="Media_Payload_G729AnnexA" text="Media_Payload_G729AnnexA" value="0x000c"/>
+ <entry comment="" name="Media_Payload_G729AnnexB" text="Media_Payload_G729AnnexB" value="0x000f"/>
+ <entry comment="" name="Media_Payload_G729AnnexAwAnnexB" text="Media_Payload_G729AnnexAwAnnexB" value="0x0010"/>
+ <entry comment="" name="Media_Payload_GSM_Full_Rate" text="Media_Payload_GSM_Full_Rate" value="0x0012"/>
+ <entry comment="" name="Media_Payload_GSM_Half_Rate" text="Media_Payload_GSM_Half_Rate" value="0x0013"/>
+ <entry comment="" name="Media_Payload_GSM_Enhanced_Full_Rate" text="Media_Payload_GSM_Enhanced_Full_Rate" value="0x0014"/>
+ <entry comment="" name="Media_Payload_Wide_Band_256k" text="Media_Payload_Wide_Band_256k" value="0x0019"/>
+ <entry comment="" name="Media_Payload_Data64" text="Media_Payload_Data64" value="0x0020"/>
+ <entry comment="" name="Media_Payload_Data56" text="Media_Payload_Data56" value="0x0021"/>
+ <entry comment="" name="Media_Payload_G7221_32K" text="Media_Payload_G7221_32K" value="0x0028"/>
+ <entry comment="" name="Media_Payload_G7221_24K" text="Media_Payload_G7221_24K" value="0x0029"/>
+ <entry comment="" name="Media_Payload_AAC" text="Media_Payload_AAC" value="0x002a"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_128" text="Media_Payload_MP4ALATM_128" value="0x002b"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_64" text="Media_Payload_MP4ALATM_64" value="0x002c"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_56" text="Media_Payload_MP4ALATM_56" value="0x002d"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_48" text="Media_Payload_MP4ALATM_48" value="0x002e"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_32" text="Media_Payload_MP4ALATM_32" value="0x002f"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_24" text="Media_Payload_MP4ALATM_24" value="0x0030"/>
+ <entry comment="" name="Media_Payload_MP4ALATM_NA" text="Media_Payload_MP4ALATM_NA" value="0x0031"/>
+ <entry comment="" name="Media_Payload_GSM" text="Media_Payload_GSM" value="0x0050"/>
+ <entry comment="" name="Media_Payload_G726_32K" text="Media_Payload_G726_32K" value="0x0052"/>
+ <entry comment="" name="Media_Payload_G726_24K" text="Media_Payload_G726_24K" value="0x0053"/>
+ <entry comment="" name="Media_Payload_G726_16K" text="Media_Payload_G726_16K" value="0x0054"/>
+ <entry comment="" name="Media_Payload_ILBC" text="Media_Payload_ILBC" value="0x0056"/>
+ <entry comment="" name="Media_Payload_ISAC" text="Media_Payload_ISAC" value="0x0059"/>
+ <entry comment="" name="Media_Payload_AMR" text="Media_Payload_AMR" value="0x0061"/>
+ <entry comment="" name="Media_Payload_AMR_WB" text="Media_Payload_AMR_WB" value="0x0062"/>
+ </entries>
+ <entries type="video">
+ <entry comment="" name="Media_Payload_H261" text="Media_Payload_H261" value="0x0064"/>
+ <entry comment="" name="Media_Payload_H263" text="Media_Payload_H263" value="0x0065"/>
+ <entry comment="" name="Media_Payload_Vieo" text="Media_Payload_Vieo" value="0x0066"/>
+ <entry comment="" name="Media_Payload_H264" text="Media_Payload_H264" value="0x0067"/>
+ <entry comment="" name="Media_Payload_H264_SVC" text="Media_Payload_H264_SVC" value="0x0068"/>
+ <entry comment="" name="Media_Payload_T120" text="Media_Payload_T120" value="0x0069"/>
+ <entry comment="" name="Media_Payload_H224" text="Media_Payload_H224" value="0x006a"/>
+ <entry comment="" name="Media_Payload_T38Fax" text="Media_Payload_T38Fax" value="0x006b"/>
+ <entry comment="" name="Media_Payload_TOTE" text="Media_Payload_TOTE" value="0x006c"/>
+ <entry comment="" name="Media_Payload_H265" text="Media_Payload_H265" value="0x006d"/>
+ <entry comment="" name="Media_Payload_H264_UC" text="Media_Payload_H264_UC" value="0x006e"/>
+ <entry comment="" name="Media_Payload_XV150_MR_711U" text="Media_Payload_XV150_MR_711U" value="0x006f"/>
+ <entry comment="" name="Media_Payload_NSE_VBD_711U" text="Media_Payload_NSE_VBD_711U" value="0x0070"/>
+ <entry comment="" name="Media_Payload_XV150_MR_729A" text="Media_Payload_XV150_MR_729A" value="0x0071"/>
+ <entry comment="" name="Media_Payload_NSE_VBD_729A" text="Media_Payload_NSE_VBD_729A" value="0x0072"/>
+ <entry comment="" name="Media_Payload_H264_FEC" text="Media_Payload_H264_FEC" value="0x0073"/>
+ </entries>
+ <entries type="data">
+ <entry comment="" name="Media_Payload_Clear_Chan" text="Media_Payload_Clear_Chan" value="0x0078"/>
+ <entry comment="" name="Media_Payload_Universal_Xcoder" text="Media_Payload_Universal_Xcoder" value="0x00de"/>
+ <entry comment="" name="Media_Payload_RFC2833_DynPayload" text="Media_Payload_RFC2833_DynPayload" value="0x0101"/>
+ <entry comment="" name="Media_Payload_PassThrough" text="Media_Payload_PassThrough" value="0x0102"/>
+ <entry comment="" name="Media_Payload_Dynamic_Payload_PassThru" text="Media_Payload_Dynamic_Payload_PassThru" value="0x0103"/>
+ <entry comment="" name="Media_Payload_DTMF_OOB" text="Media_Payload_DTMF_OOB" value="0x0104"/>
+ <entry comment="" name="Media_Payload_Inband_DTMF_RFC2833" text="Media_Payload_Inband_DTMF_RFC2833" value="0x0105"/>
+ <entry comment="" name="Media_Payload_NoAudio" text="Media_Payload_NoAudio" value="0x012b"/>
+ <entry comment="" name="Media_Payload_v150_LC_ModemRelay" text="Media_Payload_v150_LC_ModemRelay" value="0x012c"/>
+ <entry comment="" name="Media_Payload_v150_LC_SPRT" text="Media_Payload_v150_LC_SPRT" value="0x012d"/>
+ <entry comment="" name="Media_Payload_v150_LC_SSE" text="Media_Payload_v150_LC_SSE" value="0x012e"/>
+ <entry comment="" name="Media_Payload_Max" text="Media_Payload_Max" value="0x012f"/>
+ </entries>
+ </enum>
+ <enum name="Media_G723BitRate">
+ <entries>
+ <entry comment="" name="Media_G723BRate_5_3" text="Media_G723BRate_5_3" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" declare="yes" name="capCount" type="uint32"/>
+ <struct comment="" maxsize="18" name="caps" size_fieldname="capCount" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint32"/>
+ <union comment="" lookup_guide="payloadCapability" name="PAYLOADS" subtype="MediaCapabilityUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_ModemRelay" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SPRT" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SSE" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="ServerReqMessage" opcode="0x0012" status="no" type="RegistrationAndManagement"/>
+ <enum name="DeviceAlarmSeverity">
+ <entries>
+ <entry comment="" name="DeviceAlarmSeverity_Critical" text="Critical" value="0x0000"/>
+ <entry comment="" name="DeviceAlarmSeverity_Major" text="Major" value="0x0007"/>
+ <entry comment="" name="DeviceAlarmSeverity_Minor" text="Minor" value="0x0008"/>
+ <entry comment="" name="DeviceAlarmSeverity_Warning" text="Warning" value="0x0001"/>
+ <entry comment="" name="DeviceAlarmSeverity_Marginal" text="Marginal" value="0x000a"/>
+ <entry comment="" name="DeviceAlarmSeverity_Unknown" text="Unknown" value="0x0004"/>
+ <entry comment="" name="DeviceAlarmSeverity_Informational" text="Informational" value="0x0002"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="alarmSeverity" subtype="DeviceAlarmSeverity" type="uint32"/>
+ <string comment="" name="text" size="80" type="char"/>
+ <integer comment="" name="parm1" type="uint32"/>
+ <integer comment="" name="parm2" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="MulticastMediaReceptionStatus">
+ <entries>
+ <entry comment="" name="MulticastMediaReceptionStatus_Ok" text="Ok" value="0x0000"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="receptionStatus" subtype="MulticastMediaReceptionStatus" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="MediaStatus">
+ <entries>
+ <entry comment="" name="MediaStatus_Ok" text="Ok" value="0x0000"/>
+ <entry comment="" name="MediaStatus_Unknown" text="Unknown" value="0x0001"/>
+ <entry comment="" name="MediaStatus_NotEnoughChannels" text="NotEnoughChannels" value="0x0002"/>
+ <entry comment="" name="MediaStatus_CodecTooComplex" text="CodecTooComplex" value="0x0003"/>
+ <entry comment="" name="MediaStatus_InvalidPartyID" text="InvalidPartyID" value="0x0004"/>
+ <entry comment="" name="MediaStatus_InvalidCallRef" text="InvalidCallRef" value="0x0005"/>
+ <entry comment="" name="MediaStatus_InvalidCodec" text="InvalidCodec" value="0x0006"/>
+ <entry comment="" name="MediaStatus_InvalidPacketSize" text="InvalidPacketSize" value="0x0007"/>
+ <entry comment="" name="MediaStatus_OutOfSockets" text="OutOfSockets" value="0x0008"/>
+ <entry comment="" name="MediaStatus_EncoderOrDecoderFailed" text="EncoderOrDecoderFailed" value="0x0009"/>
+ <entry comment="" name="MediaStatus_InvalidDynamicPayloadType" text="InvalidDynamicPayloadType" value="0x000a"/>
+ <entry comment="" name="MediaStatus_RequestedIpAddrTypeUnAvailable" text="RequestedIpAddrTypeUnAvailable" value="0x000b"/>
+ <entry comment="" name="MediaStatus_DeviceOnHook" text="DeviceOnHook" value="0x00ff"/>
+ </entries>
+ </enum>
+ <enum define="yes" name="IpAddrType">
+ <entries>
+ <entry comment="" name="IpAddrType_Ipv4" text="v4" value="0x0000"/>
+ <entry comment="" name="IpAddrType_Ipv6" text="v6" value="0x0001"/>
+ <entry comment="" name="IpAddrType_Ipv4_v6" text="v4_v6" value="0x0002"/>
+ <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">
+ <fields>
+ <enum comment="" name="openReceiveChannelStatus" subtype="MediaStatus" type="uint32"/>
+ <ipv4or6 comment="" name="ipAddr" subtype="IpAddress" type="ipaddr"/>
+ <integer comment="" name="portNumber" subtype="uint32" type="ipport" use_param="ipAddr"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="22" size_gt="20">
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="StatsProcessingType">
+ <entries>
+ <entry comment="" name="StatsProcessingType_clearStats" text="clearStats" value="0x0000"/>
+ <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">
+ <fields>
+ <string comment="Directory Number" declare="yes" name="directoryNum" size="VariableDirnumSize" type="char"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="Stats Processing Mode" longcomment="What do do after you send the stats" name="statsProcessingMode" subtype="StatsProcessingType" type="uint32"/>
+ <integer comment="Number of Packets Sent" name="numberPacketsSent" type="uint32"/>
+ <integer comment="Number of Octets Sent" name="numberOctetsSent" type="uint32"/>
+ <integer comment="Number of Packets Received" name="numberPacketsReceived" type="uint32"/>
+ <integer comment="Number of Octets Received" name="numberOctetsReceived" type="uint32"/>
+ <integer comment="Number of Packets Lost" name="numberPacketsLost" type="uint32"/>
+ <integer comment="Amount of Jitter" name="jitter" type="uint32"/>
+ <integer comment="Amount of Latency" name="latency" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="22" size_gt="64">
+ <integer comment="Data Size" declare="yes" name="dataSize" type="uint32"/>
+ <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">
+ <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"/>
+ <enum name="SoftKeySet">
+ <entries>
+ <entry name="SoftKeySet_OnHook" text="On Hook" value="0"/>
+ <entry name="SoftKeySet_Connected" text="Connected" value="1"/>
+ <entry name="SoftKeySet_OnHold" text="On Hold" value="2"/>
+ <entry name="SoftKeySet_Ringin" text="Ring In" value="3"/>
+ <entry name="SoftKeySet_OffHook" text="Off Hook" value="4"/>
+ <entry name="SoftKeySet_ConnTrans" text="Connected Transfeable" value="5"/>
+ <entry name="SoftKeySet_DigitsFoll" text="Digits Following" value="6"/>
+ <entry name="SoftKeySet_ConnConf" text="Connected Conference" value="7"/>
+ <entry name="SoftKeySet_RingOut" text="Ring Out" value="8"/>
+ <entry name="SoftKeySet_OffHookFeat" text="OffHook with Features" value="9"/>
+ <entry name="SoftKeySet_InUseHint" text="In Use Hint" value="10"/>
+ <entry name="SoftKeySet_OnHookStealable" text="On Hook with Stealable Call" value="11"/>
+ </entries>
+ </enum>
+ <enum name="SoftKeyEvent">
+ <entries>
+ <entry name="SoftKeyEvent_Redial" text="Redial" value="1"/>
+ <entry name="SoftKeyEvent_NewCall" text="NewCall" value="2"/>
+ <entry name="SoftKeyEvent_Hold" text="Hold" value="3"/>
+ <entry name="SoftKeyEvent_Transfer" text="Transfer" value="4"/>
+ <entry name="SoftKeyEvent_CfwdAll" text="CfwdAll" value="5"/>
+ <entry name="SoftKeyEvent_CfwdBusy" text="CfwdBusy" value="6"/>
+ <entry name="SoftKeyEvent_CfwdNoAnswer" text="CfwdNoAnswer" value="7"/>
+ <entry name="SoftKeyEvent_BackSpace" text="BackSpace" value="8"/>
+ <entry name="SoftKeyEvent_EndCall" text="EndCall" value="9"/>
+ <entry name="SoftKeyEvent_Resume" text="Resume" value="10"/>
+ <entry name="SoftKeyEvent_Answer" text="Answer" value="11"/>
+ <entry name="SoftKeyEvent_Info" text="Info" value="12"/>
+ <entry name="SoftKeyEvent_Confrn" text="Confrn" value="13"/>
+ <entry name="SoftKeyEvent_Park" text="Park" value="14"/>
+ <entry name="SoftKeyEvent_Join" text="Join" value="15"/>
+ <entry name="SoftKeyEvent_MeetMe" text="MeetMe" value="16"/>
+ <entry name="SoftKeyEvent_PickUp" text="PickUp" value="17"/>
+ <entry name="SoftKeyEvent_GrpPickup" text="GrpPickup" value="18"/>
+ <entry name="SoftKeyEvent_Your current options" text="Your current options" value="19"/>
+ <entry name="SoftKeyEvent_Off Hook" text="Off Hook" value="20"/>
+ <entry name="SoftKeyEvent_On Hook" text="On Hook" value="21"/>
+ <entry name="SoftKeyEvent_Ring out" text="Ring out" value="22"/>
+ <entry name="SoftKeyEvent_From " text="From " value="23"/>
+ <entry name="SoftKeyEvent_Connected" text="Connected" value="24"/>
+ <entry name="SoftKeyEvent_Busy" text="Busy" value="25"/>
+ <entry name="SoftKeyEvent_Line In Use" text="Line In Use" value="26"/>
+ <entry name="SoftKeyEvent_Call Waiting" text="Call Waiting" value="27"/>
+ <entry name="SoftKeyEvent_Call Transfer" text="Call Transfer" value="28"/>
+ <entry name="SoftKeyEvent_Call Park" text="Call Park" value="29"/>
+ <entry name="SoftKeyEvent_Call Proceed" text="Call Proceed" value="30"/>
+ <entry name="SoftKeyEvent_In Use Remote" text="In Use Remote" value="31"/>
+ <entry name="SoftKeyEvent_Enter number" text="Enter number" value="32"/>
+ <entry name="SoftKeyEvent_Call park At" text="Call park At" value="33"/>
+ <entry name="SoftKeyEvent_Primary Only" text="Primary Only" value="34"/>
+ <entry name="SoftKeyEvent_Temp Fail" text="Temp Fail" value="35"/>
+ <entry name="SoftKeyEvent_You Have a VoiceMail" text="You Have a VoiceMail" value="36"/>
+ <entry name="SoftKeyEvent_Forwarded to" text="Forwarded to" value="37"/>
+ <entry name="SoftKeyEvent_Can Not Complete Conference" text="Can Not Complete Conference" value="38"/>
+ <entry name="SoftKeyEvent_No Conference Bridge" text="No Conference Bridge" value="39"/>
+ <entry name="SoftKeyEvent_Can Not Hold Primary Control" text="Can Not Hold Primary Control" value="40"/>
+ <entry name="SoftKeyEvent_Invalid Conference Participant" text="Invalid Conference Participant" value="41"/>
+ <entry name="SoftKeyEvent_In Conference Already" text="In Conference Already" value="42"/>
+ <entry name="SoftKeyEvent_No Participant Info" text="No Participant Info" value="43"/>
+ <entry name="SoftKeyEvent_Exceed Maximum Parties" text="Exceed Maximum Parties" value="44"/>
+ <entry name="SoftKeyEvent_Key Is Not Active" text="Key Is Not Active" value="45"/>
+ <entry name="SoftKeyEvent_Error No License" text="Error No License" value="46"/>
+ <entry name="SoftKeyEvent_Error DBConfig" text="Error DBConfig" value="47"/>
+ <entry name="SoftKeyEvent_Error Database" text="Error Database" value="48"/>
+ <entry name="SoftKeyEvent_Error Pass Limit" text="Error Pass Limit" value="49"/>
+ <entry name="SoftKeyEvent_Error Unknown" text="Error Unknown" value="50"/>
+ <entry name="SoftKeyEvent_Error Mismatch" text="Error Mismatch" value="51"/>
+ <entry name="SoftKeyEvent_Conference" text="Conference" value="52"/>
+ <entry name="SoftKeyEvent_Park Number" text="Park Number" value="53"/>
+ <entry name="SoftKeyEvent_Private" text="Private" value="54"/>
+ <entry name="SoftKeyEvent_Not Enough Bandwidth" text="Not Enough Bandwidth" value="55"/>
+ <entry name="SoftKeyEvent_Unknown Number" text="Unknown Number" value="56"/>
+ <entry name="SoftKeyEvent_RmLstC" text="RmLstC" value="57"/>
+ <entry name="SoftKeyEvent_Voicemail" text="Voicemail" value="58"/>
+ <entry name="SoftKeyEvent_ImmDiv" text="ImmDiv" value="59"/>
+ <entry name="SoftKeyEvent_Intrcpt" text="Intrcpt" value="60"/>
+ <entry name="SoftKeyEvent_SetWtch" text="SetWtch" value="61"/>
+ <entry name="SoftKeyEvent_TrnsfVM" text="TrnsfVM" value="62"/>
+ <entry name="SoftKeyEvent_DND" text="DND" value="63"/>
+ <entry name="SoftKeyEvent_DivAll" text="DivAll" value="64"/>
+ <entry name="SoftKeyEvent_CallBack" text="CallBack" value="65"/>
+ <entry name="SoftKeyEvent_Network congestion,rerouting" text="Network congestion,rerouting" value="66"/>
+ <entry name="SoftKeyEvent_Barge" text="Barge" value="67"/>
+ <entry name="SoftKeyEvent_Failed to setup Barge" text="Failed to setup Barge" value="68"/>
+ <entry name="SoftKeyEvent_Another Barge exists" text="Another Barge exists" value="69"/>
+ <entry name="SoftKeyEvent_Incompatible device type" text="Incompatible device type" value="70"/>
+ <entry name="SoftKeyEvent_No Park Number Available" text="No Park Number Available" value="71"/>
+ <entry name="SoftKeyEvent_CallPark Reversion" text="CallPark Reversion" value="72"/>
+ <entry name="SoftKeyEvent_Service is not Active" text="Service is not Active" value="73"/>
+ <entry name="SoftKeyEvent_High Traffic Try Again Later" text="High Traffic Try Again Later" value="74"/>
+ <entry name="SoftKeyEvent_QRT" text="QRT" value="75"/>
+ <entry name="SoftKeyEvent_MCID" text="MCID" value="76"/>
+ <entry name="SoftKeyEvent_DirTrfr" text="DirTrfr" value="77"/>
+ <entry name="SoftKeyEvent_Select" text="Select" value="78"/>
+ <entry name="SoftKeyEvent_ConfList" text="ConfList" value="79"/>
+ <entry name="SoftKeyEvent_iDivert" text="iDivert" value="80"/>
+ <entry name="SoftKeyEvent_cBarge" text="cBarge" value="81"/>
+ <entry name="SoftKeyEvent_Can Not Complete Transfer" text="Can Not Complete Transfer" value="82"/>
+ <entry name="SoftKeyEvent_Can Not Join Calls" text="Can Not Join Calls" value="83"/>
+ <entry name="SoftKeyEvent_Mcid Successful" text="Mcid Successful" value="84"/>
+ <entry name="SoftKeyEvent_Number Not Configured" text="Number Not Configured" value="85"/>
+ <entry name="SoftKeyEvent_Security Error" text="Security Error" value="86"/>
+ <entry name="SoftKeyEvent_Video Bandwidth Unavailable" text="Video Bandwidth Unavailable" value="87"/>
+ <entry name="SoftKeyEvent_Video Mode" text="Video Mode" value="88"/>
+ <entry name="SoftKeyEvent_Record" text="Record" value="202"/>
+ <entry name="SoftKeyEvent_Dial" text="Dial" value="201"/>
+ </entries>
+ </enum>
+ <message comment="" direction="dev2pbx" dynamic="no" name="SoftKeyEventMessage" opcode="0x0026" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <enum comment="SoftKey Event" name="softKeyEvent" subtype="SoftKeyEvent" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="UnRegReasonCode">
+ <entries>
+ <entry comment="" name="UnRegReasonCode_Unknown" text="Unknown" value="0x0000"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="sid" type="struct">
+ <fields>
+ <string comment="Device Name" name="DeviceName" size="16" type="char"/>
+ <integer comment="User Id" name="reserved_for_future_use" type="uint32"/>
+ <integer comment="Device Instance" name="instance" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="stationIpAddr" type="uint32"/>
+ <enum comment="" name="deviceType" subtype="DeviceType" type="uint32"/>
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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"/>
+ </fields>
+ </message>
+ <enum name="HeadsetMode">
+ <entries>
+ <entry comment="" name="HeadsetMode_On" text="On" value="0x0001"/>
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="deviceType" subtype="DeviceType" type="uint32"/>
+ <integer comment="" name="numberOfInServiceStreams" type="uint32"/>
+ <integer comment="" name="maxStreamsPerConf" type="uint32"/>
+ <integer comment="" name="numberOfOutOfServiceStreams" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="RegisterAvailableLinesMessage" opcode="0x002d" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="maxNumOfAvailLines" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="SequenceFlag">
+ <entries>
+ <entry comment="" name="Sequence_First" text="First" value="0x0000"/>
+ <entry comment="" name="Sequence_More" text="More" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="deviceToUserData" subtype="UserAndDeviceData" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataResponseMessage" opcode="0x002f" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="deviceToUserData" subtype="UserAndDeviceData" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="Layout">
+ <entries>
+ <entry comment="" name="Layout_NoLayout" text="NoLayout" value="0x0000"/>
+ <entry comment="" name="Layout_OneByOne" text="OneByOne" value="0x0001"/>
+ <entry comment="" name="Layout_OneByTwo" text="OneByTwo" value="0x0002"/>
+ <entry comment="" name="Layout_TwoByTwo" text="TwoByTwo" value="0x0003"/>
+ <entry comment="" name="Layout_TwoByTwo3Alt1" text="TwoByTwo3Alt1" value="0x0004"/>
+ <entry comment="" name="Layout_TwoByTwo3Alt2" text="TwoByTwo3Alt2" value="0x0005"/>
+ <entry comment="" name="Layout_ThreeByThree" text="ThreeByThree" value="0x0006"/>
+ <entry comment="" name="Layout_ThreeByThree6Alt1" text="ThreeByThree6Alt1" value="0x0007"/>
+ <entry comment="" name="Layout_ThreeByThree6Alt2" text="ThreeByThree6Alt2" value="0x0008"/>
+ <entry comment="" name="Layout_ThreeByThree4Alt1" text="ThreeByThree4Alt1" value="0x0009"/>
+ <entry comment="" name="Layout_ThreeByThree4Alt2" text="ThreeByThree4Alt2" value="0x000a"/>
+ </entries>
+ </enum>
+ <enum name="TransmitOrReceive">
+ <entries>
+ <entry comment="" name="TransmitOrReceive_None" text="None" value="0x0000"/>
+ <entry comment="" name="TransmitOrReceive_ReceiveOnly" text="ReceiveOnly" value="0x0001"/>
+ <entry comment="" name="TransmitOrReceive_TransmitOnly" text="TransmitOnly" value="0x0002"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" declare="yes" name="audioCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="videoCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="dataCapCount" type="uint32"/>
+ <integer comment="" name="RTPPayloadFormat" type="uint32"/>
+ <integer comment="" declare="yes" name="customPictureFormatCount" type="uint32"/>
+ <struct comment="" maxsize="6" name="customPictureFormat" size_fieldname="customPictureFormatCount" subtype="CustomPictureFormat" type="struct">
+ <fields>
+ <integer comment="" name="pictureWidth" type="uint32"/>
+ <integer comment="" name="pictureHeight" type="uint32"/>
+ <integer comment="" name="pixelAspectRatio" type="uint32"/>
+ <integer comment="" name="clockConversionCode" type="uint32"/>
+ <integer comment="" name="clockDivisor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="confResources" subtype="ConfResources" type="struct">
+ <fields>
+ <integer comment="" name="activeStreamsOnRegistration" type="uint32"/>
+ <integer comment="" name="maxBW" type="uint32"/>
+ <integer comment="" declare="yes" name="serviceResourceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="serviceResource" size_fieldname="serviceResourceCount" subtype="ServiceResource" type="struct">
+ <fields>
+ <integer comment="" declare="yes" name="layoutCount" type="uint32"/>
+ <enum comment="" maxsize="5" name="layouts" size_fieldname="layoutCount" subtype="Layout" type="uint32"/>
+ <integer comment="" name="serviceNum" type="uint32"/>
+ <integer comment="" name="maxStreams" type="uint32"/>
+ <integer comment="" name="maxConferences" type="uint32"/>
+ <integer comment="Active Conference" longcomment="Active conference at Registration" name="activeConferenceOnRegistration" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="18" name="audiocaps" size_fieldname="audioCapCount" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint32"/>
+ <union comment="" lookup_guide="payloadCapability" name="PAYLOADS" subtype="MediaCapabilityUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_ModemRelay" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SPRT" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SSE" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="10" name="vidCaps" size_fieldname="videoCapCount" subtype="VideoCapability" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="videoCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" declare="yes" name="levelPreferenceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="levelPreference" size_fieldname="levelPreferenceCount" subtype="LevelPreference" type="struct">
+ <fields>
+ <integer comment="" name="transmitPreference" type="uint32"/>
+ <integer comment="" name="format" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ <integer comment="" name="minBitRate" type="uint32"/>
+ <integer comment="" name="MPI" type="uint32"/>
+ <integer comment="" name="serviceNumber" type="uint32"/>
+ </fields>
+ </struct>
+ <union comment="" lookup_guide="payloadCapability" name="capability" subtype="VideoCapabilityUnion" type="union">
+ <fields>
+ <struct comment="" lookup_eq="Media_Payload_H261" name="h261VideoCapability" subtype="H261VideoCapability" type="struct">
+ <fields>
+ <integer comment="Temporal spatial trade off capability" name="temporalSpatialTradeOffCapability" type="uint32"/>
+ <integer comment="Still Image Transmission" name="stillImageTransmission" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H263" name="h263VideoCapability" subtype="H263VideoCapability" type="struct">
+ <fields>
+ <bitfield comment="H263 Capability BitField" name="h263_capability_bitfield" size="uint32" subtype="Generic_Bitfield_32" type="bitfield">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <integer comment="" name="annexNandWFutureUse" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_Vieo" name="vieoVideoCapability" subtype="VieoVideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="modelNumber" type="uint32"/>
+ <integer comment="" name="bandwidth" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="5" name="dataCaps" size_fieldname="dataCapCount" subtype="DataApplicationCapability" type="struct">
+ <fields>
+ <enum comment="" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="dataCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" name="protocolDependentData" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="OpenReceiveChanStatus">
+ <entries>
+ <entry comment="" name="OpenReceiveChanStatus_Ok" text="Ok" value="0x0000"/>
+ <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">
+ <fields>
+ <enum comment="" name="multimediaOpenReceiveChannelStatus" subtype="OpenReceiveChanStatus" 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="PassThrough PartyId" name="passThruPartyID" 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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="serviceURLIndex" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="FeatureStatReqMessage" opcode="0x0034" status="request" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="featureIndex" type="uint32"/>
+ <integer comment="" name="featureCapabilities" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="CreateConfResult">
+ <entries>
+ <entry comment="" name="CreateConfResult_OK" text="OK" value="0x0000"/>
+ <entry comment="" name="CreateConfResult_ResourceNotAvailable" text="ResourceNotAvailable" value="0x0001"/>
+ <entry comment="" name="CreateConfResult_ConferenceAlreadyExist" text="ConferenceAlreadyExist" value="0x0002"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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"/>
+ </fields>
+ </message>
+ <enum name="DeleteConfResult">
+ <entries>
+ <entry comment="" name="DeleteConfResult_OK" text="OK" value="0x0000"/>
+ <entry comment="" name="DeleteConfResult_ConferenceNotExist" text="ConferenceNotExist" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <enum comment="" name="delete_conf_result" subtype="DeleteConfResult" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="ModifyConfResult">
+ <entries>
+ <entry comment="" name="ModifyConfResult_OK" text="OK" value="0x0000"/>
+ <entry comment="" name="ModifyConfResult_ResourceNotAvailable" text="ResourceNotAvailable" value="0x0001"/>
+ <entry comment="" name="ModifyConfResult_ConferenceNotExist" text="ConferenceNotExist" value="0x0002"/>
+ <entry comment="" name="ModifyConfResult_InvalidParameter" text="InvalidParameter" value="0x0003"/>
+ <entry comment="" name="ModifyConfResult_MoreActiveCallsThanReserved" text="MoreActiveCallsThanReserved" value="0x0004"/>
+ <entry comment="" name="ModifyConfResult_InvalidResourceType" text="InvalidResourceType" value="0x0005"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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"/>
+ </fields>
+ </message>
+ <enum name="AddParticipantResult">
+ <entries>
+ <entry comment="" name="AddParticipantResult_OK" text="OK" value="0x0000"/>
+ <entry comment="" name="AddParticipantResult_ResourceNotAvailable" text="ResourceNotAvailable" value="0x0001"/>
+ <entry comment="" name="AddParticipantResult_ConferenceNotExist" text="ConferenceNotExist" value="0x0002"/>
+ <entry comment="" name="AddParticipantResult_DuplicateCallRef" text="DuplicateCallRef" value="0x0003"/>
+ <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">
+ <fields alignment="4" beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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"/>
+ </fields>
+ </message>
+ <enum name="ResourceType">
+ <entries>
+ <entry comment="" name="ResourceType_Conference" text="Conference" value="0x0000"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="last" type="uint32"/>
+ <integer comment="" declare="yes" name="numberOfEntries" type="uint32"/>
+ <struct comment="" maxsize="32" name="conferenceEntry" size_fieldname="numberOfEntries" subtype="AuditConferenceEntry" type="struct">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <enum comment="" name="resourceType" subtype="ResourceType" type="uint32"/>
+ <integer comment="" name="numberOfReservedParticipants" type="uint32"/>
+ <integer comment="" name="numberOfActiveParticipants" type="uint32"/>
+ <integer comment="" name="appID" type="uint32"/>
+ <string comment="" name="appConfID" size="32" type="char"/>
+ <string comment="" name="appData" size="24" type="char"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="AuditParticipantResult">
+ <entries>
+ <entry comment="" name="AuditParticipantResult_OK" text="OK" value="0x0000"/>
+ <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">
+ <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="" 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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="deviceToUserDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <enum comment="" name="sequenceFlag" subtype="SequenceFlag" type="uint32"/>
+ <integer comment="" name="displayPriority" type="uint32"/>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="appInstanceID" type="uint32"/>
+ <integer comment="" name="routingID" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="DeviceToUserDataResponseMessageVersion1" opcode="0x0042" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="deviceToUserDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <enum comment="" name="sequenceFlag" subtype="SequenceFlag" type="uint32"/>
+ <integer comment="" name="displayPriority" type="uint32"/>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="appInstanceID" type="uint32"/>
+ <integer comment="" name="routingID" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="dev2pbx" dynamic="no" name="UpdateCapabilitiesV2Message" opcode="0x0043" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" declare="yes" name="audioCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="videoCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="dataCapCount" type="uint32"/>
+ <integer comment="" name="RTPPayloadFormat" type="uint32"/>
+ <integer comment="" declare="yes" name="customPictureFormatCount" type="uint32"/>
+ <struct comment="" maxsize="6" name="customPictureFormat" size_fieldname="customPictureFormatCount" subtype="CustomPictureFormat" type="struct">
+ <fields>
+ <integer comment="" name="pictureWidth" type="uint32"/>
+ <integer comment="" name="pictureHeight" type="uint32"/>
+ <integer comment="" name="pixelAspectRatio" type="uint32"/>
+ <integer comment="" name="clockConversionCode" type="uint32"/>
+ <integer comment="" name="clockDivisor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="confResources" subtype="ConfResources" type="struct">
+ <fields>
+ <integer comment="" name="activeStreamsOnRegistration" type="uint32"/>
+ <integer comment="" name="maxBW" type="uint32"/>
+ <integer comment="" declare="yes" name="serviceResourceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="serviceResource" size_fieldname="serviceResourceCount" subtype="ServiceResource" type="struct">
+ <fields>
+ <integer comment="" declare="yes" name="layoutCount" type="uint32"/>
+ <enum comment="" maxsize="5" name="layouts" size_fieldname="layoutCount" subtype="Layout" type="uint32"/>
+ <integer comment="" name="serviceNum" type="uint32"/>
+ <integer comment="" name="maxStreams" type="uint32"/>
+ <integer comment="" name="maxConferences" type="uint32"/>
+ <integer comment="Active Conference" longcomment="Active conference at Registration" name="activeConferenceOnRegistration" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="18" name="audiocaps" size_fieldname="audioCapCount" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint32"/>
+ <union comment="" lookup_guide="payloadCapability" name="PAYLOADS" subtype="MediaCapabilityUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_ModemRelay" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SPRT" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SSE" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="10" name="vidCaps" size_fieldname="videoCapCount" subtype="VideoCapabilityV2" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="videoCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" declare="yes" name="levelPreferenceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="levelPreference" size_fieldname="levelPreferenceCount" subtype="LevelPreference" type="struct">
+ <fields>
+ <integer comment="" name="transmitPreference" type="uint32"/>
+ <integer comment="" name="format" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ <integer comment="" name="minBitRate" type="uint32"/>
+ <integer comment="" name="MPI" type="uint32"/>
+ <integer comment="" name="serviceNumber" type="uint32"/>
+ </fields>
+ </struct>
+ <union comment="" lookup_guide="payloadCapability" name="capability" subtype="VideoCapabilityV2Union" type="union">
+ <fields>
+ <struct comment="" lookup_eq="Media_Payload_H261" name="h261VideoCapability" subtype="H261VideoCapability" type="struct">
+ <fields>
+ <integer comment="Temporal spatial trade off capability" name="temporalSpatialTradeOffCapability" type="uint32"/>
+ <integer comment="Still Image Transmission" name="stillImageTransmission" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H263" name="h263VideoCapability" subtype="H263VideoCapability" type="struct">
+ <fields>
+ <bitfield comment="H263 Capability BitField" name="h263_capability_bitfield" size="uint32" subtype="Generic_Bitfield_32" type="bitfield">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <integer comment="" name="annexNandWFutureUse" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H264" name="h264VideoCapability" subtype="H264VideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="profile" type="uint32"/>
+ <integer comment="" name="level" type="uint32"/>
+ <integer comment="" name="customMaxMBPS" type="uint32"/>
+ <integer comment="" name="customMaxFS" type="uint32"/>
+ <integer comment="" name="customMaxDPB" type="uint32"/>
+ <integer comment="" name="customMaxBRandCPB" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_Vieo" name="vieoVideoCapability" subtype="VieoVideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="modelNumber" type="uint32"/>
+ <integer comment="" name="bandwidth" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="5" name="dataCaps" size_fieldname="dataCapCount" subtype="DataApplicationCapability" type="struct">
+ <fields>
+ <enum comment="" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="dataCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" name="protocolDependentData" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="Media_Encryption_Capability">
+ <entries>
+ <entry comment="" name="Media_Encryption_Capability_NotEncryptionCapable" text="NotEncryptionCapable" value="0x0000"/>
+ <entry comment="" name="Media_Encryption_Capability_EncryptionCapable" text="EncryptionCapable" value="0x0001"/>
+ </entries>
+ </enum>
+ <enum name="IpAddrMode">
+ <entries>
+ <entry comment="" name="IpAddrMode_ModeIpv4" text="ModeIpv4" value="0x0000"/>
+ <entry comment="" name="IpAddrMode_ModeIpv6" text="ModeIpv6" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" declare="yes" name="audioCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="videoCapCount" type="uint32"/>
+ <integer comment="" declare="yes" name="dataCapCount" type="uint32"/>
+ <integer comment="" name="RTPPayloadFormat" type="uint32"/>
+ <integer comment="" declare="yes" name="customPictureFormatCount" type="uint32"/>
+ <struct comment="" maxsize="6" name="customPictureFormat" size_fieldname="customPictureFormatCount" subtype="CustomPictureFormat" type="struct">
+ <fields>
+ <integer comment="" name="pictureWidth" type="uint32"/>
+ <integer comment="" name="pictureHeight" type="uint32"/>
+ <integer comment="" name="pixelAspectRatio" type="uint32"/>
+ <integer comment="" name="clockConversionCode" type="uint32"/>
+ <integer comment="" name="clockDivisor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="confResources" subtype="ConfResources" type="struct">
+ <fields>
+ <integer comment="" name="activeStreamsOnRegistration" type="uint32"/>
+ <integer comment="" name="maxBW" type="uint32"/>
+ <integer comment="" declare="yes" name="serviceResourceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="serviceResource" size_fieldname="serviceResourceCount" subtype="ServiceResource" type="struct">
+ <fields>
+ <integer comment="" declare="yes" name="layoutCount" type="uint32"/>
+ <enum comment="" maxsize="5" name="layouts" size_fieldname="layoutCount" subtype="Layout" type="uint32"/>
+ <integer comment="" name="serviceNum" type="uint32"/>
+ <integer comment="" name="maxStreams" type="uint32"/>
+ <integer comment="" name="maxConferences" type="uint32"/>
+ <integer comment="Active Conference" longcomment="Active conference at Registration" name="activeConferenceOnRegistration" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="18" name="audiocaps" size_fieldname="audioCapCount" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint32"/>
+ <union comment="" lookup_guide="payloadCapability" name="PAYLOADS" subtype="MediaCapabilityUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_ModemRelay" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SPRT" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_v150_LC_SSE" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="10" name="vidCaps" size_fieldname="videoCapCount" subtype="VideoCapabilityV3" type="struct">
+ <fields>
+ <enum comment="" declare="yes" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="videoCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" declare="yes" name="levelPreferenceCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="levelPreference" size_fieldname="levelPreferenceCount" subtype="LevelPreference" type="struct">
+ <fields>
+ <integer comment="" name="transmitPreference" type="uint32"/>
+ <integer comment="" name="format" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ <integer comment="" name="minBitRate" type="uint32"/>
+ <integer comment="" name="MPI" type="uint32"/>
+ <integer comment="" name="serviceNumber" type="uint32"/>
+ </fields>
+ </struct>
+ <enum comment="" name="encryptionCapability" subtype="Media_Encryption_Capability" type="uint32"/>
+ <union comment="" lookup_guide="payloadCapability" name="capability" subtype="VideoCapabilityV3Union" type="union">
+ <fields>
+ <struct comment="" lookup_eq="Media_Payload_H261" name="h261VideoCapability" subtype="H261VideoCapability" type="struct">
+ <fields>
+ <integer comment="Temporal spatial trade off capability" name="temporalSpatialTradeOffCapability" type="uint32"/>
+ <integer comment="Still Image Transmission" name="stillImageTransmission" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H263" name="h263VideoCapability" subtype="H263VideoCapability" type="struct">
+ <fields>
+ <bitfield comment="H263 Capability BitField" name="h263_capability_bitfield" size="uint32" subtype="Generic_Bitfield_32" type="bitfield">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <integer comment="" name="annexNandWFutureUse" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H264" name="h264VideoCapability" subtype="H264VideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="profile" type="uint32"/>
+ <integer comment="" name="level" type="uint32"/>
+ <integer comment="" name="customMaxMBPS" type="uint32"/>
+ <integer comment="" name="customMaxFS" type="uint32"/>
+ <integer comment="" name="customMaxDPB" type="uint32"/>
+ <integer comment="" name="customMaxBRandCPB" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_Vieo" name="vieoVideoCapability" subtype="VieoVideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="modelNumber" type="uint32"/>
+ <integer comment="" name="bandwidth" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ <enum comment="" name="ipAddressingMode" subtype="IpAddrMode" type="uint32"/>
+ </fields>
+ <fields beginversion="16" endversion="22">
+ <enum comment="" name="ipAddressingMode" subtype="IpAddrMode" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" maxsize="5" name="dataCaps" size_fieldname="dataCapCount" subtype="DataApplicationCapabilityV2" type="struct">
+ <fields>
+ <enum comment="" name="payloadCapability" subtype="Media_PayloadType" type="uint32"/>
+ <enum comment="" name="dataCapabilityDirection" subtype="TransmitOrReceive" type="uint32"/>
+ <integer comment="" name="protocolDependentData" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ <enum comment="" name="encryptionCapability" subtype="Media_Encryption_Capability" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="MediaType">
+ <entries>
+ <entry comment="" name="MediaType_Invalid" text="MediaType_Invalid" value="0x0000"/>
+ <entry comment="" name="MediaType_Audio" text="MediaType_Audio" value="0x0001"/>
+ <entry comment="" name="MediaType_Main_Video" text="MediaType_Main_Video" value="0x0002"/>
+ <entry comment="" name="MediaType_FECC" text="MediaType_FECC" value="0x0003"/>
+ <entry comment="" name="MediaType_Presentation_Video" text="MediaType_Presentation_Video" value="0x0004"/>
+ <entry comment="" name="MediaType_DataApp_BFCP" text="MediaType_DataApp_BFCP" value="0x0005"/>
+ <entry comment="" name="MediaType_DataApp_IXChannel" text="MediaType_DataApp_IXChannel" value="0x0006"/>
+ <entry comment="" name="MediaType_T38" text="MediaType_T38" value="0x0007"/>
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="CallId" name="callReference" 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"/>
+ </fields>
+ <fields beginversion="19" endversion="22">
+ <enum comment="" name="mediaType" subtype="MediaType" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="RSVPDirection">
+ <entries>
+ <entry comment="" name="RSVPDirection_SEND" text="SEND" value="0x0001"/>
+ <entry comment="" name="RSVPDirection_RECV" text="RECV" value="0x0002"/>
+ <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">
+ <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"/>
+ <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>
+ <enum name="QoSErrorCode">
+ <entries>
+ <entry comment="" name="QOS_CAUSE_RESERVATION_TIMEOUT" text="QOS_CAUSE_RESERVATION_TIMEOUT" value="0x0000"/>
+ <entry comment="" name="QOS_CAUSE_PATH_FAIL" text="QOS_CAUSE_PATH_FAIL" value="0x0001"/>
+ <entry comment="" name="QOS_CAUSE_RESV_FAIL" text="QOS_CAUSE_RESV_FAIL" value="0x0002"/>
+ <entry comment="" name="QOS_CAUSE_LISTEN_FAIL" text="QOS_CAUSE_LISTEN_FAIL" value="0x0003"/>
+ <entry comment="" name="QOS_CAUSE_RESOURCE_UNAVAILABLE" text="QOS_CAUSE_RESOURCE_UNAVAILABLE" value="0x0004"/>
+ <entry comment="" name="QOS_CAUSE_LISTEN_TIMEOUT" text="QOS_CAUSE_LISTEN_TIMEOUT" value="0x0005"/>
+ <entry comment="" name="QOS_CAUSE_RESV_RETRIES_FAIL" text="QOS_CAUSE_RESV_RETRIES_FAIL" value="0x0006"/>
+ <entry comment="" name="QOS_CAUSE_PATH_RETRIES_FAIL" text="QOS_CAUSE_PATH_RETRIES_FAIL" value="0x0007"/>
+ <entry comment="" name="QOS_CAUSE_RESV_PREEMPTION" text="QOS_CAUSE_RESV_PREEMPTION" value="0x0008"/>
+ <entry comment="" name="QOS_CAUSE_PATH_PREEMPTION" text="QOS_CAUSE_PATH_PREEMPTION" value="0x0009"/>
+ <entry comment="" name="QOS_CAUSE_RESV_MODIFY_FAIL" text="QOS_CAUSE_RESV_MODIFY_FAIL" value="0x000a"/>
+ <entry comment="" name="QOS_CAUSE_PATH_MODIFY_FAIL" text="QOS_CAUSE_PATH_MODIFY_FAIL" value="0x000b"/>
+ <entry comment="" name="QOS_CAUSE_RESV_TEAR" text="QOS_CAUSE_RESV_TEAR" value="0x000c"/>
+ </entries>
+ </enum>
+ <enum name="RSVPErrorCode">
+ <entries>
+ <entry comment="" name="RSVPErrorCode_CONFIRM" text="CONFIRM" value="0x0000"/>
+ <entry comment="" name="RSVPErrorCode_ADMISSION" text="ADMISSION" value="0x0001"/>
+ <entry comment="" name="RSVPErrorCode_ADMINISTRATIVE" text="ADMINISTRATIVE" value="0x0002"/>
+ <entry comment="" name="RSVPErrorCode_NO_PATH_INFORMATION" text="NO_PATH_INFORMATION" value="0x0003"/>
+ <entry comment="" name="RSVPErrorCode_NO_SENDER_INFORMATION" text="NO_SENDER_INFORMATION" value="0x0004"/>
+ <entry comment="" name="RSVPErrorCode_CONFLICTING_STYLE" text="CONFLICTING_STYLE" value="0x0005"/>
+ <entry comment="" name="RSVPErrorCode_UNKNOWN_STYLE" text="UNKNOWN_STYLE" value="0x0006"/>
+ <entry comment="" name="RSVPErrorCode_CONFLICTING_DST_PORTS" text="CONFLICTING_DST_PORTS" value="0x0007"/>
+ <entry comment="" name="RSVPErrorCode_CONFLICTING_SRC_PORTS" text="CONFLICTING_SRC_PORTS" value="0x0008"/>
+ <entry comment="" name="RSVPErrorCode_SERVICE_PREEMPTED" text="SERVICE_PREEMPTED" value="0x000c"/>
+ <entry comment="" name="RSVPErrorCode_UNKNOWN_OBJECT_CLASS" text="UNKNOWN_OBJECT_CLASS" value="0x000d"/>
+ <entry comment="" name="RSVPErrorCode_UNKNOWN_CLASS_TYPE" text="UNKNOWN_CLASS_TYPE" value="0x000e"/>
+ <entry comment="" name="RSVPErrorCode_API" text="API" value="0x0014"/>
+ <entry comment="" name="RSVPErrorCode_TRAFFIC" text="TRAFFIC" value="0x0015"/>
+ <entry comment="" name="RSVPErrorCode_TRAFFIC_SYSTEM" text="TRAFFIC_SYSTEM" value="0x0016"/>
+ <entry comment="" name="RSVPErrorCode_SYSTEM" text="SYSTEM" value="0x0017"/>
+ <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">
+ <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"/>
+ <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"/>
+ <enum comment="" name="errorCode" subtype="QoSErrorCode" type="uint32"/>
+ <integer comment="" name="failureNodeIpAddr" type="uint32"/>
+ <enum comment="" name="rsvpErrorCode" subtype="RSVPErrorCode" type="uint32"/>
+ <integer comment="" name="rsvpErrorSubCodeVal" type="uint32"/>
+ <integer comment="" name="rsvpErrorFlag" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="SubscriptionFeatureID">
+ <entries>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="transactionID" type="uint32"/>
+ <enum comment="" name="featureID" subtype="SubscriptionFeatureID" type="uint32"/>
+ <integer comment="" name="timer" type="uint32"/>
+ <string comment="" name="subscriptionID" size="256" type="char"/>
+ </fields>
+ </message>
+ <enum name="MediaPathID">
+ <entries>
+ <entry comment="" name="MediaPathID_Headset" text="Headset" value="0x0001"/>
+ <entry comment="" name="MediaPathID_Handset" text="Handset" value="0x0002"/>
+ <entry comment="" name="MediaPathID_Speaker" text="Speaker" value="0x0003"/>
+ </entries>
+ </enum>
+ <enum name="MediaPathEvent">
+ <entries>
+ <entry comment="" name="MediaPathEvent_On" text="On" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="mediaPathID" subtype="MediaPathID" type="uint32"/>
+ <enum comment="" name="mediaPathEvent" subtype="MediaPathEvent" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="MediaPathCapabilities">
+ <entries>
+ <entry comment="" name="MediaPathCapabilities_Enable" text="Enable" value="0x0001"/>
+ <entry comment="" name="MediaPathCapabilities_Disable" text="Disable" value="0x0002"/>
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <string comment="" name="mwiTargetNumber" size="25" type="char"/>
+ <string comment="" name="mwiControlNumber" size="25" type="char"/>
+ <integer comment="" name="areMessagesWaiting" type="uint32"/>
+ <struct comment="" name="totalVmCounts" subtype="MwiMessageCounts" type="struct">
+ <fields>
+ <integer comment="" name="numNewMsgs" type="uint32"/>
+ <integer comment="" name="numOldMsgs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="priorityVmCounts" subtype="MwiMessageCounts" type="struct">
+ <fields>
+ <integer comment="" name="numNewMsgs" type="uint32"/>
+ <integer comment="" name="numOldMsgs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="totalFaxCounts" subtype="MwiMessageCounts" type="struct">
+ <fields>
+ <integer comment="" name="numNewMsgs" type="uint32"/>
+ <integer comment="" name="numOldMsgs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="priorityFaxCounts" subtype="MwiMessageCounts" type="struct">
+ <fields>
+ <integer comment="" name="numNewMsgs" type="uint32"/>
+ <integer comment="" name="numOldMsgs" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="RegisterAckMessage" opcode="0x0081" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="keepAliveInterval" type="uint32"/>
+ <string comment="" name="dateTemplate" size="6" type="char"/>
+ <integer comment="" name="alignmentPadding" type="uint16"/>
+ <integer comment="" name="secondaryKeepAliveInterval" type="uint32"/>
+ <integer comment="" name="maxProtocolVer" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="DeviceTone">
+ <entries>
+ <entry comment="" name="DeviceTone_Silence" text="Silence" value="0x0000"/>
+ <entry comment="" name="DeviceTone_Dtmf1" text="Dtmf1" value="0x0001"/>
+ <entry comment="" name="DeviceTone_Dtmf2" text="Dtmf2" value="0x0002"/>
+ <entry comment="" name="DeviceTone_Dtmf3" text="Dtmf3" value="0x0003"/>
+ <entry comment="" name="DeviceTone_Dtmf4" text="Dtmf4" value="0x0004"/>
+ <entry comment="" name="DeviceTone_Dtmf5" text="Dtmf5" value="0x0005"/>
+ <entry comment="" name="DeviceTone_Dtmf6" text="Dtmf6" value="0x0006"/>
+ <entry comment="" name="DeviceTone_Dtmf7" text="Dtmf7" value="0x0007"/>
+ <entry comment="" name="DeviceTone_Dtmf8" text="Dtmf8" value="0x0008"/>
+ <entry comment="" name="DeviceTone_Dtmf9" text="Dtmf9" value="0x0009"/>
+ <entry comment="" name="DeviceTone_Dtmf0" text="Dtmf0" value="0x000a"/>
+ <entry comment="" name="DeviceTone_DtmfStar" text="DtmfStar" value="0x000e"/>
+ <entry comment="" name="DeviceTone_DtmfPound" text="DtmfPound" value="0x000f"/>
+ <entry comment="" name="DeviceTone_DtmfA" text="DtmfA" value="0x0010"/>
+ <entry comment="" name="DeviceTone_DtmfB" text="DtmfB" value="0x0011"/>
+ <entry comment="" name="DeviceTone_DtmfC" text="DtmfC" value="0x0012"/>
+ <entry comment="" name="DeviceTone_DtmfD" text="DtmfD" value="0x0013"/>
+ <entry comment="" name="DeviceTone_InsideDialTone" text="InsideDialTone" value="0x0021"/>
+ <entry comment="" name="DeviceTone_OutsideDialTone" text="OutsideDialTone" value="0x0022"/>
+ <entry comment="" name="DeviceTone_LineBusyTone" text="LineBusyTone" value="0x0023"/>
+ <entry comment="" name="DeviceTone_AlertingTone" text="AlertingTone" value="0x0024"/>
+ <entry comment="" name="DeviceTone_ReorderTone" text="ReorderTone" value="0x0025"/>
+ <entry comment="" name="DeviceTone_RecorderWarningTone" text="RecorderWarningTone" value="0x0026"/>
+ <entry comment="" name="DeviceTone_RecorderDetectedTone" text="RecorderDetectedTone" value="0x0027"/>
+ <entry comment="" name="DeviceTone_RevertingTone" text="RevertingTone" value="0x0028"/>
+ <entry comment="" name="DeviceTone_ReceiverOffHookTone" text="ReceiverOffHookTone" value="0x0029"/>
+ <entry comment="" name="DeviceTone_MessageWaitingIndicatorTone" text="MessageWaitingIndicatorTone" value="0x002a"/>
+ <entry comment="" name="DeviceTone_NoSuchNumberTone" text="NoSuchNumberTone" value="0x002b"/>
+ <entry comment="" name="DeviceTone_BusyVerificationTone" text="BusyVerificationTone" value="0x002c"/>
+ <entry comment="" name="DeviceTone_CallWaitingTone" text="CallWaitingTone" value="0x002d"/>
+ <entry comment="" name="DeviceTone_ConfirmationTone" text="ConfirmationTone" value="0x002e"/>
+ <entry comment="" name="DeviceTone_CampOnIndicationTone" text="CampOnIndicationTone" value="0x002f"/>
+ <entry comment="" name="DeviceTone_RecallDialTone" text="RecallDialTone" value="0x0030"/>
+ <entry comment="" name="DeviceTone_ZipZip" text="ZipZip" value="0x0031"/>
+ <entry comment="" name="DeviceTone_Zip" text="Zip" value="0x0032"/>
+ <entry comment="" name="DeviceTone_BeepBonk" text="BeepBonk" value="0x0033"/>
+ <entry comment="" name="DeviceTone_MusicTone" text="MusicTone" value="0x0034"/>
+ <entry comment="" name="DeviceTone_HoldTone" text="HoldTone" value="0x0035"/>
+ <entry comment="" name="DeviceTone_TestTone" text="TestTone" value="0x0036"/>
+ <entry comment="" name="DeviceTone_MonitorWarningTone" text="MonitorWarningTone" value="0x0038"/>
+ <entry comment="" name="DeviceTone_SecureWarningTone" text="SecureWarningTone" value="0x0039"/>
+ <entry comment="" name="DeviceTone_AddCallWaiting" text="AddCallWaiting" value="0x0040"/>
+ <entry comment="" name="DeviceTone_PriorityCallWait" text="PriorityCallWait" value="0x0041"/>
+ <entry comment="" name="DeviceTone_RecallDial" text="RecallDial" value="0x0042"/>
+ <entry comment="" name="DeviceTone_BargIn" text="BargIn" value="0x0043"/>
+ <entry comment="" name="DeviceTone_DistinctAlert" text="DistinctAlert" value="0x0044"/>
+ <entry comment="" name="DeviceTone_PriorityAlert" text="PriorityAlert" value="0x0045"/>
+ <entry comment="" name="DeviceTone_ReminderRing" text="ReminderRing" value="0x0046"/>
+ <entry comment="" name="DeviceTone_PrecedenceRingBack" text="PrecedenceRingBack" value="0x0047"/>
+ <entry comment="" name="DeviceTone_PreemptionTone" text="PreemptionTone" value="0x0048"/>
+ <entry comment="" name="DeviceTone_NonSecureWarningTone" text="NonSecureWarningTone" value="0x0049"/>
+ <entry comment="" name="DeviceTone_MF1" text="MF1" value="0x0050"/>
+ <entry comment="" name="DeviceTone_MF2" text="MF2" value="0x0051"/>
+ <entry comment="" name="DeviceTone_MF3" text="MF3" value="0x0052"/>
+ <entry comment="" name="DeviceTone_MF4" text="MF4" value="0x0053"/>
+ <entry comment="" name="DeviceTone_MF5" text="MF5" value="0x0054"/>
+ <entry comment="" name="DeviceTone_MF6" text="MF6" value="0x0055"/>
+ <entry comment="" name="DeviceTone_MF7" text="MF7" value="0x0056"/>
+ <entry comment="" name="DeviceTone_MF8" text="MF8" value="0x0057"/>
+ <entry comment="" name="DeviceTone_MF9" text="MF9" value="0x0058"/>
+ <entry comment="" name="DeviceTone_MF0" text="MF0" value="0x0059"/>
+ <entry comment="" name="DeviceTone_MFKP1" text="MFKP1" value="0x005a"/>
+ <entry comment="" name="DeviceTone_MFST" text="MFST" value="0x005b"/>
+ <entry comment="" name="DeviceTone_MFKP2" text="MFKP2" value="0x005c"/>
+ <entry comment="" name="DeviceTone_MFSTP" text="MFSTP" value="0x005d"/>
+ <entry comment="" name="DeviceTone_MFST3P" text="MFST3P" value="0x005e"/>
+ <entry comment="" name="DeviceTone_MILLIWATT" text="MILLIWATT" value="0x005f"/>
+ <entry comment="" name="DeviceTone_MILLIWATTTEST" text="MILLIWATTTEST" value="0x0060"/>
+ <entry comment="" name="DeviceTone_HIGHTONE" text="HIGHTONE" value="0x0061"/>
+ <entry comment="" name="DeviceTone_FLASHOVERRIDE" text="FLASHOVERRIDE" value="0x0062"/>
+ <entry comment="" name="DeviceTone_FLASH" text="FLASH" value="0x0063"/>
+ <entry comment="" name="DeviceTone_PRIORITY" text="PRIORITY" value="0x0064"/>
+ <entry comment="" name="DeviceTone_IMMEDIATE" text="IMMEDIATE" value="0x0065"/>
+ <entry comment="" name="DeviceTone_PREAMPWARN" text="PREAMPWARN" value="0x0066"/>
+ <entry comment="" name="DeviceTone_2105HZ" text="2105HZ" value="0x0067"/>
+ <entry comment="" name="DeviceTone_2600HZ" text="2600HZ" value="0x0068"/>
+ <entry comment="" name="DeviceTone_440HZ" text="440HZ" value="0x0069"/>
+ <entry comment="" name="DeviceTone_300HZ" text="300HZ" value="0x006a"/>
+ <entry comment="" name="DeviceTone_Mobility_WP" text="Mobility_WP" value="0x006b"/>
+ <entry comment="" name="DeviceTone_Mobility_UAC" text="Mobility_UAC" value="0x006c"/>
+ <entry comment="" name="DeviceTone_Mobility_WTDN" text="Mobility_WTDN" value="0x006d"/>
+ <entry comment="" name="DeviceTone_Mobility_MON" text="Mobility_MON" value="0x006e"/>
+ <entry comment="" name="DeviceTone_Mobility_MOFF" text="Mobility_MOFF" value="0x006f"/>
+ <entry comment="" name="DeviceTone_Mobility_UKC" text="Mobility_UKC" value="0x0070"/>
+ <entry comment="" name="DeviceTone_Mobility_VMA" text="Mobility_VMA" value="0x0071"/>
+ <entry comment="" name="DeviceTone_Mobility_FAC" text="Mobility_FAC" value="0x0072"/>
+ <entry comment="" name="DeviceTone_Mobility_CMC" text="Mobility_CMC" value="0x0073"/>
+ <entry comment="" name="DeviceTone_MLPP_PALA" text="MLPP_PALA" value="0x0077"/>
+ <entry comment="" name="DeviceTone_MLPP_ICA" text="MLPP_ICA" value="0x0078"/>
+ <entry comment="" name="DeviceTone_MLPP_VCA" text="MLPP_VCA" value="0x0079"/>
+ <entry comment="" name="DeviceTone_MLPP_BPA" text="MLPP_BPA" value="0x007a"/>
+ <entry comment="" name="DeviceTone_MLPP_BNEA" text="MLPP_BNEA" value="0x007b"/>
+ <entry comment="" name="DeviceTone_MLPP_UPA" text="MLPP_UPA" value="0x007c"/>
+ <entry comment="" name="DeviceTone_TUA" text="TUA" value="0x007d"/>
+ <entry comment="" name="DeviceTone_GONE" text="GONE" value="0x007e"/>
+ <entry comment="" name="DeviceTone_NoTone" text="NoTone" value="0x007f"/>
+ <entry comment="" name="DeviceTone_MAX" text="MAX" value="0x0080"/>
+ </entries>
+ </enum>
+ <enum name="ToneOutputDirection">
+ <entries>
+ <entry comment="" name="ToneOutputDirection_User" text="User" value="0x0000"/>
+ <entry comment="" name="ToneOutputDirection_Network" text="Network" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="tone" subtype="DeviceTone" type="uint32"/>
+ <enum comment="" name="tone_output_direction" subtype="ToneOutputDirection" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="StopToneMessage" opcode="0x0083" status="no" type="MediaControl">
+ <fields>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <enum comment="" name="tone" subtype="DeviceTone" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="RingMode">
+ <entries>
+ <entry comment="" name="RingMode_RingOff" text="RingOff" value="0x0001"/>
+ <entry comment="" name="RingMode_InsideRing" text="InsideRing" value="0x0002"/>
+ <entry comment="" name="RingMode_OutsideRing" text="OutsideRing" value="0x0003"/>
+ <entry comment="" name="RingMode_FeatureRing" text="FeatureRing" value="0x0004"/>
+ <entry comment="" name="RingMode_FlashOnly" text="FlashOnly" value="0x0005"/>
+ <entry comment="" name="RingMode_PrecedenceRing" text="PrecedenceRing" value="0x0006"/>
+ </entries>
+ </enum>
+ <enum name="RingDuration">
+ <entries>
+ <entry comment="" name="RingDuration_NormalRing" text="NormalRing" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="ringMode" subtype="RingMode" type="uint32"/>
+ <enum comment="" name="ringDuration" subtype="RingDuration" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="LampMode">
+ <entries>
+ <entry comment="" name="LampMode_Off" text="Off" value="0x0001"/>
+ <entry comment="" name="LampMode_On" text="On" value="0x0002"/>
+ <entry comment="" name="LampMode_Wink" text="Wink" value="0x0003"/>
+ <entry comment="" name="LampMode_Flash" text="Flash" value="0x0004"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="stimulus" subtype="DeviceStimulus" type="uint32"/>
+ <integer comment="" name="stimulusInstance" type="uint32"/>
+ <enum comment="" name="lampMode" subtype="LampMode" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="SpeakerMode">
+ <entries>
+ <entry comment="" name="SpeakerMode_On" text="On" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="speakerMode" subtype="SpeakerMode" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="MicrophoneMode">
+ <entries>
+ <entry comment="" name="MicrophoneMode_On" text="On" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="" name="micMode" subtype="MicrophoneMode" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="Media_SilenceSuppression">
+ <entries>
+ <entry comment="" name="Media_SilenceSuppression_Off" text="Media_SilenceSuppression_Off" value="0x0000"/>
+ <entry comment="" name="Media_SilenceSuppression_On" text="Media_SilenceSuppression_On" value="0x0001"/>
+ </entries>
+ </enum>
+ <enum name="MediaEncryptionAlgorithmType">
+ <entries>
+ <entry comment="" name="MediaEncryptionAlgorithmType_NO_ENCRYPTION" text="NO_ENCRYPTION" value="0x0000"/>
+ <entry comment="" name="MediaEncryptionAlgorithmType_CCM_AES_CM_128_HMAC_SHA1_32" text="CCM_AES_CM_128_HMAC_SHA1_32" value="0x0001"/>
+ <entry comment="" name="MediaEncryptionAlgorithmType_CCM_AES_CM_128_HMAC_SHA1_80" text="CCM_AES_CM_128_HMAC_SHA1_80" value="0x0002"/>
+ <entry comment="" name="MediaEncryptionAlgorithmType_CCM_F8_128_HMAC_SHA1_32" text="CCM_F8_128_HMAC_SHA1_32" value="0x0003"/>
+ <entry comment="" name="MediaEncryptionAlgorithmType_CCM_F8_128_HMAC_SHA1_80" text="CCM_F8_128_HMAC_SHA1_80" value="0x0004"/>
+ </entries>
+ </enum>
+ <message comment="" direction="pbx2dev" dynamic="no" name="StartMediaTransmissionMessage" opcode="0x008a" priority="send_immediate" status="no" type="MediaControl">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" type="uint32"/>
+ <ipv4or6 comment="" name="remoteIpAddr" subtype="IpAddress" type="ipaddr"/>
+ <integer comment="" name="remotePortNumber" subtype="uint32" type="ipport" use_param="remoteIpAddr"/>
+ <integer comment="" name="millisecondPacketSize" type="uint32"/>
+ <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <struct comment="" name="qualifierOut" subtype="Media_QualifierOutgoing" type="struct">
+ <fields>
+ <integer comment="" name="precedenceValue" type="uint32"/>
+ <enum comment="" name="ssValue" subtype="Media_SilenceSuppression" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint16"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="15">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierOutgoingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <struct comment="" name="mTxMediaEncryptionKeyInfo" subtype="MediaEncryptionKeyInfo" type="struct">
+ <fields>
+ <enum comment="" name="algorithmID" subtype="MediaEncryptionAlgorithmType" type="uint32"/>
+ <integer comment="" declare="yes" name="keylen" type="uint16"/>
+ <integer comment="" declare="yes" name="saltlen" type="uint16"/>
+ <integer comment="" maxsize="16" name="key" size_fieldname="keylen" type="uint8"/>
+ <integer comment="" maxsize="16" name="salt" size_fieldname="saltlen" type="uint8"/>
+ <integer comment="" name="isMKIPresent" type="uint32"/>
+ <integer comment="" name="keyDerivationRate" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="streamPassThroughID" type="uint32"/>
+ <integer comment="" name="associatedStreamID" type="uint32"/>
+ <integer comment="" name="RFC2833PayloadType" type="uint32"/>
+ <integer comment="" name="dtmfType" type="uint32"/>
+ <integer comment="" name="mixingMode" type="uint32"/>
+ <integer comment="" name="partyDirection" type="uint32"/>
+ </fields>
+ <fields beginversion="20" endversion="22">
+ <struct comment="" name="latentCapsInfo" type="struct">
+ <fields>
+ <integer comment="" name="active" type="uint32"/>
+ <struct comment="" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="payloadParam" type="struct">
+ <fields>
+ <integer comment="" name="nse" type="uint8"/>
+ <integer comment="" name="rfc2833" type="uint8"/>
+ <integer comment="" name="sse" type="uint8"/>
+ <integer comment="" name="v150sprt" type="uint8"/>
+ <integer comment="" name="noaudio" type="uint8"/>
+ <integer comment="" name="FutureUse1" type="uint8"/>
+ <integer comment="" name="FutureUse2" type="uint8"/>
+ <integer comment="" name="FutureUse3" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="PortHandling">
+ <entries>
+ <entry comment="" name="PortHandling_CLOSE_PORT" text="CLOSE_PORT" value="0x0000"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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>
+ <enum name="CallType">
+ <entries>
+ <entry comment="" name="CallType_InBoundCall" text="InBoundCall" value="0x0001"/>
+ <entry comment="" name="CallType_OutBoundCall" text="OutBoundCall" value="0x0002"/>
+ <entry comment="" name="CallType_ForwardCall" text="ForwardCall" value="0x0003"/>
+ </entries>
+ </enum>
+ <enum name="CallSecurityStatusType">
+ <entries>
+ <entry comment="" name="CallSecurityStatusType_Unknown" text="Unknown" value="0x0000"/>
+ <entry comment="" name="CallSecurityStatusType_NotAuthenticated" text="NotAuthenticated" value="0x0001"/>
+ <entry comment="" name="CallSecurityStatusType_Authenticated" text="Authenticated" value="0x0002"/>
+ <entry comment="" name="CallSecurityStatusType_Encrypted" text="Encrypted" value="0x0003"/>
+ <entry comment="" name="CallSecurityStatusType_Max" text="Max" value="0x0004"/>
+ </entries>
+ </enum>
+ <bitfield name="RestrictInformationType">
+ <entries>
+ <entry comment="" name="RestrictInformationType_CallingPartyName" text="CallingPartyName" value="0x0001"/>
+ <entry comment="" name="RestrictInformationType_CallingPartyNumber" text="CallingPartyNumber" value="0x0002"/>
+ <entry comment="" name="RestrictInformationType_CallingParty" text="CallingParty" value="0x0003"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyName" text="CalledPartyName" value="0x0004"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyNumber" text="CalledPartyNumber" value="0x0008"/>
+ <entry comment="" name="RestrictInformationType_CalledParty" text="CalledParty" value="0x000c"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyName" text="OriginalCalledPartyName" value="0x0010"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyNumber" text="OriginalCalledPartyNumber" value="0x0020"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledParty" text="OriginalCalledParty" value="0x0030"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyName" text="LastRedirectPartyName" value="0x0040"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyNumber" text="LastRedirectPartyNumber" value="0x0080"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectParty" text="LastRedirectParty" value="0x00c0"/>
+ <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">
+ <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"/>
+ <string comment="Called Party Name" name="calledPartyName" size="40" type="char"/>
+ <string comment="CalledPartyNumber" name="calledParty" size="24" type="char"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="" name="callType" subtype="CallType" type="uint32"/>
+ <string comment="Original Called Party Name" name="originalCalledPartyName" size="40" type="char"/>
+ <string comment="Original Called Party Number" name="originalCalledParty" size="24" type="char"/>
+ <string comment="Last Redirecting Party Name" name="lastRedirectingPartyName" size="40" type="char"/>
+ <string comment="Last Redirecting Party Number" name="lastRedirectingParty" size="24" type="char"/>
+ <integer comment="Original Called Party Redirect Reason" name="originalCdpnRedirectReason" type="uint32"/>
+ <integer comment="Last Redirecting Reason" name="lastRedirectingReason" type="uint32"/>
+ <string comment="Calling Party Voicemail Box Number" name="cgpnVoiceMailbox" size="24" type="char"/>
+ <string comment="Called Party Voicemail Box Number" name="cdpnVoiceMailbox" size="24" type="char"/>
+ <string comment="Original Called Party Voicemail Box Number" name="originalCdpnVoiceMailbox" size="24" type="char"/>
+ <string comment="Last Redirecting Parties Voicemail Box Number" name="lastRedirectingVoiceMailbox" size="24" type="char"/>
+ <integer comment="CallId" name="callInstance" type="uint32"/>
+ <enum comment="" name="callSecurityStatus" subtype="CallSecurityStatusType" type="uint32"/>
+ <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield">
+ <entries>
+ <entry comment="" name="RestrictInformationType_CallingPartyName" text="CallingPartyName" value="0x0001"/>
+ <entry comment="" name="RestrictInformationType_CallingPartyNumber" text="CallingPartyNumber" value="0x0002"/>
+ <entry comment="" name="RestrictInformationType_CallingParty" text="CallingParty" value="0x0003"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyName" text="CalledPartyName" value="0x0004"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyNumber" text="CalledPartyNumber" value="0x0008"/>
+ <entry comment="" name="RestrictInformationType_CalledParty" text="CalledParty" value="0x000c"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyName" text="OriginalCalledPartyName" value="0x0010"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyNumber" text="OriginalCalledPartyNumber" value="0x0020"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledParty" text="OriginalCalledParty" value="0x0030"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyName" text="LastRedirectPartyName" value="0x0040"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyNumber" text="LastRedirectPartyNumber" value="0x0080"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectParty" text="LastRedirectParty" value="0x00c0"/>
+ <entry comment="" name="RestrictInformationType_BitsReserved" text="BitsReserved" value="0xffffff00"/>
+ </entries>
+ </bitfield>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="ForwardStatMessage" opcode="0x0090" priority="send_immediate" status="result" type="RegistrationAndManagement">
+ <fields>
+ <integer comment="" name="activeForward" type="uint32"/>
+ <integer comment="" name="lineNumber" type="uint32"/>
+ <integer comment="" name="forwardAllActive" type="uint32"/>
+ <string comment="" declare="yes" name="forwardAllDirnum" size="VariableDirnumSize" type="char"/>
+ <integer comment="" name="forwardBusyActive" type="uint32"/>
+ <string comment="" declare="yes" name="forwardBusyDirnum" size="VariableDirnumSize" type="char"/>
+ <integer comment="" name="forwardNoAnswerActive" type="uint32"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="speedDialNumber" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="lineNumber" 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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="sid" type="struct">
+ <fields>
+ <string comment="Device Name" name="DeviceName" size="16" type="char"/>
+ <integer comment="User Id" name="reserved_for_future_use" type="uint32"/>
+ <integer comment="Device Instance" name="instance" type="uint32"/>
+ </fields>
+ </struct>
+ <string comment="" name="userName" size="40" type="char"/>
+ <string comment="" name="serverName" size="40" type="char"/>
+ <integer comment="" name="numberOfLines" type="uint32"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="timeDataInfo" subtype="Time" type="struct">
+ <fields>
+ <integer comment="" name="wYear" type="uint32"/>
+ <integer comment="" name="wMonth" type="uint32"/>
+ <integer comment="" name="wDayOfWeek" type="uint32"/>
+ <integer comment="" name="wDay" type="uint32"/>
+ <integer comment="" name="wHour" type="uint32"/>
+ <integer comment="" name="wMinute" type="uint32"/>
+ <integer comment="" name="wSecond" type="uint32"/>
+ <integer comment="" name="wMilliseconds" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="systemTime" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="SessionType">
+ <entries>
+ <entry comment="" name="SessionType_Chat" text="Chat" value="0x0001"/>
+ <entry comment="" name="SessionType_Whiteboard" text="Whiteboard" value="0x0002"/>
+ <entry comment="" name="SessionType_ApplicationSharing" text="ApplicationSharing" value="0x0004"/>
+ <entry comment="" name="SessionType_FileTransfer" text="FileTransfer" value="0x0008"/>
+ <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">
+ <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">
+ <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>
+ <enum name="ButtonType">
+ <entries>
+ <entry comment="" name="ButtonType_Unused" text="Unused" value="0x00"/>
+ <entry comment="" name="ButtonType_Last Number Redial" text="Last Number Redial" value="0x01"/>
+ <entry comment="" name="ButtonType_SpeedDial" text="SpeedDial" value="0x02"/>
+ <entry comment="" name="ButtonType_Hold" text="Hold" value="0x03"/>
+ <entry comment="" name="ButtonType_Transfer" text="Transfer" value="0x04"/>
+ <entry comment="" name="ButtonType_Forward All" text="Forward All" value="0x05"/>
+ <entry comment="" name="ButtonType_Forward Busy" text="Forward Busy" value="0x06"/>
+ <entry comment="" name="ButtonType_Forward No Answer" text="Forward No Answer" value="0x07"/>
+ <entry comment="" name="ButtonType_Display" text="Display" value="0x08"/>
+ <entry comment="" name="ButtonType_Line" text="Line" value="0x09"/>
+ <entry comment="" name="ButtonType_T120 Chat" text="T120 Chat" value="0x0A"/>
+ <entry comment="" name="ButtonType_T120 Whiteboard" text="T120 Whiteboard" value="0x0B"/>
+ <entry comment="" name="ButtonType_T120 Application Sharing" text="T120 Application Sharing" value="0x0C"/>
+ <entry comment="" name="ButtonType_T120 File Transfer" text="T120 File Transfer" value="0x0D"/>
+ <entry comment="" name="ButtonType_Video" text="Video" value="0x0E"/>
+ <entry comment="" name="ButtonType_Voicemail" text="Voicemail" value="0x0F"/>
+ <entry comment="" name="ButtonType_Answer Release" text="Answer Release" value="0x10"/>
+ <entry comment="" name="ButtonType_Auto Answer" text="Auto Answer" value="0x11"/>
+ <entry comment="" name="ButtonType_Select" text="Select" value="0x12"/>
+ <entry comment="" name="ButtonType_Feature" text="Feature" value="0x13"/>
+ <entry comment="" name="ButtonType_ServiceURL" text="ServiceURL" value="0x14"/>
+ <entry comment="" name="ButtonType_BusyLampField Speeddial" text="BusyLampField Speeddial" value="0x15"/>
+ <entry comment="" name="ButtonType_Malicious Call" text="Malicious Call" value="0x1B"/>
+ <entry comment="" name="ButtonType_Generic App B1" text="Generic App B1" value="0x21"/>
+ <entry comment="" name="ButtonType_Generic App B2" text="Generic App B2" value="0x22"/>
+ <entry comment="" name="ButtonType_Generic App B3" text="Generic App B3" value="0x23"/>
+ <entry comment="" name="ButtonType_Generic App B4" text="Generic App B4" value="0x24"/>
+ <entry comment="" name="ButtonType_Generic App B5" text="Generic App B5" value="0x25"/>
+ <entry comment="" name="ButtonType_Monitor/Multiblink" text="Monitor/Multiblink" value="0x26"/>
+ <entry comment="" name="ButtonType_Meet Me Conference" text="Meet Me Conference" value="0x7B"/>
+ <entry comment="" name="ButtonType_Conference" text="Conference" value="0x7D"/>
+ <entry comment="" name="ButtonType_Call Park" text="Call Park" value="0x7E"/>
+ <entry comment="" name="ButtonType_Call Pickup" text="Call Pickup" value="0x7F"/>
+ <entry comment="" name="ButtonType_Group Call Pickup" text="Group Call Pickup" value="0x80"/>
+ <entry comment="" name="ButtonType_Mobility" text="Mobility" value="0x81"/>
+ <entry comment="" name="ButtonType_DoNotDisturb" text="DoNotDisturb" value="0x82"/>
+ <entry comment="" name="ButtonType_ConfList" text="ConfList" value="0x83"/>
+ <entry comment="" name="ButtonType_RemoveLastParticipant" text="RemoveLastParticipant" value="0x84"/>
+ <entry comment="" name="ButtonType_QRT" text="QRT" value="0x85"/>
+ <entry comment="" name="ButtonType_CallBack" text="CallBack" value="0x86"/>
+ <entry comment="" name="ButtonType_OtherPickup" text="OtherPickup" value="0x87"/>
+ <entry comment="" name="ButtonType_VideoMode" text="VideoMode" value="0x88"/>
+ <entry comment="" name="ButtonType_NewCall" text="NewCall" value="0x89"/>
+ <entry comment="" name="ButtonType_EndCall" text="EndCall" value="0x8A"/>
+ <entry comment="" name="ButtonType_HLog" text="HLog" value="0x8B"/>
+ <entry comment="" name="ButtonType_Queuing" text="Queuing" value="0x8F"/>
+ <entry comment="" name="ButtonType_Test E" text="Test E" value="0xC0"/>
+ <entry comment="" name="ButtonType_Test F" text="Test F" value="0xC1"/>
+ <entry comment="" name="ButtonType_Test I" text="Test I" value="0xC4"/>
+ <entry comment="" name="ButtonType_Messages" text="Messages" value="0xC2"/>
+ <entry comment="" name="ButtonType_Directory" text="Directory" value="0xC3"/>
+ <entry comment="" name="ButtonType_Application" text="Application" value="0xC5"/>
+ <entry comment="" name="ButtonType_Headset" text="Headset" value="0xC6"/>
+ <entry comment="" name="ButtonType_Keypad" text="Keypad" value="0xF0"/>
+ <entry comment="" name="ButtonType_Aec" text="Aec" value="0xFD"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="buttonTemplate" subtype="ButtonTemplate" type="struct">
+ <fields>
+ <integer comment="" name="buttonOffset" type="uint32"/>
+ <integer comment="" name="buttonCount" type="uint32"/>
+ <integer comment="" declare="yes" name="totalButtonCount" type="uint32"/>
+ <struct comment="" maxsize="42" name="definition" size_fieldname="totalButtonCount" subtype="ButtonDefinition" type="struct">
+ <fields>
+ <integer comment="" name="instanceNumber" type="uint8"/>
+ <enum comment="" name="buttonDefinition" subtype="ButtonType" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="VersionMessage" opcode="0x0098" status="no" 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">
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="server" size="5" subtype="ServerIdentifier" type="struct">
+ <fields>
+ <string comment="" name="ServerName" size="48" type="char"/>
+ </fields>
+ </struct>
+ <integer comment="" name="serverTcpListenPort" size="5" type="uint32"/>
+ <struct comment="" name="serverIpAddr" size="5" subtype="IpAddress" type="struct">
+ <fields>
+ <ipv4or6 comment="ipaddress in big endian" endianness="big" name="stationIpAddr" size="16" subtype="uint8" type="ipaddr"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="DeviceResetType">
+ <entries>
+ <entry comment="" name="DeviceResetType_RESET" text="RESET" value="0x0001"/>
+ <entry comment="" name="DeviceResetType_RESTART" text="RESTART" value="0x0002"/>
+ <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">
+ <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"/>
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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"/>
+ <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <struct comment="" name="qualifierIn" subtype="Media_QualifierIncoming" type="struct">
+ <fields>
+ <enum comment="" name="ecValue" subtype="Media_EchoCancellation" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierIncomingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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"/>
+ <enum comment="" declare="yes" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <struct comment="" name="qualifierOut" subtype="Media_QualifierOutgoing" type="struct">
+ <fields>
+ <integer comment="" name="precedenceValue" type="uint32"/>
+ <enum comment="" name="ssValue" subtype="Media_SilenceSuppression" type="uint32"/>
+ <integer comment="" name="maxFramesPerPacket" type="uint16"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="15">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierOutgoingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields>
+ <enum comment="" name="ecValue" subtype="Media_EchoCancellation" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierIncomingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <struct comment="" name="mRxMediaEncryptionKeyInfo" subtype="MediaEncryptionKeyInfo" type="struct">
+ <fields>
+ <enum comment="" name="algorithmID" subtype="MediaEncryptionAlgorithmType" type="uint32"/>
+ <integer comment="" declare="yes" name="keylen" type="uint16"/>
+ <integer comment="" declare="yes" name="saltlen" type="uint16"/>
+ <integer comment="" maxsize="16" name="key" size_fieldname="keylen" type="uint8"/>
+ <integer comment="" maxsize="16" name="salt" size_fieldname="saltlen" type="uint8"/>
+ <integer comment="" name="isMKIPresent" type="uint32"/>
+ <integer comment="" name="keyDerivationRate" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="streamPassThroughID" type="uint32"/>
+ <integer comment="" name="associatedStreamID" type="uint32"/>
+ <integer comment="" name="RFC2833PayloadType" type="uint32"/>
+ <integer comment="" name="dtmfType" type="uint32"/>
+ </fields>
+ <fields beginversion="11">
+ <integer comment="" name="mixingMode" type="uint32"/>
+ <integer comment="" name="partyDirection" type="uint32"/>
+ <ipv4or6 comment="" name="sourceIpAddr" subtype="IpAddress" type="ipaddr"/>
+ <integer comment="" name="sourcePortNumber" subtype="uint32" type="ipport" use_param="sourceIpAddr"/>
+ </fields>
+ <fields beginversion="16">
+ <enum comment="" name="requestedIpAddrType" subtype="IpAddrType" type="uint32"/>
+ </fields>
+ <fields beginversion="17">
+ <integer comment="" name="audioLevelAdjustment" type="int32"/>
+ </fields>
+ <fields beginversion="20" endversion="22">
+ <struct comment="" name="latentCapsInfo" type="struct">
+ <fields>
+ <integer comment="" name="active" type="uint32"/>
+ <struct comment="" name="modemRelay" type="struct">
+ <fields>
+ <integer comment="" name="capAndVer" type="uint32"/>
+ <integer comment="" name="modAnd2833" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="sprtPayload" type="struct">
+ <fields>
+ <integer comment="" name="chan0MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxPayload" type="uint16"/>
+ <integer comment="" name="chan3MaxPayload" type="uint16"/>
+ <integer comment="" name="chan2MaxWindow" type="uint16"/>
+ </fields>
+ </struct>
+ <struct comment="" name="sse" type="struct">
+ <fields>
+ <integer comment="" name="standard" type="uint32"/>
+ <integer comment="" name="vendor" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" name="payloadParam" type="struct">
+ <fields>
+ <integer comment="" name="nse" type="uint8"/>
+ <integer comment="" name="rfc2833" type="uint8"/>
+ <integer comment="" name="sse" type="uint8"/>
+ <integer comment="" name="v150sprt" type="uint8"/>
+ <integer comment="" name="noaudio" type="uint8"/>
+ <integer comment="" name="FutureUse1" type="uint8"/>
+ <integer comment="" name="FutureUse2" type="uint8"/>
+ <integer comment="" name="FutureUse3" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="CloseReceiveChannelMessage" opcode="0x0106" priority="send_immediate" status="no" 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="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">
+ <fields>
+ <string comment="Directory Number" declare="yes" name="directoryNum" size="VariableDirnumSize" type="char"/>
+ <integer comment="CallId" name="callReference" 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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="softKeyTemplate" subtype="SoftKeyTemplate" type="struct">
+ <fields>
+ <integer comment="" name="softKeyOffset" type="uint32"/>
+ <integer comment="" name="softKeyCount" type="uint32"/>
+ <integer comment="" declare="yes" name="totalSoftKeyCount" type="uint32"/>
+ <struct comment="" maxsize="32" name="definition" size_fieldname="totalSoftKeyCount" subtype="SoftKeyDefinition" type="struct">
+ <fields>
+ <string comment="" name="softKeyLabel" size="16" subtype="DisplayLabel" type="char"/>
+ <enum comment="" name="softKeyEvent" subtype="SoftKeyEvent" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="SoftKeyTemplateIndex">
+ <entries>
+ <entry name="SoftKeyTemplateIndex_Redial" text="Redial" value="1"/>
+ <entry name="SoftKeyTemplateIndex_NewCall" text="NewCall" value="2"/>
+ <entry name="SoftKeyTemplateIndex_Hold" text="Hold" value="3"/>
+ <entry name="SoftKeyTemplateIndex_Transfer" text="Transfer" value="4"/>
+ <entry name="SoftKeyTemplateIndex_CfwdAll" text="CfwdAll" value="5"/>
+ <entry name="SoftKeyTemplateIndex_CfwdBusy" text="CfwdBusy" value="6"/>
+ <entry name="SoftKeyTemplateIndex_CfwdNoAnswer" text="CfwdNoAnswer" value="7"/>
+ <entry name="SoftKeyTemplateIndex_BackSpace" text="BackSpace" value="8"/>
+ <entry name="SoftKeyTemplateIndex_EndCall" text="EndCall" value="9"/>
+ <entry name="SoftKeyTemplateIndex_Resume" text="Resume" value="10"/>
+ <entry name="SoftKeyTemplateIndex_Answer" text="Answer" value="11"/>
+ <entry name="SoftKeyTemplateIndex_Info" text="Info" value="12"/>
+ <entry name="SoftKeyTemplateIndex_Confrn" text="Confrn" value="13"/>
+ <entry name="SoftKeyTemplateIndex_Park" text="Park" value="14"/>
+ <entry name="SoftKeyTemplateIndex_Join" text="Join" value="15"/>
+ <entry name="SoftKeyTemplateIndex_MeetMe" text="MeetMe" value="16"/>
+ <entry name="SoftKeyTemplateIndex_PickUp" text="PickUp" value="17"/>
+ <entry name="SoftKeyTemplateIndex_GrpPickup" text="GrpPickup" value="18"/>
+ <entry name="SoftKeyTemplateIndex_Monitor" text="Monitor" value="19"/>
+ <entry name="SoftKeyTemplateIndex_CallBack" text="CallBack" value="20"/>
+ <entry name="SoftKeyTemplateIndex_Barge" text="Barge" value="21"/>
+ <entry name="SoftKeyTemplateIndex_DND" text="DND" value="22"/>
+ <entry name="SoftKeyTemplateIndex_ConfList" text="ConfList" value="23"/>
+ <entry name="SoftKeyTemplateIndex_Select" text="Select" value="24"/>
+ <entry name="SoftKeyTemplateIndex_Private" text="Private" value="25"/>
+ <entry name="SoftKeyTemplateIndex_Trnsfvm" text="Transfer Voicemail" value="26"/>
+ <entry name="SoftKeyTemplateIndex_DirTrfr" text="Direct Transfer" value="27"/>
+ <entry name="SoftKeyTemplateIndex_IDivert" text="Immediate Divert" value="28"/>
+ <entry name="SoftKeyTemplateIndex_VideoMode" text="Video Mode" value="29"/>
+ <entry name="SoftKeyTemplateIndex_Intrcpt" text="Intercept" value="30"/>
+ <entry name="SoftKeyTemplateIndex_Empty" text="Empty" value="31"/>
+ <entry name="SoftKeyTemplateIndex_Dial" text="Dial" value="32"/>
+ <entry name="SoftKeyTemplateIndex_CBarge" text="Conference Barge" value="33"/>
+ </entries>
+ </enum>
+ <enum name="SoftKeyInfoIndex">
+ <entries>
+ <entry name="SoftKeyInfoIndex_Redial" text="Redial" value="301"/>
+ <entry name="SoftKeyInfoIndex_NewCall" text="NewCall" value="302"/>
+ <entry name="SoftKeyInfoIndex_Hold" text="Hold" value="303"/>
+ <entry name="SoftKeyInfoIndex_Transfer" text="Transfer" value="304"/>
+ <entry name="SoftKeyInfoIndex_CfwdAll" text="CfwdAll" value="305"/>
+ <entry name="SoftKeyInfoIndex_CfwdBusy" text="CfwdBusy" value="306"/>
+ <entry name="SoftKeyInfoIndex_CfwdNoAnswer" text="CfwdNoAnswer" value="307"/>
+ <entry name="SoftKeyInfoIndex_BackSpace" text="BackSpace" value="308"/>
+ <entry name="SoftKeyInfoIndex_EndCall" text="EndCall" value="309"/>
+ <entry name="SoftKeyInfoIndex_Resume" text="Resume" value="310"/>
+ <entry name="SoftKeyInfoIndex_Answer" text="Answer" value="311"/>
+ <entry name="SoftKeyInfoIndex_Info" text="Info" value="312"/>
+ <entry name="SoftKeyInfoIndex_Confrn" text="Confrn" value="313"/>
+ <entry name="SoftKeyInfoIndex_Park" text="Park" value="314"/>
+ <entry name="SoftKeyInfoIndex_Join" text="Join" value="315"/>
+ <entry name="SoftKeyInfoIndex_MeetMe" text="MeetMe" value="316"/>
+ <entry name="SoftKeyInfoIndex_PickUp" text="PickUp" value="317"/>
+ <entry name="SoftKeyInfoIndex_GrpPickup" text="GrpPickup" value="318"/>
+ <entry name="SoftKeyInfoIndex_Monitor" text="Monitor" value="319"/>
+ <entry name="SoftKeyInfoIndex_CallBack" text="CallBack" value="320"/>
+ <entry name="SoftKeyInfoIndex_Barge" text="Barge" value="321"/>
+ <entry name="SoftKeyInfoIndex_DND" text="DND" value="322"/>
+ <entry name="SoftKeyInfoIndex_ConfList" text="ConfList" value="323"/>
+ <entry name="SoftKeyInfoIndex_Select" text="Select" value="324"/>
+ <entry name="SoftKeyInfoIndex_Private" text="Private" value="325"/>
+ <entry name="SoftKeyInfoIndex_Trnsfvm" text="Transfer Voicemail" value="326"/>
+ <entry name="SoftKeyInfoIndex_DirTrfr" text="Direct Transfer" value="327"/>
+ <entry name="SoftKeyInfoIndex_IDivert" text="Immediate Divert" value="328"/>
+ <entry name="SoftKeyInfoIndex_VideoMode" text="Video Mode" value="329"/>
+ <entry name="SoftKeyInfoIndex_Intrcpt" text="Intercept" value="330"/>
+ <entry name="SoftKeyInfoIndex_Empty" text="Empty" value="331"/>
+ <entry name="SoftKeyInfoIndex_Dial" text="Dial" value="332"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="softKeySets" subtype="SoftKeySets" type="struct">
+ <fields>
+ <integer comment="" name="softKeySetOffset" type="uint32"/>
+ <integer comment="" name="softKeySetCount" type="uint32"/>
+ <integer comment="" declare="yes" name="totalSoftKeySetCount" type="uint32"/>
+ <struct comment="" maxsize="16" name="definition" size_fieldname="totalSoftKeySetCount" subtype="SoftKeySetDefinition" type="struct">
+ <fields>
+ <enum comment="" name="softKeyTemplateIndex" size="16" subtype="SoftKeyTemplateIndex" type="uint8"/>
+ <enum comment="" name="softKeyInfoIndex" size="16" subtype="SoftKeyInfoIndex" type="uint16"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <bitfield name="SoftKeyMask">
+ <entries>
+ <entry comment="" name="SoftKeyMask_SoftKey1" text="SoftKey1" value="0x0001"/>
+ <entry comment="" name="SoftKeyMask_SoftKey2" text="SoftKey2" value="0x0002"/>
+ <entry comment="" name="SoftKeyMask_SoftKey3" text="SoftKey3" value="0x0004"/>
+ <entry comment="" name="SoftKeyMask_SoftKey4" text="SoftKey4" value="0x0008"/>
+ <entry comment="" name="SoftKeyMask_SoftKey5" text="SoftKey5" value="0x0010"/>
+ <entry comment="" name="SoftKeyMask_SoftKey6" text="SoftKey6" value="0x0020"/>
+ <entry comment="" name="SoftKeyMask_SoftKey7" text="SoftKey7" value="0x0040"/>
+ <entry comment="" name="SoftKeyMask_SoftKey8" text="SoftKey8" value="0x0080"/>
+ <entry comment="" name="SoftKeyMask_SoftKey9" text="SoftKey9" value="0x0100"/>
+ <entry comment="" name="SoftKeyMask_SoftKey10" text="SoftKey10" value="0x0200"/>
+ <entry comment="" name="SoftKeyMask_SoftKey11" text="SoftKey11" value="0x0400"/>
+ <entry comment="" name="SoftKeyMask_SoftKey12" text="SoftKey12" value="0x0800"/>
+ <entry comment="" name="SoftKeyMask_SoftKey13" text="SoftKey13" value="0x1000"/>
+ <entry comment="" name="SoftKeyMask_SoftKey14" text="SoftKey14" value="0x2000"/>
+ <entry comment="" name="SoftKeyMask_SoftKey15" text="SoftKey15" value="0x4000"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="" name="softKeySetIndex" subtype="SoftKeySet" type="uint32"/>
+ <bitfield comment="" name="validKeyMask" size="uint32" subtype="SoftKeyMask" type="bitfield">
+ <entries>
+ <entry comment="" name="SoftKeyMask_SoftKey1" text="SoftKey1" value="0x0001"/>
+ <entry comment="" name="SoftKeyMask_SoftKey2" text="SoftKey2" value="0x0002"/>
+ <entry comment="" name="SoftKeyMask_SoftKey3" text="SoftKey3" value="0x0004"/>
+ <entry comment="" name="SoftKeyMask_SoftKey4" text="SoftKey4" value="0x0008"/>
+ <entry comment="" name="SoftKeyMask_SoftKey5" text="SoftKey5" value="0x0010"/>
+ <entry comment="" name="SoftKeyMask_SoftKey6" text="SoftKey6" value="0x0020"/>
+ <entry comment="" name="SoftKeyMask_SoftKey7" text="SoftKey7" value="0x0040"/>
+ <entry comment="" name="SoftKeyMask_SoftKey8" text="SoftKey8" value="0x0080"/>
+ <entry comment="" name="SoftKeyMask_SoftKey9" text="SoftKey9" value="0x0100"/>
+ <entry comment="" name="SoftKeyMask_SoftKey10" text="SoftKey10" value="0x0200"/>
+ <entry comment="" name="SoftKeyMask_SoftKey11" text="SoftKey11" value="0x0400"/>
+ <entry comment="" name="SoftKeyMask_SoftKey12" text="SoftKey12" value="0x0800"/>
+ <entry comment="" name="SoftKeyMask_SoftKey13" text="SoftKey13" value="0x1000"/>
+ <entry comment="" name="SoftKeyMask_SoftKey14" text="SoftKey14" value="0x2000"/>
+ <entry comment="" name="SoftKeyMask_SoftKey15" text="SoftKey15" value="0x4000"/>
+ <entry comment="" name="SoftKeyMask_SoftKey16" text="SoftKey16" value="0x8000"/>
+ </entries>
+ </bitfield>
+ </fields>
+ </message>
+ <enum name="DCallState">
+ <entries>
+ <entry comment="" name="DCallState_Idle" text="Idle" value="0x0000"/>
+ <entry comment="" name="DCallState_OffHook" text="OffHook" value="0x0001"/>
+ <entry comment="" name="DCallState_OnHook" text="OnHook" value="0x0002"/>
+ <entry comment="" name="DCallState_RingOut" text="RingOut" value="0x0003"/>
+ <entry comment="" name="DCallState_RingIn" text="RingIn" value="0x0004"/>
+ <entry comment="" name="DCallState_Connected" text="Connected" value="0x0005"/>
+ <entry comment="" name="DCallState_Busy" text="Busy" value="0x0006"/>
+ <entry comment="" name="DCallState_Congestion" text="Congestion" value="0x0007"/>
+ <entry comment="" name="DCallState_Hold" text="Hold" value="0x0008"/>
+ <entry comment="" name="DCallState_CallWaiting" text="CallWaiting" value="0x0009"/>
+ <entry comment="" name="DCallState_CallTransfer" text="CallTransfer" value="0x000a"/>
+ <entry comment="" name="DCallState_CallPark" text="CallPark" value="0x000b"/>
+ <entry comment="" name="DCallState_Proceed" text="Proceed" value="0x000c"/>
+ <entry comment="" name="DCallState_CallRemoteMultiline" text="CallRemoteMultiline" value="0x000d"/>
+ <entry comment="" name="DCallState_InvalidNumber" text="InvalidNumber" value="0x000e"/>
+ <entry comment="" name="DCallState_HoldRevert" text="HoldRevert" value="0x000f"/>
+ <entry comment="" name="DCallState_Whisper" text="Whisper" value="0x0010"/>
+ <entry comment="" name="DCallState_RemoteHold" text="RemoteHold" value="0x0011"/>
+ <entry comment="" name="DCallState_MaxState" text="MaxState" value="0x0012"/>
+ </entries>
+ </enum>
+ <enum name="CallPrivacy">
+ <entries>
+ <entry comment="" name="CallPrivacy_None" text="None" value="0x0000"/>
+ <entry comment="" name="CallPrivacy_Limited" text="Limited" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <enum comment="CallState" name="callState" subtype="DCallState" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="" name="privacy" subtype="CallPrivacy" type="uint32"/>
+ <struct comment="" name="precedence" type="struct">
+ <fields>
+ <integer comment="" name="precedenceLv" type="uint32"/>
+ <integer comment="" name="precedenceDm" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="DisplayPromptStatusMessage" opcode="0x0112" status="no" type="CallControl">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="timeOutValue" type="uint32"/>
+ <string comment="" name="promptStatus" size="32" subtype="DisplayLabel" type="char"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="ClearPromptStatusMessage" opcode="0x0113" status="no" 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">
+ <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">
+ <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"/>
+ <enum name="DeviceUnregisterStatus">
+ <entries>
+ <entry comment="" name="DeviceUnregisterStatus_Ok" text="Ok" value="0x0000"/>
+ <entry comment="" name="DeviceUnregisterStatus_Error" text="Error" value="0x0001"/>
+ <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">
+ <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">
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields>
+ <enum comment="" name="ecValue" subtype="Media_EchoCancellation" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierIncomingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="DialedNumberMessage" opcode="0x011d" status="no" type="CallControl">
+ <fields>
+ <string comment="" declare="yes" name="dialedNumber" size="VariableDirnumSize" type="char"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="UserToDeviceDataMessage" opcode="0x011e" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="userToDeviceData" subtype="UserAndDeviceData" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="FeatureStatMessage" opcode="0x011f" status="result" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="featureIndex" type="uint32"/>
+ <integer comment="" name="featureID" 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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="priority" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="EndOfAnnAck">
+ <entries>
+ <entry comment="" name="EndOfAnnAck_NoAnnAckRequired" text="NoAnnAckRequired" value="0x0000"/>
+ <entry comment="" name="EndOfAnnAck_AnnAckRequired" text="AnnAckRequired" value="0x0001"/>
+ </entries>
+ </enum>
+ <enum name="AnnPlayMode">
+ <entries>
+ <entry comment="" name="AnnPlayMode_XmlConfigMode" text="XmlConfigMode" value="0x0000"/>
+ <entry comment="" name="AnnPlayMode_OneShotMode" text="OneShotMode" value="0x0001"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="AnnList" size="32" type="struct">
+ <fields>
+ <integer comment="" name="locale" type="uint32"/>
+ <integer comment="" name="country" type="uint32"/>
+ <enum comment="" name="toneAnnouncement" subtype="DeviceTone" type="uint32"/>
+ </fields>
+ </struct>
+ <enum comment="" name="annAckReq" subtype="EndOfAnnAck" type="uint32"/>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="matrixConfPartyID" size="16" type="uint32"/>
+ <integer comment="" name="hearingConfPartyMask" type="uint32"/>
+ <enum comment="" name="annPlayMode" subtype="AnnPlayMode" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="StopAnnouncementMessage" opcode="0x0123" status="no" type="IntraCCM">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="PlayAnnStatus">
+ <entries>
+ <entry comment="" name="PlayAnnStatus_OK" text="OK" value="0x0000"/>
+ <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">
+ <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">
+ <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">
+ <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">
+ <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="" name="dtmfType" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="SubscribeDtmfPayloadResMessage" opcode="0x012a" status="no" 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"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="SubscribeDtmfPayloadErrMessage" opcode="0x012b" status="no" 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"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadReqMessage" opcode="0x012c" status="no" 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="" name="dtmfType" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadResMessage" opcode="0x012d" status="no" 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"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="UnSubscribeDtmfPayloadErrMessage" opcode="0x012e" status="no" 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"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="ServiceURLStatMessage" opcode="0x012f" status="result" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="serviceURLIndex" 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">
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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"/>
+ <struct comment="" declare="yes" name="payloadType" subtype="RTPPayloadType" type="struct">
+ <fields>
+ <integer comment="" name="payload_rfc_number" type="uint32"/>
+ <integer comment="" declare="yes" name="payloadType" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="isConferenceCreator" type="uint32"/>
+ <union comment="" lookup_guide="payloadType" name="capability" subtype="OpenMultiMediaReceiveChannelMessageUnion" type="union">
+ <fields>
+ <struct comment="" lookup_le="Media_Payload_AMR_WB" name="audioParameters" subtype="Media_AudioIncomingParameters" type="struct">
+ <fields>
+ <integer comment="" name="millisecondPacketSize" type="uint32"/>
+ <struct comment="" name="qualifierIn" subtype="Media_QualifierIncoming" type="struct">
+ <fields>
+ <enum comment="" name="ecValue" subtype="Media_EchoCancellation" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierIncomingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <struct comment="" lookup_ge="Media_Payload_H261" lookup_le="Media_Payload_H264_FEC" name="vidParameters" subtype="ChannelVideoParameters" type="struct">
+ <fields>
+ <integer comment="" name="bitRate" type="uint32"/>
+ <integer comment="" declare="yes" name="pictureFormatCount" type="uint32"/>
+ <struct comment="" maxsize="5" name="pictureFormat" size_fieldname="pictureFormatCount" subtype="PictureFormatSupport" type="struct">
+ <fields>
+ <integer comment="" name="format" type="uint32"/>
+ <integer comment="" name="MPI" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="confServiceNum" type="uint32"/>
+ <union comment="" lookup_guide="payloadType" name="capability" subtype="ChannelVideoParametersUnion" type="union">
+ <fields>
+ <struct comment="" lookup_eq="Media_Payload_H261" name="h261VideoCapability" subtype="H261VideoCapability" type="struct">
+ <fields>
+ <integer comment="Temporal spatial trade off capability" name="temporalSpatialTradeOffCapability" type="uint32"/>
+ <integer comment="Still Image Transmission" name="stillImageTransmission" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H263" name="h263VideoCapability" subtype="H263VideoCapability" type="struct">
+ <fields>
+ <bitfield comment="H263 Capability BitField" name="h263_capability_bitfield" size="uint32" subtype="Generic_Bitfield_32" type="bitfield">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <integer comment="" name="annexNandWFutureUse" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H264" name="h264VideoCapability" subtype="H264VideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="profile" type="uint32"/>
+ <integer comment="" name="level" type="uint32"/>
+ <integer comment="" name="customMaxMBPS" type="uint32"/>
+ <integer comment="" name="customMaxFS" type="uint32"/>
+ <integer comment="" name="customMaxDPB" type="uint32"/>
+ <integer comment="" name="customMaxBRandCPB" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_Vieo" name="vieoVideoCapability" subtype="VieoVideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="modelNumber" type="uint32"/>
+ <integer comment="" name="bandwidth" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" lookup_ge="Media_Payload_Clear_Chan" name="dataParameters" subtype="ChannelDataParameters" type="struct">
+ <fields>
+ <integer comment="" name="protocolDependentData" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ <struct comment="" name="mRxMediaEncryptionKeyInfo" subtype="MediaEncryptionKeyInfo" type="struct">
+ <fields>
+ <enum comment="" name="algorithmID" subtype="MediaEncryptionAlgorithmType" type="uint32"/>
+ <integer comment="" declare="yes" name="keylen" type="uint16"/>
+ <integer comment="" declare="yes" name="saltlen" type="uint16"/>
+ <integer comment="" maxsize="16" name="key" size_fieldname="keylen" type="uint8"/>
+ <integer comment="" maxsize="16" name="salt" size_fieldname="saltlen" type="uint8"/>
+ <integer comment="" name="isMKIPresent" type="uint32"/>
+ <integer comment="" name="keyDerivationRate" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="streamPassThroughID" type="uint32"/>
+ <integer comment="" name="associatedStreamID" type="uint32"/>
+ </fields>
+ <fields beginversion="11">
+ <ipv4or6 comment="ipaddress in big endian" endianness="big" name="sourceIpAddr" subtype="uint32" type="ipaddr"/>
+ <integer comment="" name="sourcePortNumber" subtype="uint32" type="ipport" use_param="sourceIpAddr"/>
+ </fields>
+ <fields beginversion="16" endversion="22">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="passthruPartyID" 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"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <struct comment="" declare="yes" name="payloadType" subtype="RTPPayloadType" type="struct">
+ <fields>
+ <integer comment="" name="payload_rfc_number" type="uint32"/>
+ <integer comment="" declare="yes" name="payloadType" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="DSCPValue" type="uint32"/>
+ <union comment="" lookup_guide="payloadType" name="capability" subtype="StartMultiMediaTransmissionMessageUnion" type="union">
+ <fields>
+ <struct comment="" lookup_le="Media_Payload_AMR_WB" name="audioParameters" subtype="Media_AudioIncomingParameters" type="struct">
+ <fields>
+ <integer comment="" name="millisecondPacketSize" type="uint32"/>
+ <struct comment="" name="qualifierIn" subtype="Media_QualifierIncoming" type="struct">
+ <fields>
+ <enum comment="" name="ecValue" subtype="Media_EchoCancellation" type="uint32"/>
+ </fields>
+ <fields beginversion="0" endversion="10">
+ <enum comment="" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ </fields>
+ <fields beginversion="11" endversion="22">
+ <union comment="" lookup_guide="compressionType" name="codecParamsUnion" subtype="Media_QualifierIncomingUnion" type="union">
+ <fields>
+ <enum comment="" lookup_eq="Media_Payload_G7231" name="g723BitRate" subtype="Media_G723BitRate" type="uint32"/>
+ <struct comment="" lookup_eq="*" name="codecParams" subtype="CodecParameters" type="struct">
+ <fields>
+ <integer comment="" name="codecMode" type="uint8"/>
+ <integer comment="" name="dynamicPayload" type="uint8"/>
+ <integer comment="" name="codecParam1" type="uint8"/>
+ <integer comment="" name="codecParam2" type="uint8"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <struct comment="" lookup_ge="Media_Payload_H261" lookup_le="Media_Payload_H264_FEC" name="vidParameters" subtype="ChannelVideoParameters" type="struct">
+ <fields>
+ <integer comment="" name="bitRate" type="uint32"/>
+ <integer comment="" declare="yes" name="pictureFormatCount" type="uint32"/>
+ <struct comment="" maxsize="5" name="pictureFormat" size_fieldname="pictureFormatCount" subtype="PictureFormatSupport" type="struct">
+ <fields>
+ <integer comment="" name="format" type="uint32"/>
+ <integer comment="" name="MPI" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="confServiceNum" type="uint32"/>
+ <union comment="" lookup_guide="payloadType" name="capability" subtype="ChannelVideoParametersUnion" type="union">
+ <fields>
+ <struct comment="" lookup_eq="Media_Payload_H261" name="h261VideoCapability" subtype="H261VideoCapability" type="struct">
+ <fields>
+ <integer comment="Temporal spatial trade off capability" name="temporalSpatialTradeOffCapability" type="uint32"/>
+ <integer comment="Still Image Transmission" name="stillImageTransmission" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H263" name="h263VideoCapability" subtype="H263VideoCapability" type="struct">
+ <fields>
+ <bitfield comment="H263 Capability BitField" name="h263_capability_bitfield" size="uint32" subtype="Generic_Bitfield_32" type="bitfield">
+ <entries>
+ <entry comment="" name="Generic_Bitfield_Bit1" text="Bit1" value="0x0001"/>
+ <entry comment="" name="Generic_Bitfield_Bit2" text="Bit2" value="0x0002"/>
+ <entry comment="" name="Generic_Bitfield_Bit3" text="Bit3" value="0x0004"/>
+ <entry comment="" name="Generic_Bitfield_Bit4" text="Bit4" value="0x0008"/>
+ <entry comment="" name="Generic_Bitfield_Bit5" text="Bit5" value="0x0010"/>
+ <entry comment="" name="Generic_Bitfield_Bit6" text="Bit6" value="0x0020"/>
+ <entry comment="" name="Generic_Bitfield_Bit7" text="Bit7" value="0x0040"/>
+ <entry comment="" name="Generic_Bitfield_Bit8" text="Bit8" value="0x0080"/>
+ <entry comment="" name="Generic_Bitfield_Bit9" text="Bit9" value="0x0100"/>
+ <entry comment="" name="Generic_Bitfield_Bit10" text="Bit10" value="0x0200"/>
+ <entry comment="" name="Generic_Bitfield_Bit11" text="Bit11" value="0x0400"/>
+ <entry comment="" name="Generic_Bitfield_Bit12" text="Bit12" value="0x0800"/>
+ <entry comment="" name="Generic_Bitfield_Bit13" text="Bit13" value="0x1000"/>
+ <entry comment="" name="Generic_Bitfield_Bit14" text="Bit14" value="0x2000"/>
+ <entry comment="" name="Generic_Bitfield_Bit15" text="Bit14" value="0x4000"/>
+ <entry comment="" name="Generic_Bitfield_Bit16" text="Bit15" value="0x8000"/>
+ <entry comment="" name="Generic_Bitfield_Bit17" text="Bit17" value="0x10000"/>
+ <entry comment="" name="Generic_Bitfield_Bit18" text="Bit18" value="0x20000"/>
+ <entry comment="" name="Generic_Bitfield_Bit19" text="Bit19" value="0x40000"/>
+ <entry comment="" name="Generic_Bitfield_Bit20" text="Bit20" value="0x80000"/>
+ <entry comment="" name="Generic_Bitfield_Bit21" text="Bit21" value="0x100000"/>
+ <entry comment="" name="Generic_Bitfield_Bit22" text="Bit22" value="0x200000"/>
+ <entry comment="" name="Generic_Bitfield_Bit23" text="Bit23" value="0x400000"/>
+ <entry comment="" name="Generic_Bitfield_Bit24" text="Bit24" value="0x800000"/>
+ <entry comment="" name="Generic_Bitfield_Bit25" text="Bit25" value="0x1000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit26" text="Bit26" value="0x2000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit27" text="Bit27" value="0x4000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit28" text="Bit28" value="0x8000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit29" text="Bit29" value="0x10000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit30" text="Bit30" value="0x20000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit31" text="Bit31" value="0x40000000"/>
+ <entry comment="" name="Generic_Bitfield_Bit32" text="Bit32" value="0x80000000"/>
+ </entries>
+ </bitfield>
+ <integer comment="" name="annexNandWFutureUse" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_H264" name="h264VideoCapability" subtype="H264VideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="profile" type="uint32"/>
+ <integer comment="" name="level" type="uint32"/>
+ <integer comment="" name="customMaxMBPS" type="uint32"/>
+ <integer comment="" name="customMaxFS" type="uint32"/>
+ <integer comment="" name="customMaxDPB" type="uint32"/>
+ <integer comment="" name="customMaxBRandCPB" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="Media_Payload_Vieo" name="vieoVideoCapability" subtype="VieoVideoCapability" type="struct">
+ <fields>
+ <integer comment="" name="modelNumber" type="uint32"/>
+ <integer comment="" name="bandwidth" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ </fields>
+ </struct>
+ <struct comment="" lookup_ge="Media_Payload_Clear_Chan" name="dataParameters" subtype="ChannelDataParameters" type="struct">
+ <fields>
+ <integer comment="" name="protocolDependentData" type="uint32"/>
+ <integer comment="" name="maxBitRate" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </union>
+ <struct comment="" name="mTxMediaEncryptionKeyInfo" subtype="MediaEncryptionKeyInfo" type="struct">
+ <fields>
+ <enum comment="" name="algorithmID" subtype="MediaEncryptionAlgorithmType" type="uint32"/>
+ <integer comment="" declare="yes" name="keylen" type="uint16"/>
+ <integer comment="" declare="yes" name="saltlen" type="uint16"/>
+ <integer comment="" maxsize="16" name="key" size_fieldname="keylen" type="uint8"/>
+ <integer comment="" maxsize="16" name="salt" size_fieldname="saltlen" type="uint8"/>
+ <integer comment="" name="isMKIPresent" type="uint32"/>
+ <integer comment="" name="keyDerivationRate" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="streamPassThroughID" type="uint32"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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>
+ <enum define="yes" name="MiscCommandType">
+ <entries>
+ <entry comment="" name="MiscCommandType_videoFreezePicture" text="videoFreezePicture" value="0x0000"/>
+ <entry comment="" name="MiscCommandType_videoFastUpdatePicture" text="videoFastUpdatePicture" value="0x0001"/>
+ <entry comment="" name="MiscCommandType_videoFastUpdateGOB" text="videoFastUpdateGOB" value="0x0002"/>
+ <entry comment="" name="MiscCommandType_videoFastUpdateMB" text="videoFastUpdateMB" value="0x0003"/>
+ <entry comment="" name="MiscCommandType_lostPicture" text="lostPicture" value="0x0004"/>
+ <entry comment="" name="MiscCommandType_lostPartialPicture" text="lostPartialPicture" value="0x0005"/>
+ <entry comment="" name="MiscCommandType_recoveryReferencePicture" text="recoveryReferencePicture" value="0x0006"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="passthruPartyID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="" declare="yes" name="command" subtype="MiscCommandType" type="uint32"/>
+ <union comment="" lookup_guide="command" name="u" subtype="MiscellaneousCommandMessageUnion" type="union">
+ <fields>
+ <struct comment="" lookup_eq="MiscCommandType_videoFastUpdateGOB" name="videoFastUpdateGOB" subtype="VideoFastUpdateGOB" type="struct">
+ <fields>
+ <integer comment="" name="firstGOB" type="uint32"/>
+ <integer comment="" name="numberOfGOBs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="MiscCommandType_videoFastUpdateMB" name="videoFastUpdateMB" subtype="VideoFastUpdateMB" type="struct">
+ <fields>
+ <integer comment="" name="firstGOB" type="uint32"/>
+ <integer comment="" name="firstMB" type="uint32"/>
+ <integer comment="" name="numberOfMBs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="MiscCommandType_lostPicture" name="lostPicture" subtype="PictureReference" type="struct">
+ <fields>
+ <integer comment="" name="pictureNumber" type="uint32"/>
+ <integer comment="" name="longTermPictureIndex" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="MiscCommandType_lostPartialPicture" name="lostPartialPicture" type="struct">
+ <fields>
+ <struct comment="" name="pictureReference" subtype="PictureReference" type="struct">
+ <fields>
+ <integer comment="" name="pictureNumber" type="uint32"/>
+ <integer comment="" name="longTermPictureIndex" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="firstMB" type="uint32"/>
+ <integer comment="" name="numberOfMBs" type="uint32"/>
+ </fields>
+ </struct>
+ <struct comment="" lookup_eq="MiscCommandType_recoveryReferencePicture" name="recoveryReferencePictureValue" subtype="PictureReferenceValues" type="struct">
+ <fields>
+ <integer comment="" declare="yes" name="recoveryReferencePictureCount" type="uint32"/>
+ <struct comment="" maxsize="4" name="recoveryReferencePicture" size_fieldname="recoveryReferencePictureCount" subtype="PictureReference" type="struct">
+ <fields>
+ <integer comment="" name="pictureNumber" type="uint32"/>
+ <integer comment="" name="longTermPictureIndex" type="uint32"/>
+ </fields>
+ </struct>
+ </fields>
+ </struct>
+ <integer comment="" lookup_eq="MiscCommandType_temporalSpatialTradeOff" name="temporalSpatialTradeOff" type="uint32"/>
+ <integer comment="" lookup_eq="*" name="none" type="uint32"/>
+ </fields>
+ </union>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="FlowControlCommandMessage" opcode="0x0135" status="no" type="CallControl">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="passthruPartyID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="numberOfReservedParticipants" type="uint32"/>
+ <enum comment="" name="resourceType" subtype="ResourceType" type="uint32"/>
+ <integer comment="" name="appID" type="uint32"/>
+ <string comment="" name="appConfID" size="32" type="char"/>
+ <string comment="" name="appData" size="24" type="char"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="ModifyConferenceReqMessage" opcode="0x0139" status="no" type="IntraCCM">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="numberOfReservedParticipants" type="uint32"/>
+ <integer comment="" name="appID" type="uint32"/>
+ <string comment="" name="appConfID" size="32" type="char"/>
+ <string comment="" name="appData" size="24" type="char"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield">
+ <entries>
+ <entry comment="" name="RestrictInformationType_CallingPartyName" text="CallingPartyName" value="0x0001"/>
+ <entry comment="" name="RestrictInformationType_CallingPartyNumber" text="CallingPartyNumber" value="0x0002"/>
+ <entry comment="" name="RestrictInformationType_CallingParty" text="CallingParty" value="0x0003"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyName" text="CalledPartyName" value="0x0004"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyNumber" text="CalledPartyNumber" value="0x0008"/>
+ <entry comment="" name="RestrictInformationType_CalledParty" text="CalledParty" value="0x000c"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyName" text="OriginalCalledPartyName" value="0x0010"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyNumber" text="OriginalCalledPartyNumber" value="0x0020"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledParty" text="OriginalCalledParty" value="0x0030"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyName" text="LastRedirectPartyName" value="0x0040"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyNumber" text="LastRedirectPartyNumber" value="0x0080"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectParty" text="LastRedirectParty" value="0x00c0"/>
+ <entry comment="" name="RestrictInformationType_BitsReserved" text="BitsReserved" value="0xffffff00"/>
+ </entries>
+ </bitfield>
+ <string comment="" name="participantName" size="40" type="char"/>
+ <string comment="" name="participantNumber" size="24" type="char"/>
+ <string comment="" name="conferenceName" size="32" type="char"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="DropParticipantReqMessage" opcode="0x013b" status="no" type="IntraCCM">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="ChangeParticipantReqMessage" opcode="0x013e" status="no" type="IntraCCM">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield">
+ <entries>
+ <entry comment="" name="RestrictInformationType_CallingPartyName" text="CallingPartyName" value="0x0001"/>
+ <entry comment="" name="RestrictInformationType_CallingPartyNumber" text="CallingPartyNumber" value="0x0002"/>
+ <entry comment="" name="RestrictInformationType_CallingParty" text="CallingParty" value="0x0003"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyName" text="CalledPartyName" value="0x0004"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyNumber" text="CalledPartyNumber" value="0x0008"/>
+ <entry comment="" name="RestrictInformationType_CalledParty" text="CalledParty" value="0x000c"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyName" text="OriginalCalledPartyName" value="0x0010"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyNumber" text="OriginalCalledPartyNumber" value="0x0020"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledParty" text="OriginalCalledParty" value="0x0030"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyName" text="LastRedirectPartyName" value="0x0040"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyNumber" text="LastRedirectPartyNumber" value="0x0080"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectParty" text="LastRedirectParty" value="0x00c0"/>
+ <entry comment="" name="RestrictInformationType_BitsReserved" text="BitsReserved" value="0xffffff00"/>
+ </entries>
+ </bitfield>
+ <string comment="" name="participantName" size="40" type="char"/>
+ <string comment="" name="participantNumber" size="24" type="char"/>
+ <string comment="" name="conferenceName" size="32" type="char"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="UserToDeviceDataMessageVersion1" opcode="0x013f" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="userToDeviceDataVersion1" subtype="UserAndDeviceDataVersion1" type="struct">
+ <fields>
+ <integer comment="" name="applicationID" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="transactionID" type="uint32"/>
+ <integer comment="" declare="yes" name="dataLength" type="uint32"/>
+ <enum comment="" name="sequenceFlag" subtype="SequenceFlag" type="uint32"/>
+ <integer comment="" name="displayPriority" type="uint32"/>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="appInstanceID" type="uint32"/>
+ <integer comment="" name="routingID" type="uint32"/>
+ <xml comment="" maxsize="2000" name="data" size_fieldname="dataLength" type="xml"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="VideoDisplayCommandMessage" opcode="0x0140" status="no" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="" name="passthruPartyID" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <integer comment="" name="maximumBitRate" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="yes" name="ConfigStatV2Message" opcode="0x0142" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="sid" type="struct">
+ <fields>
+ <string comment="Device Name" name="DeviceName" size="16" type="char"/>
+ <integer comment="User Id" name="reserved_for_future_use" type="uint32"/>
+ <integer comment="Device Instance" name="instance" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="Server Instance" name="serverInstance" type="uint32"/>
+ <integer comment="unknown" name="unknown2" type="uint32"/>
+ <string comment="Connected to Server" name="serverName" size="12" type="char"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="yes" name="DisplayNotifyV2Message" opcode="0x0143" status="no" type="RegistrationAndManagement">
+ <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="yes" name="DisplayPriNotifyV2Message" opcode="0x0144" status="no" 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">
+ <fields alignment="4" beginversion="0" endversion="22">
+ <integer comment="" name="timeOutValue" type="uint32"/>
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <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">
+ <fields alignment="4" beginversion="0" endversion="22">
+ <integer comment="" name="featureIndex" type="uint32"/>
+ <integer comment="" name="featureID" type="uint32"/>
+ <integer comment="" name="featureStatus" type="uint32"/>
+ <string comment="" name="featureTextLabel" size="121" type="char"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="yes" name="LineStatV2Message" opcode="0x0147" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="lineNumber" type="uint32"/>
+ <integer comment="" name="Unknown" type="uint32"/>
+ <string comment="" name="lineDirNumber" size="25" type="char"/>
+ <string comment="" name="lineFullyQualifiedDisplayName" size="40" type="char"/>
+ <string comment="" name="lineTextLabel" size="40" type="char"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="yes" name="ServiceURLStatV2Message" opcode="0x0148" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="serviceURLIndex" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="yes" name="SpeedDialStatV2Message" opcode="0x0149" status="no" type="RegistrationAndManagement">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="speedDialNumber" 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">
+ <fields alignment="2">
+ <integer comment="LineId" name="lineInstance" type="uint32"/>
+ <integer comment="CallId" name="callReference" type="uint32"/>
+ <enum comment="" name="callType" subtype="CallType" type="uint32"/>
+ <integer comment="Original Called Party Redirect Reason" name="originalCdpnRedirectReason" type="uint32"/>
+ <integer comment="Last Redirecting Reason" name="lastRedirectingReason" type="uint32"/>
+ <integer comment="CallId" name="callInstance" type="uint32"/>
+ <enum comment="" name="callSecurityStatus" subtype="CallSecurityStatusType" type="uint32"/>
+ <bitfield comment="" name="partyPIRestrictionBits" size="uint32" subtype="RestrictInformationType" type="bitfield">
+ <entries>
+ <entry comment="" name="RestrictInformationType_CallingPartyName" text="CallingPartyName" value="0x0001"/>
+ <entry comment="" name="RestrictInformationType_CallingPartyNumber" text="CallingPartyNumber" value="0x0002"/>
+ <entry comment="" name="RestrictInformationType_CallingParty" text="CallingParty" value="0x0003"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyName" text="CalledPartyName" value="0x0004"/>
+ <entry comment="" name="RestrictInformationType_CalledPartyNumber" text="CalledPartyNumber" value="0x0008"/>
+ <entry comment="" name="RestrictInformationType_CalledParty" text="CalledParty" value="0x000c"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyName" text="OriginalCalledPartyName" value="0x0010"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledPartyNumber" text="OriginalCalledPartyNumber" value="0x0020"/>
+ <entry comment="" name="RestrictInformationType_OriginalCalledParty" text="OriginalCalledParty" value="0x0030"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyName" text="LastRedirectPartyName" value="0x0040"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectPartyNumber" text="LastRedirectPartyNumber" value="0x0080"/>
+ <entry comment="" name="RestrictInformationType_LastRedirectParty" text="LastRedirectParty" value="0x00c0"/>
+ <entry comment="" name="RestrictInformationType_BitsReserved" text="BitsReserved" value="0xffffff00"/>
+ </entries>
+ </bitfield>
+ <string comment="Calling Party Number" name="callingParty" size="VariableDirnumSize" type="char"/>
+ <string comment="Alternate Calling Party Number" name="AlternateCallingParty" size="VariableDirnumSize" type="char"/>
+ <string comment="CalledPartyNumber" name="calledParty" size="VariableDirnumSize" type="char"/>
+ <string comment="Original Called Party Number" name="originalCalledParty" size="VariableDirnumSize" type="char"/>
+ <string comment="Last Redirecting Party Number" name="lastRedirectingParty" size="VariableDirnumSize" type="char"/>
+ <string comment="Calling Party Voicemail Box Number" name="cgpnVoiceMailbox" size="VariableDirnumSize" type="char"/>
+ <string comment="Called Party Voicemail Box Number" name="cdpnVoiceMailbox" size="VariableDirnumSize" type="char"/>
+ <string comment="Original Called Party Voicemail Box Number" name="originalCdpnVoiceMailbox" size="VariableDirnumSize" type="char"/>
+ <string comment="Last Redirecting Parties Voicemail Box Number" name="lastRedirectingVoiceMailbox" size="VariableDirnumSize" type="char"/>
+ <string comment="Calling Party Name" name="callingPartyName" size="121" type="char"/>
+ <string comment="Called Party Name" name="calledPartyName" size="121" type="char"/>
+ <string comment="Original Called Party Name" name="originalCalledPartyName" size="121" type="char"/>
+ <string comment="Last Redirecting Party Name" name="lastRedirectingPartyName" size="121" type="char"/>
+ </fields>
+ <fields beginversion="17" endversion="22">
+ <string comment="" name="HuntPilotNumber" size="VariableDirnumSize" type="char"/>
+ <string comment="" name="HuntPilotName" size="121" type="char"/>
+ </fields>
+ </message>
+ <enum name="MediaTransportType">
+ <entries>
+ <entry comment="" name="MediaTransportType_RTP" text="RTP" value="0x0001"/>
+ <entry comment="" name="MediaTransportType_UDP" text="UDP" value="0x0002"/>
+ <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">
+ <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"/>
+ <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">
+ <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"/>
+ <enum comment="" name="mediaType" subtype="MediaType" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="ResvStyle">
+ <entries>
+ <entry comment="" name="ResvStyle_FF" text="FF" value="0x0001"/>
+ <entry comment="" name="ResvStyle_SE" text="SE" value="0x0002"/>
+ <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">
+ <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"/>
+ <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"/>
+ <integer comment="" name="maxRetryNumber" type="int32"/>
+ <integer comment="" name="retryTimer" type="uint32"/>
+ <integer comment="" name="confirmRequired" type="uint32"/>
+ <integer comment="" name="preemptionPriority" type="uint32"/>
+ <integer comment="" name="defendingPriority" type="uint32"/>
+ <enum comment="" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="averageBitRate" type="uint32"/>
+ <integer comment="" name="burstSize" type="uint32"/>
+ <integer comment="" name="peakRate" type="uint32"/>
+ <struct comment="" name="appID" subtype="RSVPApplicationID" type="struct">
+ <fields>
+ <string comment="" name="vendorID" size="32" type="char"/>
+ <string comment="" name="version" size="16" type="char"/>
+ <string comment="" name="appName" size="32" type="char"/>
+ <string comment="" name="subAppID" size="32" type="char"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="QoSPathMessage" opcode="0x014e" status="no" 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"/>
+ <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"/>
+ <integer comment="" name="maxRetryNumber" type="int32"/>
+ <integer comment="" name="retryTimer" type="uint32"/>
+ <integer comment="" name="preemptionPriority" type="uint32"/>
+ <integer comment="" name="defendingPriority" type="uint32"/>
+ <enum comment="" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="averageBitRate" type="uint32"/>
+ <integer comment="" name="burstSize" type="uint32"/>
+ <integer comment="" name="peakRate" type="uint32"/>
+ <struct comment="" name="appID" subtype="RSVPApplicationID" type="struct">
+ <fields>
+ <string comment="" name="vendorID" size="32" type="char"/>
+ <string comment="" name="version" size="16" type="char"/>
+ <string comment="" name="appName" size="32" type="char"/>
+ <string comment="" name="subAppID" size="32" type="char"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2pbx" dynamic="no" name="QoSTeardownMessage" opcode="0x014f" status="no" 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"/>
+ <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">
+ <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"/>
+ <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">
+ <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"/>
+ <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"/>
+ <enum comment="" name="compressionType" subtype="Media_PayloadType" type="uint32"/>
+ <integer comment="" name="averageBitRate" type="uint32"/>
+ <integer comment="" name="burstSize" type="uint32"/>
+ <integer comment="" name="peakRate" type="uint32"/>
+ <struct comment="" name="appID" subtype="RSVPApplicationID" type="struct">
+ <fields>
+ <string comment="" name="vendorID" size="32" type="char"/>
+ <string comment="" name="version" size="16" type="char"/>
+ <string comment="" name="appName" size="32" type="char"/>
+ <string comment="" name="subAppID" size="32" type="char"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="SubscribeCause">
+ <entries>
+ <entry comment="" name="SubscribeCause_OK" text="OK" value="0x0000"/>
+ <entry comment="" name="SubscribeCause_RouteFail" text="RouteFail" value="0x0001"/>
+ <entry comment="" name="SubscribeCause_AuthFail" text="AuthFail" value="0x0002"/>
+ <entry comment="" name="SubscribeCause_Timeout" text="Timeout" value="0x0003"/>
+ <entry comment="" name="SubscribeCause_TrunkTerm" text="TrunkTerm" value="0x0004"/>
+ <entry comment="" name="SubscribeCause_TrunkForbidden" text="TrunkForbidden" value="0x0005"/>
+ <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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="transactionID" type="uint32"/>
+ <enum comment="" name="featureID" 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">
+ <fields alignment="4" beginversion="0" endversion="22">
+ <integer comment="" name="transactionID" type="uint32"/>
+ <enum comment="" name="featureID" subtype="SubscriptionFeatureID" type="uint32"/>
+ <integer comment="" name="status" 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">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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="" name="transmitPort" type="uint32"/>
+ <enum comment="" name="startMediaTransmissionStatus" subtype="MediaStatus" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="StartMultiMediaTransmissionAckMessage" opcode="0x0155" status="no" type="MediaControl">
+ <fields>
+ <integer comment="Conference ID" name="conferenceID" type="uint32"/>
+ <integer comment="PassThrough PartyId" name="passThruPartyID" 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="" name="transmitPort" type="uint32"/>
+ <enum comment="" name="resultCode" subtype="MediaStatus" type="uint32"/>
+ </fields>
+ </message>
+ <enum name="CallHistoryDisposition">
+ <entries>
+ <entry comment="" name="CallHistoryDisposition_UnknownDisp" text="UnknownDisp" value="0xffffffff"/>
+ <entry comment="" name="CallHistoryDisposition_Ignore" text="Ignore" value="0x0000"/>
+ <entry comment="" name="CallHistoryDisposition_PlacedCalls" text="PlacedCalls" value="0x0001"/>
+ <entry comment="" name="CallHistoryDisposition_ReceivedCalls" text="ReceivedCalls" value="0x0002"/>
+ <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">
+ <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>
+ <enum name="MwiNotificationResult">
+ <entries>
+ <entry comment="" name="MwiNotificationResult_Ok" text="Ok" value="0x0000"/>
+ <entry comment="" name="MwiNotificationResult_GeneralError" text="GeneralError" value="0x0001"/>
+ <entry comment="" name="MwiNotificationResult_RequestRejected" text="RequestRejected" value="0x0002"/>
+ <entry comment="" name="MwiNotificationResult_VmCountOutOfBounds" text="VmCountOutOfBounds" value="0x0003"/>
+ <entry comment="" name="MwiNotificationResult_FaxCountOutOfBounds" text="FaxCountOutOfBounds" value="0x0004"/>
+ <entry comment="" name="MwiNotificationResult_InvalidPriorityVmCount" text="InvalidPriorityVmCount" value="0x0005"/>
+ <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">
+ <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="pbx2dev" dynamic="no" name="EnhancedAlarmMessage" opcode="0x015a" status="no" type="RegistrationAndManagement">
+ <fields alignment="4" beginversion="0" endversion="22">
+ <xml comment="" name="alarmInfo" size="2000" 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">
+ <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"/>
+ <integer comment="Number of Line Data Entries" declare="yes" name="lineDataEntries" type="uint32"/>
+ <struct comment="" maxsize="42" name="lineData" size_fieldname="lineDataEntries" subtype="LineData" type="struct">
+ <fields>
+ <integer comment="" name="maxNumCalls" type="uint16"/>
+ <integer comment="" name="busyTrigger" type="uint16"/>
+ </fields>
+ </struct>
+ </fields>
+ </message>
+ <enum name="RecordingStatus">
+ <entries>
+ <entry comment="" name="RecordingStatus__OFF" text="_OFF" value="0x0000"/>
+ <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">
+ <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">
+ <fields beginversion="0" endversion="22">
+ <struct comment="" name="sid" type="struct">
+ <fields>
+ <string comment="Device Name" name="DeviceName" size="16" type="char"/>
+ <integer comment="User Id" name="reserved_for_future_use" type="uint32"/>
+ <integer comment="Device Instance" name="instance" type="uint32"/>
+ </fields>
+ </struct>
+ <integer comment="" name="stationIpAddr" type="uint32"/>
+ <enum comment="" name="deviceType" subtype="DeviceType" type="uint32"/>
+ <integer comment="" name="maxStreams" type="uint32"/>
+ </fields>
+ </message>
+ <message comment="" direction="pbx2dev" dynamic="no" name="SPCPRegisterTokenAck" opcode="0x8100" status="no" 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">
+ <fields beginversion="0" endversion="22">
+ <integer comment="" name="waitTimeBeforeNextReq" type="uint32"/>
+ </fields>
+ </message>
+</messages>
diff --git a/tools/parse_xml2skinny_dissector.py b/tools/parse_xml2skinny_dissector.py
new file mode 100755
index 0000000000..02a5bbf346
--- /dev/null
+++ b/tools/parse_xml2skinny_dissector.py
@@ -0,0 +1,888 @@
+#!/usr/bin/env python2
+#
+# Wireshark Dissector Generator for SkinnyProtocolOptimized.xml
+#
+# Author: Diederik de Groot <ddegroot@user.sf.net>
+# Date: 2014-7-22
+# Skinny Protocol Versions: 0 through 22
+#
+# Heritage:
+# xml2obj based on http://code.activestate.com/recipes/149368-xml2obj/
+#
+# Dependencies:
+# python / xml / sax
+#
+# Called By:
+# cog.py + packet-skinny.c.in for inplace code generation
+# See: http://nedbatchelder.com/code/cog/
+#
+#
+
+import re
+import xml.sax.handler
+
+indentation = 0
+indent_str = ''
+fieldsArray = {}
+si_fields = {"callReference" : "si->callId", "lineInstance": "si->lineId", "passThruPartyId" : "si->passThruId", "callState" : "si->callState", "callingParty" : "si->callingParty", "calledParty" : "si->calledParty", "openReceiveChannelStatus" : "si->openreceiveStatus", "startMediaTransmissionStatus" : "si->startmediatransmisionStatus"}
+debug = 1
+
+def xml2obj(src):
+ """
+ A function to converts XML data into native Python objects.
+
+ """
+ non_id_char = re.compile('[^_0-9a-zA-Z]')
+
+ def _name_mangle(name):
+ return non_id_char.sub('_', name)
+
+ class DataNode(object):
+ def __init__(self):
+ self._attrs = {} # XML attributes and child elements
+ self.data = None # child text data
+ self.parent = None
+ self.basemessage = None
+ self.intsize = 0
+ self._children = []
+ self.declared = []
+
+ def __len__(self):
+ # treat single element as a list of 1
+ return 1
+ def __getitem__(self, key):
+ if isinstance(key, basestring):
+ return self._attrs.get(key,None)
+ else:
+ return [self][key]
+
+ def __contains__(self, name):
+ return self._attrs.has_key(name)
+
+ def __nonzero__(self):
+ return bool(self._attrs or self.data)
+
+ def __getattr__(self, name):
+ if name.startswith('__'):
+ # need to do this for Python special methods???
+ raise AttributeError(name)
+ return self._attrs.get(name,None)
+
+ def _add_xml_attr(self, name, value):
+ if name in self._attrs:
+ # multiple attribute of the same name are represented by a list
+ children = self._attrs[name]
+ if not isinstance(children, list):
+ children = [children]
+ self._attrs[name] = children
+ children.append(value)
+ else:
+ self._attrs[name] = value
+
+ def _add_child(self, name, value):
+ #print "adding : %s / %s to %s" %(name,value, self.__class__)
+ self._children.append(value)
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def keys(self):
+ return self._attrs.keys()
+
+ def __repr__(self):
+ items = {}
+ if self.data:
+ items.append(('data', self.data))
+ return u'{%s}' % ', '.join([u'%s:%s' % (k,repr(v)) for k,v in items])
+
+ def __setitem__(self, key, value):
+ self._attrs[key] = value
+
+ def getfieldnames(self):
+ return ''
+
+ def declaration(self):
+ global fieldsArray
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] = '/* UNKNOWN { &hf_skinny_%s,\n {\n"%s", "skinny.%s", FT_UINT32, BASE_DEC, NULL, 0x0,\n "%s", HFILL }}, */\n' %(self.name, self.name, self.name, self.comment)
+ return ''
+
+ def dissect(self):
+ return self.name or ''
+
+ def incr_indent(self):
+ global indentation
+ global indent_str
+ indentation += 1
+ indent_str = ''
+ for x in range(0, indentation):
+ indent_str += ' '
+
+ def decr_indent(self):
+ global indentation
+ global indent_str
+ indentation -= 1
+ indent_str = ''
+ for x in range(0, indentation):
+ indent_str += ' '
+
+ def indent_out(self, string):
+ return indent_str + string
+
+
+ class Message(DataNode):
+ ''' Message '''
+ def __str__(self):
+ return self.name
+
+ def gen_handler(self):
+ if self.fields is None:
+ # skip whole message and return NULL as handler
+ return 'NULL'
+ return 'handle_%s' %self.name
+
+ def dissect(self):
+ ret = ''
+ declarations = 0
+
+ if (self.fields is not None):
+ 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(" * Direction: %s\n" %self.direction)
+ ret += self.indent_out(" * VarLength: %s\n" %self.dynamic)
+ 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("{\n")
+ self.incr_indent()
+ for fields in self.fields:
+ if fields.size_gt:
+ if self.basemessage.declared is None or "hdr_data_length" not in self.basemessage.declared:
+ ret += self.indent_out("guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);\n")
+ self.basemessage.declared.append("hdr_data_length")
+ declarations += 1
+ if not declarations:
+ for fields in self.fields[1:]:
+ if self.basemessage.declared is None or "hdr_version" not in self.basemessage.declared:
+ ret += self.indent_out("guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n")
+ self.basemessage.declared.append("hdr_version")
+ declarations += 1
+ for fields in self.fields:
+ ret += '%s' %fields.declaration()
+ declarations += 1
+
+ if declarations > 1:
+ ret += "\n"
+
+ #ret += self.indent_out('if (!cursor || !pinfo) {return;}\n\n') # ugly check to get rid of compiler warning about unused parameters
+ if (self.fields is not None):
+ for fields in self.fields:
+ ret += '%s' %fields.dissect()
+ self.decr_indent()
+ ret += "}\n\n"
+ return ret
+
+ class Fields(DataNode):
+ ''' Fields '''
+ size_fieldnames= []
+
+ def declaration(self):
+ ret = ''
+
+ #ret += '/* Fields Declaration */'
+
+ for field in self._children:
+ ret += '%s' %(field.declaration())
+ self.intsize += field.intsize
+ return ret
+
+ def dissect(self, lookupguide=""):
+ ret = ''
+ ifstarted = 0
+ #ret += "/* [PARENT: %s, BASEMESSAGE: %s] */\n" %(self.parent.name,self.basemessage.name)
+
+ if ((self.beginversion or self.endversion) and (self.beginversion != "0" or self.endversion != "22")):
+
+ ifstarted = 1
+ ret += self.indent_out('if (')
+ if (self.beginversion and self.beginversion != "0"):
+ if (not self.endversion or self.endversion == "22"):
+ ret += 'hdr_version >= V%s_MSG_TYPE) {\n' %self.beginversion
+ else:
+ ret += 'hdr_version >= V%s_MSG_TYPE && ' %self.beginversion
+ if (self.endversion and self.endversion != "22"):
+ ret += 'hdr_version <= V%s_MSG_TYPE) {\n' %self.endversion
+ self.incr_indent()
+
+ if self.size_gt:
+ ret += self.indent_out('if (hdr_data_length > %s) {\n' %self.size_gt)
+ self.incr_indent()
+
+ # generate dissection
+ for field in self._children:
+ ret += '%s' %(field.dissect())
+
+ if self.size_gt:
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+
+ if ifstarted:
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+
+ return ret;
+
+ class Integer(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+ self.intsize = 0
+ self.endian = "ENC_LITTLE_ENDIAN"
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ ret = ''
+
+ int_sizes = {'uint32':4,'uint16':2,'uint8':1,'int32':4,'int16':2,'int8':1,'ipport':4}
+ if self.endianness == "big":
+ self.endian = "ENC_BIG_ENDIAN"
+ if self.type in int_sizes:
+ self.intsize = int_sizes[self.type]
+ else:
+ print "ERROR integer %s with type: %s, could not be found" %(self.name, self.type)
+
+ if self.declare == "yes":
+ if self.basemessage.declared is None or self.name not in self.basemessage.declared:
+ ret += self.indent_out('g%s %s = 0;\n' %(self.type, self.name))
+ self.basemessage.declared.append(self.name)
+
+ global fieldsArray
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] ='{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_UINT%d, BASE_DEC, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), self.intsize * 8, '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ret
+
+ def dissect(self):
+ ret = ''
+
+ size = 0
+ if self.size_fieldname:
+ if self.basemessage.dynamic == "yes":
+ size = self.size_fieldname
+ else:
+ size = self.maxsize
+ elif self.size:
+ size = self.size
+
+ if size:
+ variable = 'counter_%d' %indentation
+ ret += self.indent_out('{\n')
+ self.incr_indent()
+ ret += self.indent_out('guint32 %s = 0;\n' %(variable));
+ if self.size_fieldname:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
+ else:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
+ ret += self.indent_out('for (%s = 0; %s < %s; %s++) {\n' %(variable, variable, size, variable));
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.incr_indent()
+ ret += self.indent_out('if (%s < %s) {\n' %(variable,self.size_fieldname))
+ self.incr_indent()
+
+ if self.declare == "yes":
+ if self.endianness == "big":
+ if (self.intsize == 4):
+ ret += self.indent_out('%s = tvb_get_ntohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ elif (self.intsize == 2):
+ ret += self.indent_out('%s = tvb_get_ntohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ else:
+ ret += self.indent_out('%s = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ else:
+ if (self.intsize == 4):
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ elif (self.intsize == 2):
+ ret += self.indent_out('%s = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ else:
+ ret += self.indent_out('%s = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+
+ if self.name in si_fields.keys():
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %d, %s);\n' %(self.name, self.intsize, self.endian))
+
+ if size:
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.decr_indent()
+ ret += self.indent_out('} else {\n')
+ ret += self.indent_out(' ptvcursor_advance(cursor, %d);\n' %self.intsize)
+ ret += self.indent_out('}\n')
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+ return ret
+
+ class Enum(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+ self.intsize = 0
+ self.sparse = 0
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ ret = ''
+ prevvalue = 0
+ enum_sizes = {'uint32':4,'uint16':2,'uint8':1}
+ if self.type in enum_sizes:
+ self.intsize = enum_sizes[self.type]
+ else:
+ print "ERROR enum %s with type: %s, could not be found" %(self.name, self.type)
+
+ if self.declare == "yes":
+ if self.basemessage.declared is None or self.name not in self.basemessage.declared:
+ ret += self.indent_out('g%s %s = 0;\n' %(self.type, self.name))
+ self.basemessage.declared.append(self.name)
+
+ global fieldsArray
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] ='{&hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_UINT%d, BASE_HEX | BASE_EXT_STRING, &%s_ext, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), self.intsize * 8, self.subtype[0].upper() + self.subtype[1:], '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ret
+
+ def dissect(self):
+ ret = ''
+ endian = "ENC_LITTLE_ENDIAN"
+
+
+ size = 0
+ if self.size_fieldname:
+ if self.basemessage.dynamic == "yes":
+ size = self.size_fieldname
+ else:
+ size = self.maxsize
+ elif self.size:
+ size = self.size
+
+ if size:
+ variable = 'counter_%d' %indentation
+ ret += self.indent_out('{\n')
+ self.incr_indent()
+ ret += self.indent_out('guint32 %s = 0;\n' %(variable));
+ if self.size_fieldname:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
+ else:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
+ ret += self.indent_out('for (%s = 0; %s < %s; %s++) {\n' %(variable, variable, size, variable));
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.incr_indent()
+ ret += self.indent_out('if (%s < %s) {\n' %(variable,self.size_fieldname))
+ self.incr_indent()
+
+ if self.name in si_fields.keys():
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+
+ if self.declare == "yes":
+ if (self.intsize == 4):
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ elif (self.intsize == 2):
+ ret += self.indent_out('%s = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+ else:
+ ret += self.indent_out('%s = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
+
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %d, %s);\n' %(self.name, self.intsize, endian))
+
+ if size:
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.decr_indent()
+ ret += self.indent_out('} else {\n')
+ ret += self.indent_out(' ptvcursor_advance(cursor, 4);\n')
+ ret += self.indent_out('}\n')
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+ return ret
+
+ class String(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ ret = ''
+ self.intsize = 0
+ if self.size:
+ if self.size=="VariableDirnumSize":
+ self.intsize = 24
+ else:
+ self.intsize = int(self.size)
+ elif self.maxsize and self.basemessage.dynamic == "no":
+ self.intsize = int(self.maxsize)
+
+ if self.declare == "yes":
+ if self.size=="VariableDirnumSize":
+ if self.basemessage.declared is None or "VariableDirnumSize" not in self.basemessage.declared:
+ if self.basemessage.declared is None or "hdr_version" not in self.basemessage.declared:
+ #if (self.basemessage.fields is not None and len(self.basemessage.fields) == 1):
+ ret += self.indent_out('guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n')
+ 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)
+
+ 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:
+ ret += self.indent_out('guint32 %s_len = 0;\n' %self.name)
+ self.basemessage.declared.append(self.name + '_len')
+
+ global fieldsArray
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] = '{&hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_STRING, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ret
+
+ def dissect(self):
+ ret = ''
+
+ if self.declare == "yes" and self.size != "VariableDirnumSize":
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n' %self.name)
+
+ if self.subtype == "DisplayLabel":
+ if self.basemessage.dynamic == "yes":
+ ret += self.indent_out('dissect_skinny_displayLabel(cursor, hf_skinny_%s, 0, %d);\n' %(self.name, self.intsize))
+ elif self.size_fieldname:
+ ret += self.indent_out('dissect_skinny_displayLabel(cursor, hf_skinny_%s, %s, %d);\n' %(self.name, self.size_fieldname, self.intsize))
+ else:
+ ret += self.indent_out('dissect_skinny_displayLabel(cursor, hf_skinny_%s, %s, %d);\n' %(self.name, self.size, self.intsize))
+
+ elif self.basemessage.dynamic == "yes":
+ ret += self.indent_out('%s_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;\n' %self.name)
+ ret += self.indent_out('if (%s_len > 1) {\n' %self.name)
+ if self.name in si_fields.keys():
+ ret += self.indent_out(' %s = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), %s_len));\n' %(si_fields[self.name], self.name))
+ ret += self.indent_out(' ptvcursor_add(cursor, hf_skinny_%s, %s_len, ENC_ASCII|ENC_NA);\n' %(self.name, self.name))
+ ret += self.indent_out('} else {\n')
+ ret += self.indent_out(' ptvcursor_advance(cursor, 1);\n')
+ ret += self.indent_out('}\n')
+ elif self.size_fieldname:
+ if self.name in si_fields.keys():
+ ret += self.indent_out('%s = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), %s));\n' %(si_fields[self.name], self.size_fieldname))
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %s, ENC_ASCII|ENC_NA);\n' %(self.name, self.size_fieldname))
+ else:
+ if self.name in si_fields.keys():
+ ret += self.indent_out('%s = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), %s));\n' %(si_fields[self.name], self.size))
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %s, ENC_ASCII|ENC_NA);\n' %(self.name, self.size))
+
+ return ret
+
+ class Ether(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ ret = ''
+ self.intsize = 6
+ if self.size:
+ self.intsize = int(self.size)
+ elif self.maxsize and self.basemessage.dynamic == "no":
+ self.intsize = int(self.maxsize)
+
+ if self.declare == "yes":
+ 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)
+
+ if self.basemessage.dynamic == "yes":
+ if self.basemessage.declared is None or self.name + '_len' not in self.basemessage.declared:
+ ret += self.indent_out('guint32 %s_len = 0;\n' %self.name)
+ self.basemessage.declared.append(self.name + '_len')
+
+ global fieldsArray
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_ETHER, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ret
+
+ def dissect(self):
+ ret = ''
+
+ if self.basemessage.dynamic == "yes":
+ ret += self.indent_out('%s_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;\n' %self.name)
+ ret += self.indent_out('if (%s_len > 1) {\n' %self.name)
+ ret += self.indent_out(' ptvcursor_add(cursor, hf_skinny_%s, 6, ENC_NA);\n' %(self.name, self.name))
+ ret += self.indent_out(' ptvcursor_advance(cursor, %s_len - 6);\n' %(self.name))
+ ret += self.indent_out('} else {\n')
+ ret += self.indent_out(' ptvcursor_advance(cursor, 1);\n')
+ ret += self.indent_out('}\n')
+ elif self.size_fieldname:
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, 6, ENC_NA);\n' %(self.name))
+ ret += self.indent_out('ptvcursor_advance(cursor, %s - 6);\n' %(self.size_fieldname))
+ else:
+ ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, 6, ENC_NA);\n' %(self.name))
+ ret += self.indent_out('ptvcursor_advance(cursor, %s - 6);\n' %(self.size))
+ return ret
+
+ class BitField(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ global fieldsArray
+ ret = ''
+ int_sizes = {'uint32':4,'uint16':2,'uint8':1,'int32':4,'int16':2,'int8':1}
+ self.intsize = 0
+ if self.size in int_sizes:
+ self.intsize = int_sizes[self.size]
+
+ for entries in self.entries:
+ for entry in entries.entry:
+ if entry.name not in fieldsArray:
+ fieldsArray[entry.name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_BOOLEAN, %d, TFS(&tfs_yes_no), %s,\n %s, HFILL }},\n' %(entry.name, entry.text, entry.name.replace("_","."), self.intsize * 8, entry.value, '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+
+ return ret
+
+ def dissect(self):
+ ret = ''
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s");\n' %(self.name))
+ for entries in self.entries:
+ for entry in entries.entry:
+ ret += self.indent_out('ptvcursor_add_no_advance(cursor, hf_skinny_%s, %d, ENC_LITTLE_ENDIAN);\n' %(entry.name, self.intsize))
+ ret += self.indent_out('ptvcursor_advance(cursor, %d);\n' %(self.intsize))
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end bitfield: %s */\n' %(self.name))
+
+
+ return ret
+
+ class Ip(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+ self.intsize = 4
+ if self.type == "ipv6":
+ self.intsize = 16
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ global fieldsArray
+ if self.name not in fieldsArray:
+ if self.type == "ipv4":
+ fieldsArray[self.name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_IPv4, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ else:
+ fieldsArray[self.name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_IPv6, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ''
+
+ def dissect(self):
+ if self.type == "ipv4":
+ return self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, 4, ENC_BIG_ENDIAN);\n' %self.name)
+ else:
+ return self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, 16, ENC_BIG_ENDIAN);\n' %self.name)
+
+ class Ipv4or6(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+ self.intsize = 4
+ if self.endianness is None:
+ self.intsize += 16
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ global fieldsArray
+ name = self.name + '_ipv4'
+ if name not in fieldsArray:
+ fieldsArray[name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_IPv4, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(name, self.name + ' IPv4 Address', name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ name = self.name + '_ipv6'
+ if name not in fieldsArray:
+ fieldsArray[name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_IPv6, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(name, self.name + ' IPv6 Address', name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ''
+
+ def dissect(self):
+ return self.indent_out('dissect_skinny_ipv4or6(cursor, hf_skinny_%s_ipv4, hf_skinny_%s_ipv6, pinfo);\n' %(self.name, self.name))
+
+ class XML(DataNode):
+ def __init__(self):
+ DataNode.__init__(self)
+ self.intsize = 0
+
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ global fieldsArray
+
+ if self.size:
+ self.intsize = int(self.size)
+ elif self.maxsize:
+ self.intsize = int(self.maxsize)
+
+ if self.name not in fieldsArray:
+ fieldsArray[self.name] = '{ &hf_skinny_%s,\n {\n "%s", "skinny.%s", FT_STRING, BASE_NONE, NULL, 0x0,\n %s, HFILL }},\n' %(self.name, self.comment if (self.comment and self.longcomment) else self.name, self.name.replace("_","."), '"' + self.longcomment + '"' if self.longcomment else '"' + self.comment + '"' if self.comment else 'NULL')
+ return ''
+
+ def dissect(self):
+ ret = ''
+ if self.size_fieldname:
+ ret += self.indent_out('dissect_skinny_xml(cursor, hf_skinny_%s, pinfo, %s, %d);\n' %(self.name, self.size_fieldname, self.intsize))
+ else:
+ ret += self.indent_out('dissect_skinny_xml(cursor, hf_skinny_%s, pinfo, 0, %d);\n' %(self.name, self.intsize))
+ return ret
+
+ class Struct(DataNode):
+ def __str__(self):
+ return '// Struct : %s / %s / %s / %s\n' %(self.name, self.size, self.field_sizename, self.maxsize)
+
+ def declaration(self):
+ ret = ''
+
+ if (self.fields is not None and len(self.fields)):
+ if (len(self.fields) > 1):
+ if self.basemessage.declared is None or "hdr_version" not in self.basemessage.declared:
+ ret += self.indent_out("guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n")
+ self.basemessage.declared.append("hdr_version")
+ for fields in self.fields:
+ ret += '%s' %fields.declaration()
+ self.intsize += fields.intsize
+
+ return ret
+
+ def dissect(self):
+ ret = ''
+ variable = 'counter_%d' %indentation
+ size = 0
+
+ if self.size_fieldname:
+ if self.basemessage.dynamic == "yes":
+ size = self.size_fieldname
+ else:
+ size = self.maxsize
+ elif self.size:
+ size = self.size
+
+ if size:
+ ret += self.indent_out('{\n')
+ self.incr_indent()
+ if debug:
+ ret += self.indent_out('/* start struct : %s / size: %d */\n' %(self.name, self.intsize))
+ ret += self.indent_out('guint32 %s = 0;\n' %(variable));
+ if self.size_fieldname:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
+ else:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
+ ret += self.indent_out('for (%s = 0; %s < %s; %s++) {\n' %(variable, variable, size, variable));
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.incr_indent()
+ ret += self.indent_out('if (%s < %s) {\n' %(variable,self.size_fieldname))
+ self.incr_indent()
+ else:
+ ret += self.indent_out('{\n')
+ self.incr_indent()
+ if debug:
+ ret += self.indent_out('/* start struct : %s / size: %d */\n' %(self.name, self.intsize))
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s");\n' %(self.name))
+
+ if size:
+ if self.size_fieldname:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [%%d / %%d]", %s + 1, %s);\n' %(self.name, variable, self.size_fieldname))
+ else:
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [%%d / %%d]", %s + 1, %s);\n' %(self.name, variable, size))
+
+ if (self.fields is not None and len(self.fields)):
+ for fields in self.fields:
+ ret += '%s' %fields.dissect()
+
+ if self.basemessage.dynamic == "no" and self.size_fieldname:
+ self.decr_indent()
+ ret += self.indent_out('} else {\n')
+ ret += self.indent_out(' ptvcursor_advance(cursor, %d);\n' %(self.intsize))
+ ret += self.indent_out('}\n')
+
+ if size:
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
+ if debug:
+ ret += self.indent_out('/* end for loop tree: %s */\n' %self.name)
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
+ ret += self.indent_out('/* end struct: %s */\n' %self.name)
+ self.decr_indent()
+ ret += self.indent_out('}\n')
+
+ return ret
+
+ class Union(DataNode):
+ def __str__(self):
+ return '%s:%s' %(self.__class__,self.name)
+
+ def declaration(self):
+ ret = ''
+ self.maxsize = 0
+ if (self.fields is not None and len(self.fields)):
+ if (len(self.fields) > 1):
+ if self.basemessage.declared is None or "hdr_version" not in self.basemessage.declared:
+ ret += self.indent_out("guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);\n")
+ self.basemessage.declared.append("hdr_version")
+ for fields in self.fields:
+ ret += '%s' %fields.declaration()
+ previous_lookup_eq = fields._children[0].lookup_eq
+ previous_lookup_le = fields._children[0].lookup_le
+ previous_lookup_ge = fields._children[0].lookup_ge
+ self.runningtotal = 0
+ for field in fields._children:
+ if previous_lookup_eq != field.lookup_eq or previous_lookup_le != field.lookup_le or previous_lookup_ge == field.lookup_ge:
+ previous_lookup_eq = field.lookup_eq
+ previous_lookup_le = field.lookup_le
+ previous_lookup_ge = field.lookup_ge
+ self.runningtotal = 0
+
+ self.runningtotal += field.intsize
+ if self.runningtotal > self.maxsize:
+ self.maxsize = self.runningtotal
+
+ self.intsize = self.maxsize
+
+ return ret
+
+ def dissect(self):
+ ret = ''
+ ifblock = self.indent_out('if')
+ skip = 0
+ #ret += self.indent_out('/* Union : %s / maxsize: %s */\n' %(self.name, self.maxsize))
+
+ if (self.fields is not None and len(self.fields)):
+ for fields in self.fields:
+ for field in fields._children:
+ if self.lookup_guide and (field.lookup_ge or field.lookup_le or field.lookup_eq):
+ lookupguide = self.lookup_guide
+ # start block
+ subtree_text = ''
+ if field.lookup_ge and field.lookup_le:
+ ret += '%s (%s >= %s && %s <= %s)' %(ifblock, lookupguide, field.lookup_ge.upper(), lookupguide, field.lookup_le.upper())
+ subtree_text = "%s <= %s <= %s" %(field.lookup_ge, lookupguide, field.lookup_le)
+ elif field.lookup_ge:
+ ret += '%s (%s >= %s)' %(ifblock, lookupguide, field.lookup_ge.upper())
+ subtree_text = "%s >= %s" %(lookupguide, field.lookup_ge)
+ elif field.lookup_le:
+ ret += '%s (%s <= %s)' %(ifblock, lookupguide, field.lookup_le.upper())
+ subtree_text = "%s <= %s" %(lookupguide, field.lookup_le)
+ elif field.lookup_eq:
+ if field.lookup_eq == "*":
+ ret += ' else'
+ subtree_text = "any %s" %(lookupguide)
+ elif field.lookup_eq == "skip":
+ continue
+ else:
+ ret += '%s (%s == %s)' %(ifblock, lookupguide, field.lookup_eq.upper())
+ subtree_text = "%s is %s" %(lookupguide, field.lookup_eq)
+
+ ret += self.indent_out(' {\n')
+ self.incr_indent()
+ if debug:
+ ret += self.indent_out('/* start union : %s / maxsize: %s */\n' %(self.name, self.maxsize))
+ currsize = 0
+ # dissect field
+
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s");\n' %subtree_text)
+ ret += '%s' %field.dissect()
+ ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
+
+ currsize += field.intsize
+
+ # compensate length
+ if (self.maxsize - currsize) > 0:
+ ret += self.indent_out('ptvcursor_advance(cursor, %d);\n' %(self.maxsize - currsize))
+
+ self.decr_indent()
+
+ # close block
+ ret += self.indent_out('}')
+ ifblock = ' else if'
+ else:
+ ret += '/* ERROR %s, missing lookup_guide */' %field.dissect()
+ ret += '\n'
+
+ return ret
+
+ class TreeBuilder(xml.sax.handler.ContentHandler):
+ def __init__(self):
+ self.stack = []
+ self.root = DataNode()
+ self.previous = self.root
+ self.current = self.root
+ self.basemessage = None
+ self.text_parts = []
+ def startElement(self, name, attrs):
+ objecttype = {"message": Message(), "fields": Fields(), "enum" : Enum(), "bitfield" : BitField(), "struct": Struct(), "union": Union(), "integer": Integer(), "string": String(), "ether": Ether(), "ip": Ip(), "ipv4or6": Ipv4or6(), "xml": XML()}
+ self.previous = self.current
+ self.stack.append((self.current, self.text_parts))
+ if name in objecttype.keys():
+ self.current = objecttype[name]
+ else:
+ self.current = DataNode()
+ if name == "message":
+ self.basemessage = self.current
+ self.text_parts = []
+ #self.children = []
+ self.current.parent = self.previous
+ self.current.basemessage = self.basemessage
+ # xml attributes --> python attributes
+ for k, v in attrs.items():
+ self.current._add_xml_attr(_name_mangle(k), v)
+
+ def endElement(self, name):
+ text = ''.join(self.text_parts).strip()
+ if text:
+ self.current.data = text
+ if self.current._attrs:
+ obj = self.current
+ else:
+ # a text only node is simply represented by the string
+ obj = text or ''
+ self.current, self.text_parts = self.stack.pop()
+ self.current._add_xml_attr(_name_mangle(name), obj)
+ self.current._add_child(_name_mangle(name), obj)
+ def characters(self, content):
+ self.text_parts.append(content)
+
+ builder = TreeBuilder()
+ xml.sax.parse(src, builder)
+ return builder.root._attrs.values()[0]
+
+# skinny = xml2obj('SkinnyProtocolOptimized.xml')
+# for message in skinny.message:
+# print '%s' %message.dissect()
+
+#if __name__ == '__main__':
+# import timeit
+# print(timeit.timeit("generateMessageDissectors()", setup="from __main__ import generateMessageDissectors"))
+
+
+#skinny = xml2obj('SkinnyProtocolOptimized.xml')
+#for message in skinny.message:
+# message.dissect()
+
+#for key,value in fieldsArray.items():
+# print "%s : %s" %(key,value)
+#print '%r\n' %fieldsArray
+
+#skinny = xml2obj('SkinnyProtocolOptimized.xml')
+#for message in skinny.message:
+# print message.declaration()