aboutsummaryrefslogtreecommitdiffstats
path: root/packet-skinny.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-03-19 11:26:23 +0000
committerGuy Harris <guy@alum.mit.edu>2002-03-19 11:26:23 +0000
commit58387eb63b3c533bbb61b675caedf390df229034 (patch)
tree179a1e74711ad2ef2a2b50463398d5fbe0b916fb /packet-skinny.c
parent09acc1c074b3d0f4bf1c4d85fbbf34bc5ac415a9 (diff)
Updates from Paul E. Erkkila.
svn path=/trunk/; revision=4982
Diffstat (limited to 'packet-skinny.c')
-rw-r--r--packet-skinny.c1416
1 files changed, 1241 insertions, 175 deletions
diff --git a/packet-skinny.c b/packet-skinny.c
index ca35accd97..6bf6ee24c2 100644
--- a/packet-skinny.c
+++ b/packet-skinny.c
@@ -9,7 +9,7 @@
* This file is based on packet-aim.c, which is
* Copyright 2000, Ralf Hoelzer <ralf@well.com>
*
- * $Id: packet-skinny.c,v 1.11 2002/03/19 06:31:16 guy Exp $
+ * $Id: packet-skinny.c,v 1.12 2002/03/19 11:26:23 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -47,6 +47,30 @@
#define TCP_PORT_SKINNY 2000
+#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"
+};
+
+
/* I will probably need this again when I change things
* to function pointers, but let me use the existing
* infrastructure for now
@@ -87,7 +111,7 @@ static const value_string message_id[] = {
{0x0025, "SoftKeySetReqMessage"},
{0x0026, "SoftKeyEventMessage"},
{0x0027, "UnregisterMessage"},
- {0x0028, "SoftKeyEventMessage"},
+ {0x0028, "SoftKeyTemplateReqMessage"},
{0x0029, "RegisterTokenReq"},
{0x002B, "unknownClientMessage1"},
{0x002D, "unknownClientMessage2"},
@@ -147,9 +171,409 @@ static const value_string message_id[] = {
{0x011B, "RegisterTokenReject"},
{0x011D, "unknownForwardMessage1"},
- {0 , NULL} /* needed for value_string automagic */
+ {0 , NULL} /* terminator */
+};
+
+/*
+ * Device type to text conversion table
+ */
+static const value_string deviceTypes[] = {
+ {1 , "DeviceStation30SPplus"},
+ {2 , "DeviceStation12SPplus"},
+ {3 , "DeviceStation12SP"},
+ {4 , "DeviceStation12"},
+ {5 , "DeviceStation30VIP"},
+ {6 , "DeviceStationTelecaster"},
+ {7 , "DeviceStationTelecasterMgr"},
+ {8 , "DeviceStationTelecasterBus"},
+ {20 , "DeviceVirtual30SPplus"},
+ {21 , "DeviceStationPhoneApplication"},
+ {30 , "DeviceAnalogAccess"},
+ {40 , "DeviceDigitalAccessPRI"},
+ {41 , "DeviceDigitalAccessT1"},
+ {42 , "DeviceDigitalAccessTitan2"},
+ {47 , "DeviceAnalogAccessElvis"},
+ {49 , "DeviceDigitalAccessLennon"},
+ {50 , "DeviceConferenceBridge"},
+ {51 , "DeviceConferenceBridgeYoko"},
+ {60 , "DeviceH225"},
+ {61 , "DeviceH323Phone"},
+ {62 , "DeviceH323Trunk"},
+ {70 , "DeviceMusicOnHold"},
+ {71 , "DevicePilot"},
+ {72 , "DeviceTapiPort"},
+ {73 , "DeviceTapiRoutePoint"},
+ {80 , "DeviceVoiceInBox"},
+ {81 , "DeviceVoiceInboxAdmin"},
+ {82 , "DeviceLineAnnunciator"},
+ {90 , "DeviceRouteList"},
+ {100, "DeviceLoadSimulator"},
+ {110, "DeviceMediaTerminationPoint"},
+ {111, "DeviceMediaTerminationPointYoko"},
+ {120, "DeviceMGCPStation"},
+ {121, "DeviceMGCPTrunk"},
+ {122, "DeviceRASProxy"},
+ {255, "DeviceNotDefined"},
+ { 0 , NULL}
+};
+
+/*
+ * 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 const value_string deviceStimuli[] = {
+ {1 , "SsLastNumberRedial"},
+ {2 , "SsSpeedDial"},
+ {3 , "SsHold"},
+ {4 , "SsTransfer"},
+ {5 , "SsForwardAll"},
+ {6 , "SsForwardBusy"},
+ {7 , "SsForwardNoAnswer"},
+ {8 , "SsDisplay"},
+ {9 , "SsLine"},
+ {0xa , "SsT120Chat"},
+ {0xb , "SsT120Whiteboard"},
+ {0xc , "SsT120ApplicationSharing"},
+ {0xd , "SsT120FileTransfer"},
+ {0xe , "SsVideo"},
+ {0xf , "SsVoiceMail"},
+ {0x11 , "SsAutoAnswer"},
+ {0x21 , "SsGenericAppB1"},
+ {0x22 , "SsGenericAppB2"},
+ {0x23 , "SsGenericAppB3"},
+ {0x24 , "SsGenericAppB4"},
+ {0x25 , "SsGenericAppB5"},
+ {0x7b , "SsMeetMeConference"},
+ {0x7d , "SsConference=0x7d"},
+ {0x7e , "SsCallPark=0x7e"},
+ {0x7f , "SsCallPickup"},
+ {0x80 , "SsGroupCallPickup=80"},
+ {0,NULL}
+};
+
+
+/* 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 , "Media_Payload_NonStandard"},
+ {2 , "Media_Payload_G711Alaw64k"},
+ {3 , "Media_Payload_G711Alaw56k"},
+ {4 , "Media_Payload_G711Ulaw64k"},
+ {5 , "Media_Payload_G711Ulaw56k"},
+ {6 , "Media_Payload_G722_64k"},
+ {7 , "Media_Payload_G722_56k"},
+ {8 , "Media_Payload_G722_48k"},
+ {9 , "Media_Payload_G7231"},
+ {10 , "Media_Payload_G728"},
+ {11 , "Media_Payload_G729"},
+ {12 , "Media_Payload_G729AnnexA"},
+ {13 , "Media_Payload_Is11172AudioCap"},
+ {14 , "Media_Payload_Is13818AudioCap"},
+ {15 , "Media_Payload_G729AnnexB"},
+ {16 , "Media_Payload_G729AnnexAwAnnexB"},
+ {32 , "Media_Payload_Data64"},
+ {33 , "Media_Payload_Data56"},
+ {80 , "Media_Payload_GSM"},
+ {81 , "Media_Payload_ActiveVoice"},
+ {82 , "Media_Payload_G726_32K"},
+ {83 , "Media_Payload_G726_24K"},
+ {84 , "Media_Payload_G726_16K"},
+ {85 , "Media_Payload_G729_B"},
+ {86 , "Media_Payload_G729_B_LOW_COMPLEXITY"},
+ {0 , NULL}
+};
+
+static const value_string alarmSeverities[] = {
+ {0 , "severityCritical"},
+ {7 , "severityMajor"},
+ {8 , "severityMinor"},
+ {1 , "severityWarning"},
+ {10 , "severityMarginal"},
+ {4 , "severityUnknown"},
+ {2 , "severityInformational"},
+ {20 , "severityTraceInfo"},
+ {0 , NULL}
+};
+
+static const value_string multicastMediaReceptionStatus[] = {
+ {0 , "mmrOk"},
+ {1 , "mmrError"},
+ {0 , NULL}
+};
+
+static const value_string openReceiveChanStatus[] = {
+ {0 , "orcOk"},
+ {1 , "orcError"},
+ {0 , NULL}
+};
+
+
+static const value_string statsProcessingTypes[] = {
+ {0 , "clearStats"},
+ {1 , "doNotClearStats"},
+ {0 , NULL}
+};
+
+#define SkMaxSoftKeyCount 18 /* this value should be the same as the max soft key value */
+static const value_string softKeyEvents[] = {
+ {1 , "SkRedial"},
+ {2 , "SkNewCall"},
+ {3 , "SkHold"},
+ {4 , "SkTrnsfer"},
+ {5 , "SkCFwdAll"},
+ {6 , "SkCFwdBusy"},
+ {7 , "SkCFwdNoAnswer"},
+ {8 , "SkBackSpace"},
+ {9 , "SkEndCall"},
+ {10 , "SkResume"},
+ {11 , "SkAnswer"},
+ {12 , "SkInfo"},
+ {13 , "SkConfrn"},
+ {14 , "SkPark"},
+ {15 , "SkJoin"},
+ {16 , "SkMeetMeConfrn"},
+ {17 , "SkCallPickUp"},
+ {18 , "SkGrpCallPickUp"},
+ {0 , NULL}
+};
+
+/* Define info index for each softkey event for Telecaster station. */
+static const value_string softKeyIndexes[] = {
+ {301 , "SkRedialInfoIndex"},
+ {302 , "SkNewCallInfoIndex"},
+ {303 , "SkHoldInfoIndex"},
+ {304 , "SkTrnsferInfoIndex"},
+ {305 , "SkCFwdAllInfoIndex"},
+ {306 , "SkCFwdBusyInfoIndex"}, /* not used yet */
+ {307 , "SkCFwdNoAnswerInfoIndex"}, /* not used yet */
+ {308 , "SkBackSpaceInfoIndex"},
+ {309 , "SkEndCallInfoIndex"},
+ {310 , "SkResumeInfoIndex"},
+ {311 , "SkAnswerInfoIndex"},
+ {312 , "SkInfoInfoIndex"},
+ {313 , "SkConfrnInfoIndex"},
+ {314 , "SkParkInfoIndex"},
+ {315 , "SkJoinInfoIndex"},
+ {316 , "SkMeetMeConfrnInfoIndex"},
+ {317 , "SkCallPickUpInfoIndex"},
+ {318 , "SkGrpCallPickUpInfoIndex"},
+ {0 , NULL}
+};
+
+
+static const value_string buttonDefinitions[] = {
+ {1 , "BtLastNumberRedial"},
+ {2 , "BtSpeedDial"},
+ {3 , "BtHold"},
+ {4 , "BtTransfer"},
+ {5 , "BtForwardAll"},
+ {6 , "BtForwardBusy"},
+ {7 , "BtForwardNoAnswer"},
+ {8 , "BtDisplay"},
+ {9 , "BtLine"},
+ {0xa , "BtT120Chat"},
+ {0xb , "BtT120Whiteboard"},
+ {0xc , "BtT120ApplicationSharing"},
+ {0xd , "BtT120FileTransfer"},
+ {0xe , "BtVideo"},
+ {0x10 , "BtAnswerRelease"},
+ {0xf0 , "BtKeypad"},
+ {0xfd , "BtAEC"},
+ {0xff , "BtUndefined"},
+ {0 , NULL}
+};
+
+#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}
};
+/* Define soft key labels for the Telecaster station */
+static const value_string softKeyLabel[] = {
+ {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}
+};
+
+
+/*
+ * 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 , "LampOff"},
+ {0x2 , "LampOn"},
+ {0x3 , "LampWink"},
+ {0x4 , "LampFlash"},
+ {0x5 , "LampBlink"},
+ {0 , NULL}
+};
+
+
+# define NUM_MEDIA_PAYLOADTYPES 19
+static char *Media_PayloadList[] = {
+ "Undefined",
+ "Media_Payload_NonStandard",
+ "Media_Payload_G711Alaw64k",
+ "Media_Payload_G711Alaw56k",
+ "Media_Payload_G711Ulaw64k",
+ "Media_Payload_G711Ulaw56k",
+ "Media_Payload_G722_64k",
+ "Media_Payload_G722_56k",
+ "Media_Payload_G722_48k",
+ "Media_Payload_G7231",
+ "Media_Payload_G728",
+ "Media_Payload_G729",
+ "Media_Payload_G729AnnexA",
+ "Media_Payload_Is11172AudioCap",
+ "Media_Payload_Is13818AudioCap",
+ "Media_Payload_G729AnnexB",
+ "Media_Payload_G729AnnexAwAnnexB",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Media_Payload_Data64",
+ "Media_Payload_Data56",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined", "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Undefined",
+ "Media_Payload_GSM",
+ "Media_Payload_ActiveVoice",
+ "Media_Payload_G726_32K",
+ "Media_Payload_G726_24K",
+ "Media_Payload_G726_16K",
+ "Media_Payload_G729_B",
+ "Media_Payload_G729_B_LOW_COMPLEXITY",
+ "Undefined",
+ "Undefined"
+};
+
+#define StationMaxDirnumSize 24 /* max size of calling or called party dirnum */
+#define StationMaxNameSize 40 /* max size of calling party's 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 */
+
static void dissect_skinny(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
/* Initialize the protocol and registered fields */
@@ -157,6 +581,30 @@ static int proto_skinny = -1;
static int hf_skinny_data_length = -1;
static int hf_skinny_reserved = -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_calledParty = -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_capCount = -1;
+static int hf_skinny_payloadCapability = -1;
+static int hf_skinny_maxFramesPerPacket = -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_ipAddress = -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;
@@ -165,17 +613,66 @@ 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_extension = -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_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_timeStamp = -1;
-static int hf_skinny_unknown = -1;
-static int hf_skinny_ipDest = -1;
-static int hf_skinny_ipSrc = -1;
+static int hf_skinny_lineDirNumber = -1;
+static int hf_skinny_lineFullyQualifiedDisplayName = -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_extension = -1;
+static int hf_skinny_unknown = -1;
+static int hf_skinny_ipDest = -1;
+static int hf_skinny_ipSrc = -1;
static int hf_skinny_destPort = -1;
static int hf_skinny_srcPort = -1;
static int hf_skinny_softKeyNumber = -1;
@@ -184,6 +681,7 @@ static int hf_skinny_dialedDigit = -1;
/* Initialize the subtree pointers */
static gint ett_skinny = -1;
+static gint ett_skinny_softKeyMap = -1;
/* desegmentation of SCCP */
static gboolean skinny_desegment = TRUE;
@@ -212,18 +710,26 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
guint32 unknown8 = 0;
guint32 unknown9 = 0;
guint32 unknown10 = 0;
- guint32 unknown11 = 0;
int extensionLength = 10;
int displayLength = 100;
char extension[extensionLength];
char displayMessage[displayLength];
- int softKeyLoop = 0;
+ guint i = 0;
+ int j = 0;
+
+ guint32 capCount;
+ guint32 softKeyCount;
+ guint32 softKeySetCount;
+ guint16 validKeyMask;
/* Set up structures we will need to add the protocol subtree and manage it */
proto_item *ti;
proto_tree *skinny_tree = NULL;
+ proto_item *skm = NULL;
+ proto_item *skm_tree = NULL;
+
hdr_data_length = tvb_get_letohl(tvb, offset);
hdr_reserved = tvb_get_letohl(tvb, offset+4);
data_messageid = tvb_get_letohl(tvb, offset+8);
@@ -260,19 +766,31 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
case 0x7 : /* onHook */
break;
+ case 0x8 : /* hookFlash */
+ break;
+
+ case 0xc : /* configStateReqMessage */
+ break;
+
case 0xd : /* timeDateReqMessage */
break;
case 0xe : /* buttoneTemplateReqMessage */
break;
+ case 0xf : /* stationVersionReqMessage */
+ break;
+
+ case 0x12 : /* stationServerReqMessage */
+ break;
+
case 0x25 : /* softKeySetReqMessage */
break;
case 0x27 : /* unregisterMessage */
break;
- case 0x28 : /* softKeyEventMessage */
+ case 0x28 : /* softKeyTemplateRequest */
break;
case 0x83 : /* stopTone */
@@ -290,81 +808,103 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
*/
case 0x1 : /* register message */
- memset(displayMessage, '\0', displayLength);
- tvb_memcpy(tvb, displayMessage, offset+12, 15); /* Note hack on field size ^_^ */
- proto_tree_add_string(skinny_tree, hf_skinny_displayMessage, tvb, offset+12, strlen(displayMessage), displayMessage);
- unknown1 = tvb_get_letohl(tvb, offset+28);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+28, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+32);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+32, 4, unknown2);
+ proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, offset+28, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, offset+32, 4, TRUE);
proto_tree_add_item(skinny_tree, hf_skinny_ipSrc, tvb, offset+36, 4, TRUE);
- unknown4 = tvb_get_letohl(tvb, offset+40);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+40, 4, unknown4);
- unknown5 = tvb_get_letohl(tvb, offset+44);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+44, 4, unknown5);
- unknown6 = tvb_get_letohl(tvb, offset+48);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+48, 4, unknown6);
- unknown7 = tvb_get_letohl(tvb, offset+52);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+52, 4, unknown7);
+ proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, offset+40, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_maxStreams, tvb, offset+44, 4, TRUE);
break;
case 0x2 : /* ipPortMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_srcPort, tvb, offset+12, 2, FALSE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stationIpPort, tvb, offset+12, 2, FALSE);
break;
case 0x3 : /* keyPadButtonMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_dialedDigit, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stationKeypadButton, tvb, offset+12, 4, TRUE);
break;
- case 0x5 :
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
+ case 0x4 : /* stationEnblocCallMessage -- This decode NOT verified*/
+ proto_tree_add_item(skinny_tree, hf_skinny_calledParty, tvb, offset+12, StationMaxDirnumSize, TRUE);
+ break;
+
+ case 0x5 : /* stationStimulusMessage */
+ proto_tree_add_item(skinny_tree, hf_skinny_stimulus, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stimulusInstance, tvb, offset+16, 4, TRUE);
break;
+ case 0x9 : /* stationForwardStatReqMessage */
+ proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, TRUE);
+ break;
+
case 0xa : /* speedDialStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_line, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_speedDialNumber, tvb, offset+12, 4, TRUE);
break;
case 0xb : /* LineStatReqMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_line, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, TRUE);
break;
- case 0x10 : /* capabilitiesResMessage ===== LOTS to decode here, check jtapi */
+ case 0x10 : /* capabilitiesResMessage - VERIFIED AS IS*/
+ /* FIXME -- we are only going to decode the first 7 protocol fields for now cuz that's all it sent me
+ * on the phone i was working with. I should probably skip the struct decode and use a more piece
+ * type method using the capCount definition to control the decode loop
+ *
+ * basically changing StationMaxCapabilities definition
+ *
+ */
+ 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, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket, tvb, offset+(i*16)+20, 4, TRUE);
+ /* FIXME -- decode the union under here as required, is always 0 on my equipment */
+ }
break;
- case 0x20 : /* alarmMessage */
- unknown1 = tvb_get_letohl(tvb,offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- memset(displayMessage, '\0', displayLength);
- tvb_memcpy(tvb, displayMessage, offset+16, 76); /* Note hack on field size ^_^ */
- proto_tree_add_string(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, strlen(displayMessage), displayMessage);
- unknown2 = tvb_get_letohl(tvb, offset+92);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+92, 4, unknown2);
- unknown3 = tvb_get_letohl(tvb, offset+96);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+96, 4, unknown3);
- unknown4 = tvb_get_letohl(tvb, offset+100);
- proto_tree_add_item(skinny_tree, hf_skinny_ipSrc, tvb, offset+100, 4, TRUE);
+ case 0x20 : /* stationAlarmMessage */
+ proto_tree_add_item(skinny_tree, hf_skinny_alarmSeverity, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, 80, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_alarmParam1, tvb, offset+96, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_alarmParam2, tvb, offset+100, 4, TRUE);
break;
- case 0x22 :
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- proto_tree_add_item(skinny_tree, hf_skinny_ipSrc, tvb, offset+16, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_srcPort, tvb, offset+20, 4, TRUE);
- unknown3 = tvb_get_letohl(tvb, offset+24);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, unknown3);
+ case 0x21 : /* stationMulticastMediaReceptionAck - This decode NOT verified*/
+ proto_tree_add_item(skinny_tree, hf_skinny_receptionStatus, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, TRUE);
+ break;
+
+ case 0x22 : /* stationOpenReceiveChannelAck */
+ proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, TRUE);
break;
+ case 0x23 : /* stationConnectionStatisticsRes */
+ proto_tree_add_item(skinny_tree, hf_skinny_directoryNumber, tvb, offset+12, StationMaxDirnumSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+36, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_statsProcessingType, tvb, offset+40, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_packetsSent, tvb, offset+44, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_octetsSent, tvb, offset+48, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_packetsRecv, tvb, offset+52, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_octetsRecv, tvb, offset+56, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_packetsLost, tvb, offset+60, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_jitter, tvb, offset+64, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_latency, tvb, offset+68, 4, TRUE);
+ break;
+
case 0x26 : /* softKeyEventMessage */
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyEvent, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, TRUE);
proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, TRUE);
break;
+ /*
+ *
+ * message not in the spec
+ *
+ */
case 0x2b : /* unknownClientMessage1 */
unknown1 = tvb_get_letohl(tvb, offset+12);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
@@ -375,15 +915,15 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
+ /*
+ *
+ * Call manager -> client messages start here(ish)
+ *
+ */
case 0x81 : /* registerAck */
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
- unknown3 = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, unknown3);
- unknown4 = tvb_get_letohl(tvb, offset+24);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, unknown4);
+ proto_tree_add_item(skinny_tree, hf_skinny_keepAliveInterval, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateTemplate, tvb, offset+16, StationDateTemplateSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_secondaryKeepAliveInterval, tvb, offset+24, 4, TRUE);
break;
case 0x82 : /* startTone */
@@ -391,21 +931,18 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
- case 0x85 :
+ case 0x85 : /* setRingerMessage */
unknown1 = tvb_get_letohl(tvb, offset+12);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
- case 0x86 :
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
- unknown3 = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, unknown3);
+ case 0x86 : /* setLampMessage */
+ proto_tree_add_item(skinny_tree, hf_skinny_stimulus, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_stimulusInstance, tvb, offset+16, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_lampMode, tvb, offset+20, 4, TRUE);
break;
- case 0x88 :
+ case 0x88 : /* setSpeakerModeMessage */
unknown1 = tvb_get_letohl(tvb, offset+12);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
@@ -439,29 +976,43 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
break;
case 0x91 : /* speedDialStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_line, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_speedDialNumber, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_speedDialDirNumber, tvb, offset+16, StationMaxDirnumSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_speedDialDisplayName, tvb, offset+40, StationMaxNameSize, TRUE);
break;
case 0x92 : /* lineStatMessage */
- proto_tree_add_item(skinny_tree, hf_skinny_line, tvb, offset+12, 4, TRUE);
- break;
-
- case 0x94 :
- proto_tree_add_item(skinny_tree, hf_skinny_dateYear, tvb, offset+12, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_dateMonth, tvb, offset+16, 4, TRUE);
- unknown1 = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, unknown1);
- proto_tree_add_item(skinny_tree, hf_skinny_dateDay, tvb, offset+24, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_dateHour, tvb, offset+28, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_dateMinute,tvb, offset+32, 4, TRUE);
- unknown2 = tvb_get_letohl(tvb, offset+36);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+36, 4, unknown2);
- unknown3 = tvb_get_letohl(tvb, offset+40);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+40, 4, unknown3);
+ proto_tree_add_item(skinny_tree, hf_skinny_lineNumber, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_lineDirNumber, tvb, offset+16, StationMaxDirnumSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_lineFullyQualifiedDisplayName, tvb, offset+16+StationMaxDirnumSize, StationMaxNameSize, TRUE);
+ break;
+
+ case 0x94 : /* stationDefineTimeDate */
+ proto_tree_add_item(skinny_tree, hf_skinny_dateYear, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateMonth, tvb, offset+16, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dayOfWeek, tvb, offset+20, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateDay, tvb, offset+24, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateHour, tvb, offset+28, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateMinute, tvb, offset+32, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateSeconds,tvb, offset+36, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_dateMilliseconds,tvb, offset+40, 4, TRUE);
proto_tree_add_item(skinny_tree, hf_skinny_timeStamp, tvb, offset+44, 4, TRUE);
break;
- case 0x97 : /* buttonTemplateMessage === LOTS here check jtapi for hints */
+ case 0x97 : /* 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, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_buttonCount, tvb, offset+16, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_totalButtonCount, tvb, offset+20, 4, TRUE);
+ for (i = 0; i < StationMaxButtonTemplateSize; i++) {
+ proto_tree_add_item(skinny_tree, hf_skinny_buttonInstanceNumber, tvb, offset+(i*2)+24, 1, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_buttonDefinition, tvb, offset+(i*2)+25, 1, TRUE);
+ }
break;
case 0x99 : /* displayTextMessage */
@@ -472,19 +1023,15 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+44, 4, unknown1);
break;
+ case 0x9d : /* stationRegisterReject */
+ break;
+
case 0x9f : /* reset */
unknown1 = tvb_get_letohl(tvb, offset+12);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
- case 0x106 : /* closeReceiveChannel */
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
- break;
-
- case 0x105 :
+ case 0x105 : /* open receive channel */
unknown1 = tvb_get_letohl(tvb, offset+12);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
unknown2 = tvb_get_letohl(tvb, offset+16);
@@ -499,6 +1046,13 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+32, 4, unknown6);
break;
+ case 0x106 : /* closeReceiveChannel */
+ unknown1 = tvb_get_letohl(tvb, offset+12);
+ proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
+ unknown2 = tvb_get_letohl(tvb, offset+16);
+ proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
+ break;
+
case 0x107 :
memset(extension, '\0', extensionLength);
tvb_get_nstringz0(tvb, offset+12, extensionLength, extension);
@@ -506,38 +1060,59 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+36, 4, TRUE);
break;
- case 0x108 : /* softkeyTemplateResMessage == Jtapi again :P, can decode some*/
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
-
- unknown2 = tvb_get_letohl(tvb, offset+16);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
-
- unknown3 = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, unknown3);
-
- softKeyLoop = 0;
- /* NOTE ***** This loop *MIGHT* need to revolve around the unknow1/2 properties, not sure though */
- while (softKeyLoop < 18) {
- int softOffset = offset+(softKeyLoop*20);
- memset(displayMessage, '\0', displayLength);
- tvb_memcpy(tvb, displayMessage, softOffset+24, 16);
- proto_tree_add_string(skinny_tree, hf_skinny_displayMessage, tvb, softOffset+24, strlen(displayMessage), displayMessage);
- proto_tree_add_item(skinny_tree, hf_skinny_softKeyNumber, tvb, softOffset+40, 4, TRUE);
-
- softKeyLoop++;
+ case 0x108 : /* softkeyTemplateResMessage */
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyOffset, tvb, offset+12, 4, TRUE);
+ 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, TRUE);
+ for (i = 0; ((i < StationMaxSoftKeyDefinition) && (i < softKeyCount)); i++){
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyLabel, tvb, offset+(i*20)+24, StationMaxSoftKeyLabelSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyEvent, tvb, offset+(i*20)+40, 4, TRUE);
}
-
+ /* 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 0x110 :
- unknown1 = tvb_get_letohl(tvb, offset+12);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
+ case 0x109 : /* softkeysetres */
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeySetOffset, tvb, offset+12, 4, TRUE);
+ 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, TRUE);
+ for (i = 0; ((i < StationMaxSoftKeySetDefinition) && (i < softKeySetCount)); i++) {
+ proto_tree_add_uint(skinny_tree, hf_skinny_softKeySetDescription, tvb, offset+(i*20)+24+j,1,i);
+ for (j = 0; j < StationMaxSoftKeyIndex; j++) {
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyTemplateIndex, tvb, offset+(i*20)+24+j, 1, TRUE);
+ }
+ for (j = 0; j < StationMaxSoftKeyIndex; j++) {
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeyInfoIndex, tvb, offset+(i*20)+25+(j*2), 2, TRUE);
+ }
+ }
+ break;
+
+ case 0x110 : /* selectSoftKeys */
+ proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+12, 4, TRUE);
proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+16, 4, TRUE);
- unknown2 = tvb_get_letohl(tvb, offset+20);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+20, 4, unknown2);
- unknown3 = tvb_get_letohl(tvb, offset+24);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+24, 4, unknown3);
+ proto_tree_add_item(skinny_tree, hf_skinny_softKeySetDescription, tvb, offset+20, 4, TRUE);
+ validKeyMask = tvb_get_letohs(tvb, offset + 24);
+ skm = proto_tree_add_uint(skinny_tree, hf_skinny_softKeyMap, tvb, offset + 24, 1, validKeyMask);
+ skm_tree = proto_item_add_subtree(skm, ett_skinny_softKeyMap);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey0, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey1, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey2, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey3, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey4, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey5, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey6, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey7, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey8, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey9, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey10, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey11, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey12, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey13, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey14, tvb, offset + 24, 1, validKeyMask);
+ proto_tree_add_boolean(skm_tree, hf_skinny_softKey15, tvb, offset + 24, 1, validKeyMask);
break;
case 0x111 :
@@ -545,17 +1120,13 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
unknown2 = tvb_get_letohl(tvb, offset+16);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+16, 4, unknown2);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, FALSE);
+ proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+20, 4, TRUE);
break;
case 0x112 :
- unknown1 = tvb_get_letohl(tvb, offset+12);
- memset(displayMessage,'\0',displayLength);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
- tvb_get_nstringz0(tvb,offset+16,displayLength, displayMessage);
- proto_tree_add_string(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, strlen(displayMessage), displayMessage);
- unknown2 = tvb_get_letohl(tvb, offset+48);
- proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+48, 4, unknown2);
+ proto_tree_add_item(skinny_tree, hf_skinny_messageTimeOutValue, tvb, offset+12, 4, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, StationMaxDisplayPromptStatusSize, TRUE);
+ proto_tree_add_item(skinny_tree, hf_skinny_lineInstance, tvb, offset+48, 4, TRUE);
proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+52, 4, TRUE);
break;
@@ -589,20 +1160,6 @@ static void dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+12, 4, unknown1);
break;
- case 0x0023 :
- memset(extension,'\0', extensionLength);
- tvb_get_nstringz0(tvb,offset+12,extensionLength,extension);
- proto_tree_add_string(skinny_tree, hf_skinny_extension, tvb, offset+12, strlen(extension), extension);
- proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+36, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsSent, tvb, offset+44, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsSent, tvb, offset+48, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsRecv, tvb, offset+52, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_octetsRecv, tvb, offset+56, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_packetsLost, tvb, offset+60, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_latency, tvb, offset+64, 4, TRUE);
- proto_tree_add_item(skinny_tree, hf_skinny_jitter, tvb, offset+68, 4, TRUE);
- break;
-
case 0x11D :
unknown1 = tvb_get_letohl(tvb, offset+36);
proto_tree_add_uint(skinny_tree, hf_skinny_unknown, tvb, offset+36, 4, unknown1);
@@ -778,6 +1335,174 @@ proto_register_skinny(void)
HFILL }
},
+ { &hf_skinny_deviceName,
+ { "DeviceName", "skinny.deviceName",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The device name of the phone.",
+ HFILL }
+ },
+
+ { &hf_skinny_stationUserId,
+ { "StationUserId", "skinny.stationUserId",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The station user id.",
+ HFILL }
+ },
+
+ { &hf_skinny_stationInstance,
+ { "StationInstance", "skinny.stationInstance",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The stations instance.",
+ HFILL }
+ },
+
+ { &hf_skinny_deviceType,
+ { "DeviceType", "skinny.deviceType",
+ FT_UINT32, BASE_DEC, VALS(deviceTypes), 0x0,
+ "DeviceType of the station.",
+ HFILL }
+ },
+
+ { &hf_skinny_maxStreams,
+ { "MaxStreams", "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 }
+ },
+
+ { &hf_skinny_stationIpPort,
+ { "StationIpPort", "skinny.stationIpPort",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "The station IP port",
+ HFILL }
+ },
+
+ { &hf_skinny_stationKeypadButton,
+ { "KeypadButton", "skinny.stationKeypadButton",
+ FT_UINT32, BASE_HEX, VALS(keypadButtons), 0x0,
+ "The button pressed on the phone.",
+ HFILL }
+ },
+
+ { &hf_skinny_calledParty,
+ { "CalledParty", "skinny.calledParty",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The number called.",
+ HFILL }
+ },
+
+ { &hf_skinny_stimulus,
+ { "Stimulus", "skinny.stimulus",
+ FT_UINT32, BASE_HEX, VALS(deviceStimuli), 0x0,
+ "Reason for the device stimulus message.",
+ HFILL }
+ },
+
+ { &hf_skinny_stimulusInstance,
+ { "StimulusInstance", "skinny.stimulusInstance",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The instance of the stimulus",
+ HFILL }
+ },
+
+ { &hf_skinny_lineNumber,
+ { "LineNumber", "skinny.lineNumber",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Line Number",
+ HFILL }
+ },
+
+ { &hf_skinny_speedDialNumber,
+ { "SpeedDialNumber", "skinny.speedDialNumber",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Which speed dial number",
+ HFILL }
+ },
+
+ { &hf_skinny_capCount,
+ { "CapCount", "skinny.capCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "How many capabilities",
+ HFILL }
+ },
+
+ { &hf_skinny_payloadCapability,
+ { "PayloadCapability", "skinny.payloadCapability",
+ FT_UINT32, BASE_DEC, VALS(mediaPayloads), 0x0,
+ "The payload capability for this media capability structure.",
+ HFILL }
+ },
+
+ { &hf_skinny_maxFramesPerPacket,
+ { "MaxFramesPerPacket", "skinny.maxFramesPerPacket",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Max frames per packet",
+ HFILL }
+ },
+
+ { &hf_skinny_alarmSeverity,
+ { "AlarmSeverity", "skinny.alarmSeverity",
+ FT_UINT32, BASE_DEC, VALS(alarmSeverities), 0x0,
+ "The severity of the reported alarm.",
+ HFILL }
+ },
+
+ { &hf_skinny_alarmParam1,
+ { "AlarmParam1", "skinny.alarmParam1",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "An as yet undecoded param1 value from the alarm message",
+ HFILL }
+ },
+
+ { &hf_skinny_alarmParam2,
+ { "AlarmParam2", "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,
+ { "ReceptionStatus", "skinny.receptionStatus",
+ FT_UINT32, BASE_DEC, VALS(multicastMediaReceptionStatus), 0x0,
+ "The current status of the multicast media.",
+ HFILL }
+ },
+
+ { &hf_skinny_passThruPartyID,
+ { "PassThruPartyID", "skinny.passThruPartyID",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The pass thru party id",
+ HFILL }
+ },
+
+ { &hf_skinny_ORCStatus,
+ { "OpenReceiveChannelStatus", "skinny.openReceiveChannelStatus",
+ FT_UINT32, BASE_DEC, VALS(openReceiveChanStatus), 0x0,
+ "The status of the opened receive channel.",
+ HFILL }
+ },
+
+ { &hf_skinny_ipAddress,
+ { "IP Address", "skinny.ipAddress",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "An IP address",
+ HFILL }
+ },
+
+ { &hf_skinny_portNumber,
+ { "Port Number", "skinny.portNumber",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "A port number",
+ HFILL }
+ },
+
+ { &hf_skinny_statsProcessingType,
+ { "StatsProcessingType", "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,
@@ -806,7 +1531,6 @@ proto_register_skinny(void)
HFILL }
},
-
{ &hf_skinny_octetsRecv,
{ "Octets Received", "skinny.octetsRecv",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -814,7 +1538,6 @@ proto_register_skinny(void)
HFILL }
},
-
{ &hf_skinny_packetsLost,
{ "Packets Lost", "skinny.packetsLost",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -822,7 +1545,6 @@ proto_register_skinny(void)
HFILL }
},
-
{ &hf_skinny_latency,
{ "Latency(ms)", "skinny.latency",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -837,45 +1559,318 @@ proto_register_skinny(void)
HFILL }
},
- { &hf_skinny_extension,
- { "Extension", "skinny.extension",
+ { &hf_skinny_directoryNumber,
+ { "Directory Number", "skinny.directoryNumber",
FT_STRING, BASE_NONE, NULL, 0x0,
- "The extension this packets is for.",
+ "The number we are reporting statistics for.",
+ HFILL }
+ },
+
+ { &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,
+ { "SoftKeyEvent", "skinny.softKeyEvent",
+ FT_UINT32, BASE_DEC, VALS(softKeyEvents), 0x0,
+ "Which softkey event is being reported.",
+ HFILL }
+ },
+
+ { &hf_skinny_keepAliveInterval,
+ { "KeepAliveInterval", "skinny.keepAliveInterval",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "How often are keep alives exchanges between the client and the call manager.",
+ HFILL }
+ },
+
+ { &hf_skinny_secondaryKeepAliveInterval,
+ { "SecondaryKeepAliveInterval", "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,
+ { "DateTemplate", "skinny.dateTemplate",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The display format for the date/time on the phone.",
+ HFILL }
+ },
+
+ { &hf_skinny_buttonOffset,
+ { "ButtonOffset", "skinny.buttonOffset",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Offset is the number of the first button referenced by this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_buttonCount,
+ { "ButtonCount", "skinny.buttonCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Number of (VALID) button definitions in this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_totalButtonCount,
+ { "TotalButtonCount", "skinny.totalButtonCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The total number of buttons defined for this phone.",
+ HFILL }
+ },
+
+ { &hf_skinny_buttonInstanceNumber,
+ { "InstanceNumber", "skinny.buttonInstanceNumber",
+ FT_UINT8, BASE_HEX, VALS(keypadButtons), 0x0,
+ "The button instance number for a button or the StationKeyPad value, repeats allowed.",
+ HFILL }
+ },
+
+ { &hf_skinny_buttonDefinition,
+ { "ButtonDefinition", "skinny.buttonDefinition",
+ FT_UINT8, BASE_HEX, VALS(buttonDefinitions), 0x0,
+ "The button type for this instance (ie line, speed dial, ....",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyOffset,
+ { "SoftKeyOffset", "skinny.softKeyOffset",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The offset for the first soft key in this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyCount,
+ { "SoftKeyCount", "skinny.softKeyCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The number of valid softkeys in this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_totalSoftKeyCount,
+ { "TotalSoftKeyCount", "skinny.totalSoftKeyCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The total number of softkeys for this device.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyLabel,
+ { "SoftKeyLabel", "skinny.softKeyLabel",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The text label for this soft key.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeySetOffset,
+ { "SoftKeySetOffset", "skinny.softKeySetOffset",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The offset for the first soft key set in this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeySetCount,
+ { "SoftKeySetCount", "skinny.softKeySetCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The number of valid softkey sets in this message.",
+ HFILL }
+ },
+
+ { &hf_skinny_totalSoftKeySetCount,
+ { "TotalSoftKeySetCount", "skinny.totalSoftKeySetCount",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The total number of softkey sets for this device.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyTemplateIndex,
+ { "SoftKeyTemplateIndex", "skinny.softKeyTemplateIndex",
+ FT_UINT8, BASE_DEC, VALS(softKeyEvents), 0x0,
+ "Array of size 16 8-bit unsigned ints containing an index into the softKeyTemplate.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyInfoIndex,
+ { "SoftKeyInfoIndex", "skinny.softKeyInfoIndex",
+ FT_UINT16, BASE_DEC, VALS(softKeyIndexes), 0x0,
+ "Array of size 16 16-bit unsigned integers containing an index into the soft key description information.",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeySetDescription,
+ { "SoftKeySet", "skinny.softKeySetDescription",
+ FT_UINT8, BASE_DEC, VALS(keySetNames), 0x0,
+ "A text description of what this softkey when this softkey set is displayed",
+ HFILL }
+ },
+
+ { &hf_skinny_softKeyMap,
+ { "SoftKeyMap","skinny.softKeyMap",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey0,
+ { "SoftKey0", "skinny.softKeyMap.0",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY0,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey1,
+ { "SoftKey1", "skinny.softKeyMap.1",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY1,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey2,
+ { "SoftKey2", "skinny.softKeyMap.2",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY2,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey3,
+ { "SoftKey3", "skinny.softKeyMap.3",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY3,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey4,
+ { "SoftKey4", "skinny.softKeyMap.4",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY4,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey5,
+ { "SoftKey5", "skinny.softKeyMap.5",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY5,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey6,
+ { "SoftKey6", "skinny.softKeyMap.6",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY6,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey7,
+ { "SoftKey7", "skinny.softKeyMap.7",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY7,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey8,
+ { "SoftKey8", "skinny.softKeyMap.8",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY8,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey9,
+ { "SoftKey9", "skinny.softKeyMap.9",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY9,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey10,
+ { "SoftKey10", "skinny.softKeyMap.10",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY10,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey11,
+ { "SoftKey11", "skinny.softKeyMap.11",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY11,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey12,
+ { "SoftKey12", "skinny.softKeyMap.12",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY12,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey13,
+ { "SoftKey13", "skinny.softKeyMap.13",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY13,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey14,
+ { "SoftKey14", "skinny.softKeyMap.14",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY14,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_softKey15,
+ { "SoftKey15", "skinny.softKeyMap.15",
+ FT_BOOLEAN, 16, TFS(&softKeyMapValues), SKINNY_SOFTKEY15,
+ "",
+ HFILL }
+ },
+
+ { &hf_skinny_lampMode,
+ { "LampMode", "skinny.lampMode",
+ FT_UINT32, BASE_DEC, VALS(stationLampModes), 0x0,
+ "The lamp mode",
+ HFILL }
+ },
+
+ { &hf_skinny_messageTimeOutValue,
+ { "Message Timeout", "skinny.messageTimeOutValue",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "The timeout in seconds for this message",
HFILL }
},
{ &hf_skinny_displayMessage,
- { "Text", "skinny.displayMessage",
+ { "DisplayMessage", "skinny.displayMessage",
FT_STRING, BASE_NONE, NULL, 0x0,
"The message displayed on the phone.",
HFILL }
},
- { &hf_skinny_timeStamp,
- { "Timestamp", "skinny.timeStamp",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Time stamp for the call reference",
+ { &hf_skinny_lineDirNumber,
+ { "Line Dir Number", "skinny.lineDirNumber",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The directory number for this line.",
HFILL }
},
- { &hf_skinny_unknown,
- { "Unknown Long", "skinny.unknown",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- "An as yet undecoded long value",
+ { &hf_skinny_lineFullyQualifiedDisplayName,
+ { "DisplayName", "skinny.fqdn",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The full display name for this line.",
HFILL }
},
-
- { &hf_skinny_ipSrc,
- { "IP Source", "skinny.ipSrc",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "IP source address",
+
+ { &hf_skinny_speedDialDirNumber,
+ { "SpeedDial Number", "skinny.speedDialDirNum",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "the number to dial for this speed dial.",
HFILL }
},
- { &hf_skinny_ipDest,
- { "IP Destination", "skinny.ipDest",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "IP destination address",
+ { &hf_skinny_speedDialDisplayName,
+ { "SpeedDial Display", "skinny.speedDialDisplay",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The text to display for this speed dial.",
HFILL }
},
@@ -893,6 +1888,13 @@ proto_register_skinny(void)
HFILL }
},
+ { &hf_skinny_dayOfWeek,
+ { "DayOfWeek", "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,
@@ -914,6 +1916,69 @@ proto_register_skinny(void)
HFILL }
},
+ { &hf_skinny_dateSeconds,
+ { "Seconds", "skinny.dateSeconds",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Seconds",
+ HFILL }
+ },
+
+ { &hf_skinny_dateMilliseconds,
+ { "Milliseconds", "skinny.dateMilliseconds",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Milliseconds",
+ HFILL }
+ },
+
+ { &hf_skinny_timeStamp,
+ { "Timestamp", "skinny.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Time stamp for the call reference",
+ HFILL }
+ },
+
+
+
+
+
+
+
+ /* */
+
+
+ { &hf_skinny_extension,
+ { "Extension", "skinny.extension",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "The extension this packets is for.",
+ HFILL }
+ },
+
+
+
+
+ { &hf_skinny_unknown,
+ { "Unknown Long", "skinny.unknown",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "An as yet undecoded long value",
+ HFILL }
+ },
+
+ { &hf_skinny_ipSrc,
+ { "IP Source", "skinny.ipSrc",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "Ip source address",
+ HFILL }
+ },
+
+ { &hf_skinny_ipDest,
+ { "IP Destination", "skinny.ipDest",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "IP destination address",
+ HFILL }
+ },
+
+
+
{ &hf_skinny_destPort,
{ "Destination Port", "skinny.destPort",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -954,6 +2019,7 @@ proto_register_skinny(void)
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_skinny,
+ &ett_skinny_softKeyMap,
};
module_t *skinny_module;