1 /*!
2  * \file        sccp_protocol.h
3  * \brief       SCCP Protocol Header
4  * \author      Sergio Chersovani <mlists [at] c-net.it>
5  * \note        Reworked, but based on chan_sccp code.
6  *              The original chan_sccp driver that was made by Zozo which itself was derived from the chan_skinny driver.
7  *              Modified by Jan Czmok and Julien Goodwin
8  * \note        This program is free software and may be modified and distributed under the terms of the GNU Public License.
9  *              See the LICENSE file at the top of the source tree.
10  *
11  * \note        Thank you Federico Santulli for SPCP support
12  */
13 #pragma once
14 #include "define.h"
15 #include "sccp_codec.h"
16 #include "sccp_softkeys.h"
17 #include "sccp_enum.h"
18 
19 __BEGIN_C_EXTERN__
20 #define SCCP_DRIVER_SUPPORTED_PROTOCOL_LOW		3							/*!< At least we require protocol V.3 */
21 #define SCCP_DRIVER_SUPPORTED_PROTOCOL_HIGH		22							/*!< We support up to protocol V.17 */
22 
23 #define UNKNOWN_PROTOCOL				0
24 #define SCCP_PROTOCOL					1
25 #define SPCP_PROTOCOL					2
26 
27 #define DEFAULT_SCCP_PORT				2000							/*!< SCCP uses port 2000. */
28 #define DEFAULT_SCCP_SECURE_PORT			2443							/*!< SCCP secure port 2443. */
29 #define DEFAULT_SCCP_BACKLOG				16							/*!< the listen baklog. */
30 #define SCCP_MAX_AUTOLOGIN				100							/*!< Maximum allowed of autologins per device */
31 #define SCCP_MIN_KEEPALIVE				30							/*!< Minimal keepalive time if not specified in sccp.conf. */
32 
33 /*
34 Still looking for these features bits
35 MULTIMEDIA_SUPPORT, SNF_NETWORK_CAPABILITY, DICTIONARY_NEW_RANGE, KFACTOR_CAPABILITY (related to DSP)
36 RSVP_SUPPORT, UNICODE_CAPABLE, AUTO_IDLE_DISABLE, RESTRICT_PI, AUTHENTICATED_SIGNALING,
37 MEDIA_ENCRYPTION_SUPPORT, STATION_MAX_FEATURE_MASK, INTERNALIZATION
38 */
39 
40 //#define SKINNY_PHONE_FEATURES0			1<<0
41 //#define SKINNY_PHONE_FEATURES0			1<<1
42 //#define SKINNY_PHONE_FEATURES0			1<<2
43 //#define SKINNY_PHONE_FEATURES0			1<<3
44 //#define SKINNY_PHONE_FEATURES0 			1<<4
45 //#define SKINNY_PHONE_FEATURES0 			1<<5
46 //#define SKINNY_PHONE_FEATURES0	 		1<<6
47 //#define SKINNY_PHONE_FEATURES0			1<<7
48 
49 //#define SKINNY_PHONE_FEATURES1			1<<0
50 #define SKINNY_PHONE_FEATURES1_PORTREQUEST		1<<1							/*!< Guess: portRequest/portResponse */
51 //#define SKINNY_PHONE_FEATURES1			1<<2
52 //#define SKINNY_PHONE_FEATURES1			1<<3
53 #define SKINNY_PHONE_FEATURES1_UTF8 			1<<4
54 #define SKINNY_PHONE_FEATURES1_UNKNOWN1			1<<5
55 #define SKINNY_PHONE_FEATURES1_UNKNOWN2	 		1<<6
56 //#define SKINNY_PHONE_FEATURES1			1<<7
57 
58 #define SKINNY_PHONE_FEATURES2_DYNAMIC_MESSAGES 	1<<0
59 //#define SKINNY_PHONE_FEATURES2			1<<1
60 #define SKINNY_PHONE_FEATURES2_RFC2833			1<<2
61 //#define SKINNY_PHONE_FEATURES2			1<<3
62 #define SKINNY_PHONE_FEATURES2_INTERNAL_CM_MEDIA	1<<4
63 //#define SKINNY_PHONE_FEATURES2			1<<5
64 #define SKINNY_PHONE_FEATURES2_UNKNOWN3			1<<6
65 #define SKINNY_PHONE_FEATURES2_ABBRDIAL 		1<<7
66 
67 
68 #define SKINNY_MaxAnnouncementList			32
69 #define SKINNY_StationMaxMonitorParties			16
70 
71 #define StationMaxDeviceNameSize			16
72 #define StationMaxButtonTemplateSize			56
73 #define StationMaxButtonTemplateNameSize		44
74 #define StationDateTemplateSize 			7
75 #define StationMaxDisplayTextSize			32
76 #define StationMaxDisplayNotifySize 			32
77 #define StationMaxDirnumSize				24
78 #define StationDynamicDirnumSize			25
79 #define StationMaxNameSize				40
80 #define StationDynamicNameSize				121
81 #define StationMaxSoftKeyDefinition 			32
82 #define StationMaxSoftKeySetDefinition			16
83 #define StationMaxSoftKeyIndex				16
84 #define StationMaxSoftKeyLabelSize			16
85 #define StationMaxVersionSize				16
86 #define StationMaxServers				5
87 #define ServerMaxNameSize				48
88 #define StationMaxServiceURLSize			256
89 #define StationMaxPorts					16
90 #define StationMaxAlarmMessage				80
91 #define StationMaxXMLMessage				2000
92 #define StationMaxXMLAlarmMessage			2048
93 #define StationMaxImageVersionSize			32
94 
95 #define APPID_INPUT					1
96 #define APPID_CONFERENCE				9081
97 #define APPID_CONFERENCE_INVITE				9082
98 #define APPID_PROVISION					9083
99 #define APPID_DEVICECAPABILITIES			9084
100 #define APPID_URIHOOK					9085
101 #define APPID_BACKGROUND				9086
102 #define APPID_RINGTONE					9087
103 #define APPID_STREAM					9088
104 #define APPID_PUSH					9089
105 #define APPID_VISUALPARKINGLOT				9090
106 
107 /*
108  * \todo Merge sccp_button_type_t / sccp_buttontypes[] and this define
109  */
110 #define SCCP_BUTTONTYPE_MULTI				0xF1
111 #define SCCP_BUTTONTYPE_LINE				0xF2
112 #define SCCP_BUTTONTYPE_SPEEDDIAL			0xF3
113 #define SCCP_BUTTONTYPE_HINT				0xF4
114 #define SCCP_BUTTONTYPE_ABBRDIAL			0xF5
115 
116 /* unregister */
117 #define SKINNY_UNREGISTERSTATUS_OK			0
118 #define SKINNY_UNREGISTERSTATUS_ERROR			1
119 #define SKINNY_UNREGISTERSTATUS_NAK 			2							/*!< we have an active channel */
120 
121 /* media silence suppression */
122 #define SKINNY_MEDIA_SILENCESUPPRESSION_OFF 		0
123 #define SKINNY_MEDIA_SILENCESUPPRESSION_ON		1
124 
125 /* media echo cancel -> enum*/
126 #define SKINNY_MEDIA_ECHOCANCELLATION_OFF		0
127 #define SKINNY_MEDIA_ECHOCANCELLATION_ON		1
128 
129 /* G723 bitrate -> enum */
130 #define SKINNY_MEDIA_G723BRATE_NONE 			0
131 #define SKINNY_MEDIA_G723BRATE_5_3			1
132 #define SKINNY_MEDIA_G723BRATE_6_4			2
133 
134 /* statistic processing */
135 #define SKINNY_STATSPROCESSING_CLEAR			0
136 #define SKINNY_STATSPROCESSING_DONOTCLEAR		1
137 
138 /* speaker status */
139 #define SKINNY_STATIONSPEAKER_ON			1
140 #define SKINNY_STATIONSPEAKER_OFF			2
141 
142 /* mic status */
143 #define SKINNY_STATIONMIC_ON				1
144 #define SKINNY_STATIONMIC_OFF				2
145 
146 /* headset status */
147 #define SKINNY_STATIONHEADSET_ON			1
148 #define SKINNY_STATIONHEADSET_OFF			2
149 
150 #define MAX_CUSTOM_PICTURES				6
151 #define MAX_LAYOUT_WITH_SAME_SERVICE			5
152 #define MAX_SERVICE_TYPE				4
153 #define MAX_LEVEL_PREFERENCE		 		4
154 
155 /*!
156  * \brief SCCP Device->Button List Structure
157  */
158 typedef struct {
159 	uint8_t instance;											/*!< Button Instance */
160 	uint8_t type;												/*!< Button Type */
161 	skinny_devicetype_t devicetype;
162 	sccp_line_t *ptr;											/*!< Pointer to the Line */
163 } btnlist;													/*!< Button List Structure */
164 
165 /*!
166  * \brief SKINNY Message Types Enum
167  */
168 
169 typedef enum {
170 /* *INDENT-OFF* */
171 
172 #define SCCP_MESSAGE_LOW_BOUNDARY			KeepAliveMessage		/*0x0000*/
173 	/* Client -> Server */
174 	KeepAliveMessage = 0x0000,
175 	RegisterMessage = 0x0001,
176 	IpPortMessage = 0x0002,
177 	KeypadButtonMessage = 0x0003,
178 	EnblocCallMessage = 0x0004,
179 	StimulusMessage = 0x0005,
180 	OffHookMessage = 0x0006,
181 	OnHookMessage = 0x0007,
182 	HookFlashMessage = 0x0008,
183 	ForwardStatReqMessage = 0x0009,
184 	SpeedDialStatReqMessage = 0x000A,
185 	LineStatReqMessage = 0x000B,
186 	ConfigStatReqMessage = 0x000C,
187 	TimeDateReqMessage = 0x000D,
188 	ButtonTemplateReqMessage = 0x000E,
189 	VersionReqMessage = 0x000F,
190 	CapabilitiesResMessage = 0x0010,
191 	MediaPortListMessage = 0x0011,
192 	ServerReqMessage = 0x0012,
193 	AlarmMessage = 0x0020,
194 	MulticastMediaReceptionAck = 0x0021,
195 	OpenReceiveChannelAck = 0x0022,
196 	ConnectionStatisticsRes = 0x0023,
197 	OffHookMessageWithCallingPartyMessage = 0x0024,
198 	SoftKeySetReqMessage = 0x0025,
199 	SoftKeyEventMessage = 0x0026,
200 	UnregisterMessage = 0x0027,
201 	SoftKeyTemplateReqMessage = 0x0028,
202 	RegisterTokenRequest = 0x0029,
203 	MediaTransmissionFailure = 0x002A,
204 	HeadsetStatusMessage = 0x002B,
205 	MediaResourceNotification = 0x002C,
206 	RegisterAvailableLinesMessage = 0x002D,
207 	DeviceToUserDataMessage = 0x002E,
208 	DeviceToUserDataResponseMessage = 0x002F,
209 	UpdateCapabilitiesMessage = 0x0030,
210 	OpenMultiMediaReceiveChannelAckMessage = 0x0031,
211 	ClearConferenceMessage = 0x0032,
212 	ServiceURLStatReqMessage = 0x0033,
213 	FeatureStatReqMessage = 0x0034,
214 	CreateConferenceResMessage = 0x0035,
215 	DeleteConferenceResMessage = 0x0036,
216 	ModifyConferenceResMessage = 0x0037,
217 	AddParticipantResMessage = 0x0038,
218 	AuditConferenceResMessage = 0x0039,
219 	AuditParticipantResMessage = 0x0040,
220 	DeviceToUserDataVersion1Message = 0x0041,
221 	DeviceToUserDataResponseVersion1Message = 0x0042,
222 
223 	UpdateCapabilitiesV2Message = 0x0043, /*new (2013-12-9)*/
224 	UpdateCapabilitiesV3Message = 0x0044,
225 	/* DynamicUpdateCapabilitiesMessage */ /*!< @see https://sourceforge.net/p/chan-sccp-b/bugs/181/ */
226 
227 	PortResponseMessage = 0x0045,   /*new (2013-12-9)*/
228 	QoSResvNotifyMessage = 0x0046,  /*new (2013-12-9)*/
229 	QoSErrorNotifyMessage = 0x0047, /*new (2013-12-9)*/
230 
231 	/* This are from protocol V 11 CCM7 */
232 	SubscriptionStatReqMessage = 0x0048, /* Subscription Stat Request */
233 	AccessoryStatusMessage = 0x0049,     /* MediaPath Event Message */
234 	MediaPathCapabilityMessage = 0x004A, /*new name (2013-12-9)*/
235 	MwiNotificationMessage = 0x004C,
236 
237 	/* Server -> Client */
238 	RegisterAckMessage = 0x0081,
239 	StartToneMessage = 0x0082,
240 	StopToneMessage = 0x0083,
241 	// ??
242 	SetRingerMessage = 0x0085,
243 	SetLampMessage = 0x0086,
244 	SetHookFlashDetectMessage = 0x0087,
245 	SetSpeakerModeMessage = 0x0088,
246 	SetMicroModeMessage = 0x0089,
247 	StartMediaTransmission = 0x008A,
248 	StopMediaTransmission = 0x008B,
249 	StartMediaReception = 0x008C,
250 	StopMediaReception = 0x008D,
251 	// ?
252 	CallInfoMessage = 0x008F,
253 
254 	ForwardStatMessage = 0x0090,
255 	SpeedDialStatMessage = 0x0091,
256 	LineStatMessage = 0x0092,
257 	ConfigStatMessage = 0x0093,
258 	DefineTimeDate = 0x0094,
259 	StartSessionTransmission = 0x0095,
260 	StopSessionTransmission = 0x0096,
261 	ButtonTemplateMessage = 0x0097,
262 	// ButtonTemplateMessageSingle 			= 0x0097,
263 	VersionMessage = 0x0098,
264 	DisplayTextMessage = 0x0099,
265 	ClearDisplay = 0x009A,
266 	CapabilitiesReqMessage = 0x009B,
267 	EnunciatorCommandMessage = 0x009C,
268 	RegisterRejectMessage = 0x009D,
269 	ServerResMessage = 0x009E,
270 	Reset = 0x009F,
271 
272 	KeepAliveAckMessage = 0x0100,
273 	StartMulticastMediaReception = 0x0101,
274 	StartMulticastMediaTransmission = 0x0102,
275 	StopMulticastMediaReception = 0x0103,
276 	StopMulticastMediaTransmission = 0x0104,
277 	OpenReceiveChannel = 0x0105,
278 	CloseReceiveChannel = 0x0106,
279 	ConnectionStatisticsReq = 0x0107,
280 	SoftKeyTemplateResMessage = 0x0108,
281 	SoftKeySetResMessage = 0x0109,
282 
283 	SelectSoftKeysMessage = 0x0110,
284 	CallStateMessage = 0x0111,
285 	DisplayPromptStatusMessage = 0x0112,
286 	ClearPromptStatusMessage = 0x0113,
287 	DisplayNotifyMessage = 0x0114,
288 	ClearNotifyMessage = 0x0115,
289 	ActivateCallPlaneMessage = 0x0116,
290 	DeactivateCallPlaneMessage = 0x0117,
291 	UnregisterAckMessage = 0x0118,
292 	BackSpaceResMessage = 0x0119,
293 	RegisterTokenAck = 0x011A,
294 	RegisterTokenReject = 0x011B,
295 	StartMediaFailureDetection = 0x011C,
296 	DialedNumberMessage = 0x011D,
297 	DialedNumberMessageV19 = 0x011D,
298 	UserToDeviceDataMessage = 0x011E,
299 	FeatureStatMessage = 0x011F,
300 	DisplayPriNotifyMessage = 0x0120,
301 	ClearPriNotifyMessage = 0x0121,
302 	StartAnnouncementMessage = 0x0122,
303 	StopAnnouncementMessage = 0x0123,
304 	AnnouncementFinishMessage = 0x0124,
305 
306 	NotifyDtmfToneMessage = 0x0127,
307 	SendDtmfToneMessage = 0x0128,
308 	SubscribeDtmfPayloadReqMessage = 0x0129,
309 	SubscribeDtmfPayloadResMessage = 0x012A,
310 	SubscribeDtmfPayloadErrMessage = 0x012B,
311 	UnSubscribeDtmfPayloadReqMessage = 0x012C,
312 	UnSubscribeDtmfPayloadResMessage = 0x012D,
313 	UnSubscribeDtmfPayloadErrMessage = 0x012E,
314 	ServiceURLStatMessage = 0x012F,
315 	CallSelectStatMessage = 0x0130,
316 	OpenMultiMediaChannelMessage = 0x0131,
317 	OpenMultiMediaChannelMessageNew = 0x0131,
318 	StartMultiMediaTransmission = 0x0132,
319 	StopMultiMediaTransmission = 0x0133,
320 	MiscellaneousCommandMessage = 0x0134,
321 	FlowControlCommandMessage = 0x0135,
322 	CloseMultiMediaReceiveChannel = 0x0136,
323 	CreateConferenceReqMessage = 0x0137,
324 	DeleteConferenceReqMessage = 0x0138,
325 	ModifyConferenceReqMessage = 0x0139,
326 	AddParticipantReqMessage = 0x013A,
327 	DropParticipantReqMessage = 0x013B,
328 	AuditConferenceReqMessage = 0x013C,
329 	AuditParticipantReqMessage = 0x013D,
330 	UserToDeviceDataVersion1Message = 0x013F,
331 
332 	/* sent by us */
333 	VideoDisplayCommandMessage = 0x0140,
334 	FlowControlNotifyMessage = 0x0141, /*new name (2013-12-9)*/
335 	ConfigStatDynamicMessage = 0x0142, /*new (2013-12-9)*/
336 	DisplayDynamicNotifyMessage = 0x0143,
337 	DisplayDynamicPriNotifyMessage = 0x0144,
338 	DisplayDynamicPromptStatusMessage = 0x0145,
339 	FeatureStatDynamicMessage = 0x0146,
340 	LineStatDynamicMessage = 0x0147,
341 	ServiceURLStatDynamicMessage = 0x0148,
342 	SpeedDialStatDynamicMessage = 0x0149,
343 	CallInfoDynamicMessage = 0x014A,
344 
345 	PortRequestMessage = 0x014B, /*new (2013-12-9)*/
346 	PortCloseMessage = 0x014C,   /*new (2013-12-9)*/
347 	QoSListenMessage = 0x014D,   /*new (2013-12-9)*/
348 	QoSPathMessage = 0x014E,     /*new (2013-12-9)*/
349 	QoSTeardownMessage = 0x014F, /*new (2013-12-9)*/
350 	UpdateDSCPMessage = 0x0150,  /*new (2013-12-9)*/
351 	QoSModifyMessage = 0x0151,   /*new (2013-12-9)*/
352 
353 	/* received from phone */
354 	SubscriptionStatMessage = 0x0152, /* Subscription Stat Message */
355 	NotificationMessage = 0x0153,     /* Notification Message  / CallListStateUpdate*/
356 	StartMediaTransmissionAck = 0x0154,
357 	StartMultiMediaTransmissionAck = 0x0155,
358 	CallHistoryDispositionMessage = 0x0156,
359 	LocationInfoMessage = 0x0157, /* new (2015-09-08), send by 7925/7926 using firmware version 1.4.7.3 */
360 
361 	MwiResponseMessage = 0x0158, /*new (2013-12-9)*/
362 	ExtensionDeviceCaps = 0x0159,
363 	XMLAlarmMessage = 0x015A,
364 	CallCountReqMessage = 0x015E,
365 	/*new name (2013-12-9)*/         /*!< @see https://sourceforge.net/p/chan-sccp-b/bugs/173/ */
366 	CallCountRespMessage = 0x015F,   /*new (2013-12-9)*/
367 	RecordingStatusMessage = 0x0160, /*new (2013-12-9)*/
368 
369 #define SCCP_MESSAGE_HIGH_BOUNDARY			RecordingStatusMessage		/*0x0160*/
370 #define SPCP_MESSAGE_OFFSET 				SPCP_MESSAGE_LOW_BOUNDARY
371 #define SPCP_MESSAGE_LOW_BOUNDARY			SPCPRegisterTokenRequest	/*0x8000*/
372 	/* SPCP client -> server; */
373 	SPCPRegisterTokenRequest = 0x8000,
374 	/* SPCP server -> client */
375 	SPCPRegisterTokenAck = 0x8100,
376 	SPCPRegisterTokenReject = 0x8101,
377 
378 	//UnknownVGMessage				= 0xFF00,	/* Unknown Message (VG224). Reported by Ahmet Zaim */
379 //#define SPCP_MESSAGE_HIGH_BOUNDARY			UnknownVGMessage		/*0xFF00*/
380 #define SPCP_MESSAGE_HIGH_BOUNDARY			SPCPRegisterTokenReject
381 	/*
382 		SPCPPlatformInfoGetReq				= 0xFF02,
383 		SPCPPlatformInfoGetRsp				= 0xFF03,
384 		SPCPPlatformInfoGetRej				= 0xFF04,
385 	*/
386 	/* *INDENT-ON* */
387 } sccp_mid_t; /*!< SKINNY Message ID Enum */
388 
389 
390 /*=====================================================================================================*/
391 
392 typedef struct
393 {
394   skinny_ipAddr_t lel_ipAddrType;
395   uint8_t stationIpAddr[16];
396 } skinny_ipAddress_t;
397 
398 /*!
399  * \brief SKINNY Station Identifier Structure
400  */
401 typedef struct {
402 	char deviceName[StationMaxDeviceNameSize];								/*!< Device name */
403 	uint32_t lel_userid;											/*!< User ID */
404 	uint32_t lel_instance;											/*!< Instance */
405 } StationIdentifier;												/*!< SKINNY Station Identifier Structure */
406 
407 typedef struct {
408 	uint8_t protocolVersion;
409 	uint8_t phoneFeatures[3];
410 } StationProtocolFeatures_t;
411 /*!
412  * \brief SKINNY Station Button Definition Structure
413  */
414 typedef struct {
415 	uint8_t instanceNumber;											/*!< set to instance number or StationKeyPadButton value */
416 	uint8_t buttonDefinition;										/*!< set to one of the preceding Bt values */
417 } StationButtonDefinition;											/*!< SKINNY Station Button Definition Structure */
418 
419 typedef struct {
420 	uint8_t key[16];
421 	uint8_t salt[16];
422 } EncryptionKey;
423 
424 typedef struct {
425 	skinny_encryptionMethod_t algorithm;
426 	uint16_t keylen;
427 	uint16_t saltlen;
428 	EncryptionKey keyData;
429 	uint32_t isMKIPresent;
430 	uint32_t keyDerivationRate;
431 } EncryptionInfo;
432 
433 /*!
434  * \brief SKINNY Media Payload Capability Structure
435  */
436 typedef struct {
437 	skinny_codec_t lel_payloadCapability;									/*!< Payload Capability (Codec Used) */
438 	uint32_t lel_maxFramesPerPacket;									/*!< Maximum Number of Frames per IP Packet / Number of milliseconds of audio per RTP Packet */
439 	union {
440 		uint8_t futureUse[8];
441 		uint8_t lel_g723BitRate;									/*!< g723 Bit Rate (1=5.3 Kbps, 2=6.4 Kbps) */
442 	} PAYLOADS;												/*!< SKINNY Media Payload Capability Payloads Union */
443 } MediaCapabilityStructure;											/*!< SKINNY Media Payload Capability Structure */
444 
445 /*!
446  * \brief SKINNY Station Soft Key Definition Structure
447  */
448 typedef struct {
449 	char softKeyLabel[StationMaxSoftKeyLabelSize];								/*!< Soft Key Label */
450 	uint32_t lel_softKeyEvent;										/*!< Soft Key Event */
451 } StationSoftKeyDefinition;											/*!< SKINNY Station Soft Key Definition Structure */
452 
453 /*!
454  * \brief SKINNY Station Soft Key Set Definition Structure
455  */
456 typedef struct {
457 	uint8_t softKeyTemplateIndex[StationMaxSoftKeyIndex];							/*!< Soft Key Template Index */
458 	uint16_t les_softKeyInfoIndex[StationMaxSoftKeyIndex];							/*!< Soft Key Info Index */
459 } StationSoftKeySetDefinition;											/*!< SKINNY Station Soft Key Set Definition Structure */
460 
461 /*!
462  * \brief SKINNY Server Identifier Structure
463  */
464 typedef struct {
465 	char serverName[ServerMaxNameSize];									/*!< Server Name */
466 } ServerIdentifier;												/*!< SKINNY Server Identifier Structure */
467 
468 /*!
469  * \brief SKINNY Layout Config Structure
470  * \note Part of Update Capabilities Message Struct
471  * \since 20080111
472  */
473 typedef struct {
474 	uint32_t layout;											/*!< Layout */
475 } layoutConfig_t;												/*!< SKINNY Layout Config Structure */
476 
477 /*!
478  * \brief SKINNY Video Level Preference Structure
479  */
480 typedef struct {
481 	uint32_t lel_transmitPreference;									/*!< Transmit Preference */
482 	uint32_t lel_format;											/*!< Format / Codec */
483 	uint32_t lel_maxBitRate;										/*!< Maximum BitRate */
484 	uint32_t lel_minBitRate;										/*!< Minimum BitRate */
485 	uint32_t lel_MPI;											/*!<  */
486 	uint32_t lel_serviceNumber;										/*!< Service Number */
487 } levelPreference_t;												/*!< SKINNY Level Preference Structure */
488 
489 /*!
490  * \brief SKINNY Service Resource Structure
491  */
492 typedef struct {
493 	uint32_t layoutCount;											/*!< Layout Count */
494 	layoutConfig_t layout[MAX_LAYOUT_WITH_SAME_SERVICE];							/*!< Layout */
495 	uint32_t serviceNum;											/*!< Service Number */
496 	uint32_t maxStreams;											/*!< Maximum number of Streams */
497 	uint32_t maxConferences;										/*!< Maximum number of Conferences */
498 	uint32_t activeConferenceOnRegistration;								/*!< Active Conference On Registration */
499 } serviceResource_t;												/*!< SKINNY Service Resource Structure */
500 
501 /*!
502  * \brief SKINNY Conference Resource
503  */
504 typedef struct {
505 	uint32_t lel_activeStreamsOnRegistration;
506 	uint32_t lel_maxBW;
507 	uint32_t lel_serviceResourceCount;
508 	serviceResource_t serviceResource[MAX_SERVICE_TYPE];
509 } confResource_t ;
510 
511 /*!
512  * \brief SKINNY Picture Format Structure
513  */
514 typedef struct {
515 	uint32_t lel_width;											/*!< Picture Width */
516 	uint32_t lel_height;											/*!< Picture Height */
517 	uint32_t lel_pixelAspectRatio;										/*!< Picture Pixel Aspect Ratio */
518 	uint32_t lel_pixelclockConversionCode;									/*!< Picture Pixel Conversion Code  */
519 	uint32_t lel_pixelclockDivisor;										/*!< Picture Pixel Divisor */
520 } customPictureFormat_t;											/*!< SKINNY Picture Format Structure */
521 
522 typedef struct
523 {
524   uint8_t codecMode;
525   uint8_t dynamicPayload;
526   uint8_t codecParam1;
527   uint8_t codecParam2;
528 } CodecParameters_t;
529 
530 typedef union {
531 	uint32_t lel_g723BitRate;										/*!< G723 Bit Rate : Enum(5.3: 0x01, 6.3: 0x02) */
532 	struct {
533 		uint32_t lel_capabilityAndVersion;
534 		uint32_t lel_modulationAndModem2833Support;
535 	} modemRelay;
536 	struct {
537 		uint16_t lel_chan0MaxPayload;
538 		uint16_t lel_chan2MaxPayload;
539 		uint16_t lel_chan3MaxPayload;
540 		uint16_t lel_chan2MaxWindow;
541 	} sprtPayload;
542 	struct {
543 		uint32_t lel_standardSupportField;
544 		uint32_t lel_vendorSupportField;
545 	} SupportEntry;
546 	CodecParameters_t codecParams;
547 } payload_t;
548 
549 /*!
550  * \brief SKINNY Audio Capabilities Structure
551  */
552 typedef struct {
553 	skinny_codec_t lel_payloadCapability;									/*!< PayLoad Capability */
554 	uint32_t lel_maxFramesPerPacket;									/*!< Maximum Number of Frames per IP Packet */
555 	payload_t payloads;
556 } audioCap_t;													/*!< SKINNY Audio Capabilities Structure */
557 
558 /*!
559  * \brief SKINNY Audio Parameters Structure
560  */
561 typedef struct {
562 	uint32_t millisecondPacketSize;										/*!< Packet Size per Milli Second */
563 	uint32_t lel_echoCancelType;										/*!< Echo Cancelation Type */
564 	uint32_t lel_g723BitRate;										/*!< only used with G.723 payload */
565 } audioParameter_t;												/*!< SKINNY Audio Parameters Structure */
566 
567 /*!
568  * \brief SKINNY Picture Format Structure
569  */
570 typedef struct {
571 	uint32_t format;											/*!< Picture Format */
572 	uint32_t mpi;												/*!< MPI */
573 } pictureFormat_t;												/*!< SKINNY Picture Format Structure */
574 
575 /*!
576  * \brief SKINNY H261 Video Capability Structure
577  */
578 typedef struct {
579 	uint32_t lel_temporalSpatialTradeOffCapability;								/*!< Temporal Spatial Trade Off Capability */
580 	uint32_t lel_stillImageTransmission;									/*!< Still Image Transmission */
581 } h261_VideoCapability_t;											/*!< SKINNY H261 Video Capability Structure */
582 
583 /*!
584  * \brief SKINNY H263 Video Capability Structure
585  */
586 typedef struct {
587 	uint32_t lel_capabilityBitfield;									/*!< H263 Capability Bit-Field */
588 	uint32_t lel_annexNandWFutureUse;									/*!< Annex Nandw for Future Use */
589 } h263_VideoCapability_t;											/*!< SKINNY H262 Video Capability Structure */
590 
591 /*!
592  * \brief SKINNY vieo / h263P Video Capability Structure
593  */
594 typedef struct {
595 	uint32_t lel_modelNumber;										/*!< Model Number */
596 	uint32_t lel_bandwidth;											/*!< BandWidth */
597 } h263P_VideoCapability_t;											/*!< SKINNY vieo/h263P Video Capability Structure */
598 
599 /*!
600  * \brief SKINNY H264 Video Capability Structure
601  */
602 typedef struct {
603 	uint32_t lel_profile;											/*!< H264 profile */
604 	uint32_t lel_level;											/*!< H264 level */
605 	uint32_t lel_customMaxMBPS;										/*!< max decoding speed (in macroblocks/s) */
606 	uint32_t lel_customMaxFS;										/*!< max frame size (in macroblocks) */
607 	uint32_t lel_customMaxDPB;										/*!< decoded picture buffering */
608 	uint32_t lel_customMaxBRandCPB;										/*!< */
609 } h264_VideoCapability_t;
610 
611 typedef union {
612 	h261_VideoCapability_t h261;
613 	h263_VideoCapability_t h263;
614 	h263P_VideoCapability_t h263P;										/*!< Also known as Vieo */
615 } videoCapabilityUnionV1_t;
616 
617 /*!
618  * \brief SKINNY Video Capabilities Structure
619  */
620 typedef struct {
621 	skinny_codec_t lel_payloadCapability;									/*!< PayLoad Capability */
622 	uint32_t lel_transmitOrReceive;										/*!< Transmit or Receive */
623 	//uint32_t lel_protocolDependentData;
624 	//uint32_t lel_maxBitRate;
625 	uint32_t lel_levelPreferenceCount;									/*!< Level of Preference Count */
626 	levelPreference_t levelPreference[MAX_LEVEL_PREFERENCE];						/*!< Level Preference */
627 	videoCapabilityUnionV1_t capability;
628 } videoCapV1_t;													/*!< SKINNY Video Capabilities Structure */
629 
630 typedef union {
631 	h261_VideoCapability_t h261;
632 	h263_VideoCapability_t h263;
633 	h263P_VideoCapability_t h263P;										/*!< Also known as Vieo */
634 	h264_VideoCapability_t h264;
635 } videoCapabilityUnionV2_t;
636 /*!
637  * \brief SKINNY Video Capabilities Structure
638  */
639 typedef struct {
640 	skinny_codec_t lel_payloadCapability;									/*!< PayLoad Capability */
641 	uint32_t lel_transmitOrReceive;										/*!< Transmit or Receive */
642 	uint32_t lel_levelPreferenceCount;									/*!< Level of Preference Count */
643 
644 	levelPreference_t levelPreference[MAX_LEVEL_PREFERENCE];						/*!< Level Preference */
645 	videoCapabilityUnionV2_t capability;
646 } videoCapV2_t;													/*!< SKINNY Video Capabilities Structure */
647 
648 
649 /*!
650  * \brief SKINNY Video Capabilities Structure
651  */
652 typedef struct {
653 	skinny_codec_t lel_payloadCapability;									/*!< PayLoad Capability */
654 	uint32_t lel_transmitOrReceive;										/*!< Transmit or Receive */
655 	uint32_t lel_levelPreferenceCount;									/*!< Level of Preference Count */
656 
657 	levelPreference_t levelPreference[MAX_LEVEL_PREFERENCE];						/*!< Level Preference */
658 	uint32_t lel_encryptionCapability;									/*!< Encryption Capability. ENUM(NotEncrCapable:0x00, EncrCapable: 0x01) */
659 	videoCapabilityUnionV2_t capability;
660 	uint32_t lel_ipv46;											/*!< Enum ModeIPv4: 0x00 / ModeIPv6: 0x01 / Both: 0x02 */
661 } videoCapV3_t;													/*!< SKINNY Video Capabilities Structure */
662 
663 /*!
664  * \brief SKINNY Data Capabilities Structure V1
665  */
666 typedef struct {
667 	uint32_t lel_payloadCapability;										/*!< Payload Capability */
668 	uint32_t lel_transmitOrReceive;										/*!< Transmit or Receive */
669 	uint32_t lel_protocolDependentData;									/*!< Protocol Dependent Data */
670 	uint32_t lel_maxBitRate;										/*!< Maximum BitRate */
671 } dataCapV1_t;													/*!< SKINNY Data Capabilities Structure */
672 
673 /*!
674  * \brief SKINNY Data Capabilities Structure V2
675  */
676 typedef struct {
677 	uint32_t lel_payloadCapability;										/*!< Payload Capability */
678 	uint32_t lel_transmitOrReceive;										/*!< Transmit or Receive */
679 	uint32_t lel_protocolDependentData;									/*!< Protocol Dependent Data */
680 	uint32_t lel_maxBitRate;										/*!< Maximum BitRate */
681 	uint32_t lel_encryptionCapability;									/*!< Encryption Capability. ENUM(NotEncrCapable:0x00, EncrCapable: 0x01) */
682 } dataCapV2_t;													/*!< SKINNY Data Capabilities Structure */
683 
684 /*!
685  * \brief SKINNY Data Parameter Structure
686  */
687 typedef struct {
688 	uint32_t lel_protocolDependentData;									/*!< Protocol Dependent Data */
689 	uint32_t lel_maxBitRate;										/*!< Maximum BitRate */
690 } dataParameter_t;												/*!< SKINNY Data Parameter Structure */
691 
692 /*!
693  * \brief SKINNY Video Parameter Structure
694  * \since 20110718
695  */
696 typedef struct {
697 	uint32_t bitRate;											/*!< BitRate (default 384) */
698 	uint32_t pictureFormatCount;										/*!< Picture Format Count (default 0) */
699 	pictureFormat_t pictureFormat[5];									/*!< Picture Format Array */
700 	uint32_t confServiceNum;										/*!< Conf Service Number */
701 	uint32_t profile;
702 	uint32_t level;
703 	uint32_t macroblockspersec;
704 	uint32_t macroblocksperframe;
705 	uint32_t decpicbuf;
706 	uint32_t brandcpb;
707 	uint16_t dummy1;
708 	uint16_t dummy2;
709 	uint32_t dummy3;
710 	uint32_t dummy4;
711 	uint32_t dummy5;
712 	uint32_t dummy6;
713 	uint32_t dummy7;
714 	uint32_t dummy8;
715 } videoParameter_t;												/*!< SKINNY Video Parameter Structure */
716 
717 /*!
718  * \brief SKINNY AnnouncementList Structure
719  */
720 typedef struct {
721 	uint32_t lel_local;
722 	uint32_t lel_country;
723 	uint32_t lel_deviceTone;
724 } skinny_announcementList_t;											/*!< SKINNY AnnouncementList Structure */
725 
726 typedef struct {
727 	uint32_t lel_active;
728 	struct {
729 		uint32_t lel_capsAndVersion;
730 		uint32_t lel_2833Support;
731 	} modemRelay;
732 	struct {
733 		uint16_t lel_chan0MaxPayload;
734 		uint16_t lel_chan2MaxPayload;
735 		uint16_t lel_chan3MaxPayload;
736 		uint16_t lel_chan2MaxWindow;
737 	} sptrPayload;
738 	struct {
739 		uint32_t lel_standardSupportField;
740 		uint32_t lel_vendorSupportField;
741 	} sse;
742 	struct {
743 		uint8_t nse;
744 		uint8_t rfc2833;
745 		uint8_t sse;
746 		uint8_t v150sptr;
747 		uint8_t noaudio;
748 		uint8_t FutureUse1;
749 		uint8_t FutureUse2;
750 		uint8_t FutureUse3;
751 	} dynamicPayload;
752 } skinny_latentCapsInfo_t;
753 
754 
755 /*
756 ========================================
757 Begin OpenMultiMediaChannelMessageNew
758 ----------------------------------------
759 */
760 typedef struct
761 {
762 	skinny_echoCancellaton_t ecValue;
763 	union {
764 		skinny_g723BitRate_t g723BitRate;
765 		CodecParameters_t codecParams;
766 	} codecParamsUnion;
767 } skinny_MediaQualifierIncoming_t;
768 
769 typedef struct
770 {
771 	uint32_t lel_millisecondPacketSize;
772 	skinny_MediaQualifierIncoming_t qualifierIn;
773 } skinny_MediaAudioIncomingParameters_t;
774 
775 typedef union
776 {
777 	h261_VideoCapability_t h261;
778 	h263_VideoCapability_t h263;
779 	h263P_VideoCapability_t h263P;
780 	h264_VideoCapability_t h264;
781 } skinny_ChannelVideoParametersUnion_t;
782 
783 typedef struct
784 {
785 	uint32_t lel_bitRate;
786 	uint32_t lel_pictureFormatCount;
787 	pictureFormat_t pictureFormat[5];
788 	uint32_t lel_confServiceNum;
789 	skinny_ChannelVideoParametersUnion_t capability;
790 } skinny_ChannelVideoParameters_t;
791 
792 typedef union
793 {
794 	skinny_MediaAudioIncomingParameters_t audioParameters;
795 	skinny_ChannelVideoParameters_t vidParameters;
796 	dataParameter_t dataParameters;
797 } skinny_OpenMultiMediaReceiveChannelUnion_t;
798 
799 typedef struct
800 {
801 	uint32_t lel_payload_rfc_number;
802 	uint32_t lel_payloadType;
803 } skinny_RTPPayloadType_t;
804 /*
805 ========================================
806 End OpenMultiMediaChannelMessageNew
807 ----------------------------------------
808 */
809 
810 /*!
811  * \brief SKINNY Protocol Message Data Union
812  */
813 typedef union {
814 
815 	/* 0x0048 is phone call list update (comes from phone 7921
816 	 * phones when you press the dial button without a number.
817 	 * It looks like this:
818 	 *
819 	 * 00000000 - 00 00 00 00 01 00 00 00 4B 0D 00 00 34 30 30 30 ........K...4000
820 	 * 00000010 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
821 	 * 00000020 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
822 	 * 00000030 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
823 	 * 00000040 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
824 	 * 00000050 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
825 	 * 00000060 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
826 	 * 00000070 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
827 	 * 00000080 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
828 	 * 00000090 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
829 	 * 000000A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
830 	 * 000000B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
831 	 * 000000C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
832 	 * 000000D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
833 	 * 000000E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
834 	 * 000000F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
835 	 * 00000100 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
836 	 * First DWORD is Index shifted of 4 bits (i think the 4 bits param is something)
837 	 * Second DWORD is line instance related to the call
838 	 * Third DWORD is unknown, Next there is the phone number [260 bytes]
839 	 */
840 	struct {
841 		uint32_t lel_transactionID;									/*!< TransactionID */ /*Number Index (this must be shifted 4 bits right) */
842 		uint32_t lel_featureID;										/*!< LineInstance / BLF: 0x0001 */
843 		uint32_t lel_timer;										/*!< Timer */
844 		char subscriptionID[256];									/*!< SubscriptionID */
845 	} SubscriptionStatReqMessage;										/*!< SubscriptionStatReqMessage Message Structure */
846 
847 	struct {
848 		uint32_t lel_transactionID;									/*!< TransactionID */ /*!< Number Index (this must be shifted 4 bits right) */
849 		uint32_t lel_featureID;										/*!< LineInstance / BLF: 0x00001 */
850 		uint32_t lel_timer;										/*!< Timer */
851 		uint32_t lel_cause;										/*!< Cause (Enum): OK: 0x00, RouteFail:0x01, AuthFail:0x02, Timeout:0x03, TrunkTerm:0x04, TrunkForbidden:0x05, Throttle:0x06 */
852 	} SubscriptionStatMessage;										/*!< SubscriptionStatMessage */
853 
854 	struct {
855 		uint32_t lel_transactionID;									/*!< TransactionID */ /*!< Number Index (this must be shifted 4 bits right) */
856 		uint32_t lel_featureID;										/*!< LineInstance / BLF: 0x01*/
857 		uint32_t lel_status;										/*!< Status */
858 		char text[100];                                                                                 /*!< Text */
859 	} NotificationMessage;											/*!< NotificationMessage / CallListStatusUpdate */
860 
861 	struct {
862 		uint32_t lel_appID;
863 		uint32_t lel_lineInstance;
864 		uint32_t lel_callReference;
865 		uint32_t lel_transactionID;
866 		uint32_t lel_dataLength;
867 		char data[StationMaxXMLMessage];
868 	} UserToDeviceDataMessage;										/*!< User to Device Message Structure */
869 
870 	struct {
871 		uint32_t lel_appID;
872 		uint32_t lel_lineInstance;
873 		uint32_t lel_callReference;
874 		uint32_t lel_transactionID;
875 		uint32_t lel_dataLength;
876 		uint32_t lel_sequenceFlag;
877 		uint32_t lel_displayPriority;
878 		uint32_t lel_conferenceID;
879 		uint32_t lel_appInstanceID;
880 		uint32_t lel_routing;
881 		//char data[StationMaxXMLMessage];                                                              // dummy char for variable length message (Causes issues on 7960, needs further research)
882 		char data[1];											// dummy char for variable length message (Revert)
883 	} UserToDeviceDataVersion1Message;									/*!< User to Device Version1 Message Structure */
884 
885 	struct {
886 		uint32_t lel_appID;
887 		uint32_t lel_lineInstance;
888 		uint32_t lel_callReference;
889 		uint32_t lel_transactionID;
890 		uint32_t lel_dataLength;
891 		char data[StationMaxXMLMessage];
892 	} DeviceToUserDataMessage;										/*!< Device to User Message Structure */
893 
894 	struct {
895 		uint32_t lel_appID;
896 		uint32_t lel_lineInstance;
897 		uint32_t lel_callReference;
898 		uint32_t lel_transactionID;
899 		uint32_t lel_dataLength;
900 		char data[StationMaxXMLMessage];
901 	} DeviceToUserDataResponseMessage;									/*!< Device to User Response Message Structure */
902 
903 	struct {
904 		uint32_t lel_appID;
905 		uint32_t lel_lineInstance;
906 		uint32_t lel_callReference;
907 		uint32_t lel_transactionID;
908 		uint32_t lel_dataLength;
909 		uint32_t lel_sequenceFlag;
910 		uint32_t lel_displayPriority;
911 		uint32_t lel_conferenceID;
912 		uint32_t lel_appInstanceID;
913 		uint32_t lel_routing;
914 		char data[StationMaxXMLMessage];
915 	} DeviceToUserDataVersion1Message;									/*!< Device to User Version1 Message Structure */
916 
917 	struct {
918 		uint32_t lel_appID;
919 		uint32_t lel_lineInstance;
920 		uint32_t lel_callReference;
921 		uint32_t lel_transactionID;
922 		uint32_t lel_dataLength;
923 		uint32_t lel_sequenceFlag;
924 		uint32_t lel_displayPriority;
925 		uint32_t lel_conferenceID;
926 		uint32_t lel_appInstanceID;
927 		uint32_t lel_routing;
928 		char data[StationMaxXMLMessage];
929 	} DeviceToUserDataResponseVersion1Message;
930 
931 	/*
932 	   [Jan  6 17:05:50] WARNING[29993]: sccp_actions.c:59 sccp_handle_unknown_message:
933 	   Unhandled SCCP Message: 48 - UpdateCapabilitiesMessage with length 1844
934 
935 	   This is from a 7970 with no video caps
936 	   00000000 - 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
937 	   00000010 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
938 	   00000020 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
939 	   00000030 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
940 	   00000040 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
941 	   00000050 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
942 	   00000060 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
943 	   00000070 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
944 	   00000080 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
945 	   00000090 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
946 	   000000A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
947 	   000000B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
948 	   000000C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
949 	   000000D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
950 	   000000E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
951 	   000000F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
952 	   00000100 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
953 	   00000110 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
954 	   00000120 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
955 	   00000130 - 00 00 00 00 00 00 00 00 19 00 00 00 28 00 00 00 ............(...
956 	   00000140 - 00 00 00 00 00 00 00 00 04 00 00 00 28 00 00 00 ............(...
957 	   00000150 - 00 00 00 00 00 00 00 00 02 00 00 00 28 00 00 00 ............(...
958 	   00000160 - 00 00 00 00 00 00 00 00 0F 00 00 00 3C 00 00 00 ............<...
959 	   00000170 - 00 00 00 00 00 00 00 00 10 00 00 00 3C 00 00 00 ............<...
960 	   00000180 - 00 00 00 00 00 00 00 00 0B 00 00 00 3C 00 00 00 ............<...
961 	   00000190 - 00 00 00 00 00 00 00 00 0C 00 00 00 3C 00 00 00 ............<...
962 	   000001A0 - 00 00 00 00 00 00 00 00 01 01 00 00 01 00 00 00 ................
963 	   000001B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
964 	   000001C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
965 	   000001D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
966 	   000001E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
967 	   000001F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
968 	   00000200 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
969 	   00000210 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
970 	   00000220 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
971 	   00000230 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
972 	   00000240 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
973 	   00000250 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
974 	   00000260 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
975 	   00000270 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
976 	   00000280 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
977 	   00000290 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
978 	   000002A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
979 	   000002B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
980 	   000002C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
981 	   000002D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
982 	   000002E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
983 	   000002F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
984 	   00000300 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
985 	   00000310 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
986 	   00000320 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
987 	   00000330 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
988 	   00000340 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
989 	   00000350 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
990 	   00000360 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
991 	   00000370 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
992 	   00000380 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
993 	   00000390 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
994 	   000003A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
995 	   000003B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
996 	   000003C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
997 	   000003D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
998 	   000003E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
999 	   000003F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1000 	   00000400 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1001 	   00000410 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1002 	   00000420 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1003 	   00000430 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1004 	   00000440 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1005 	   00000450 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1006 	   00000460 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1007 	   00000470 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1008 	   00000480 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1009 	   00000490 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1010 	   000004A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1011 	   000004B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1012 	   000004C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1013 	   000004D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1014 	   000004E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1015 	   000004F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1016 	   00000500 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1017 	   00000510 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1018 	   00000520 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1019 	   00000530 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1020 	   00000540 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1021 	   00000550 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1022 	   00000560 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1023 	   00000570 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1024 	   00000580 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1025 	   00000590 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1026 	   000005A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1027 	   000005B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1028 	   000005C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1029 	   000005D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1030 	   000005E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1031 	   000005F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1032 	   00000600 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1033 	   00000610 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1034 	   00000620 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1035 	   00000630 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1036 	   00000640 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1037 	   00000650 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1038 	   00000660 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1039 	   00000670 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1040 	   00000680 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1041 	   00000690 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1042 	   000006A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1043 	   000006B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1044 	   000006C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1045 	   000006D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1046 	   000006E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1047 	   000006F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1048 	   00000700 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1049 	   00000710 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1050 	   00000720 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1051 	   00000730 - 00 00 00 00                                     ....
1052 
1053 	   this is from a 7940 with Video Advantage on PC Port
1054 	   00000000 - 08 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................
1055 	   00000010 - 00 00 00 00 22 4B 01 00 0C CC CC CC 00 11 21 F1 ...."K..........
1056 	   00000020 - 22 4B 00 74 AA AA 03 00 00 0C 20 00 02 B4 B8 67 "K.t...... ....g
1057 	   00000030 - 00 01 00 13 53 45 50 30 30 31 31 32 31 46 31 32 ....SEP001122334
1058 	   00000040 - 32 34 42 00 02 00 11 00 00 00 01 01 01 CC 00 04 455.............
1059 	   00000050 - 0A 0A 0A D2 00 03 00 0A 50 6F 72 74 20 31 00 04 ........Port 1..
1060 	   00000060 - 00 08 00 00 00 90 00 05 00 10 50 30 30 33 30 38 ..........P00308
1061 	   00000070 - 30 30 31 30 30 30 00 06 00 17 43 69 73 63 6F 20 001000....Cisco
1062 	   00000080 - 49 50 20 50 68 6F 6E 65 20 37 39 34 00 00 00 00 IP Phone 794....
1063 	   00000090 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1064 	   000000A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1065 	   000000B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1066 	   000000C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1067 	   000000D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1068 	   000000E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1069 	   000000F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1070 	   00000100 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1071 	   00000110 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1072 	   00000120 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1073 	   00000130 - 00 00 00 00 00 00 00 00 19 00 00 00 78 00 00 00 ............x...
1074 	   00000140 - 00 00 00 00 00 00 00 00 04 00 00 00 28 00 00 00 ............(...
1075 	   00000150 - 00 00 00 00 00 00 00 00 02 00 00 00 28 00 00 00 ............(...
1076 	   00000160 - 00 00 00 00 00 00 00 00 0F 00 00 00 3C 00 00 00 ............<...
1077 	   00000170 - 00 00 00 00 00 00 00 00 10 00 00 00 3C 00 00 00 ............<...
1078 	   00000180 - 00 00 00 00 00 00 00 00 0B 00 00 00 3C 00 00 00 ............<...
1079 	   00000190 - 00 00 00 00 00 00 00 00 0C 00 00 00 3C 00 00 00 ............<...
1080 	   000001A0 - 00 00 00 00 00 00 00 00 01 01 00 00 04 00 00 00 ................
1081 	   000001B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1082 	   000001C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1083 	   000001D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1084 	   000001E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1085 	   000001F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1086 	   00000200 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1087 	   00000210 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1088 	   00000220 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1089 	   00000230 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1090 	   00000240 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1091 	   00000250 - 00 00 00 00 00 00 00 00 65 00 00 00 03 00 00 00 ........e.......
1092 	   00000260 - 02 00 00 00 32 00 00 00 02 00 00 00 98 3A 00 00 ....2........:..
1093 	   00000270 - F4 01 00 00 01 00 00 00 00 00 00 00 33 00 00 00 ............3...
1094 	   00000280 - 03 00 00 00 98 3A 00 00 F4 01 00 00 01 00 00 00 .....:..........
1095 	   00000290 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1096 	   000002A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1097 	   000002B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1098 	   000002C0 - 00 00 00 00 00 00 00 00 00 00 00 00 67 00 00 00 ............g...
1099 	   000002D0 - 03 00 00 00 01 00 00 00 34 00 00 00 03 00 00 00 ........4.......
1100 	   000002E0 - 98 3A 00 00 F4 01 00 00 01 00 00 00 00 00 00 00 .:..............
1101 	   000002F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1102 	   00000300 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1103 	   00000310 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1104 	   00000320 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1105 	   00000330 - 00 00 00 00 00 00 00 00 40 00 00 00 32 00 00 00 ........@...2...
1106 	   00000340 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1107 	   00000350 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1108 	   00000360 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1109 	   00000370 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1110 	   00000380 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1111 	   00000390 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1112 	   000003A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1113 	   000003B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1114 	   000003C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1115 	   000003D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1116 	   000003E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1117 	   000003F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1118 	   00000400 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1119 	   00000410 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1120 	   00000420 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1121 	   00000430 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1122 	   00000440 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1123 	   00000450 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1124 	   00000460 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1125 	   00000470 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1126 	   00000480 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1127 	   00000490 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1128 	   000004A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1129 	   000004B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1130 	   000004C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1131 	   000004D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1132 	   000004E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1133 	   000004F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1134 	   00000500 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1135 	   00000510 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1136 	   00000520 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1137 	   00000530 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1138 	   00000540 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1139 	   00000550 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1140 	   00000560 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1141 	   00000570 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1142 	   00000580 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1143 	   00000590 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1144 	   000005A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1145 	   000005B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1146 	   000005C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1147 	   000005D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1148 	   000005E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1149 	   000005F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1150 	   00000600 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1151 	   00000610 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1152 	   00000620 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1153 	   00000630 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1154 	   00000640 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1155 	   00000650 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1156 	   00000660 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1157 	   00000670 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1158 	   00000680 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1159 	   00000690 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1160 	   000006A0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1161 	   000006B0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1162 	   000006C0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1163 	   000006D0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1164 	   000006E0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1165 	   000006F0 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1166 	   00000700 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1167 	   00000710 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1168 	   00000720 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1169 	   00000730 - 00 00 00 00                                     ....
1170 
1171 	   diff:
1172 	   >   00000000 - 08 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................
1173 	   >   00000010 - 00 00 00 00 22 4B 01 00 0C CC CC CC 00 11 21 F1 ...."K..........
1174 	   >   00000020 - 22 4B 00 74 AA AA 03 00 00 0C 20 00 02 B4 B8 67 "K.t...... ....g
1175 	   >   00000030 - 00 01 00 13 53 45 50 30 30 31 31 32 31 46 31 32 ....SEP001122334
1176 	   >   00000040 - 32 34 42 00 02 00 11 00 00 00 01 01 01 CC 00 04 455.............
1177 	   >   00000050 - 0A 0A 0A D2 00 03 00 0A 50 6F 72 74 20 31 00 04 ........Port 1..
1178 	   >   00000060 - 00 08 00 00 00 90 00 05 00 10 50 30 30 33 30 38 ..........P00308
1179 	   >   00000070 - 30 30 31 30 30 30 00 06 00 17 43 69 73 63 6F 20 001000....Cisco
1180 	   >   00000080 - 49 50 20 50 68 6F 6E 65 20 37 39 34 00 00 00 00 IP Phone 794....
1181 	   >   00000130 - 00 00 00 00 00 00 00 00 19 00 00 00 78 00 00 00 ............x...
1182 	   >   000001A0 - 00 00 00 00 00 00 00 00 01 01 00 00 04 00 00 00 ................
1183 	   >   00000250 - 00 00 00 00 00 00 00 00 65 00 00 00 03 00 00 00 ........e.......
1184 	   >   00000260 - 02 00 00 00 32 00 00 00 02 00 00 00 98 3A 00 00 ....2........:..
1185 	   >   00000270 - F4 01 00 00 01 00 00 00 00 00 00 00 33 00 00 00 ............3...
1186 	   >   00000280 - 03 00 00 00 98 3A 00 00 F4 01 00 00 01 00 00 00 .....:..........
1187 	   >   000002C0 - 00 00 00 00 00 00 00 00 00 00 00 00 67 00 00 00 ............g...
1188 	   >   000002D0 - 03 00 00 00 01 00 00 00 34 00 00 00 03 00 00 00 ........4.......
1189 	   >   000002E0 - 98 3A 00 00 F4 01 00 00 01 00 00 00 00 00 00 00 .:..............
1190 	   >   00000330 - 00 00 00 00 00 00 00 00 40 00 00 00 32 00 00 00 ........@...2...
1191 	 */
1192 	/* 7960 with video advantage on PC Port*/
1193 	/*
1194 	  00000000 - 34 07 00 00 00 00 00 00  30 00 00 00 08 00 00 00  - 4.......0....... 			audioCapCount
1195 	  00000010 - 02 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................ VideoCap, dataCap, RTPPayload, customPictureFormatCount
1196 	  00000020 - 00 00 01 00 0C CC CC CC  00 1B 54 CA 49 9B 00 7B  - ..........T.I..{
1197 	  00000030 - AA AA 03 00 00 0C 20 00  02 B4 85 F7 00 01 00 13  - ...... .........
1198 	  00000040 - 53 45 50 30 30 31 42 35  34 43 41 34 39 39 42 00  - SEP001B54CA499B.
1199 	  00000050 - 02 00 11 00 00 00 01 01  01 CC 00 04 0A 0F 0F 8B  - ................
1200 	  00000060 - 00 03 00 0A 50 6F 72 74  20 31 00 04 00 08 00 00  - ....Port 1......
1201 	  00000070 - 04 90 00 05 00 10 50 30  30 33 30 38 30 31 30 32  - ......P003080102
1202 	  00000080 - 30 30 00 06 00 17 43 69  73 63 6F 20 49 50 20 50  - 00....Cisco IP P
1203 	  00000090 - 68 6F 6E 65 20 37 39 36  00 00 00 00 00 00 00 00  - hone 796........
1204 	  000000A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1205 	  000000B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1206 	  000000C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1207 	  000000D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1208 	  000000E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1209 	  000000F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1210 	  00000100 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1211 	  00000110 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1212 	  00000120 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1213 	  00000130 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1214 	  00000140 - 00 00 00 00 19 00 00 00  78 00 00 00 00 00 00 00  - ........x.......
1215 	  00000150 - 00 00 00 00 04 00 00 00  28 00 00 00 00 00 00 00  - ........(.......
1216 	  00000160 - 00 00 00 00 02 00 00 00  28 00 00 00 00 00 00 00  - ........(.......
1217 	  00000170 - 00 00 00 00 0F 00 00 00  3C 00 00 00 00 00 00 00  - ........<.......
1218 	  00000180 - 00 00 00 00 10 00 00 00  3C 00 00 00 00 00 00 00  - ........<.......
1219 	  00000190 - 00 00 00 00 0B 00 00 00  3C 00 00 00 00 00 00 00  - ........<.......
1220 	  000001A0 - 00 00 00 00 0C 00 00 00  3C 00 00 00 00 00 00 00  - ........<.......
1221 	  000001B0 - 00 00 00 00 01 01 00 00  04 00 00 00 00 00 00 00  - ................
1222 	  000001C0 - 00 00 00 00 00 00 00 00  00 00 00 00 2D 43 69 73  - ............-Cis
1223 	  000001D0 - 63 6F 49 50 50 68 6F 6E  65 53 44 4B 56 65 72 73  - coIPPhoneSDKVers
1224 	  000001E0 - 69 6F 6E 3A 20 34 2E 30  2E 31 0D 0A 78 2D 43 69  - ion: 4.0.1..x-Ci
1225 	  000001F0 - 73 63 6F 49 50 50 68 6F  6E 65 44 69 73 70 6C 61  - scoIPPhoneDispla
1226 	  00000200 - 79 3A 20 31 33 33 2C 36  35 2C 32 2C 47 0D 0A 0D  - y: 133,65,2,G...
1227 	  00000210 - 0A 6F 6E 65 44 69 73 70  6C 61 79 3A 20 31 33 33  - .oneDisplay: 133
1228 	  00000220 - 2C 36 35 2C 32 2C 47 0D  0A 43 6F 6F 6B 69 65 3A  - ,65,2,G..Cookie:
1229 	  00000230 - 20 50 48 50 53 45 53 53  49 44 3D 6D 30 70 34 65  -  PHPSESSID=m0p4e
1230 	  00000240 - 72 66 6C 69 32 72 30 70  34 6A 71 76 64 69 31 72  - rfli2r0p4jqvdi1r
1231 	  00000250 - 6B 32 74 66 36 0D 0A 0D  0A 00 00 00 00 00 00 00  - k2tf6...........
1232 	  00000260 - 00 00 00 00 65 00 00 00  03 00 00 00 02 00 00 00  - ....e...........
1233 	  00000270 - 32 00 00 00 02 00 00 00  98 3A 00 00 F4 01 00 00  - 2........:......
1234 	  00000280 - 01 00 00 00 00 00 00 00  33 00 00 00 03 00 00 00  - ........3.......
1235 	  00000290 - 98 3A 00 00 F4 01 00 00  01 00 00 00 00 00 00 00  - .:..............
1236 	  000002A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1237 	  000002B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1238 	  000002C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1239 	  000002D0 - 00 00 00 00 00 00 00 00  67 00 00 00 03 00 00 00  - ........g.......
1240 	  000002E0 - 01 00 00 00 34 00 00 00  03 00 00 00 98 3A 00 00  - ....4........:..
1241 	  000002F0 - F4 01 00 00 01 00 00 00  00 00 00 00 00 00 00 00  - ................
1242 	  00000300 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1243 	  00000310 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1244 	  00000320 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1245 	  00000330 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1246 	  00000340 - 00 00 00 00 40 00 00 00  32 00 00 00 40 00 00 00  - ....@...2...@...
1247 	  00000350 - 32 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - 2...............
1248 	  00000360 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1249 	  00000370 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1250 	  00000380 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1251 	  00000390 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1252 	  000003A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1253 	  000003B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1254 	  000003C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1255 	  000003D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1256 	  000003E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1257 	  000003F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1258 	  00000400 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1259 	  00000410 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1260 	  00000420 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1261 	  00000430 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1262 	  00000440 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1263 	  00000450 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1264 	  00000460 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1265 	  00000470 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1266 	  00000480 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1267 	  00000490 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1268 	  000004A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1269 	  000004B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1270 	  000004C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1271 	  000004D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1272 	  000004E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1273 	  000004F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1274 	  00000500 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1275 	  00000510 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1276 	  00000520 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1277 	  00000530 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1278 	  00000540 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1279 	  00000550 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1280 	  00000560 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1281 	  00000570 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1282 	  00000580 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1283 	  00000590 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1284 	  000005A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1285 	  000005B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1286 	  000005C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1287 	  000005D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1288 	  000005E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1289 	  000005F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1290 	  00000600 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1291 	  00000610 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1292 	  00000620 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1293 	  00000630 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1294 	  00000640 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1295 	  00000650 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1296 	  00000660 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1297 	  00000670 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1298 	  00000680 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1299 	  00000690 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1300 	  000006A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1301 	  000006B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1302 	  000006C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1303 	  000006D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1304 	  000006E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1305 	  000006F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1306 	  00000700 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1307 	  00000710 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1308 	  00000720 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1309 	  00000730 - 00 00 00 00 00 00 00 00  00 00 00 00              - ............
1310 	*/
1311 	struct {
1312 		union {
1313 			struct {
1314 				uint32_t lel_audioCapCount;									/*!< Audio Capability Count */
1315 				uint32_t lel_videoCapCount;									/*!< Video Capability Count */
1316 				uint32_t lel_dataCapCount;									/*!< Data Capability Count */
1317 				uint32_t lel_RTPPayloadFormat;									/*!< RTP Payload Format */
1318 				uint32_t lel_customPictureFormatCount;								/*!< Custom Picture Format Count */
1319 				customPictureFormat_t customPictureFormat[MAX_CUSTOM_PICTURES];					/*!< Custom Picture Format */
1320 				confResource_t confResources;
1321 				audioCap_t audioCaps[SKINNY_MAX_CAPABILITIES];							/*!< Audio Capabilities */
1322 				videoCapV1_t videoCaps[SKINNY_MAX_VIDEO_CAPABILITIES];						/*!< Video Capabilities */
1323 				dataCapV1_t dataCaps[SKINNY_MAX_DATA_CAPABILITIES];						/*!< Data Capabilities */
1324 			} v3;
1325 			struct {
1326 				uint32_t lel_audioCapCount;									/*!< Audio Capability Count */
1327 				uint32_t lel_videoCapCount;									/*!< Video Capability Count */
1328 				uint32_t lel_dataCapCount;									/*!< Data Capability Count */
1329 				uint32_t lel_RTPPayloadFormat;									/*!< RTP Payload Format */
1330 				uint32_t lel_customPictureFormatCount;								/*!< Custom Picture Format Count */
1331 				customPictureFormat_t customPictureFormat[MAX_CUSTOM_PICTURES];					/*!< Custom Picture Format */
1332 				confResource_t confResources;
1333 				audioCap_t audioCaps[SKINNY_MAX_CAPABILITIES];							/*!< Audio Capabilities */
1334 				videoCapV2_t videoCaps[SKINNY_MAX_VIDEO_CAPABILITIES];						/*!< Video Capabilities V2 */
1335 				dataCapV1_t dataCaps[SKINNY_MAX_DATA_CAPABILITIES];						/*!< Data Capabilities */
1336 			} v16;
1337 		};
1338 	} UpdateCapabilitiesMessage;										/*!< Update Capabilities Message Structure */
1339 
1340 	struct {
1341 		uint32_t lel_audioCapCount;									/*!< Audio Capability Count */
1342 		uint32_t lel_videoCapCount;									/*!< Video Capability Count */
1343 		uint32_t lel_dataCapCount;									/*!< Data Capability Count */
1344 		uint32_t lel_RTPPayloadFormat;									/*!< RTP Payload Format */
1345 		uint32_t lel_customPictureFormatCount;								/*!< Custom Picture Format Count */
1346 		customPictureFormat_t customPictureFormat[MAX_CUSTOM_PICTURES];					/*!< Custom Picture Format */
1347 		confResource_t confResources;
1348 		audioCap_t audioCaps[SKINNY_MAX_CAPABILITIES];							/*!< Audio Capabilities */
1349 		videoCapV2_t videoCaps[SKINNY_MAX_VIDEO_CAPABILITIES];						/*!< Video Capabilities V2 */
1350 		dataCapV1_t dataCaps[SKINNY_MAX_DATA_CAPABILITIES];						/*!< Data Capabilities */
1351 	} UpdateCapabilitiesV2Message;										/*!< */
1352 
1353 	struct {
1354 		uint32_t lel_audioCapCount;									/*!< Audio Capability Count */
1355 		uint32_t lel_videoCapCount;									/*!< Video Capability Count */
1356 		uint32_t lel_dataCapCount;									/*!< Data Capability Count */
1357 		uint32_t lel_RTPPayloadFormat;									/*!< RTP Payload Format */
1358 		uint32_t lel_customPictureFormatCount;								/*!< Custom Picture Format Count */
1359 		customPictureFormat_t customPictureFormat[MAX_CUSTOM_PICTURES];					/*!< Custom Picture Format */
1360 		confResource_t confResources;
1361 		audioCap_t audioCaps[SKINNY_MAX_CAPABILITIES];							/*!< Audio Capabilities */
1362 		videoCapV3_t videoCaps[SKINNY_MAX_VIDEO_CAPABILITIES];						/*!< Video Capabilities V3 */
1363 		dataCapV2_t dataCaps[SKINNY_MAX_DATA_CAPABILITIES];						/*!< Data Capabilities */
1364 		uint32_t unknown[70];										/*!< Hmmm */
1365 	} UpdateCapabilitiesV3Message;									/*!< @see https://sourceforge.net/p/chan-sccp-b/bugs/181 */
1366 
1367 	/* AccessoryStatusMessage (0x0073):
1368 	 * This indicates the phone headset, handset or speaker status.
1369 	 *
1370 	 * FIRST DWORD:  0x0001 = HEADSET, 0x0002 = HANDSET, 0x0003 = SPEAKERMODE
1371 	 * SECOND DWORD: 0x0001 = OFFHOOK, 0x0002 = ONHOOK
1372 	 * THIRD DWORD:  ALWAYS 0x0000 UNKNOWN
1373 	 */
1374 	struct {
1375 		uint32_t lel_AccessoryID;									/*!< Accessory ID (0x1=HeadSet, 0x2=HandSet, 0x3=Speaker) (MediaPathID) */
1376 		uint32_t lel_AccessoryStatus;									/*!< Accessory Status (0x1=On, 0x2=Off) (MediaPathEvent) */
1377 	} AccessoryStatusMessage;										/*!< Accessory Status Message Structure (MediaPathEventMessage) */
1378 
1379 	// Message 0x4A len 12 (cisco ip communicator uses it)
1380 	// 00000000 - 0C 00 00 00 16 00 00 00  4A 00 00 00 03 00 00 00  - ........J.......
1381 	// 00000010 - 01 00 00 00                                       - ....
1382 	struct {
1383 		uint32_t lel_MediaPathID;									/*!< mediaPathID (0x1=HeadSet, 0x2=HandSet, 0x3=Speaker) */
1384 		uint32_t lel_MediaPathCapabilities;								/*!< mediaPathCapabilities (0x1=Enable, 0x2=Disable, 0x3=Monitor) */
1385 	} MediaPathCapabilityMessage;										/*!< \todo MediaPath Capability Message Structure */
1386 
1387 	struct {
1388 		uint32_t lel_conferenceID;
1389 		uint32_t lel_callReference;
1390 		uint32_t lel_layout;										/* index of layoutConfig_t */
1391 	} VideoDisplayCommandMessage;
1392 
1393 	struct {												// INCOMPLETE
1394 		uint32_t lel_conferenceID;									/*!< Conference ID */
1395 		uint32_t lel_passThruPartyId;
1396 		uint32_t lel_callReference;									/*!< Call Reference */
1397 		uint32_t lel_maxBitRate;									/*!< maxBitRate */
1398 	} FlowControlNotifyMessage;										/*!< \todo FlowControlNotify Message Structure */
1399 
1400 	struct {
1401 		uint32_t lel_lineInstance;              /*!< Instance */
1402 		uint32_t lel_buttonType;                /*!< always 0x15 */
1403 		union {
1404 			struct FeatureStateValue {
1405 				uint8_t rythm;  /*!< 0:off, 1:on, 2-7:different speeds */
1406 				uint8_t color;  /*!< 0:off, 1:green, 2:red, 3:orange */
1407 				uint8_t icon;   /*!< 0:open, 1:closed, 2:boxes */
1408 				uint8_t oldval; /*!< old implementation open/closed */
1409 			} strct;
1410 			uint32_t lel_uint32;
1411 		} stateVal;
1412 		char textLabel[StationDynamicNameSize]; /*!< SpeedDial Display Name \todo shoud be dynamic - readMessage - OVERRUN remaining bytes=29 messageType=0x146 */
1413 	} FeatureStatDynamicMessage;                    /*!< Speed Dial Stat Dynamic Message Structure */
1414 
1415 	struct {
1416 		uint32_t lel_Number;
1417 		char DirNumber[StationMaxDirnumSize];
1418 		char DisplayName[StationMaxNameSize];
1419 	} SpeedDialStatDynamicMessage;										/*!< Speed Dial Stat Dynamic Message Structure */
1420 
1421 	struct {
1422 		uint32_t lel_conferenceID;
1423 		uint32_t lel_serviceNum;
1424 	} ClearConferenceMessage;
1425 
1426 	struct {
1427 		uint32_t lel_lineNumber;									/*!< Line Number */
1428 		uint32_t lel_lineType;										/*!< Line Type: Bit-field: 1-Original Dialed 2-Redirected Dialed, 4-Calling line ID, 8-Calling name ID */
1429 		char dummy[1];											/*!< Dummy (25+141+141) + 3 terminators */
1430 		//char lineDirNumber[25];
1431 		//char lineFullyQualifiedDisplayName[40];
1432 		//char lineTextLabel[40];
1433 		//uint32_t lel_lineDisplayOptions;
1434 	} LineStatDynamicMessage;										/*!< Line Stat Dynmic Message Structure */
1435 
1436 	struct {
1437 		uint32_t lel_lineInstance;									/*!< Line Instance */
1438 		uint32_t lel_callReference;									/*!< Call Reference */
1439 		uint32_t lel_callType;										/*!< Call Type (INBOUND=1, OUTBOUND=2, FORWARD=3) */
1440 		uint32_t lel_originalCdpnRedirectReason;							/*!< Original CalledParty Redirect Reason */
1441 		uint32_t lel_lastRedirectingReason;								/*!< Last Redirecting Reason (=1, =2, =3, FOR=4, PICKUP=5) */
1442 		uint32_t lel_callInstance;									/*!< Call Instance */
1443 		uint32_t lel_callSecurityStatus;								/*!< Call Security Status */
1444 		uint32_t partyPIRestrictionBits;								/*!< Party PI Restriction Bits Structure
1445 														   0 RestrictCallingPartyName
1446 														   1 RestrictCallingPartyNumber
1447 														   2 RestrictCalledPartyName
1448 														   3 RestrictCalledPartyNumber
1449 														   4 RestrictOriginalCalledPartyName
1450 														   5 RestrictOriginalCalledPartyNumber
1451 														   6 RestrictLastRedirectPartyName
1452 														   7 RestrictLastRedirectPartyNumber */
1453 		uint32_t dummy[1];											/*!< Dummy */
1454 														/* Dummy: Consists of:						// v3 - >v18
1455 														 char callingParty[StationDynamicDirnumSize];		 	// 24 - 25
1456 														 char calledParty[StationDynamicDirnumSize];			// 24 - 25
1457 														 char originalCalledParty[StationDynamicDirnumSize];		// 24 - 25
1458 														 char lastRedirectingParty[StationDynamicDirnumSize];		// 24 - 25
1459 														 char cgpnVoiceMailbox[StationDynamicDirnumSize];		// 24 - 25
1460 														 char cdpnVoiceMailbox[StationDynamicDirnumSize];		// 24 - 25
1461 														 char originalCdpnVoiceMailbox[StationDynamicDirnumSize];	// 24 - 25
1462 														 char lastRedirectingVoiceMailbox[StationDynamicDirnumSize];	// 24 - 25
1463 														 char callingPartyName[StationDynamicNameSize];			// 40 - 121
1464 														 char calledPartyName[StationDynamicNameSize];			// 40 - 121
1465 														 char originalCalledPartyName[StationDynamicNameSize];		// 40 - 121
1466 														 char lastRedirectingPartyName[StationDynamicNameSize];		// 40 - 121
1467 														 char HuntPilotNumber[StationDynamicDirnumSize];		// 24 - 25
1468 														 char HuntPilotName[StationDynamicNameSize];			// 40 - 121
1469 														 */
1470 
1471 														/* V2 (XML)
1472 														char callingParty[25];
1473 														char AlternateCallingParty[25];
1474 														char calledParty[25];
1475 														char originalCalledParty[25];
1476 														char lastRedirectingParty[25];
1477 														char cgpnVoiceMailbox[25];
1478 														char cdpnVoiceMailbox[25];
1479 														char originalCdpnVoiceMailbox[25];
1480 														char lastRedirectingVoiceMailbox[25];
1481 														char callingPartyName[121];
1482 														char calledPartyName[121];
1483 														char originalCalledPartyName[121];
1484 														char lastRedirectingPartyName[121];
1485 														char HuntPilotNumber[25];
1486 														char HuntPilotName[121];
1487 														*/
1488 	} CallInfoDynamicMessage;										/*!< Call Information Dynamic Message Structure */
1489 
1490 	struct {
1491 		union {
1492 			/* this is from a 7941
1493 			   Unhandled SCCP Message: unknown(0x0154) 44 bytes length
1494 			   00000000 - 03 00 00 00 FC FF FF FF 03 00 00 00 00 00 00 00 ................
1495 			   00000010 - C0 A8 09 24 00 00 00 00 00 00 00 00 00 00 00 00 ...$............
1496 			   00000020 - 00 00 00 00 03 00 00 00 00 00 00 00             ............
1497 			 */
1498 			struct {
1499 				uint32_t lel_callReference;							/*!< Call Reference */
1500 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
1501 				uint32_t lel_callReference1;							/*!< Call Reference1 */
1502 				uint32_t bel_ipAddr;								/*!< Ip Address Array (This field is apparently in big-endian format, even though most other fields are in little-endian format.) */
1503 				uint32_t lel_portNumber;							/*!< Port Number */
1504 				skinny_mediastatus_t lel_mediastatus;						/*!< Start Media Transmission Status */
1505 			} v3;
1506 
1507 			/* this is from a 6911
1508 			   StartMediaTransmissionAck_v17(0x0154)
1509 			   0040  26 00 00 00 11 00 00 00  54 01 00 00 00 00 00 00    ...... ..T.....            ; lel_reserved = 17 (11), message_id 0x154, callreference = 0
1510 			   0050  00 00 00 00 15 00 00 00  00 00 00 00 c0 a8 11 7b    ...... .......{            ; passthrupartyid=0, callreference1=21 (15), unknown=0, [ip-address=c0a8117b
1511 			   0060  00 00 00 00 00 00 00 00  00 00 00 00 98 2b 00 00    ...... .......+            ;  portnumber=982b0000
1512 			   0070  00 00 00 00                                         ......                     ; smtStatus=0
1513 			 */
1514 			struct {
1515 				uint32_t lel_callReference;							/*!< Call Reference */
1516 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
1517 				uint32_t lel_callReference1;							/*!< Call Reference 1 */
1518 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
1519 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format, even though most other fields are in little-endian format. */
1520 				uint32_t lel_portNumber;							/*!< Port Number */
1521 				skinny_mediastatus_t lel_mediastatus;						/*!< startmediatransmission status */
1522 			} v17;
1523 
1524 			/* this is from a 6901 during transfer (notice missing passThruPartyId)
1525 			   StartMediaTransmissionAck_v20(0x0154)
1526 			   0000 - 34 00 00 00 14 00 00 00  54 01 00 00 00 00 00 00  - 4.......T.......		; Call Reference(EMPTY)
1527 			   0010 - 00 00 00 00 12 00 00 00  00 00 00 00 0A 01 02 2C  - ...............,		; Pass Through Party ID = EMPTY, CallReference1 (18), ipb46(0), [Ip-Address
1528 			   0020 - 00 00 00 00 00 00 00 00  00 00 00 00 F4 2F 00 00  - ............./..          ; ....] PortNumber
1529 			   0030 - 00 00 00 00 00 00 00 00  00 00 00 00              - ............              ; mediaStatus, Unkown, Unknown
1530 			 */
1531 		};
1532 	} StartMediaTransmissionAck;										/*!< Start Media Transmission Acknowledgement Structure */
1533 
1534 	// No struct
1535 
1536 	struct {
1537 		uint8_t dummy;
1538 	} StationKeepAliveMessage;										/*!< Station Keep Alive Message */
1539 
1540 	/* this is register message from 7940 with load 8.1.1 (protocol 0)
1541 	 * 00000010 - 00 00 00 00 01 00 00 00 0A 0A 0A D2 07 00 00 00 ................
1542 	 * 00000020 - 00 00 00 00 00 00 00 00 0B 00 60 85 00 00 00 00 ................
1543 	 * 00000030 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1544 	 * 00000040 - 00 00 00 00                                     ....
1545 	 */
1546 
1547         /* this is register message from 7936 with load  (protocol 0)
1548 	 * 00000000 - 30 00 00 00 00 00 00 00 01 00 00 00 53 45 50 30 0...........SEP0
1549 	 * 00000010 - 30 30 34 46 32 45 32 34 30 41 33 00 00 00 00 00 004F2E240A3.....
1550 	 * 00000020 - 01 00 00 00 c0 a8 04 c8 43 75 00 00 00 00 00 00 ........Cu......
1551 	 * 00000030 - 00 00 00 01 04 00 00 00                         ........
1552          */
1553 
1554 	/* Register message from Cisco 7941 with load v8.5.3 (protocol 17)
1555 	 *
1556 	 * 00000000   53 45 50 30 30 31 46 39 45 32 36 36 33 36 39 00 SEP001F9E266369.
1557 	 * 00000010   00 00 00 00 00 00 00 00 c0 a8 09 24 73 00 00 00 ...........$s...
1558 	 * 00000020   05 00 00 00 00 00 00 00 11 00 72 85 01 00 00 00 ..........r.....
1559 	 * 00000030   00 00 00 00 00 1f 9e 26 63 69 00 00 00 00 00 00 .......&ci......
1560 	 * 00000040   03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................
1561 	 * 00000050   00 00 00 00 00 00 00 00 00 00 00 00 53 43 43 50 ............SCCP
1562 	 * 00000060   34 31 2e 38 2d 35 2d 33 53 00 00 00 00 00 00 00 41.8-5-3S.......
1563 	 * 00000070   00 00 00 00 00 00 00 00 00 00 00 00             ............
1564 	 */
1565 
1566 	/* Register message from Cisco 6961 with load v8.5.3 (protocol 15)
1567 	 * 00000000 - 53 45 50 30 30 31 31 32 31 46 46 38 41 33 45 00 SEP001121FF8A3
1568 	 * 00000010 - 00 00 00 00 01 00 00 00 53 DA 5E 14 F1 01 00 00 ........S.^...
1569 	 * 00000020 - 28 00 00 00 00 00 00 00 0F 20 70 85 00 00 00 00 (........ p...
1570 	 * 00000030 - 00 00 00 00 30 30 31 31 32 31 46 46 38 41 33 45 ....001121FF8A
1571 	 * 00000040 - 00 00 00 00
1572 	 */
1573 
1574 	/* Register message from Cisco 7960 with v8.1.2 (protocol 11)
1575 	 * 00000000 - 53 45 50 30 30 31 42 35 33 35 43 44 33 44 36 00 SEP001B535CD3D6.
1576 	 * 00000010 - 00 00 00 00 01 00 00 00 0A 0F 0F B2 07 00 00 00 ................
1577 	 * 00000020 - 00 00 00 00 00 00 00 00 0B 00 60 85 00 00 00 00 ................
1578 	 * 00000030 - 00 00 00 00 00 00 00 00 00 00 00 00 52 49 4E 47 ............RING
1579 	 * 00000040 - 00 00 00 00                                     ....
1580 	 */
1581 	struct {
1582 		StationIdentifier sId;										/*!< Station Identifier */
1583 		uint32_t stationIpAddr;										/*c0:a8:09:24=192.168.9.36 *//*!< Station IP Address */
1584 		skinny_devicetype_t lel_deviceType;								/*73:00:00:00=115 *//*!< Device Type as part of SKINNY_DEVICETYPE_* */
1585 		uint32_t lel_maxStreams;									/*05:00:00:00=5 *//*!< Max Streams */
1586 		uint32_t lel_activeStreams;									/*00:00:00:00=0 *//*!< number of active streams */
1587 		StationProtocolFeatures_t protocolFeatures;
1588 		uint32_t lel_maxConferences;
1589 		uint32_t lel_activeConferences;									/*00:00:00:00 *//*!< Unknown */
1590 		uint8_t macAddress[12];										/* *//*!< byte array */
1591 		uint32_t lel_ipV4AddressScope;
1592 		uint32_t lel_maxNumberOfLines;
1593 		char ipv6Address[16];
1594 		uint32_t lel_ipV6AddressScope;
1595 		char loadInfo[32];
1596 		char configVersionStamp[48];									/* New since 11.5 */
1597 
1598 		/* 7910:
1599 		   02 00 00 00 // protocolVer (1st bit)
1600 		   08 00 00 00 == 8
1601 		   00 00 00 00
1602 		   02 00 00 00 == 2
1603 		   ce f1 00 00 // == (61092 / 206 / 241) 1668 dn-size 420
1604 		 */
1605 	} RegisterMessage;											/*!< Register Message Structure */
1606 
1607 	struct {
1608 		// All char arrays are in multiples of 32bit
1609 		struct {
1610 			char deviceName[StationMaxDeviceNameSize];						/*!< Device Name */
1611 			uint32_t lel_stationUserId;								/*!< Station User ID (Not In Use) */
1612 			uint32_t lel_stationInstance;								/*!< Station Instance */
1613 		} station_identifier;										/*!< Station Identifier */
1614 		char userName[StationMaxNameSize];								/*!< User Name */
1615 		char serverName[StationMaxNameSize];								/*!< Server Name */
1616 		uint32_t lel_numberLines;									/*!< Number of Lines configured */
1617 		uint32_t lel_numberSpeedDials;									/*!< Number of SpeedDials configured */
1618 	} ConfigStatMessage;											/*!< Configuration Status Message - Server -> Client */
1619 
1620 	struct {
1621 		// All char arrays are in multiples of 32bit
1622 		struct {
1623 			char deviceName[StationMaxDeviceNameSize];						/*!< Device Name */
1624 			uint32_t lel_stationUserId;								/*!< Station User ID (Not In Use) */
1625 			uint32_t lel_stationInstance;								/*!< Station Instance */
1626 		} station_identifier;										/*!< Station Identifier */
1627 		char userName[StationDynamicNameSize];								/*!< User Name */
1628 		char serverName[StationDynamicNameSize];							/*!< Server Name */
1629 		uint32_t lel_numberLines;									/*!< Number of Lines configured */
1630 		uint32_t lel_numberSpeedDials;									/*!< Number of SpeedDials configured */
1631 	} ConfigStatDynamicMessage;										/*!< Configuration Status Message - Server -> Client */
1632 
1633 	struct {
1634 		uint32_t lel_rtpMediaPort;									/*!< RTP Media Port */
1635 	} IpPortMessage;											/*!< Ip Port Message - Superseded by including the IP Port info in the OpenReceiveChannelAck Message  */
1636 
1637 /*
1638 	struct {
1639 '		uint32_t lel_kpButton;										//!< KeyPad Button
1640 		union {
1641 			struct {
1642 				uint32_t lel_buttonIndex;							//!< Button Indexn on device
1643 			} v3;
1644 			struct {
1645 				uint32_t lel_lineInstance;							//!< Line Instance on device
1646 				uint32_t lel_callReference;							//!< Call Reference - current channel identifier
1647 			} v11;
1648 		}
1649 		uint32_t lel_unknown1;
1650 		uint32_t lel_unknown2;
1651 	} KeypadButtonMessage;											//!< KeyPad Button Message - Client -> Server
1652 */
1653 	struct {
1654 		uint32_t lel_kpButton;										/*!< KeyPad Button */
1655 		uint32_t lel_lineInstance;									/*!< Line Instance on device */
1656 		uint32_t lel_callReference;									/*!< Call Reference - current channel identifier */
1657 		uint32_t lel_unknown1;
1658 		uint32_t lel_unknown2;
1659 	} KeypadButtonMessage;											/*!< KeyPad Button Message - Client -> Server */
1660 
1661 	/* 8945 v22 unpacked */
1662 	// 00000000 - 24 00 00 00 16 00 00 00  04 00 00 00 39 38 30 31  - $...........9801
1663 	// 00000010 - 31 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - 1...............
1664 	// 00000020 - 00 00 00 00 00 00 00 00  01 00 00 00              - ............
1665 
1666 	/* 7970 v22 packed*/
1667 	// 00000000 - 24 00 00 00 16 00 00 00  04 00 00 00 39 38 30 31  - $...........9801
1668 	// 00000010 - 31 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - 1...............
1669 	// 00000020 - 00 00 00 00 00 01 00 00  00 00 00 00              - ............
1670 
1671 	struct {
1672 		union {
1673 			struct {
1674 				char calledParty[StationMaxDirnumSize];						/*!< Called Party */
1675 			} v3;
1676 			struct {
1677 				char calledParty[StationMaxDirnumSize];						/*!< Called Party */
1678 				uint32_t lel_lineInstance;
1679 			} v17;
1680 			/* 8945 */
1681 			struct {										/* packing needed because of char[25] */
1682 				char calledParty[25];								/*!< Called Party */
1683 				uint32_t lel_lineInstance;
1684 			} v18u;
1685 			/* 7970 */
1686 			struct __attribute__ ((__packed__)) {							/* packing needed because of char[25] */
1687 				char calledParty[25];								/*!< Called Party */
1688 				uint32_t lel_lineInstance;
1689 			} v18p;
1690 		};
1691 	} EnblocCallMessage;											/*!< Enbloc Call Message - Client -> Server */
1692 
1693 	struct {
1694 		uint32_t lel_stimulus;										/*!< Stimulus (ENUM: skinny_stimulus) */
1695 		uint32_t lel_stimulusInstance;									/*!< Stimulus Instance (normally set to 1 (except speed dial and line)) */
1696 		uint32_t lel_callReference;									/*!< Call Reference - current channel identifier */
1697 		uint32_t lel_stimulusStatus;									/*!< Stimulus Status */
1698 	} StimulusMessage;											/*!< Stimulus Message - Client -> Server */
1699 
1700 	/*
1701 	 * 7960: 00000000 - 0C 00 00 00 00 00 00 00  06 00 00 00 00 00 00 00  - ................
1702 	 *       00000010 - 00 00 00 00                                       - ....
1703 	 *
1704 	 * 7962: 00000000 - 0C 00 00 00 16 00 00 00  06 00 00 00 00 00 00 00  - ................
1705 	 *       00000010 - 00 00 00 00                                       - ....
1706 	 */
1707 	struct {
1708 		uint32_t lel_lineInstance;
1709 		uint32_t lel_callReference;
1710 	} OffHookMessage;											/*!< Off Hook Message Structure */
1711 
1712 	struct {
1713 		char callingPartyNumber[StationMaxDirnumSize];							/*!< Calling Party Number */
1714 	} OffHookMessageWithCallingPartyMessage;								/*!< Off Hook With Calling Party Number Message Structure
1715 														   Goes Off Hook and provides a Calling Party Number
1716 														   to the PBX used by multiline Devices */
1717 	/*
1718 	 * 7960: 00000000 - 0C 00 00 00 00 00 00 00  07 00 00 00 00 00 00 00  - ................
1719 	 *       00000010 - 00 00 00 00                                       - ....
1720 	 *
1721 	 * 7962: 00000000 - 0C 00 00 00 16 00 00 00  07 00 00 00 00 00 00 00  - ................
1722 	 *       00000010 - 00 00 00 00                                       - ....
1723 	 */
1724 	struct {
1725 		uint32_t lel_buttonIndex;									/*!< Button Index instead of lineInstance */
1726 		uint32_t lel_callReference;
1727 	} OnHookMessage;											/*!< On Hook Message Structure */
1728 
1729 	struct {
1730 		uint32_t lel_lineInstance;
1731 		uint32_t lel_callReference;
1732 	} HookFlashMessage;											/*!< Hook Flash Message Structure */
1733 
1734 	struct {
1735 		skinny_devicetype_t lel_deviceType;								/*!< Device Type as part of SKINNY_DEVICETYPE_* */
1736 		uint32_t lel_numberOfInServiceStreams;								/*!< Number Of In-Service Streams  */
1737 		uint32_t lel_maxStreamsPerConf;									/*!< Maximum Streams Per Configuration */
1738 		uint32_t lel_numberOfOutOfServiceStreams;							/*!< Number of Out-Of_Service Streams */
1739 	} MediaResourceNotification;										/*!< Media Resource Notification - Client -> Server */
1740 
1741 	struct {
1742 		uint32_t lel_lineNumber;									/*!< lineNumber for which Forward should be set */
1743 	} ForwardStatReqMessage;										/*!< Forward Status Request Message - Client -> Server */
1744 
1745 	struct {
1746 		uint32_t lel_speedDialNumber;									/*!< instance on device */
1747 	} SpeedDialStatReqMessage;										/*!< Speed Dial Status Request Message - Client -> Server */
1748 
1749 	struct {
1750 		uint32_t lel_lineNumber;									/*!< instance on device */
1751 	} LineStatReqMessage;											/*!< Line Status Request Message - Client -> Server */
1752 
1753 	struct {
1754 		uint8_t dummy;
1755 	} ConfigStatReqMessage;											/*!< Configuration Status Request Message - Client -> Server */
1756 
1757 	struct {
1758 		uint8_t dummy;
1759 	} TimeDateReqMessage;											/*!< Time Date Request Message  - Client -> Server */
1760 
1761 	struct {
1762 		uint32_t lel_totalButtonCount;									/*!< number of available buttons */
1763 	} ButtonTemplateReqMessage;										/*!< Button Template Request Message - Client -> Server  */
1764 
1765 	struct {
1766 		uint8_t dummy;
1767 	} VersionReqMessage;											/*!< Version Request Message - Client -> Server */
1768 
1769 	struct {
1770 		uint32_t lel_count;										/*!< Count */
1771 		MediaCapabilityStructure caps[SKINNY_MAX_CAPABILITIES];						/*!< MediaCapabilities */
1772 	} CapabilitiesResMessage;										/*!< Capabilities Resource Message - Client -> Server */
1773 
1774 	struct {
1775 		uint32_t portCount;										/*!< portCount contains the total number of RTP ports supported by the device. */
1776 		uint32_t rtpMediaPort[StationMaxPorts];								/*!< RtpMediaPort contains the list of RTP port numbers. */
1777 	} MediaPortListMessage;											/*!< Media Port List Message Structure
1778 														   Used instead of the StationIpPort message for Devices which have multiple RTP stream ports.
1779 														   Devices like media bridges */
1780 
1781 	struct {
1782 		uint8_t dummy;
1783 	} ServerReqMessage;											/*!< Server Request Message - Client -> Server */
1784 
1785 	struct {
1786 		skinny_alarm_t lel_alarmSeverity;								/*!< Alarm Severity Level */
1787 		char text[StationMaxAlarmMessage];								/*!< Alarm Text */
1788 		uint32_t lel_parm1;										/*!< Alarm Parameter 1 */
1789 		uint32_t lel_parm2;										/*!< Alarm Parameter 2 */
1790 	} AlarmMessage;												/*!< Alarm Message - Client -> Server */
1791 
1792 	/* 0x34 FeatureStatReqMessage */
1793 	struct {
1794 		uint32_t lel_featureIndex;									/*!< index on device */
1795 		uint32_t lel_featureCapabilities;								/*!< feature capabilities */
1796 	} FeatureStatReqMessage;										/*!< Feature Stat Request Message - Client -> Server */
1797 
1798 	struct {
1799 		uint32_t lel_serviceURLIndex;									/*!< instance on device */
1800 	} ServiceURLStatReqMessage;										/*!< Service URL Stat Request Message - Client -> Server */
1801 
1802 
1803 	struct {
1804 		uint32_t receptionStatus;									/*!< Reception Status */
1805 		uint32_t passThruPartyID;									/*!< Pass Through Party ID */
1806 	} MulticastMediaReceptionAck;										/*!< Multicast Media Reception Acknowledgement Message - Client -> Server */
1807 
1808 	struct {
1809 		union {
1810 			struct {
1811 				skinny_mediastatus_t lel_mediastatus;						/*!< receiveChanStatus (OK:0x00 / Error: 0x01)*/
1812 				uint32_t bel_ipAddr;								/*!< This field is apparently in big-endian format,
1813 														   even though most other fields are in
1814 														   little-endian format. */
1815 				uint32_t lel_portNumber;							/*!< Port Number */
1816 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
1817 				uint32_t lel_callReference;							/*!< Call Reference */
1818 			} v3;
1819 			struct {
1820 				skinny_mediastatus_t lel_mediastatus;						/*!< Receive Channel Status (OK:0x00 / Error: 0x01)*/
1821 				uint32_t lel_ipv46;								/*!< ipv4 (0)/ ipv6 (1) */
1822 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format,
1823 														   even though most other fields are in
1824 														   little-endian format. */
1825 				uint32_t lel_portNumber;							/*!< Port Number */
1826 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
1827 				uint32_t lel_callReference;							/*!< Call Reference */
1828 			} v17;
1829 		};
1830 	} OpenReceiveChannelAck;										/*!< Open Receive Channel Acknowledgement */
1831 
1832 	struct {
1833 		union {
1834 			struct {
1835 				skinny_mediastatus_t lel_mediastatus;						/*!< receiveChanStatus (OK:0x00 / Error: 0x01)*/
1836 				uint32_t bel_ipAddr;								/*!< This field is apparently in big-endian format,
1837 														   even though most other fields are in
1838 														   little-endian format. */
1839 				uint32_t lel_portNumber;
1840 				uint32_t lel_passThruPartyId;
1841 				uint32_t lel_callReference;
1842 			} v3;
1843 
1844 			struct {
1845 				skinny_mediastatus_t lel_mediastatus;						/*!< status (OK:0x00 / Error: 0x01)*/
1846 				uint32_t lel_ipv46;								/*!< ipv4 (0)/ ipv6 (1) */
1847 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format,
1848 														   even though most other fields are in
1849 														   little-endian format. */
1850 				uint32_t lel_portNumber;
1851 				uint32_t lel_passThruPartyId;
1852 				uint32_t lel_callReference;
1853 			} v17;
1854 		};
1855 	} OpenMultiMediaReceiveChannelAckMessage;
1856 
1857 	struct {
1858 		union {
1859 
1860 			/*
1861 			   00000000 - 9C 02 00 00 00 00 00 00  23 00 00 00 39 38 30 33  - ........#...9803
1862 			   00000010 - 31 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - 1...............
1863 			   00000020 - 00 00 00 00 04 00 00 00  00 00 00 00 2F 00 00 00  - ............/...
1864 			   00000030 - 94 1F 00 00 30 00 00 00  40 20 00 00 00 00 00 00  - ....0...@ ......
1865 			   00000040 - 00 00 00 00 00 00 00 00  6F 00 00 00 4D 4C 51 4B  - ........o...MLQK
1866 			   00000050 - 3D 30 2E 30 30 30 30 3B  4D 4C 51 4B 61 76 3D 30  - =0.0000;MLQKav=0
1867 			   00000060 - 2E 30 30 30 30 3B 4D 4C  51 4B 6D 6E 3D 30 2E 30  - .0000;MLQKmn=0.0
1868 			   00000070 - 30 30 30 3B 4D 4C 51 4B  6D 78 3D 30 2E 30 30 30  - 000;MLQKmx=0.000
1869 			   00000080 - 30 3B 4D 4C 51 4B 76 72  3D 30 2E 39 35 3B 43 43  - 0;MLQKvr=0.95;CC
1870 			   00000090 - 52 3D 30 2E 30 30 30 30  3B 49 43 52 3D 30 2E 30  - R=0.0000;ICR=0.0
1871 			   000000A0 - 30 30 30 3B 49 43 52 6D  78 3D 30 2E 30 30 30 30  - 000;ICRmx=0.0000
1872 			   000000B0 - 3B 43 53 3D 30 3B 53 43  53 3D 30 00 00 00 00 00  - ;CS=0;SCS=0.....
1873 			   000000C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1874 			   000000D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1875 			   000000E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1876 			   000000F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1877 			   00000100 - 00 00 00 00 00 00 00 00  00 00 00 00 00 48 54 54  - .............HTT
1878 			   00000110 - 50 5F 31 32 36 36 32 5F  31 32 37 33 35 00 00 00  - P_12662_12735...
1879 			   00000120 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1880 			   00000130 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1881 			   00000140 - 00 00 00 00 00 00 00 00  8F 12 00 00 00 80 00 00  - ................
1882 			   00000150 - A4 1C 48 00 0A 0F 0F C3  08 00 03 00 94 29 41 00  - ..H..........)A.
1883 			   00000160 - 20 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  -  ...............
1884 			   00000170 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1885 			   00000180 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1886 			   00000190 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1887 			   000001A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1888 			   000001B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1889 			   000001C0 - 00 00 00 00 74 18 4C 76  0A 0F 0F C3 00 00 00 00  - ....t.Lv........
1890 			   000001D0 - 69 96 B8 00 CC 42 48 00  00 00 82 07 0A 00 00 00  - i....BH.........
1891 			   000001E0 - 24 3D 41 00 00 00 01 03  01 00 00 00 0C 00 00 00  - $=A.............
1892 			   000001F0 - 44 97 41 00 84 02 00 00  01 02 00 00 77 B9 94 37  - D.A.........w..7
1893 			   00000200 - 04 00 00 00 03 00 00 00  08 00 00 00 03 01 01 01  - ................
1894 			   00000210 - 01 01 01 01 01 01 01 01  01 01 06 01 01 01 01 01  - ................
1895 			   00000220 - 01 01 01 01 01 01 01 01  01 01 03 00 00 00 00 00  - ................
1896 			   00000230 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1897 			   00000240 - 00 00 00 00 00 00 00 00  00 00 00 00 4C 49 53 54  - ............LIST
1898 			   00000250 - 2E 58 4D 4C 00 00 00 00  00 00 00 00 00 00 00 00  - .XML............
1899 			   00000260 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1900 			   00000270 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1901 			   00000280 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1902 			   00000290 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1903 			   000002A0 - 00 00 00 00                                       - ....
1904 			 */
1905 			struct {
1906 				char DirectoryNumber[StationMaxDirnumSize];					/*!< Directory Number */
1907 				uint32_t lel_CallIdentifier;							/*!< Call Identifier */
1908 				uint32_t lel_StatsProcessingType;						/*!< Stats Processing Type */
1909 				uint32_t lel_SentPackets;							/*!< Sent Packets */
1910 				uint32_t lel_SentOctets;							/*!< Sent Octets */
1911 				uint32_t lel_RecvdPackets;							/*!< Received Packets */
1912 				uint32_t lel_RecvdOctets;							/*!< Received Octets */
1913 				uint32_t lel_LostPkts;								/*!< Lost Packets */
1914 				uint32_t lel_Jitter;								/*!< Jitter */
1915 				uint32_t lel_latency;								/*!< Latency */
1916 				uint32_t lel_QualityStatsSize;
1917 				char QualityStats[600];								/*!< QualityStatistics */
1918 			} v3;											/*!< Connection Statistics Response Message - Server -> Client */
1919 			/*
1920 			   00000000 - A0 02 00 00 14 00 00 00  23 00 00 00 31 33 37 00  - ........#...137.
1921 			   00000010 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1922 			   00000020 - 00 00 00 00 00 00 00 00  03 00 00 00 00 00 00 00  - ................              // unknown1=0, callIdentifier=3, StatsProcessingType=0,
1923 			   00000030 - 99 00 00 00 A0 5F 00 00  91 00 00 00 A0 5A 00 00  - ....._.......Z..              // sendPackets=99=153,sendOctets=A05F=41055, RecvdPackets=91=145, RecvdOctets=A05A=41050
1924 			   00000040 - 00 00 00 00 00 00 00 00  00 00 00 00 74 00 00 00  - ............t...              // lostPkts=0, Jitter=0, Latency=0, unknown2=74
1925 			   00000050 - 4C 6F 67 20 34 37 36 3A  20 6D 6F 73 20 30 2E 30  - Log 476: mos 0.0              //
1926 			   00000060 - 30 30 30 2C 20 61 76 67  4D 6F 73 20 30 2E 30 30  - 000, avgMos 0.00
1927 			   00000070 - 30 30 2C 20 6D 61 78 4D  6F 73 20 30 2E 30 30 30  - 00, maxMos 0.000
1928 			   00000080 - 30 2C 20 6D 69 6E 4D 6F  73 20 30 2E 30 30 30 30  - 0, minMos 0.0000
1929 			   00000090 - 2C 20 43 53 20 30 2C 20  53 43 53 20 30 2C 20 43  - , CS 0, SCS 0, C
1930 			   000000A0 - 43 52 20 30 2E 30 30 30  30 2C 20 49 43 52 20 30  - CR 0.0000, ICR 0
1931 			   000000B0 - 2E 30 30 30 30 2C 20 6D  61 78 43 52 20 30 2E 30  - .0000, maxCR 0.0
1932 			   000000C0 - 30 30 30 0A 00 00 00 00  00 00 00 00 00 00 00 00  - 000.............
1933 			   000000D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1934 			   000000E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1935 			   000000F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1936 			   00000100 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1937 			   00000110 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1938 			   00000120 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1939 			   00000130 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1940 			   00000140 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1941 			   00000150 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1942 			   00000160 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1943 			   00000170 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1944 			   00000180 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1945 			   00000190 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1946 			   000001A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1947 			   000001B0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1948 			   000001C0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1949 			   000001D0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1950 			   000001E0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1951 			   000001F0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1952 			   00000200 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1953 			   00000210 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1954 			   00000220 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1955 			   00000230 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1956 			   00000240 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1957 			   00000250 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1958 			   00000260 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1959 			   00000270 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1960 			   00000280 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1961 			   00000290 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
1962 			   000002A0 - 00 00 00 00 00 00 00 00                           - ........
1963 			 */
1964 			struct {
1965 				char DirectoryNumber[StationMaxDirnumSize];					/*!< Directory Number */
1966 				uint32_t lel_padding;
1967 				uint32_t lel_CallIdentifier;							/*!< Call Identifier */
1968 				uint32_t lel_StatsProcessingType;						/*!< Stats Processing Type */
1969 				uint32_t lel_SentPackets;							/*!< Sent Packets */
1970 				uint32_t lel_SentOctets;							/*!< Sent Octets */
1971 				uint32_t lel_RecvdPackets;							/*!< Received Packets */
1972 				uint32_t lel_RecvdOctets;							/*!< Received Octets */
1973 				uint32_t lel_LostPkts;								/*!< Lost Packets */
1974 				uint32_t lel_Jitter;								/*!< Jitter */
1975 				uint32_t lel_latency;								/*!< Latency */
1976 				uint32_t lel_QualityStatsSize;
1977 				char QualityStats[600];								/*!< QualityStatistics */
1978 			} v20;											/*!< Connection Statistics Response Message - Client -> Server (used when protocol version >= 19) */
1979 
1980 			/*
1981 			   00000000 - B4 00 00 00 16 00 00 00  23 00 00 00 39 38 30 31  - ........#...9801      // DirectoryNumber= 98031
1982 			   00000010 - 31 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - 1...............
1983 			   00000020 - 00 00 00 00 00 00 00 00  01 00 00 00 00 5C 00 00  - .............\..      // callIdentifier=1, StatsProcessingType= 0, sendPackets=5c=92
1984 			   00000030 - 00 D0 3D 00 00 59 00 00  00 CC 3B 00 00 00 00 00  - ..=..Y....;.....      // sendOctets=D03D=53309, RecvdPackets=59=89, RecvdOctets=cc3b=52283
1985 			   00000040 - 00 00 00 00 00 00 00 00  00 6F 00 00 00 4D 4C 51  - .........o...MLQ      // lostPkts=0, Jitter=0, Latency=0, unknown2=6F000000
1986 			   00000050 - 4B 3D 30 2E 30 30 30 30  3B 4D 4C 51 4B 61 76 3D  - K=0.0000;MLQKav=
1987 			   00000060 - 30 2E 30 30 30 30 3B 4D  4C 51 4B 6D 6E 3D 30 2E  - 0.0000;MLQKmn=0.
1988 			   00000070 - 30 30 30 30 3B 4D 4C 51  4B 6D 78 3D 30 2E 30 30  - 0000;MLQKmx=0.00
1989 			   00000080 - 30 30 3B 49 43 52 3D 30  2E 30 30 30 30 3B 43 43  - 00;ICR=0.0000;CC
1990 			   00000090 - 52 3D 30 2E 30 30 30 30  3B 49 43 52 6D 78 3D 30  - R=0.0000;ICRmx=0
1991 			   000000A0 - 2E 30 30 30 30 3B 43 53  3D 30 3B 53 43 53 3D 30  - .0000;CS=0;SCS=0
1992 			   000000B0 - 3B 4D 4C 51 4B 76 72 3D  30 2E 39 35              - ;MLQKvr=0.95
1993 			 */
1994 
1995 #pragma pack(push)
1996 #pragma pack(1)
1997 			struct {
1998 				//char DirectoryNumber[25];
1999 				char DirectoryNumber[28];
2000 				uint32_t lel_CallIdentifier;							/*!< Call Identifier */
2001 				uint8_t lel_StatsProcessingType;						/*!< Stats Processing Type */
2002 				uint32_t lel_SentPackets;							/*!< Sent Packets */
2003 				uint32_t lel_SentOctets;							/*!< Sent Octets */
2004 				uint32_t lel_RecvdPackets;							/*!< Received Packets */
2005 				uint32_t lel_RecvdOctets;							/*!< Received Octets */
2006 				uint32_t lel_LostPkts;								/*!< Lost Packets */
2007 				uint32_t lel_Jitter;								/*!< Jitter */
2008 				uint32_t lel_latency;								/*!< Latency */
2009 				uint32_t lel_QualityStatsSize;
2010 				char QualityStats[600];								/*!< QualityStatistics */
2011 			} v22;											/*!< Connection Statistics Response Message - Client -> Server (used when protocol version >= 22) */
2012 #pragma pack(pop)
2013 		};
2014 	} ConnectionStatisticsRes;
2015 
2016 	struct {
2017 		uint8_t dummy;
2018 	} SoftKeySetReqMessage;											/*!< Soft Key Set Request Message Structure */
2019 
2020 	struct {
2021 		uint32_t lel_softKeyEvent;									/*!< Soft Key Event */
2022 		uint32_t lel_lineInstance;									/*!< Line Instance on device (indicated callplane) */
2023 		uint32_t lel_callReference;									/*!< Call Reference ID */
2024 	} SoftKeyEventMessage;
2025 
2026 	struct {
2027 		uint32_t lel_UnregisterReason;
2028 	} UnregisterMessage;											/*!< Unregister Message Structure */
2029 
2030 	struct {
2031 		uint8_t dummy;
2032 	} SoftKeyTemplateReqMessage;										/*!< Soft Key Template Request Message Structure */
2033 
2034 	struct {
2035 		StationIdentifier sId;										/*!< Station Identifier */
2036 		uint32_t lel_stationIpAddr;									/*!< Station IP Address */
2037 		skinny_devicetype_t lel_deviceType;								/*!< Device Type as part of SKINNY_DEVICETYPE_* */
2038 		char ipv6Address[16];
2039 		uint32_t unknown;										/*!< Active Call ?? */
2040 	} RegisterTokenRequest;											/*!< Register Token Request */
2041 
2042 	struct {
2043 		union{
2044 			struct {
2045 				uint32_t lel_conferenceId;							/*!< Conference ID */
2046 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2047 				uint32_t bel_remoteIpAddr;							/*!< This field is apparently in big-endian */
2048 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2049 				uint32_t lel_callRef;								/*!< Call Reference */
2050 			} v3;
2051 			struct {
2052 				uint32_t lel_conferenceId;							/*!< Conference ID */
2053 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2054 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2055 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format, even though most other fields are in little-endian format. */
2056 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2057 				uint32_t lel_callRef;								/*!< Call Reference */
2058 			} v16;
2059 		};
2060 	} MediaTransmissionFailure;
2061 
2062 	struct {
2063 		uint32_t lel_hsMode;										/*!< Head Set Mode */
2064 	} HeadsetStatusMessage;											/*!< Headset Status Message Structure */
2065 
2066 	struct {
2067 		uint32_t lel_keepAliveInterval;									/*!< Keep Alive Interval to the Primary Server */
2068 		char dateTemplate[StationDateTemplateSize];							/*!< Date Template */
2069 		uint8_t alignmentPadding;									/*!< Filler 1 */
2070 		uint32_t lel_secondaryKeepAliveInterval;							/*!< Keep Alive Interval to the Secundairy Server */
2071 		StationProtocolFeatures_t protocolFeatures;
2072 	} RegisterAckMessage;											/*!< Register Acknowledgement Message Structure */
2073 
2074 	struct {
2075 		uint32_t lel_tone;										/*!< Tone (SKINNY_TONE ENUM)*/
2076 		uint32_t lel_toneDirection;									/*!< Tone Direction (0 = User, 1=Network, 2=Both) */
2077 		uint32_t lel_lineInstance;									/*!< Line Instance */
2078 		uint32_t lel_callReference;									/*!< Call Reference */
2079 	} StartToneMessage;											/*!< Start Tone Message Structure */
2080 
2081 	struct {
2082 		/* protocol v3 */
2083 		uint32_t lel_lineInstance;									/*!< Line Instance */
2084 		uint32_t lel_callReference;									/*!< Call Reference */
2085 		/* protocol > v11 */
2086 		uint32_t lel_tone;										/*!< Tone (SKINNY_TONE ENUM)*/
2087 	} StopToneMessage;
2088 
2089 	struct {
2090 		uint32_t lel_ringMode;										/*!< Ring Mode */
2091 		uint32_t lel_ringDuration;									/*!< Ring Duration (Normal:0x01 /Single:0x02) */
2092 		uint32_t lel_lineInstance;									/*!< Line Instance */
2093 		uint32_t lel_callReference;									/*!< Call Reference */
2094 	} SetRingerMessage;											/*!< Set Ringer Message Structure */
2095 
2096 	struct {
2097 		uint32_t lel_stimulus;										/*!< Stimulus */
2098 		uint32_t lel_stimulusInstance;									/*!< Stimulus Instance */
2099 		uint32_t lel_lampMode;										/*!< Lamp Mode (MWI) */
2100 	} SetLampMessage;											/*!< Set Lamp Message Structure */
2101 
2102 	struct {
2103 		uint8_t dummy;
2104 	} SetHookFlashDetectMessage;											/*!< Set Hkf Detect Message Structure */
2105 
2106 	struct {
2107 		uint32_t lel_speakerMode;									/*!< Spreaker Mode */
2108 	} SetSpeakerModeMessage;										/*!< Set Speaker Mode Message Structure */
2109 
2110 	struct {
2111 		uint32_t lel_micMode;										/*!< Microphone Mode */
2112 	} SetMicroModeMessage;											/*!< Set Microphone Mode Message Structure */
2113 
2114 	struct {
2115 		union {
2116 			struct {
2117 				uint32_t lel_conferenceId;							/*!< Conference ID */
2118 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2119 				uint32_t bel_remoteIpAddr;							/*!< This field is apparently in big-endian
2120 														   format, even though most other fields are
2121 														   little-endian. */
2122 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2123 				uint32_t lel_millisecondPacketSize;						/*!< Packet Size per MilliSecond */
2124 				//uint32_t lel_payloadType;							/*!< Media_PayloadType */
2125 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2126 				uint32_t lel_precedenceValue;							/*!< Precedence Value */
2127 				uint32_t lel_ssValue;								/*!< Silence Suppression Value */
2128 				uint32_t lel_maxFramesPerPacket;						/*!< Maximum Frames per Packet */
2129 				uint32_t lel_g723BitRate;							/*!< only used with G.723 payload */
2130 				uint32_t lel_callReference;							/*!< Conference ID 1 */
2131 				EncryptionInfo encryptioninfo;
2132 				/* protocol v11 mods */
2133 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2134 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2135 				uint32_t lel_RFC2833Type;							/*!< RTP DTMF PayLoad (this is often set to 0x65 (101)) */
2136 				uint32_t lel_dtmfType;								/*!< RTP Type */
2137 				/* protocol v11 fields */
2138 				uint32_t lel_mixingMode;
2139 				uint32_t lel_direction;
2140 			} v3;
2141 
2142 			/* StartMediaTransmission v17
2143 			 * 0000   88 00 00 00 11 00 00 00 8a 00 00 00 54 ae 9d 01  ............T...
2144 			 * 0010   53 00 00 01 00 00 00 00 c0 a8 09 2c 00 00 00 00  S..........,....
2145 			 * 0020   00 00 00 00 00 00 00 00 c6 4c 00 00 14 00 00 00  .........L......
2146 			 * 0030   04 00 00 00 b8 00 00 00 00 00 00 00 00 00 00 00  ................
2147 			 * 0040   00 00 00 00 54 ae 9d 01 00 00 00 00 00 00 00 00  ....T...........
2148 			 * 0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2149 			 * 0060   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2150 			 * 0070   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2151 			 * 0080   00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00  ................
2152 			 */
2153 			struct {
2154 				uint32_t lel_conferenceId;							/*!< Conference ID */
2155 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2156 				uint32_t lel_ipv46;								/*!< ipv4 (0)/ ipv6 (1) */
2157 				char bel_remoteIpAddr[16];							/*!< This field is apparently in big-endian
2158 														   format, even though most other fields are
2159 														   little-endian. */
2160 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2161 				uint32_t lel_millisecondPacketSize;						/*!< Packet Size per Millisecond */
2162 				//uint32_t lel_payloadType;							/*!< Media_PayloadType */
2163 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2164 				uint32_t lel_precedenceValue;							/*!< Precedence Value */
2165 				uint32_t lel_ssValue;								/*!< Silence Suppression Value */
2166 				uint32_t lel_maxFramesPerPacket;						/*!< Maximum Frames per Packet */
2167 				uint32_t lel_g723BitRate;							/*!< G.723 BitRate (only used with G.723 payload) */
2168 				uint32_t lel_callReference;							/*!< Conference ID 1 */
2169 				EncryptionInfo encryptioninfo;
2170 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2171 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2172 				uint32_t lel_RFC2833Type;							/*!< RTP DTMP PayLoad (this is often set to 0x65 (101)) */
2173 				uint32_t lel_dtmfType;								/*!< RTP Timeout (this is set to 0x0A) */
2174 				uint32_t lel_mixingMode;
2175 				uint32_t lel_direction;
2176 			} v17;
2177 
2178 			struct {
2179 				uint32_t lel_conferenceId;							/*!< Conference ID */
2180 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2181 				uint32_t lel_ipv46;								/*!< ipv4 (0)/ ipv6 (1) */
2182 				char bel_remoteIpAddr[16];							/*!< This field is apparently in big-endian
2183 														   format, even though most other fields are
2184 														   little-endian. */
2185 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2186 				uint32_t lel_millisecondPacketSize;						/*!< Packet Size per Millisecond */
2187 				//uint32_t lel_payloadType;							/*!< Media_PayloadType */
2188 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2189 				uint32_t lel_precedenceValue;							/*!< Precedence Value */
2190 				uint32_t lel_ssValue;								/*!< Silence Suppression Value */
2191 				uint32_t lel_maxFramesPerPacket;						/*!< Maximum Frames per Packet */
2192 				uint32_t lel_g723BitRate;							/*!< G.723 BitRate (only used with G.723 payload) */
2193 				uint32_t lel_callReference;							/*!< Conference ID 1 */
2194 				EncryptionInfo encryptioninfo;
2195 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2196 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2197 				uint32_t lel_RFC2833Type;							/*!< RTP DTMP PayLoad (this is often set to 0x65 (101)) */
2198 				uint32_t lel_dtmfType;								/*!< RTP Timeout (this is set to 0x0A) */
2199 				uint32_t lel_mixingMode;
2200 				uint32_t lel_direction;
2201 				skinny_latentCapsInfo_t latentCapsInfo;
2202 			} v22;
2203 		};
2204 	} StartMediaTransmission;										/*!< Start Media Transmission Structure */
2205 
2206 	struct {
2207 		uint32_t lel_conferenceId;									/*!< Conference ID */
2208 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2209 		uint32_t lel_callReference;									/*!< Conference ID 1 */
2210 		uint32_t lel_portHandlingFlag;									/*!< 0 = Close Port, 1 = Keep Port Open */
2211 	} StopMediaTransmission;										/*!< Stop Media Transmission Structure */
2212 
2213 	struct {
2214 		uint32_t lel_conferenceId;									/*!< Conference ID */
2215 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2216 		uint32_t lel_callReference;									/*!< Conference ID 1 */
2217 		uint32_t lel_portHandlingFlag;									/*!< 0 = Close Port, 1 = Keep Port Open */
2218 	} StopMultiMediaTransmission;
2219 
2220 	struct {
2221 		uint8_t dummy;
2222 	} StartMediaReception;
2223 
2224 	struct {
2225 		uint32_t lel_conferenceId;									/*!< Conference ID 1 */
2226 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2227 	} StopMediaReception;											/*!< Stop Media Reception Structure */
2228 
2229 	struct {
2230 		char callingPartyName[StationMaxNameSize];							/*!< Calling Party Name */
2231 		char callingParty[StationMaxDirnumSize];							/*!< Calling Party ID */
2232 		char calledPartyName[StationMaxNameSize];							/*!< Called Party Name */
2233 		char calledParty[StationMaxDirnumSize];								/*!< Called Party ID */
2234 		uint32_t lel_lineInstance;									/*!< Line Instance */
2235 		uint32_t lel_callReference;									/*!< Call Reference */
2236 		uint32_t lel_callType;										/*!< Call Type (INBOUND=1, OUTBOUND=2, FORWARD=3) */
2237 		char originalCalledPartyName[StationMaxNameSize];						/*!< Original Calling Party Name */
2238 		char originalCalledParty[StationMaxDirnumSize];							/*!< Original Calling Party ID */
2239 		char lastRedirectingPartyName[StationMaxNameSize];						/*!< Original Called Party Name */
2240 		char lastRedirectingParty[StationMaxDirnumSize];						/*!< Original Called Party ID */
2241 		uint32_t lel_originalCdpnRedirectReason;								/*!< Original Called Party Redirect Reason */
2242 		uint32_t lel_lastRedirectingReason;									/*!< Last Redirecting Reason */
2243 		char cgpnVoiceMailbox[StationMaxDirnumSize];							/*!< Calling Party Voicemail Box */
2244 		char cdpnVoiceMailbox[StationMaxDirnumSize];							/*!< Called Party Voicemail Box */
2245 		char originalCdpnVoiceMailbox[StationMaxDirnumSize];						/*!< Original Called Party VoiceMail Box */
2246 		char lastRedirectingVoiceMailbox[StationMaxDirnumSize];						/*!< Last Redirecting VoiceMail Box */
2247 		uint32_t lel_callInstance;									/*!< Call Instance */
2248 		uint32_t lel_callSecurityStatus;								/*!< Call Security Status */
2249 		uint32_t partyPIRestrictionBits;								/*!< Party PI Restriction Bits (
2250 														   0 RestrictCallingPartyName
2251 														   1 RestrictCallingPartyNumber
2252 														   2 RestrictCalledPartyName
2253 														   3 RestrictCalledPartyNumber
2254 														   4 RestrictOriginalCalledPartyName
2255 														   5 RestrictOriginalCalledPartyNumber
2256 														   6 RestrictLastRedirectPartyName
2257 														   7 RestrictLastRedirectPartyNumber) */
2258 	} CallInfoMessage;											/*!< Call Info Message Structure */
2259 
2260  	struct {
2261  		union {
2262  			struct {
2263 				char calledParty[StationMaxDirnumSize];						/*!< Called Party */
2264 				uint32_t lel_lineInstance;							/*!< Line Instance */
2265 				uint32_t lel_callReference;							/*!< Call Reference */
2266  			} v3;
2267 #pragma pack(push)
2268 #pragma pack(1)
2269  			struct {
2270 				char calledParty[StationDynamicDirnumSize];					/*!< Called Party */
2271 				uint32_t lel_lineInstance;							/*!< Line Instance */
2272 				uint32_t lel_callReference;							/*!< Call Reference */
2273  			} v18;
2274 #pragma pack(pop)
2275  		};
2276  	} DialedNumberMessage;											/*!< Dialed Number Message Structure */
2277 
2278  	struct {
2279 		union {
2280 			struct {
2281 				uint32_t lel_activeForward;							/*!< Status (0=inactive, 1=active, 4=cm ??) */
2282 				uint32_t lel_lineNumber;							/*!< Line Number */
2283 				uint32_t lel_forwardAllActive;							/*!< Call Forward All Status */
2284 				char cfwdallnumber[StationMaxDirnumSize];					/*!< Call Forward All Number */
2285 				uint32_t lel_forwardBusyActive;							/*!< Call Forward on Busy Status */
2286 				char cfwdbusynumber[StationMaxDirnumSize];					/*!< Call Forward on Busy Number */
2287 				uint32_t lel_forwardNoAnswerActive;						/*!< Call Forward on No-Answer Status */
2288 				char cfwdnoanswernumber[StationMaxDirnumSize];					/*!< Call Forward on No-Answer Number */
2289 			} v3;
2290 #pragma pack(push)
2291 #pragma pack(1)
2292 			struct {
2293 				uint32_t lel_activeForward;							/*!< Status (0=inactive, 1=active, 4=cm ??) */
2294 				uint32_t lel_lineNumber;							/*!< Line Number */
2295 				uint32_t lel_forwardAllActive;							/*!< Call Forward All Status */
2296 				char cfwdallnumber[StationDynamicDirnumSize];					/*!< Call Forward All Number */
2297 				uint32_t lel_forwardBusyActive;							/*!< Call Forward on Busy Status */
2298 				char cfwdbusynumber[StationDynamicDirnumSize];					/*!< Call Forward on Busy Number */
2299 				uint32_t lel_forwardNoAnswerActive;						/*!< Call Forward on No-Answer Status */
2300 				char cfwdnoanswernumber[StationDynamicDirnumSize];				/*!< Call Forward on No-Answer Number */
2301 			} v18;
2302 #pragma pack(pop)
2303 		};
2304  	} ForwardStatMessage;											/*!< Forward Status Message Structure */
2305 
2306 	struct {
2307 		uint32_t lel_speedDialNumber;									/*!< SpeedDial Number */
2308 		char speedDialDirNumber[StationMaxDirnumSize];							/*!< SpeedDial Dir Number */
2309 		char speedDialDisplayName[StationMaxNameSize];							/*!< SpeedDial Display Name */
2310 	} SpeedDialStatMessage;											/*!< SpeedDial Status Message Structure */
2311 
2312 	struct {
2313 		uint32_t lel_lineNumber;									/*!< Line Number */
2314 		char lineDirNumber[StationMaxDirnumSize];							/*!< Line Dir Number */
2315 		char lineFullyQualifiedDisplayName[StationMaxNameSize];						/*!< Line Fully Qualified Display Name */
2316 		//char lineDisplayName[StationMaxButtonTemplateNameSize];					/*!< Line Display Name */
2317 		char lineDisplayName[StationMaxNameSize];
2318 		uint32_t lel_lineDisplayOptions;
2319 	} LineStatMessage;											/*!< Line Status Messages Structure */
2320 
2321 	struct {
2322 		uint32_t lel_year;										/*!< Year */
2323 		uint32_t lel_month;										/*!< Month */
2324 		uint32_t lel_dayOfWeek;										/*!< Day of the Week (\todo Starting su=0|1) */
2325 		uint32_t lel_day;										/*!< Day */
2326 		uint32_t lel_hour;										/*!< Hour */
2327 		uint32_t lel_minute;										/*!< Minute */
2328 		uint32_t lel_seconds;										/*!< Seconds */
2329 		uint32_t lel_milliseconds;									/*!< MilliSeconds */
2330 		uint32_t lel_systemTime;									/*!< System Time */
2331 	} DefineTimeDate;											/*!< Definition of Date/Time Structure */
2332 
2333 	struct {
2334 		union {
2335 			struct {
2336 				uint32_t bel_ipAddr;
2337 				uint32_t lel_sessionType;							/*!< SKINNY SESSION TYPE:
2338 															Chat:0x01,
2339 															Whiteboard:0x02,
2340 															ApplicationSharing: 0x04,
2341 															FileTransfer:0x08,
2342 															Video:0x10 // 10 !??!
2343 														*/
2344 			} v3;
2345 			struct {
2346 				uint32_t lel_ipv46;
2347 				char bel_ipAddr[16];
2348 				uint32_t lel_sessionType;							/*!< SKINNY SESSION TYPE: Chat:0x01, Whiteboard:0x02, ApplicationSharing: 0x04, FileTransfer:0x08, Video:0x10 */
2349 			} v16;
2350 		};
2351 	} StartSessionTransmission;										/*!< Start Session Transmission Structure */
2352 
2353 	struct {
2354 		union {
2355 			struct {
2356 				uint32_t bel_ipAddr;
2357 				uint32_t lel_sessionType;							/*!< SKINNY SESSION TYPE:
2358 															Chat:0x01,
2359 															Whiteboard:0x02,
2360 															ApplicationSharing: 0x04,
2361 															FileTransfer:0x08,
2362 															Video:0x10 // 10 !??!
2363 														*/
2364 			} v3;
2365 			struct {
2366 				uint32_t lel_ipv46;
2367 				char bel_ipAddr[16];
2368 				uint32_t lel_sessionType;							/*!< SKINNY SESSION TYPE: Chat:0x01, Whiteboard:0x02, ApplicationSharing: 0x04, FileTransfer:0x08, Video:0x10 */
2369 			} v16;
2370 		};
2371 	} StopSessionTransmission;										/*!< Stop Session Transmission Structure */
2372 
2373 	struct {
2374 		uint32_t lel_buttonOffset;									/*!< Button OffSet */
2375 		uint32_t lel_buttonCount;									/*!< Button Count */
2376 		uint32_t lel_totalButtonCount;									/*!< Total Number of Buttons */
2377 		StationButtonDefinition definition[StationMaxButtonTemplateSize];				/*!< Station Button Definition */
2378 	} ButtonTemplateMessage;										/*!< Button Template Message Structure */
2379 
2380 	struct {
2381 		uint32_t lel_buttonOffset;									/*!< Button OffSet */
2382 		uint32_t lel_buttonCount;									/*!< Button Count */
2383 		uint32_t lel_totalButtonCount;									/*!< Total Number of Buttons */
2384 		uint32_t dummy[1];											/*!< Station Button Definition */
2385 	} ButtonTemplateMessageDynamic;										/*!< Identical to ButtonTemplateMessage */
2386 
2387 	struct {
2388 		char requiredVersion[StationMaxVersionSize];							/*!< Required Version */
2389 	} VersionMessage;											/*!< Version Message Structure */
2390 
2391 	struct {
2392 		char displayMessage[StationMaxDisplayTextSize];							/*!< Display Message */
2393 		/*              uint32_t        lel_displayTimeout; *//*!< Display Timeout */
2394 	} DisplayTextMessage;											/*!< Display Text Message */
2395 
2396 	struct {
2397 		uint32_t unknown;
2398 	} ClearDisplay;
2399 
2400 	struct {
2401 		uint8_t dummy;
2402 	} CapabilitiesReqMessage;										/*!< Capabilities Reqest Message Structure */
2403 
2404 	struct {
2405 		uint8_t dummy;
2406 	} EnunciatorCommandMessage;										/*!< Enunciator Command Message Structure */
2407 
2408 	struct {
2409 		char text[StationMaxDisplayTextSize];								/*!< Rejection Text */
2410 	} RegisterRejectMessage;										/*!< Register Reject Message Structure */
2411 
2412 	struct {
2413 		union {
2414 			struct {
2415 				ServerIdentifier server[StationMaxServers];							/*!< Server Identifier */
2416 				uint32_t serverListenPort[StationMaxServers];							/*!< Server is Listening on Port */
2417 				uint32_t serverIpAddr[StationMaxServers];							/*!< Server IP Port */
2418 			} v3;
2419 			struct {
2420 				ServerIdentifier server[StationMaxServers];							/*!< Server Identifier */
2421 				uint32_t serverListenPort[StationMaxServers];							/*!< Server is Listening on Port */
2422 				struct {
2423 					uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2424 					char bel_ipAddr[16];								/*!< Multicast IP Address */
2425 				} serverIpAddr[StationMaxServers];
2426 			} v17;
2427 		};
2428 	} ServerResMessage;											/*!< Server Result Message Structure */
2429 
2430 	struct {
2431 		uint32_t lel_resetType;										/*!< Reset Type (1=Reset, 2=Restart, 3=ApplyConfig) */
2432 	} Reset;												/*!< Reset Message Structure */
2433 
2434 	struct {
2435 		uint8_t dummy;
2436 	} KeepAliveAckMessage;											/*!< Keep Aliver Acknowledgement Message Structure */
2437 
2438 	struct {
2439 		union {
2440 			struct {
2441 				uint32_t lel_conferenceID;							/*!< Conference ID */
2442 				uint32_t lel_passThruPartyID;							/*!< Pass Through Party ID */
2443 				uint32_t bel_ipAddr;								/*!< Multicast IP Address */
2444 				uint32_t lel_Port;								/*!< Multicast Port */
2445 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2446 				skinny_codec_t lel_payloadCapability;						/*!< PayLoad Capability */
2447 				uint32_t lel_echoCancelType;							/*!< Echo Cancelation Type */
2448 				uint32_t lel_g723BitRate;							/*!< G.723 Bit Rate (only applies to G.723 */
2449 			} v3;
2450 			struct {
2451 				uint32_t lel_conferenceID;							/*!< Conference ID */
2452 				uint32_t lel_passThruPartyID;							/*!< Pass Through Party ID */
2453 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2454 				char bel_ipAddr[16];								/*!< Multicast IP Address */
2455 				uint32_t lel_Port;								/*!< Multicast Port */
2456 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2457 				skinny_codec_t lel_payloadCapability;						/*!< PayLoad Capability */
2458 				uint32_t lel_echoCancelType;							/*!< Echo Cancelation Type */
2459 				uint32_t lel_g723BitRate;							/*!< G.723 Bit Rate (only applies to G.723 */
2460 			} v16;
2461 		};
2462 	} StartMulticastMediaReception;										/*!< Start Multicast Media Reception Message Structure */
2463 
2464 	struct {
2465 		union {
2466 			struct {
2467 				uint32_t lel_conferenceID;							/*!< Conference ID */
2468 				uint32_t lel_passThruPartyID;							/*!< Pass Through Party ID */
2469 				uint32_t bel_ipAddr;								/*!< Multicast IP Address */
2470 				uint32_t lel_Port;								/*!< Multicast Port */
2471 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2472 				skinny_codec_t lel_payloadCapability;						/*!< PayLoad Capability */
2473 				uint32_t lel_precedenceValue;							/*!< Precedence Value */
2474 				uint32_t lel_silenceSuppression;						/*!< Silence Suppression */
2475 				uint32_t lel_maxFramesPerPacket;						/*!< Max Frames Per Packet */
2476 				uint32_t lel_g723BitRate;							/*!< G.723 Bit Rate (only applies to G.723 */
2477 			} v3;
2478 			struct {
2479 				uint32_t lel_conferenceID;							/*!< Conference ID */
2480 				uint32_t lel_passThruPartyID;							/*!< Pass Through Party ID */
2481 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2482 				char bel_ipAddr[16];								/*!< Multicast IP Address */
2483 				uint32_t lel_Port;								/*!< Multicast Port */
2484 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2485 				skinny_codec_t lel_payloadCapability;						/*!< PayLoad Capability */
2486 				uint32_t lel_precedenceValue;							/*!< Precedence Value */
2487 				uint32_t lel_silenceSuppression;						/*!< Silence Suppression */
2488 				uint32_t lel_maxFramesPerPacket;						/*!< Max Frames Per Packet */
2489 				uint32_t lel_g723BitRate;							/*!< G.723 Bit Rate (only applies to G.723 */
2490 			} v16;
2491 		};
2492 	} StartMulticastMediaTransmission;									/*!< Start Multicast Media Transmission Message Structure */
2493 
2494 	/*
2495 	 * based on miscCommandType we have other struct
2496 	 * following the Miscellaneous Command Message
2497 	 */
2498 
2499 	struct {
2500 		uint32_t lel_conferenceId;									/*!< Conference ID */
2501 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2502 		uint32_t lel_callReference;									/*!< Call Reference */
2503 		skinny_miscCommandType_t lel_miscCommandType;							/*!< Miscellaneous Command Type
2504 															videoFreezePicture: 		0x00
2505 															videoFastUpdatePicture:		0x01
2506 															videoFastUpdateGOB: 		0x02
2507 															videoFastUpdateMB: 		0x03
2508 															lostPicture: 			0x04
2509 															lostPartialPicture: 		0x05
2510 															recoveryReferencePicture:	0x06
2511 															temporalSpatialTradeOff:	0x07
2512 														*/
2513 		union {
2514 			uint32_t lel_none;
2515 
2516 			struct { /* this one seems to be empty */
2517 			} videoFastUpdatePicture;
2518 
2519 			struct {
2520 				uint32_t lel_firstGOB;								/* GOB: Group of Pictures */
2521 				uint32_t lel_numberOfGOBs;
2522 			} videoFastUpdateGOB;
2523 
2524 			struct {
2525 				uint32_t lel_firstGOB;
2526 				uint32_t lel_firstMB;
2527 				uint32_t lel_numberOfMBs;
2528 			} videoFastUpdateMB;
2529 
2530 			struct {
2531 				uint32_t lel_pictureNumber;
2532 				uint32_t lel_longTermPictureIndex;
2533 			} lostPicture;
2534 
2535 			struct {
2536 				struct {
2537 					uint32_t lel_pictureNumber;
2538 					uint32_t lel_longTermPictureIndex;
2539 				} pictureReference;
2540 				uint32_t lel_firstMB;
2541 				uint32_t lel_numberOfMBs;
2542 			} lostPartialPicture;
2543 
2544 			struct {
2545 				uint32_t lel_PictureCount;
2546 				struct {
2547 					uint32_t lel_pictureNumber;
2548 					uint32_t lel_longTermPictureIndex;
2549 				} pictureReference[4];
2550 			} recoveryReferencePicture;
2551 
2552 			uint32_t lel_temporalSpatialTradeOff;
2553 		} data;
2554 	} MiscellaneousCommandMessage;										/*!< Miscellaneous Command Message Structure */
2555 
2556 	struct {
2557 		uint32_t lel_conferenceID;									/*!< Conference ID */
2558 		uint32_t lel_passThruPartyID;									/*!< Pass Through Party ID */
2559 		uint32_t lel_callReference;
2560 	} StopMulticastMediaReception;										/*!< Stop Multicast Media Reception Message Structure */
2561 
2562 	struct {
2563 		uint32_t lel_conferenceID;									/*!< Conference ID */
2564 		uint32_t lel_passThruPartyID;									/*!< Pass Through Party ID */
2565 		uint32_t lel_callReference;
2566 	} StopMulticastMediaTransmission;									/*!< Stop Multicast Media Transmission Message Structure */
2567 
2568 	struct {
2569 		union {
2570 			/* this is v11 message from ccm7
2571 			 * 0000   60 00 00 00 00 00 00 00 05 01 00 00 5b ae 9d 01  `...........[...
2572 			 * 0010   5a 00 00 01 14 00 00 00 04 00 00 00 00 00 00 00  Z...............
2573 			 * 0020   00 00 00 00 5b ae 9d 01 00 00 00 00 00 00 00 00  ....[...........
2574 			 * 0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2575 			 * 0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2576 			 * 0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2577 			 * 0060   00 00 00 00 0a 00 00 00                          ........
2578 			 */
2579 			struct {
2580 				uint32_t lel_conferenceId;							/*!< Conference ID */
2581 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2582 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2583 				//uint32_t lel_payloadType;							/*!< Media_Payload Type */
2584 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2585 				uint32_t lel_vadValue;								/*!< Voice Activity Detection Value */
2586 				uint32_t lel_g723BitRate;							/*!< G.723 Payload (Only applies to G.723) */
2587 				/* protocol version 5 fields */
2588 				uint32_t lel_callReference;							/*!< Conference ID */
2589 				EncryptionInfo encryptioninfo;
2590 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2591 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2592 				uint32_t lel_RFC2833Type;							/*!< RTP DTMF PayLoad (this is often set to 0x65 (101)) */
2593 				uint32_t lel_dtmfType;								/*!< RTP Timeout (this is always 0x0A) */
2594 				/* protocol version 15 fields */
2595 				uint32_t lel_mixingMode;
2596 				uint32_t lel_direction;
2597 				uint32_t bel_remoteIpAddr;							/*!< Ipv4 Address */
2598 				uint32_t lel_remotePortNumber;							/*!< this is always 0xFA0 */
2599 			} v3;
2600 
2601 			/*      OpenReceiveChannel v17
2602 			 * 0000   84 00 00 00 11 00 00 00 05 01 00 00 ec bc 68 01  ..............h.
2603 			 * 0010   07 00 00 01 14 00 00 00 04 00 00 00 00 00 00 00  ................
2604 			 * 0020   00 00 00 00 ec bc 68 01 00 00 00 00 00 00 00 00  ......h.........
2605 			 * 0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2606 			 * 0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2607 			 * 0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
2608 			 * 0060   00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00  ................
2609 			 * 0070   00 00 00 00 c0 a8 09 2c 00 00 00 00 00 00 00 00  .......,........
2610 			 * 0080   00 00 00 00 a0 0f 00 00 00 00 00 00              ............
2611 			 */
2612 			struct {
2613 				uint32_t lel_conferenceId;							/*!< Conference ID */
2614 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2615 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2616 				//uint32_t lel_payloadType;							/*!< Media_Payload Type */
2617 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2618 				uint32_t lel_vadValue;								/*!< Voice Activity Detection Value */
2619 				uint32_t lel_g723BitRate;							/*!< G.723 Payload (Only applies to G.723) */
2620 				/* protocol version 5 fields */
2621 				uint32_t lel_callReference;							/*!< Conference ID */
2622 				EncryptionInfo encryptioninfo;
2623 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2624 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2625 				uint32_t lel_RFC2833Type;							/*!< RTP DTMF PayLoad (this is often set to 0x65 (101)) */
2626 				uint32_t lel_dtmfType;								/*!< RTP Timeout (this is always 0x0A) */
2627 				/* protocol version 15 fields */
2628 				uint32_t lel_mixingMode;
2629 				uint32_t lel_direction;
2630 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2631 				char bel_remoteIpAddr[16];
2632 				uint32_t lel_remotePortNumber;							/*!< this is always 0xFA0 */
2633 				skinny_ipAddr_t lel_requestedIpAddrType;					/*!< Unknown */
2634 			} v17;
2635 
2636 			struct {
2637 				uint32_t lel_conferenceId;							/*!< Conference ID */
2638 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2639 				uint32_t lel_millisecondPacketSize;						/*!< Millisecond Packet Size */
2640 				//uint32_t lel_payloadType;							/*!< Media_Payload Type */
2641 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */
2642 				uint32_t lel_vadValue;								/*!< Voice Activity Detection Value */
2643 				uint32_t lel_g723BitRate;							/*!< G.723 Payload (Only applies to G.723) */
2644 				/* protocol version 5 fields */
2645 				uint32_t lel_callReference;							/*!< Conference ID */
2646 				EncryptionInfo encryptioninfo;
2647 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2648 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2649 				uint32_t lel_RFC2833Type;							/*!< RTP DTMF PayLoad (this is often set to 0x65 (101)) */
2650 				uint32_t lel_dtmfType;								/*!< RTP Timeout (this is always 0x0A) */
2651 				/* protocol version 15 fields */
2652 				uint32_t lel_mixingMode;
2653 				uint32_t lel_direction;
2654 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2655 				char bel_remoteIpAddr[16];
2656 				uint32_t lel_remotePortNumber;							/*!< this is always 0xFA0 */
2657 				skinny_ipAddr_t lel_requestedIpAddrType;					/*!< Unknown */
2658 				uint32_t lel_audioLevelAdjustment;
2659 				skinny_latentCapsInfo_t latentCapsInfo;
2660 			} v22;
2661 		};
2662 	} OpenReceiveChannel;											/*!< Open Receive Channel Message Structure */
2663 
2664 	struct {
2665 		uint32_t lel_conferenceId;									/*!< Conference ID */
2666 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2667 		/* version 5 fields */
2668 		uint32_t lel_callReference;									/*!< Conference ID 1 */
2669 		uint32_t lel_portHandlingFlag;									/*!< 0 = Close Port, 1 = Keep Port Open */
2670 	} CloseReceiveChannel;											/*!< Close Receive Channel */
2671 
2672 	struct {
2673 		uint32_t lel_conferenceId;									/*!< Conference ID */
2674 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2675 		/* version 5 fields */
2676 		uint32_t lel_callReference;									/*!< Conference ID 1 */
2677 		uint32_t lel_portHandlingFlag;									/*!< 0 = Close Port, 1 = Keep Port Open */
2678 	} CloseMultiMediaReceiveChannel;
2679 
2680 	struct {												// Request Statistics from Phone
2681 		union {
2682 			struct {
2683 				char DirectoryNumber[StationMaxDirnumSize];					/*!< Directory Number */
2684 				uint32_t lel_callReference;							/*!< Call Reference */
2685 				uint32_t lel_StatsProcessing;							/*!< Statistics Processing */
2686 			} v3;
2687 			struct {
2688 				char DirectoryNumber[25];							/*!< Directory Number */
2689 				uint32_t lel_callReference;							/*!< Call Reference */
2690 				uint32_t lel_StatsProcessing;							/*!< Statistics Processing */
2691 			} v19;
2692 		};
2693 	} ConnectionStatisticsReq;										/*!< Connection Statistics Request Message Structure */
2694 
2695 	struct {
2696 		uint32_t lel_softKeyOffset;									/*!< Soft Key Off Set */
2697 		uint32_t lel_softKeyCount;									/*!< Soft Key Count */
2698 		uint32_t lel_totalSoftKeyCount;									/*!< Total Number of Soft Keys */
2699 		StationSoftKeyDefinition definition[StationMaxSoftKeyDefinition];				/*!< Station Soft Key Definition: Max:32 */
2700 	} SoftKeyTemplateResMessage;										/*!< Soft Key Template Result Message Structure */
2701 
2702 	struct {
2703 		uint32_t lel_softKeySetOffset;									/*!< Soft Key Off Set */
2704 		uint32_t lel_softKeySetCount;									/*!< Soft Key Count */
2705 		uint32_t lel_totalSoftKeySetCount;								/*!< Total Number of Soft Keys */
2706 		StationSoftKeySetDefinition definition[StationMaxSoftKeySetDefinition];				/*!< Station Soft Key Definition: Max:16*/
2707 	} SoftKeySetResMessage;											/*!< Soft Key Set Result Message Structure */
2708 
2709 	struct {
2710 		uint32_t lel_lineInstance;									/*!< Line Instance */
2711 		uint32_t lel_callReference;									/*!< Call Reference */
2712 		uint32_t lel_softKeySetIndex;									/*!< Soft Key Set Index */
2713 		uint32_t les_validKeyMask;									/*!< Valid Key Mask */
2714 	} SelectSoftKeysMessage;										/*!< Select Soft Keys Message Structure */
2715 
2716 	struct {
2717 		uint32_t lel_callState;										/*!< Call State: ENUM: skinny_callstate_ */
2718 		uint32_t lel_lineInstance;									/*!< Line Instance */
2719 		uint32_t lel_callReference;									/*!< Call Reference */
2720 		skinny_callinfo_visibility_t lel_visibility;							/*!< Visibility / Privacy: ENUM : none, limited, full */
2721 		struct {
2722 			uint32_t lel_level;									/*!< Level */
2723 			uint32_t lel_domain;									/*!< Domain */
2724 		} precedence;											/*!< Precedency / Priority */
2725 	} CallStateMessage;											/*!< Call State Message Structure */
2726 
2727 	/* display prompt */
2728 	struct {
2729 		uint32_t lel_messageTimeout;									/*!< Message Timeout */
2730 		char promptMessage[32];										/*!< Prompt Message (Max Lenght 32) */
2731 		uint32_t lel_lineInstance;									/*!< Line Instance */
2732 		uint32_t lel_callReference;									/*!< Call Reference */
2733 	} DisplayPromptStatusMessage;										/*!< Display Prompt Status Message Structure */
2734 
2735 	struct {
2736 		uint32_t lel_messageTimeout;									/*!< Message Timeout */
2737 		uint32_t lel_lineInstance;									/*!< Line Instance  */
2738 		uint32_t lel_callReference;									/*!< Call Reference */
2739 		/* here follow the message string
2740 		 * take care rest of size should
2741 		 * be calculated with string
2742 		 * size + 1 (NULL TERMINATION)
2743 		 * padded by 4
2744 		 */
2745 		uint32_t dummy[1];											/*!< Dummy, this is just for addressing
2746 															MaxLength:97 */
2747 	} DisplayDynamicPromptStatusMessage;									/*!< Display Dynamic Prompt Status Message Structure */
2748 
2749 	struct {
2750 		uint32_t lel_lineInstance;									/*!< Line Instance */
2751 		uint32_t lel_callReference;									/*!< Call Reference */
2752 	} ClearPromptStatusMessage;										/*!< Clear Prompt Status Message Structure */
2753 
2754 	/* display notify */
2755 	struct {
2756 		uint32_t lel_displayTimeout;									/*!< Display Timeout */
2757 		char displayMessage[StationMaxDisplayNotifySize];						/*!< Display Message */
2758 	} DisplayNotifyMessage;											/*!< Display Notify Message Structure */
2759 
2760 	struct {												// OK
2761 		uint32_t lel_displayTimeout;
2762 		uint32_t dummy[1];
2763 	} DisplayDynamicNotifyMessage;										// 0x0143
2764 
2765 	struct {
2766 		uint8_t dummy;
2767 	} ClearNotifyMessage;											/*!< Clear Notify Message Structure */
2768 
2769 	/* display pri notify */
2770 	struct {
2771 		uint32_t lel_displayTimeout;									/*!< Display Timeout */
2772 		uint32_t lel_priority;										/*!< Priority */
2773 		char displayMessage[StationMaxDisplayNotifySize];						/*!< Display Message */
2774 	} DisplayPriNotifyMessage;										/*!< Display Priority Notify Message Structure */
2775 
2776 	struct {												// OK
2777 		uint32_t lel_displayTimeout;
2778 		uint32_t lel_priority;
2779 		uint32_t dummy[1];
2780 	} DisplayDynamicPriNotifyMessage;									// 0x0144;
2781 
2782 	struct {
2783 		uint32_t lel_priority;										/*!< Priority */
2784 	} ClearPriNotifyMessage;										/*!< Clear Priority Notify Message Structure */
2785 
2786 	/* 0x11F FeatureStatMessage */
2787 	struct {
2788 		uint32_t lel_lineInstance;                                                                      /*!< Instance */
2789 		uint32_t lel_buttonType;                                                                        /*!< always 0x15 */
2790 		char textLabel[StationMaxNameSize];                                                             /*!< Feature Text Label */
2791 		uint32_t lel_stateValue;                                                                        /*!< Feature Status */
2792 	} FeatureStatMessage;											/*!< Feature Status Message Structure */
2793 
2794 	struct {
2795 		uint32_t lel_serviceURLIndex;									/*!< Service URL Index */
2796 		char URL[StationMaxServiceURLSize];								/*!< Actual URL */
2797 		char label[StationMaxNameSize];									/*!< Label */
2798 	} ServiceURLStatMessage;										/*!< Service URL Stat Message Structure */
2799 
2800 	struct {												// Used Above Protocol 7 */
2801 		uint32_t lel_serviceURLIndex;									/*!< Service URL Index */
2802 		uint32_t dummy[1];										/*!< Dummy */
2803 	} ServiceURLStatDynamicMessage;										/*!< Service URL Stat Message Structure */
2804 
2805 	struct {
2806 		uint32_t lel_status;										/*!< Status */
2807 		uint32_t lel_callReference;									/*!< Call Reference */
2808 		uint32_t lel_lineInstance;									/*!< Line Instance */
2809 	} CallSelectStatMessage;										/*!< Call Select Status Message Structure */
2810 
2811 	struct {
2812 		union {
2813 			struct {
2814 				uint32_t lel_conferenceID;
2815 				uint32_t lel_passThruPartyID;
2816 				skinny_codec_t lel_codecType;
2817 				uint32_t lel_lineInstance;
2818 				uint32_t lel_callReference;
2819 				skinny_RTPPayloadType_t payloadType;
2820 				uint32_t lel_isConferenceCreator;
2821 				skinny_OpenMultiMediaReceiveChannelUnion_t capability;
2822 				EncryptionInfo RxEncryptionInfo;
2823 				uint32_t lel_streamPassThroughID;
2824 				uint32_t lel_associatedStreamID;
2825 			} v3;
2826 			struct {
2827 				uint32_t lel_conferenceID;
2828 				uint32_t lel_passThruPartyID;
2829 				skinny_codec_t lel_codecType;
2830 				uint32_t lel_lineInstance;
2831 				uint32_t lel_callReference;
2832 				skinny_RTPPayloadType_t payloadType;
2833 				uint32_t lel_isConferenceCreator;
2834 				skinny_OpenMultiMediaReceiveChannelUnion_t capability;
2835 				EncryptionInfo RxEncryptionInfo;
2836 				uint32_t lel_streamPassThroughID;
2837 				uint32_t lel_associatedStreamID;
2838 				uint32_t bel_sourceIpAddr;
2839 				uint32_t lel_sourcePortNumber;
2840 			} v12;
2841 			struct {
2842 				uint32_t lel_conferenceID;
2843 				uint32_t lel_passThruPartyID;
2844 				skinny_codec_t lel_codecType;
2845 				uint32_t lel_lineInstance;
2846 				uint32_t lel_callReference;
2847 				skinny_RTPPayloadType_t payloadType;
2848 				uint32_t lel_isConferenceCreator;
2849 				skinny_OpenMultiMediaReceiveChannelUnion_t capability;
2850 				EncryptionInfo RxEncryptionInfo;
2851 				uint32_t lel_streamPassThroughID;
2852 				uint32_t lel_associatedStreamID;
2853 				skinny_ipAddress_t sourceIpAddr;
2854 				uint32_t lel_sourcePortNumber;
2855 				skinny_ipAddr_t lel_requestedIpAddrType;
2856 			} v17;
2857 		};
2858 	} OpenMultiMediaChannelMessage;
2859 
2860 	struct {
2861 		union {
2862 			/*!
2863 			 * \since 20100104 -MC
2864 			 * \note update 20100722
2865 			 * 0000   ac 00 00 00 00 00 00 00 32 01 00 00 0b 00 00 01
2866 			 0010   82 00 00 01 67 00 00 00 ac 11 01 66 45 15 00 00
2867 			 0020   0b 00 00 01 00 00 00 00 61 00 00 00 88 00 00 00
2868 			 0030   00 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2869 			 0040   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2870 			 0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2871 			 0060   00 00 00 00 40 00 00 00 32 00 00 00 5b 52 3a 4c
2872 			 0070   50 20 2d 20 48 50 3a 20 30 2c 20 4e f8 15 24 00
2873 			 0080   c4 02 89 09 9c ee 5a 0a 88 06 18 00 54 ef 5a 0a
2874 			 0090   64 7e fb 77 58 31 f8 77 ff ff ff ff 64 ef 5a 0a
2875 			 00a0   c2 b7 fc 77 78 07 18 00 20 16 24 00 40 16 24 00
2876 			 00b0   20 16 24 00
2877 			 *
2878 			 *
2879 			 */
2880 			struct {
2881 				uint32_t lel_conferenceID;							/*!< Conference ID */				// 0b 00 00 01
2882 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */			// 82 00 00 01
2883 				//skinny_codec_t lel_payloadCapability;						/*!< payload capability */			// 67 00 00 00 = codec 103
2884 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */	// 67 00 00 00 = codec 103 = H264
2885 				uint32_t bel_remoteIpAddr;							/*!< This field is apparently in big-endian
2886 														   format, even though most other fields are
2887 														   little-endian. */				// ac 11 01 66
2888 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */			// 45 15 00 00
2889 				uint32_t lel_callReference;							/*!< Call Reference */				// 0b 00 00 01
2890 				uint32_t lel_payload_rfc_number;						/*!< Payload RFC Number */			// 00 00 00 00
2891 				uint32_t lel_payloadType;							/*!< payload type */				// 61 00 00 00 = payload 97  == rtpmap
2892 				uint32_t lel_DSCPValue;								/*!< DSCP Value */				// 88 00 00 00
2893 				videoParameter_t videoParameter;						/*!< Video Parameter */
2894 			} v3;
2895 
2896 			struct {
2897 				uint32_t lel_conferenceID;							/*!< Conference ID */
2898 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2899 				//skinny_codec_t lel_payloadCapability;						/*!< payload capability */
2900 				skinny_codec_t lel_codecType;							/*!< Skinny Codec Type / Compression Type */	// 67 00 00 00 = codec 103 = H264
2901 				uint32_t lel_ipv46;								/*!<  */
2902 
2903 				char bel_remoteIpAddr[16];							/*!< This field is apparently in big-endian
2904 														   format, even though most other fields are
2905 														   little-endian. */
2906 				uint32_t lel_remotePortNumber;							/*!< Remote Port Number */
2907 				uint32_t lel_callReference;							/*!< Call Reference */
2908 				uint32_t lel_payload_rfc_number;						/*!< Payload RFC Number */
2909 				uint32_t lel_payloadType;							/*!< payload type */
2910 				uint32_t lel_DSCPValue;								/*!< DSCP Value */
2911 
2912 				videoParameter_t videoParameter;						/*!< Data Parameter */
2913 				EncryptionInfo encryptionInfo;
2914 				uint32_t lel_streamPassThroughID;						/*!< Stream Pass-Through ID */
2915 				uint32_t lel_assocStreamID;							/*!< Associated Stream ID */
2916 			} v17;
2917 		};
2918 	} StartMultiMediaTransmission;										/*!< Start MultiMedia Transmission Message Structure */
2919 
2920 	struct {
2921 		union {
2922 			struct {
2923 				uint32_t lel_callReference;							/*!< Call Reference */
2924 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2925 				uint32_t lel_callReference1;							/*!< Call Reference1 */
2926 				uint32_t bel_ipAddr;								/*!< This field is apparently in big-endian format, even though most other fields are little-endian. */
2927 				uint32_t lel_portNumber;							/*!< Port Number */
2928 				skinny_mediastatus_t lel_mediastatus;						/*!< Start Media Transmission Status */
2929 				uint32_t lel_unknown;								/*!< Unknown (Does this actually Exist) */
2930 			} v3;
2931 
2932 			struct {
2933 				uint32_t lel_callReference;							/*!< Call Reference */
2934 				uint32_t lel_passThruPartyId;							/*!< Pass Through Party ID */
2935 				uint32_t lel_callReference1;							/*!< Call Reference 1 */
2936 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
2937 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format, even though most other fields are in little-endian format. */
2938 				uint32_t lel_portNumber;							/*!< Port Number */
2939 				skinny_mediastatus_t lel_mediastatus;						/*!< startmediatransmission status */
2940 				uint32_t lel_unknown;								/*!< Unknown (Does this actually Exist)*/
2941 			} v17;
2942 		};
2943 	} StartMultiMediaTransmissionAck;									/*!< Start Media Transmission Acknowledgement Structure */
2944 
2945 	struct {
2946 		uint32_t lel_lineInstance;									/*!< Line Instance */
2947 	} ActivateCallPlaneMessage;										/*!< Activate Call Plane Message Structure */
2948 
2949 	struct {
2950 		uint8_t dummy;
2951 	} DeactivateCallPlaneMessage;										/*!< Deactivate Call Plane Message Structure */
2952 
2953 	struct {
2954 		uint32_t lel_status;										/*!< Status */
2955 	} UnregisterAckMessage;											/*!< Unregister Ackknowledge Message Structure */
2956 
2957 	struct {
2958 		uint32_t lel_lineInstance;									/*!< Line Instance */
2959 		uint32_t lel_callReference;									/*!< Call Reference */
2960 	} BackSpaceResMessage;											/*!< Back Space Request Message Message Structure */
2961 
2962 	struct {
2963 		uint8_t dummy;
2964 	} RegisterTokenAck;											/*!< Register Token Ackknowledge Message Structure */
2965 
2966 	struct {
2967 		uint32_t lel_tokenRejWaitTime;									/*!< Back Off Time */
2968 	} RegisterTokenReject;											/*!< Register Token Reject Message Structure */
2969 
2970 	/*!
2971 	 *
2972 	 * \since 20100103 -MC
2973 	 */
2974 	struct {
2975 		uint32_t lel_conferenceID;									/*!< Conference ID */
2976 		uint32_t lel_passThruPartyId;									/*!< Pass Through Party ID */
2977 		uint32_t lel_callReference;									/*!< Call Reference */
2978 		uint32_t maxBitRate;										/*!< Maximum BitRate */
2979 	} FlowControlCommandMessage;
2980 
2981 	/* SCCP Firmware version > 9.1 */
2982 	struct {
2983 		char le_data[StationMaxXMLAlarmMessage];							/*!< XML Alarm Message Data */
2984 	} XMLAlarmMessage;											/*!< XML Alarm Message Structure */
2985 
2986 	struct {
2987 		uint32_t lel_unknown;
2988 	} CallCountReqMessage;											/*!< CallCount Request Message Structure (@see https://sourceforge.net/p/chan-sccp-b/bugs/173/?page=1) */
2989 
2990 	/* SPA */
2991 	struct {
2992 		StationIdentifier sId;										/*!< Station Identifier */
2993 		uint32_t lel_stationIpAddr;									/*!< Station IP Address */
2994 		skinny_devicetype_t lel_deviceType;								/*!< Device Type as part of SKINNY_DEVICETYPE_* */
2995 		uint32_t maxStreams;										/*!< Max Streams */
2996 	} SPCPRegisterTokenRequest;
2997 
2998 	struct {
2999 		uint32_t lel_features;
3000 	} SPCPRegisterTokenAck;
3001 
3002 	struct {
3003 		uint32_t lel_features;
3004 	} SPCPRegisterTokenReject;
3005 
3006 	/*
3007 	 *      This was sent by a single 7970 with one CP-7914 attached.
3008 	 *      Message is related to Addons and i suppose it notifies their
3009 	 *      number, capacity and index.
3010 	 * Unhandled SCCP Message: unknown(0x0159) 168 bytes length
3011 	 00000000 - A8 00 00 00 00 00 00 00  59 01 00 00 01 00 00 00  - ........Y.......
3012 	 00000010 - 01 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00  - ................
3013 	 00000020 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3014 	 00000030 - 6D 61 78 2D 63 68 61 69  6E 65 64 3D 32 20 64 65  - max-chained=2 de
3015 	 00000040 - 76 69 63 65 4C 69 6E 65  3D 31 34 00 00 00 00 00  - viceLine=14.....
3016 	 00000050 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3017 	 00000060 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3018 	 00000070 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3019 	 00000080 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3020 	 00000090 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3021 	 000000A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3022 	 *
3023 	 *      This was sent by a single 7970 with one CP-7914 attached.
3024 	 *      Message is related to Addons and i suppose it notifies their
3025 	 *      number, capacity and index.
3026 	 00000000 - B0 00 00 00 00 00 00 00  59 01 00 00 01 00 00 00  - ........Y.......
3027 	 00000010 - 02 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00  - ................
3028 	 00000020 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3029 	 00000030 - 6D 61 78 2D 63 68 61 69  6E 65 64 3D 32 20 64 65  - max-chained=2 de
3030 	 00000040 - 76 69 63 65 4C 69 6E 65  3D 32 34 00 00 00 00 00  - viceLine=24.....
3031 	 00000050 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3032 	 00000060 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3033 	 00000070 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3034 	 00000080 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3035 	 00000090 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3036 	 000000A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3037 	 000000B0 - 00 00 00 00 00 00 00 00                           - ........
3038 	 *      This was sent by a single 7962 with one CP-7915 attached.
3039 	 *      Message is related to Addons and i suppose it notifies their
3040 	 *      number, capacity and index.
3041 	 *
3042 	 00000000 - a8 00 00 00 00 00 00 00  59 01 00 00 01 00 00 00  - ........Y.......
3043 	 00000010 - 02 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00  - ................
3044 	 00000020 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3045 	 00000030 - 6d 61 78 2d 63 68 61 69  6e 65 64 3d 32 20 64 65  - max-chained=2 de
3046 	 00000040 - 76 69 63 65 4c 69 6e 65  3d 32 34 00 00 00 00 00  - viceLine=24.....
3047 	 00000050 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3048 	 00000060 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3049 	 00000070 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3050 	 00000080 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3051 	 00000090 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3052 	 000000a0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3053 	*/
3054 	struct {
3055 		uint32_t lel_instance;
3056 		uint32_t lel_type;
3057 		uint32_t lel_maxAllowed;
3058 		uint32_t lel_unknowns[6];
3059 		char text[128];
3060 	} ExtensionDeviceCaps;
3061 
3062 	struct {
3063 		uint32_t lel_disposition;									/*!< Call History Disposition Enum */
3064 		uint32_t lel_lineInstance;
3065 		uint32_t lel_callReference;
3066 	} CallHistoryDispositionMessage;
3067 
3068 	/*
3069 	 * Fixed Size XML Message
3070 	 * 00000000 - 68 09 00 00 00 00 00 00  57 01 00 00 3C 49 6E 74  - h.......W...<Int
3071 	 * 00000010 - 65 72 66 61 63 65 31 3E  3C 77 69 66 69 3E 3C 42  - erface1><wifi><B
3072 	 * 00000020 - 53 53 49 44 3E 45 38 3A  45 44 3A 46 33 3A 31 30  - SSID>E8:ED:F3:10
3073 	 * 00000030 - 3A 32 39 3A 46 44 3C 2F  42 53 53 49 44 3E 3C 53  - :29:FD</BSSID><S
3074 	 * 00000040 - 53 49 44 3E 77 70 61 5F  70 68 79 3C 2F 53 53 49  - SID>wpa_phy</SSI
3075 	 * 00000050 - 44 3E 3C 41 50 4E 61 6D  65 3E 4D 6F 73 5F 41 50  - D><APName>Mos_AP
3076 	 * 00000060 - 33 5F 37 63 36 39 2E 66  36 3C 2F 41 50 4E 61 6D  - 3_7c69.f6</APNam
3077 	 * 00000070 - 65 3E 3C 2F 77 69 66 69  3E 3C 4F 66 66 50 72 65  - e></wifi><OffPre
3078 	 * 00000080 - 6D 3E 3C 2F 4F 66 66 50  72 65 6D 3E 3C 2F 49 6E  - m></OffPrem></In
3079 	 * 00000090 - 74 65 72 66 61 63 65 31  3E 00 00 00 00 00 00 00  - terface1>.......
3080 	 * 000000A0 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3081 	 * ...
3082 	 * 00000960 - 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  - ................
3083 	 */
3084 	struct {
3085 		char xmldata[2404];
3086 	} LocationInfoMessage;
3087 
3088 	// empty / unresearched structs
3089 	// 00000000 - 08 00 00 00 00 00 00 00  2D 00 00 00 00 00 00 00  // 7960 -- 6 buttons
3090 	// 00000000 - 08 00 00 00 16 00 00 00  2D 00 00 00 02 00 00 00  // 7962 -- 6 buttons
3091 	// 00000000 - 08 00 00 00 16 00 00 00  2D 00 00 00 02 00 00 00  // 7970 -- 8 buttons
3092 	struct {
3093 		uint32_t maxAvailLines;
3094 	} RegisterAvailableLinesMessage;
3095 
3096 	struct {
3097 		uint8_t dummy;
3098 	} StartMediaFailureDetection;
3099 
3100 	struct {
3101 		uint8_t dummy;
3102 	} NotifyDtmfToneMessage;
3103 
3104 	struct {
3105 		uint8_t dummy;
3106 	} SendDtmfToneMessage;
3107 
3108 	struct {
3109 		uint8_t dummy;
3110 	} SubscribeDtmfPayloadReqMessage;
3111 
3112 	struct {
3113 		uint8_t dummy;
3114 	} SubscribeDtmfPayloadResMessage;
3115 
3116 	struct {
3117 		uint8_t dummy;
3118 	} SubscribeDtmfPayloadErrMessage;
3119 
3120 	struct {
3121 		uint8_t dummy;
3122 	} UnSubscribeDtmfPayloadReqMessage;
3123 
3124 	struct {
3125 		uint8_t dummy;
3126 	} UnSubscribeDtmfPayloadResMessage;
3127 
3128 	struct {
3129 		uint8_t dummy;
3130 	} UnSubscribeDtmfPayloadErrMessage;
3131 
3132 	struct {
3133 		uint32_t lel_conferenceID;									/*!< Conference ID */
3134 		uint32_t lel_numberOfReservedParticipants;							/*!< Number of Reserved Participants */
3135 		uint32_t lel_resourceType;									/*!< Resource Type: Conf:0x00, IVR:0x01 */
3136 		uint32_t lel_appID;										/*!< Application ID */
3137 		char appConfID[32];										/*!< Application ConfID */
3138 		char lel_appData[24];										/*!< Application Data */
3139 		uint32_t lel_dataLength;									/*!< Application DataLength */
3140 		char lel_passThruData[];									/*!< Pass Through Data (variable size / max 2000)*/
3141 	} CreateConferenceReqMessage;										/*!< Create Conference Request Message Structure */
3142 
3143 	struct {
3144 		uint32_t lel_conferenceID;									/*!< Conference ID */
3145 		uint32_t lel_result;										/*!< Result ENUM(OK:0x00, ResourceNotAvailable: 0x01, ConferenceAlreadyExists: 0x02, SystemErr:0x03) */
3146 		uint32_t lel_dataLength;									/*!< Application DataLength */
3147 		char lel_passThruData[];									/*!< Pass Through Data (variable size / max 2000)*/
3148 	} CreateConferenceResMessage;
3149 
3150 	struct {
3151 		uint32_t lel_conferenceID;									/*!< Conference ID */
3152 	} DeleteConferenceReqMessage;										/*!< Delete Conference Request Message Structure */
3153 
3154 	struct {
3155 		uint32_t lel_conferenceID;									/*!< Conference ID */
3156 		uint32_t lel_result;										/*!< Result ENUM(OK:0x00, ConferenceDoesNotExist: 0x01, SystemErr: 0x02)*/
3157 	} DeleteConferenceResMessage;
3158 
3159 	struct {
3160 		uint32_t lel_conferenceID;									/*!< Conference ID */
3161 		uint32_t lel_numberOfReservedParticipants;							/*!< Number of Participants to be reserved */
3162 		uint32_t lel_appID;										/*!< App ID */
3163 		char appConfID[StationMaxDisplayTextSize];							/*!< app Conf ID */
3164 		char appData[StationMaxDirnumSize];								/*!< Add Data */
3165 		uint32_t lel_dataLength;									/*!< Application DataLength */
3166 		char lel_passThruData[];									/*!< Pass Through Data (variable size / max 2000)*/
3167 	} ModifyConferenceReqMessage;
3168 
3169 	struct {
3170 		uint32_t lel_conferenceID;									/*!< Conference ID */
3171 		uint32_t lel_result;										/*!< Result ENUM(OK:0x00, ResourceNotAvailable: 0x01, ConferenceDoesNotExist: 0x02, InvalidParameter: 0x03, MoreActiveCallsThanReserved: 0x04, InvalidResourceType:0x05, SystemErr:0x06) */
3172 		uint32_t lel_dataLength;									/*!< Application DataLength */
3173 		char lel_passThruData[];									/*!< Pass Through Data (variable size / max 2000)*/
3174 	} ModifyConferenceResMessage;
3175 
3176 	struct {
3177 		uint32_t lel_conferenceID;									/*!< Conference ID */
3178 		uint32_t lel_callReference;									/*!< Call Reference */
3179 		uint32_t partyPIRestrictionBits;								/*!< Party PI Restriction Bits Structure
3180 														   0 RestrictCallingPartyName
3181 														   1 RestrictCallingPartyNumber
3182 														   2 RestrictCalledPartyName
3183 														   3 RestrictCalledPartyNumber
3184 														   4 RestrictOriginalCalledPartyName
3185 														   5 RestrictOriginalCalledPartyNumber
3186 														   6 RestrictLastRedirectPartyName
3187 														   7 RestrictLastRedirectPartyNumber */
3188 		char participantName[StationMaxNameSize];							/*!< Participant Name */
3189 		char participantNumber[StationMaxDirnumSize];							/*!< Participant Number */
3190 		char conferenceName[StationMaxDisplayTextSize];							/*!< Conference Name*/
3191 	} AddParticipantReqMessage;										/*!< Add Participent to Conference Request Message*/
3192 
3193 	struct {
3194 		uint32_t lel_conferenceID;									/*!< Conference ID */
3195 		uint32_t lel_callReference;									/*!< Call Reference */
3196 		uint32_t lel_result;										/*!< Result ENUM(OK:0x00, ResourceNotAvailable: 0x01, ConferenceDoesNotExist: 0x02, DeplicateCallReference:0x03, SystemErr:0x04) */
3197 		uint32_t lel_bridgeParticipantID;								/*!< Birdge Participant ID */
3198 	} AddParticipantResMessage;
3199 
3200 	struct {
3201 		uint8_t dummy;
3202 	} AuditConferenceReqMessage;
3203 
3204 	struct {
3205 		uint32_t lel_last;										/*!< last */
3206 		uint32_t lel_numberOfEntries;									/*!< Number Of Entries */
3207 		struct {
3208 			uint32_t lel_conferenceID;								/*!< Conference ID */
3209 			uint32_t lel_resourceType;								/*!< Resource Type. Enum(Conf:0x00, IVR:0x01) */
3210 			uint32_t lel_numberOfReservedParticipants;						/*!< Number of Reserved Participants */
3211 			uint32_t lel_numberOfActiveParticipants;						/*!< Number of Active Participants */
3212 			uint32_t lel_appID;									/*!< App ID */
3213 			char appConfID[StationMaxDisplayTextSize];						/*!< app Conf ID */
3214 			char appData[StationMaxDirnumSize];							/*!< Add Data */
3215 		} conferenceEntry[];										/*!< variable size / max 32*/
3216 	} AuditConferenceResMessage;
3217 
3218 	struct {
3219 		uint32_t lel_conferenceID;									/*!< Conference ID */
3220 	} AuditParticipantReqMessage;
3221 
3222 	struct {
3223 		uint32_t lel_result;										/*!< Result. Enum(OK:0x00, ConferenceDoesNotExist:0x01) */
3224 		uint32_t lel_last;										/*!< last */
3225 		uint32_t lel_conferenceID;									/*!< Conference ID */
3226 		uint32_t lel_numberOfEntries;									/*!< Number Of Entries */
3227 		char participantEntry[];									/*!< variable size: max 256 */
3228 	} AuditParticipantResMessage;
3229 
3230 	struct {
3231 		uint32_t lel_conferenceID;									/*!< Conference ID */
3232 		uint32_t lel_callReference;									/*!< Call Reference */
3233 		uint32_t partyPIRestrictionBits;								/*!< Party PI Restriction Bits Structure
3234 														   0 RestrictCallingPartyName
3235 														   1 RestrictCallingPartyNumber
3236 														   2 RestrictCalledPartyName
3237 														   3 RestrictCalledPartyNumber
3238 														   4 RestrictOriginalCalledPartyName
3239 														   5 RestrictOriginalCalledPartyNumber
3240 														   6 RestrictLastRedirectPartyName
3241 														   7 RestrictLastRedirectPartyNumber */
3242 		char participantName[StationMaxNameSize];							/*!< Participant Name */
3243 		char participantNumber[StationMaxDirnumSize];							/*!< Participant Number */
3244 		char conferenceName[StationMaxDisplayTextSize];							/*!< Conference Name*/
3245 	} ChangeParticipantReqMessage;
3246 
3247 	struct {
3248 		uint32_t lel_conferenceID;									/*!< Conference ID */
3249 		uint32_t lel_callReference;									/*!< Call Reference */
3250 	} DropParticipantReqMessage;
3251 
3252 	struct {
3253 		skinny_announcementList_t announcements[SKINNY_MaxAnnouncementList];
3254 		uint32_t lel_endOfAnnAck;
3255 		uint32_t lel_conferenceID;
3256 		uint32_t lel_matrixConfPartyID[SKINNY_StationMaxMonitorParties];
3257 		uint32_t lel_hearingConfPartyMask;
3258 		uint32_t lel_annPlayMode;
3259 	} StartAnnouncementMessage;
3260 
3261 	struct {
3262 		uint32_t lel_conferenceID;
3263 	} StopAnnouncementMessage;
3264 
3265 	struct {
3266 		uint32_t lel_conferenceID;
3267 		uint32_t lel_annPlayStatus;
3268 	} AnnouncementFinishMessage;
3269 
3270 	struct {
3271 		uint32_t lel_conferenceId;									/*!< Conference ID */
3272 		uint32_t lel_callReference;									/*!< Call Reference */
3273 		uint32_t lel_passThruPartyId;									/*!< Pass Through ID*/
3274 		uint32_t lel_mediaTransportType;								/*!< Skinny mediaTransportType Enum */
3275 		uint32_t lel_ipv46;										/*!< ipv4 / ipv6 */
3276 		skinny_mediaType_t lel_mediaType;								/*!< Skinny mediaType Enum */
3277 	} PortRequestMessage;											/*!< Port Request Message Structure */
3278 
3279 	struct {
3280 		union {
3281 			struct {
3282 				uint32_t lel_conferenceId;							/*!< Conference ID */
3283 				uint32_t lel_callReference;							/*!< Call Reference */
3284 				uint32_t lel_passThruPartyId;							/*!< Pass Through ID*/
3285 				uint32_t bel_ipAddr;								/*!< Ip Address Array (This field is apparently in big-endian format, even though most other fields are in little-endian format.) */
3286 				uint32_t lel_portNumber;							/*!< Port Number */
3287 				uint32_t lel_RTCPPortNumber;							/*!< RTCP Port Number */
3288 			} v3;
3289 			struct {
3290 				uint32_t lel_conferenceId;							/*!< Conference ID */
3291 				uint32_t lel_callReference;							/*!< Call Reference */
3292 				uint32_t lel_passThruPartyId;							/*!< Pass Through ID*/
3293 				uint32_t lel_ipv46;								/*!< ipv4 / ipv6 */
3294 				char bel_ipAddr[16];								/*!< This field is apparently in big-endian format, even though most other fields are in little-endian format. */
3295 				uint32_t lel_portNumber;							/*!< Port Number */
3296 				uint32_t lel_RTCPPortNumber;							/*!< RTCP Port Number */
3297 				skinny_mediaType_t lel_mediaType;						/*!< Skinny Media Type (Enum) */
3298 			} v19;
3299 		};
3300 	} PortResponseMessage;											/*!< Port Response Message Structure */
3301 
3302 	struct {
3303 		uint32_t lel_conferenceId;									/*!< Conference ID */
3304 		uint32_t lel_callReference;									/*!< Call Reference */
3305 		uint32_t lel_passThruPartyId;									/*!< Pass Through ID*/
3306 		skinny_mediaType_t lel_mediaType;								/*!< Skinny Media Type (Enum) */
3307 	} PortCloseMessage;											/*!< Port Close Message Structure */
3308 
3309 	struct {
3310 		uint8_t dummy;
3311 	} QoSResvNotifyMessage;											/*!< QoS Resv Notify Message Structure */
3312 
3313 	struct {
3314 		uint8_t dummy;
3315 	} QoSErrorNotifyMessage;										/*!< QoS Error Notify Message Structure */
3316 
3317 
3318 	struct {
3319 		uint8_t dummy;
3320 	} QoSListenMessage;											/*!< QoS Listen Message Structure */
3321 
3322 	struct {
3323 		uint8_t dummy;
3324 	} QoSPathMessage;											/*!< QoS Path Message Structure */
3325 
3326 	struct {
3327 		uint8_t dummy;
3328 	} QoSTeardownMessage;											/*!< QoS Teardown Message Structure */
3329 
3330 	struct {
3331 		uint8_t dummy;
3332 	} UpdateDSCPMessage;											/*!< Update DSCP Message Structure */
3333 
3334 	struct {
3335 		uint8_t dummy;
3336 	} QoSModifyMessage;											/*!< QoS Modify Message Structure */
3337 
3338 	struct {
3339 		uint8_t dummy;
3340 	} MwiResponseMessage;											/*!< Mwi Response Message Structure */
3341 
3342 	struct {
3343 		uint8_t dummy;
3344 	} CallCountRespMessage;											/*!< CallCount Response Message Structure */
3345 
3346 	struct {
3347 		uint32_t lel_callReference;
3348 		uint32_t lel_status;
3349 	} RecordingStatusMessage;										/*!< Recording Status Message Structure */
3350 
3351 	//struct {
3352 	//} UnknownVGMessage;
3353 } sccp_data_t;													/*!< SKINNY Data Structure */
3354 
3355 /*!
3356  * \brief SKINNY Message Header Structure
3357  */
3358 struct sccp_header {
3359 	uint32_t length;											/*!< Message Length */
3360 	uint32_t lel_protocolVer;										/*!< Protocol Version Message */
3361 	sccp_mid_t lel_messageId;											/*!< Message ID, the messageId is not part of the skinny header, so it is counted in length */
3362 };
3363 
3364 /*!
3365  * \brief SKINNY Message Structure
3366  */
3367 struct sccp_msg {
3368 	sccp_header_t header;											/*!< Message Header */
3369 	sccp_data_t data;											/*!< Message [SCCP Data] */
3370 };
3371 
3372 //#define messagePtr sccp_msg_t * const
3373 //#define constMessagePtr const sccp_msg_t * const
3374 
3375 /* So in theory, a message should never be bigger than this.
3376  * If it is, we abort the connection */
3377 #define SCCP_MAX_PACKET sizeof(sccp_msg_t)
3378 #define SCCP_PACKET_HEADER sizeof(sccp_header_t)
3379 
3380 /*!
3381  * \brief SCCP Message Type Structure
3382  */
3383 #define offsize(TYPE, MEMBER) sizeof(((TYPE *)0)->MEMBER)
3384 struct messageinfo {
3385 	sccp_mid_t messageId;
3386 	const char *const text;
3387 	const size_t size;
3388 	skinny_msgType_t type;
3389 	skinny_msgDirection_t direction;
3390 };
3391 
3392 extern const struct messageinfo sccp_messageinfo[];
3393 extern const struct messageinfo spcp_messageinfo[];
3394 SCCP_INLINE struct messageinfo * SCCP_CALL lookupMsgInfoStruct(uint32_t messageId);
3395 SCCP_INLINE const char * SCCP_CALL msginfo2str(sccp_mid_t msgId);
3396 
3397 /*!
3398  * \brief SCCP Device Protocol Callback Structure
3399  *
3400  * Connect Specific CallBack-Functions to Particular SCCP Protocol Versions
3401  */
3402 typedef struct {
3403 	//const char *name;											/*! protocol name ( SCCP | SPCP ) */
3404 	const uint16_t type;											/*! (SCCP_PROTOCOL | SPCP_PROTOCOL) */
3405 	const uint8_t version;											/*! the protocol version number */
3406 	const uint16_t registrationFinishedMessageId;								/*! use this message id to determine that the device is fully registered */
3407 
3408 	/* protocol callbacks */
3409 	/* send messages */
3410 	void (*const sendCallInfo) (const sccp_callinfo_t * const ci, const uint32_t callid, const skinny_calltype_t calltype, const uint8_t lineInstance, const uint8_t callInstance, const skinny_callsecuritystate_t callsecurityState, constDevicePtr device);
3411 	void (*const sendDialedNumber) (constDevicePtr device, const uint8_t lineInstance, const uint32_t callid, const char dialedNumber[SCCP_MAX_EXTENSION]);
3412 	void (*const sendRegisterAck) (constDevicePtr device, uint8_t keepAliveInterval, uint8_t secondaryKeepAlive, char *dateformat);
3413 	void (*const displayPrompt) (constDevicePtr device, uint8_t lineInstance, uint32_t callid, uint8_t timeout, const char *message);
3414 	void (*const displayNotify) (constDevicePtr device, uint8_t timeout, const char *message);
3415 	void (*const displayPriNotify) (constDevicePtr device, uint8_t priority, uint8_t timeout, const char *message);
3416 	void (*const sendCallForwardStatus)(constDevicePtr device, const sccp_linedevice_t * ld);
3417 	void (*const sendUserToDeviceDataVersionMessage) (constDevicePtr device, uint32_t appID, uint32_t lineInstance, uint32_t callReference, uint32_t transactionID, const char *xmlData, uint8_t priority);
3418 	void (*const sendMultiMediaCommand) (constDevicePtr device, constChannelPtr channel, skinny_miscCommandType_t command);
3419 	void (*const sendOpenReceiveChannel)(constDevicePtr device, constChannelPtr channel);
3420 	void (*const sendOpenMultiMediaChannel)(constDevicePtr device, constChannelPtr channel, skinny_codec_t skinnyFormat, int payloadType, uint8_t linInstance, int bitrate);
3421 	void (*const sendStartMultiMediaTransmission) (constDevicePtr device, constChannelPtr channel, int payloadType, int bitRate);
3422 	void (*const sendStartMediaTransmission) (constDevicePtr device, constChannelPtr channel);
3423 	void (*const sendConnectionStatisticsReq) (constDevicePtr device, constChannelPtr channel, uint8_t clear);
3424 	void (*const sendPortRequest) (constDevicePtr device, constChannelPtr channel, skinny_mediaTransportType_t mediaTransportType, skinny_mediaType_t mediaType);
3425 	void (*const sendPortClose) (constDevicePtr device, constChannelPtr channel, skinny_mediaType_t mediaType);
3426 	void (*const sendLineStatResp) (constDevicePtr device, uint32_t lineNumber, char *dirNumber, char *fullyQualifiedDisplayName, char *displayName);
3427 
3428 	/* parse received messages */
3429 	void (*const parseOpenReceiveChannelAck) (constMessagePtr msg, skinny_mediastatus_t * mediastatus, struct sockaddr_storage * ss, uint32_t * passthrupartyid, uint32_t * callReference);
3430 	void (*const parseOpenMultiMediaReceiveChannelAck) (constMessagePtr msg, skinny_mediastatus_t * mediastatus, struct sockaddr_storage * ss, uint32_t * passthrupartyid, uint32_t * callReference);
3431 	void (*const parseStartMediaTransmissionAck) (constMessagePtr msg, uint32_t * partyID, uint32_t * callID, uint32_t * callID1, skinny_mediastatus_t * mediastatus, struct sockaddr_storage * ss);
3432 	void (*const parseStartMultiMediaTransmissionAck) (constMessagePtr msg, uint32_t * partyID, uint32_t * callID, uint32_t * callID1, skinny_mediastatus_t * mediastatus, struct sockaddr_storage * ss);
3433 	void (*const parseEnblocCall) (constMessagePtr msg, char *calledParty, uint32_t * lineInstance);
3434 	void (*const parsePortResponse) (constMessagePtr msg, uint32_t *conferenceId, uint32_t *callReference, uint32_t *passThruPartyId, struct sockaddr_storage *ss, uint32_t * RTCPPortNumber, skinny_mediaType_t *mediaType);
3435 } sccp_deviceProtocol_t;											/*!< SCCP Device Protocol Callback Structure */
3436 
3437 #define REQ(_x, _y)    _x = sccp_build_packet((_y), sizeof((_x)->data._y))
3438 #define REQCMD(_x, _y) _x = sccp_build_packet((_y), 0)
3439 SCCP_API messagePtr SCCP_CALL sccp_build_packet(sccp_mid_t t, size_t pkt_len);
3440 SCCP_API boolean_t SCCP_CALL sccp_protocol_isProtocolSupported(uint8_t type, uint8_t version);
3441 SCCP_API uint8_t __CONST__ SCCP_CALL sccp_protocol_getMaxSupportedVersionNumber(int type);
3442 SCCP_API const sccp_deviceProtocol_t * SCCP_CALL sccp_protocol_getDeviceProtocol(constDevicePtr device, int type);
3443 SCCP_API const char * const __CONST__ SCCP_CALL skinny_keymode2longstr(skinny_keymode_t keymode);
3444 __END_C_EXTERN__
3445 // kate: indent-width 8; replace-tabs off; indent-mode cstyle; auto-insert-doxygen on; line-numbers on; tab-indents on; keep-extra-spaces off; auto-brackets off;
3446