mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	
							parent
							
								
									f88d3063fe
								
							
						
					
					
						commit
						db06ec1975
					
				
					 37 changed files with 28174 additions and 44 deletions
				
			
		
							
								
								
									
										704
									
								
								rdp/protocol/pdu/caps.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										704
									
								
								rdp/protocol/pdu/caps.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,704 @@ | |||
| /* | ||||
|  * Copyright (c) 2014-2015 Sylvain Peyrefitte | ||||
|  * | ||||
|  * This file is part of node-rdpjs. | ||||
|  * | ||||
|  * node-rdpjs is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  */ | ||||
| 
 | ||||
| var type = require('../../core').type; | ||||
| var log = require('../../core').log; | ||||
| var error = require('../../core').error; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240486.aspx
 | ||||
|  */ | ||||
| var CapsType = { | ||||
| 	CAPSTYPE_GENERAL : 0x0001, | ||||
| 	CAPSTYPE_BITMAP : 0x0002, | ||||
| 	CAPSTYPE_ORDER : 0x0003, | ||||
| 	CAPSTYPE_BITMAPCACHE : 0x0004, | ||||
| 	CAPSTYPE_CONTROL : 0x0005, | ||||
| 	CAPSTYPE_ACTIVATION : 0x0007, | ||||
| 	CAPSTYPE_POINTER : 0x0008, | ||||
| 	CAPSTYPE_SHARE : 0x0009, | ||||
| 	CAPSTYPE_COLORCACHE : 0x000A, | ||||
| 	CAPSTYPE_SOUND : 0x000C, | ||||
| 	CAPSTYPE_INPUT : 0x000D, | ||||
| 	CAPSTYPE_FONT : 0x000E, | ||||
| 	CAPSTYPE_BRUSH : 0x000F, | ||||
| 	CAPSTYPE_GLYPHCACHE : 0x0010, | ||||
| 	CAPSTYPE_OFFSCREENCACHE : 0x0011, | ||||
| 	CAPSTYPE_BITMAPCACHE_HOSTSUPPORT : 0x0012, | ||||
| 	CAPSTYPE_BITMAPCACHE_REV2 : 0x0013, | ||||
| 	CAPSTYPE_VIRTUALCHANNEL : 0x0014, | ||||
| 	CAPSTYPE_DRAWNINEGRIDCACHE : 0x0015, | ||||
| 	CAPSTYPE_DRAWGDIPLUS : 0x0016, | ||||
| 	CAPSTYPE_RAIL : 0x0017, | ||||
| 	CAPSTYPE_WINDOW : 0x0018, | ||||
| 	CAPSETTYPE_COMPDESK : 0x0019, | ||||
| 	CAPSETTYPE_MULTIFRAGMENTUPDATE : 0x001A, | ||||
| 	CAPSETTYPE_LARGE_POINTER : 0x001B, | ||||
| 	CAPSETTYPE_SURFACE_COMMANDS : 0x001C, | ||||
| 	CAPSETTYPE_BITMAP_CODECS : 0x001D, | ||||
| 	CAPSSETTYPE_FRAME_ACKNOWLEDGE : 0x001E | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240549.aspx
 | ||||
|  */ | ||||
| var MajorType = { | ||||
| 	OSMAJORTYPE_UNSPECIFIED : 0x0000, | ||||
| 	OSMAJORTYPE_WINDOWS : 0x0001, | ||||
| 	OSMAJORTYPE_OS2 : 0x0002, | ||||
| 	OSMAJORTYPE_MACINTOSH : 0x0003, | ||||
| 	OSMAJORTYPE_UNIX : 0x0004, | ||||
| 	OSMAJORTYPE_IOS : 0x0005, | ||||
| 	OSMAJORTYPE_OSX : 0x0006, | ||||
| 	OSMAJORTYPE_ANDROID : 0x0007 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240549.aspx
 | ||||
|  */ | ||||
| var MinorType = { | ||||
| 	OSMINORTYPE_UNSPECIFIED : 0x0000, | ||||
| 	OSMINORTYPE_WINDOWS_31X : 0x0001, | ||||
| 	OSMINORTYPE_WINDOWS_95 : 0x0002, | ||||
| 	OSMINORTYPE_WINDOWS_NT : 0x0003, | ||||
| 	OSMINORTYPE_OS2_V21 : 0x0004, | ||||
| 	OSMINORTYPE_POWER_PC : 0x0005, | ||||
| 	OSMINORTYPE_MACINTOSH : 0x0006, | ||||
| 	OSMINORTYPE_NATIVE_XSERVER : 0x0007, | ||||
| 	OSMINORTYPE_PSEUDO_XSERVER : 0x0008, | ||||
| 	OSMINORTYPE_WINDOWS_RT : 0x0009 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240549.aspx
 | ||||
|  */ | ||||
| var GeneralExtraFlag = { | ||||
|     FASTPATH_OUTPUT_SUPPORTED : 0x0001, | ||||
|     NO_BITMAP_COMPRESSION_HDR : 0x0400, | ||||
|     LONG_CREDENTIALS_SUPPORTED : 0x0004, | ||||
|     AUTORECONNECT_SUPPORTED : 0x0008, | ||||
|     ENC_SALTED_CHECKSUM : 0x0010 | ||||
| }; | ||||
| 
 | ||||
| var Boolean = { | ||||
|     FALSE : 0x00, | ||||
|     TRUE : 0x01 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240556.aspx
 | ||||
|  */ | ||||
| var OrderFlag = { | ||||
|     NEGOTIATEORDERSUPPORT : 0x0002, | ||||
|     ZEROBOUNDSDELTASSUPPORT : 0x0008, | ||||
|     COLORINDEXSUPPORT : 0x0020, | ||||
|     SOLIDPATTERNBRUSHONLY : 0x0040, | ||||
|     ORDERFLAGS_EXTRA_FLAGS : 0x0080 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240556.aspx
 | ||||
|  */ | ||||
| var Order = { | ||||
|     TS_NEG_DSTBLT_INDEX : 0x00, | ||||
|     TS_NEG_PATBLT_INDEX : 0x01, | ||||
|     TS_NEG_SCRBLT_INDEX : 0x02, | ||||
|     TS_NEG_MEMBLT_INDEX : 0x03, | ||||
|     TS_NEG_MEM3BLT_INDEX : 0x04, | ||||
|     TS_NEG_DRAWNINEGRID_INDEX : 0x07, | ||||
|     TS_NEG_LINETO_INDEX : 0x08, | ||||
|     TS_NEG_MULTI_DRAWNINEGRID_INDEX : 0x09, | ||||
|     TS_NEG_SAVEBITMAP_INDEX : 0x0B, | ||||
|     TS_NEG_MULTIDSTBLT_INDEX : 0x0F, | ||||
|     TS_NEG_MULTIPATBLT_INDEX : 0x10, | ||||
|     TS_NEG_MULTISCRBLT_INDEX : 0x11, | ||||
|     TS_NEG_MULTIOPAQUERECT_INDEX : 0x12, | ||||
|     TS_NEG_FAST_INDEX_INDEX : 0x13, | ||||
|     TS_NEG_POLYGON_SC_INDEX : 0x14, | ||||
|     TS_NEG_POLYGON_CB_INDEX : 0x15, | ||||
|     TS_NEG_POLYLINE_INDEX : 0x16, | ||||
|     TS_NEG_FAST_GLYPH_INDEX : 0x18, | ||||
|     TS_NEG_ELLIPSE_SC_INDEX : 0x19, | ||||
|     TS_NEG_ELLIPSE_CB_INDEX : 0x1A, | ||||
|     TS_NEG_INDEX_INDEX : 0x1B | ||||
| }; | ||||
| 
 | ||||
| var OrderEx = { | ||||
|     ORDERFLAGS_EX_CACHE_BITMAP_REV3_SUPPORT : 0x0002, | ||||
|     ORDERFLAGS_EX_ALTSEC_FRAME_MARKER_SUPPORT : 0x0004 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240563.aspx
 | ||||
|  */ | ||||
| var InputFlags = { | ||||
|     INPUT_FLAG_SCANCODES : 0x0001, | ||||
|     INPUT_FLAG_MOUSEX : 0x0004, | ||||
|     INPUT_FLAG_FASTPATH_INPUT : 0x0008, | ||||
|     INPUT_FLAG_UNICODE : 0x0010, | ||||
|     INPUT_FLAG_FASTPATH_INPUT2 : 0x0020, | ||||
|     INPUT_FLAG_UNUSED1 : 0x0040, | ||||
|     INPUT_FLAG_UNUSED2 : 0x0080, | ||||
|     TS_INPUT_FLAG_MOUSE_HWHEEL : 0x0100 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240564.aspx
 | ||||
|  */ | ||||
| var BrushSupport = { | ||||
|     BRUSH_DEFAULT : 0x00000000, | ||||
|     BRUSH_COLOR_8x8 : 0x00000001, | ||||
|     BRUSH_COLOR_FULL : 0x00000002 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240565.aspx
 | ||||
|  */ | ||||
| var GlyphSupport = { | ||||
|     GLYPH_SUPPORT_NONE : 0x0000, | ||||
|     GLYPH_SUPPORT_PARTIAL : 0x0001, | ||||
|     GLYPH_SUPPORT_FULL : 0x0002, | ||||
|     GLYPH_SUPPORT_ENCODE : 0x0003 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240550.aspx
 | ||||
|  */ | ||||
| var OffscreenSupportLevel = { | ||||
|     FALSE : 0x00000000, | ||||
|     TRUE : 0x00000001 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240551.aspx
 | ||||
|  */ | ||||
| var VirtualChannelCompressionFlag = { | ||||
|     VCCAPS_NO_COMPR : 0x00000000, | ||||
|     VCCAPS_COMPR_SC : 0x00000001, | ||||
|     VCCAPS_COMPR_CS_8K : 0x00000002 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240552.aspx
 | ||||
|  */ | ||||
| var SoundFlag = { | ||||
|     NONE : 0x0000, | ||||
|     SOUND_BEEPS_FLAG : 0x0001 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240549.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function generalCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_GENERAL, | ||||
| 		osMajorType : new type.UInt16Le(), | ||||
|         osMinorType : new type.UInt16Le(), | ||||
|         protocolVersion : new type.UInt16Le(0x0200, {constant : true}), | ||||
|         pad2octetsA : new type.UInt16Le(), | ||||
|         generalCompressionTypes : new type.UInt16Le(0, {constant : true}), | ||||
|         extraFlags : new type.UInt16Le(), | ||||
|         updateCapabilityFlag : new type.UInt16Le(0, {constant : true}), | ||||
|         remoteUnshareFlag : new type.UInt16Le(0, {constant : true}), | ||||
|         generalCompressionLevel : new type.UInt16Le(0, {constant : true}), | ||||
|         refreshRectSupport : new type.UInt8(), | ||||
|         suppressOutputSupport : new type.UInt8() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240554.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function bitmapCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_BITMAP, | ||||
| 		preferredBitsPerPixel : new type.UInt16Le(), | ||||
|         receive1BitPerPixel : new type.UInt16Le(0x0001), | ||||
|         receive4BitsPerPixel : new type.UInt16Le(0x0001), | ||||
|         receive8BitsPerPixel : new type.UInt16Le(0x0001), | ||||
|         desktopWidth : new type.UInt16Le(), | ||||
|         desktopHeight : new type.UInt16Le(), | ||||
|         pad2octets : new type.UInt16Le(), | ||||
|         desktopResizeFlag : new type.UInt16Le(), | ||||
|         bitmapCompressionFlag : new type.UInt16Le(0x0001, {constant : true}), | ||||
|         highColorFlags : new type.UInt8(0), | ||||
|         drawingFlags : new type.UInt8(), | ||||
|         multipleRectangleSupport : new type.UInt16Le(0x0001, {constant : true}), | ||||
|         pad2octetsB : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240556.aspx
 | ||||
|  * @param orders {type.BinaryString|null} list of available orders | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function orderCapability(orders, opt) { | ||||
| 	if(orders && orders.size() !== 32) { | ||||
| 		throw new error.FatalError('NODE_RDP_PROTOCOL_PDU_CAPS_BAD_ORDERS_SIZE'); | ||||
| 	} | ||||
| 	 | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_ORDER, | ||||
| 		terminalDescriptor : new type.BinaryString(Buffer.from(Array(16 + 1).join('\x00'), 'binary'), {readLength : new type.CallableValue(16)}), | ||||
|         pad4octetsA : new type.UInt32Le(0), | ||||
|         desktopSaveXGranularity : new type.UInt16Le(1), | ||||
|         desktopSaveYGranularity : new type.UInt16Le(20), | ||||
|         pad2octetsA : new type.UInt16Le(0), | ||||
|         maximumOrderLevel : new type.UInt16Le(1), | ||||
|         numberFonts : new type.UInt16Le(), | ||||
|         orderFlags : new type.UInt16Le(OrderFlag.NEGOTIATEORDERSUPPORT), | ||||
|         orderSupport : orders || new type.Factory(function(s) { | ||||
|         	self.orderSupport = new type.BinaryString(null, {readLength : new type.CallableValue(32)}).read(s); | ||||
|         }), | ||||
|         textFlags : new type.UInt16Le(), | ||||
|         orderSupportExFlags : new type.UInt16Le(), | ||||
|         pad4octetsB : new type.UInt32Le(), | ||||
|         desktopSaveSize : new type.UInt32Le(480 * 480), | ||||
|         pad2octetsC : new type.UInt16Le(), | ||||
|         pad2octetsD : new type.UInt16Le(), | ||||
|         textANSICodePage : new type.UInt16Le(0), | ||||
|         pad2octetsE : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240559.aspx
 | ||||
|  * @param opt type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function bitmapCacheCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_BITMAPCACHE, | ||||
| 		pad1 : new type.UInt32Le(), | ||||
|         pad2 : new type.UInt32Le(), | ||||
|         pad3 : new type.UInt32Le(), | ||||
|         pad4 : new type.UInt32Le(), | ||||
|         pad5 : new type.UInt32Le(), | ||||
|         pad6 : new type.UInt32Le(), | ||||
|         cache0Entries : new type.UInt16Le(), | ||||
|         cache0MaximumCellSize : new type.UInt16Le(), | ||||
|         cache1Entries : new type.UInt16Le(), | ||||
|         cache1MaximumCellSize : new type.UInt16Le(), | ||||
|         cache2Entries : new type.UInt16Le(), | ||||
|         cache2MaximumCellSize : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  *  | ||||
|  * @param isServer {boolean} true if in server mode | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function pointerCapability(isServer, opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_POINTER, | ||||
| 		colorPointerFlag : new type.UInt16Le(), | ||||
|         colorPointerCacheSize : new type.UInt16Le(20), | ||||
|         //old version of rdp doesn't support ...
 | ||||
|         pointerCacheSize : new type.UInt16Le(null, {conditional : function() { | ||||
|         	return isServer || false; | ||||
|         }}) | ||||
|     }; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240563.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function inputCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_INPUT, | ||||
| 		inputFlags : new type.UInt16Le(), | ||||
|         pad2octetsA : new type.UInt16Le(), | ||||
|         // same value as gcc.ClientCoreSettings.kbdLayout
 | ||||
|         keyboardLayout : new type.UInt32Le(), | ||||
|         // same value as gcc.ClientCoreSettings.keyboardType
 | ||||
|         keyboardType : new type.UInt32Le(), | ||||
|         // same value as gcc.ClientCoreSettings.keyboardSubType
 | ||||
|         keyboardSubType : new type.UInt32Le(), | ||||
|         // same value as gcc.ClientCoreSettings.keyboardFnKeys
 | ||||
|         keyboardFunctionKey : new type.UInt32Le(), | ||||
|         // same value as gcc.ClientCoreSettingrrs.imeFileName
 | ||||
|         imeFileName : new type.BinaryString(Buffer.from(Array(64 + 1).join('\x00'), 'binary'), {readLength : new type.CallableValue(64)}) | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240564.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function brushCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_BRUSH, | ||||
| 		brushSupportLevel : new type.UInt32Le(BrushSupport.BRUSH_DEFAULT) | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240566.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function cacheEntry(opt) { | ||||
| 	var self = { | ||||
| 		cacheEntries : new type.UInt16Le(), | ||||
|         cacheMaximumCellSize : new type.UInt16Le()	 | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240565.aspx
 | ||||
|  * @param entries {type.Component} cache entries | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function glyphCapability(entries, opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_GLYPHCACHE, | ||||
| 		glyphCache : entries || new type.Factory(function(s) { | ||||
| 			self.glyphCache = new type.Component([]); | ||||
| 			for(var i = 0; i < 10; i++) { | ||||
| 				self.glyphCache.obj.push(cacheEntry().read(s)); | ||||
| 			} | ||||
| 		}), | ||||
|         fragCache : new type.UInt32Le(), | ||||
|         // all fonts are sent with bitmap format (very expensive)
 | ||||
|         glyphSupportLevel : new type.UInt16Le(GlyphSupport.GLYPH_SUPPORT_NONE), | ||||
|         pad2octets : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240550.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function offscreenBitmapCacheCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_OFFSCREENCACHE, | ||||
| 		offscreenSupportLevel : new type.UInt32Le(OffscreenSupportLevel.FALSE), | ||||
|         offscreenCacheSize : new type.UInt16Le(), | ||||
|         offscreenCacheEntries : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240551.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function virtualChannelCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_VIRTUALCHANNEL, | ||||
| 		flags : new type.UInt32Le(VirtualChannelCompressionFlag.VCCAPS_NO_COMPR), | ||||
|         VCChunkSize : new type.UInt32Le(null, {optional : true})	 | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240552.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function soundCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_SOUND, | ||||
| 		soundFlags : new type.UInt16Le(SoundFlag.NONE), | ||||
| 	    pad2octetsA : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240568.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function controlCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_CONTROL, | ||||
| 		controlFlags : new type.UInt16Le(), | ||||
| 		remoteDetachFlag : new type.UInt16Le(), | ||||
| 		controlInterest : new type.UInt16Le(0x0002), | ||||
| 		detachInterest : new type.UInt16Le(0x0002) | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240569.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function windowActivationCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_ACTIVATION, | ||||
| 		helpKeyFlag : new type.UInt16Le(), | ||||
|         helpKeyIndexFlag : new type.UInt16Le(), | ||||
|         helpExtendedKeyFlag : new type.UInt16Le(), | ||||
|         windowManagerKeyFlag : new type.UInt16Le()	 | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240571.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function fontCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_FONT, | ||||
| 		fontSupportFlags : new type.UInt16Le(0x0001), | ||||
| 		pad2octets : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc241564.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function colorCacheCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_COLORCACHE, | ||||
| 		colorTableCacheSize : new type.UInt16Le(0x0006), | ||||
| 		pad2octets : new type.UInt16Le() | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240570.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function shareCapability(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSTYPE_SHARE, | ||||
| 		nodeId : new type.UInt16Le(), | ||||
| 		pad2octets : new type.UInt16Le()	 | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240649.aspx
 | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function multiFragmentUpdate(opt) { | ||||
| 	var self = { | ||||
| 		__TYPE__ : CapsType.CAPSETTYPE_MULTIFRAGMENTUPDATE, | ||||
| 		MaxRequestSize : new type.UInt32Le(0) | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Capability wrapper packet | ||||
|  * @see http://msdn.microsoft.com/en-us/library/cc240486.aspx
 | ||||
|  * @param cap {type.Component} | ||||
|  * @param opt {object} type options | ||||
|  * @returns {type.Component} | ||||
|  */ | ||||
| function capability(cap, opt) { | ||||
| 	var self = { | ||||
| 		capabilitySetType : new type.UInt16Le(function() { | ||||
| 			return self.capability.obj.__TYPE__; | ||||
| 		}), | ||||
| 		lengthCapability : new type.UInt16Le(function() { | ||||
| 			return new type.Component(self).size(); | ||||
| 		}), | ||||
| 		capability : cap || new type.Factory(function(s) { | ||||
| 			switch(self.capabilitySetType.value) { | ||||
| 			case CapsType.CAPSTYPE_GENERAL: | ||||
| 				self.capability = generalCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_BITMAP: | ||||
| 				self.capability = bitmapCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_ORDER: | ||||
| 				self.capability = orderCapability(null, {readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_BITMAPCACHE: | ||||
| 				self.capability = bitmapCacheCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_POINTER: | ||||
| 				self.capability = pointerCapability(false, {readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_INPUT: | ||||
| 				self.capability = inputCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_BRUSH: | ||||
| 				self.capability = brushCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_GLYPHCACHE: | ||||
| 				self.capability = glyphCapability(null, {readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_OFFSCREENCACHE: | ||||
| 				self.capability = offscreenBitmapCacheCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_VIRTUALCHANNEL: | ||||
| 				self.capability = virtualChannelCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_SOUND: | ||||
| 				self.capability = soundCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_CONTROL: | ||||
| 				self.capability = controlCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_ACTIVATION: | ||||
| 				self.capability = windowActivationCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_FONT: | ||||
| 				self.capability = fontCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_COLORCACHE: | ||||
| 				self.capability = colorCacheCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSTYPE_SHARE: | ||||
| 				self.capability = shareCapability({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			case CapsType.CAPSETTYPE_MULTIFRAGMENTUPDATE: | ||||
| 				self.capability = multiFragmentUpdate({readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 				break; | ||||
| 			default: | ||||
| 				log.debug('unknown capability ' + self.capabilitySetType.value); | ||||
| 				self.capability = new type.BinaryString(null, {readLength : new type.CallableValue(function() { | ||||
| 					return self.lengthCapability.value - 4; | ||||
| 				})}).read(s); | ||||
| 			} | ||||
| 		}) | ||||
| 	}; | ||||
| 	 | ||||
| 	return new type.Component(self, opt); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Module exports | ||||
|  */ | ||||
| module.exports = { | ||||
| 	CapsType : CapsType, | ||||
| 	MajorType : MajorType, | ||||
| 	MinorType : MinorType, | ||||
| 	GeneralExtraFlag : GeneralExtraFlag, | ||||
| 	Boolean : Boolean, | ||||
| 	OrderFlag : OrderFlag, | ||||
| 	Order : Order, | ||||
| 	OrderEx : OrderEx, | ||||
| 	InputFlags : InputFlags, | ||||
| 	BrushSupport : BrushSupport, | ||||
| 	GlyphSupport : GlyphSupport, | ||||
| 	OffscreenSupportLevel : OffscreenSupportLevel, | ||||
| 	VirtualChannelCompressionFlag : VirtualChannelCompressionFlag, | ||||
| 	SoundFlag : SoundFlag, | ||||
| 	generalCapability : generalCapability, | ||||
| 	bitmapCapability : bitmapCapability, | ||||
| 	orderCapability : orderCapability, | ||||
| 	bitmapCacheCapability : bitmapCacheCapability, | ||||
| 	pointerCapability : pointerCapability, | ||||
| 	inputCapability : inputCapability, | ||||
| 	brushCapability : brushCapability, | ||||
| 	cacheEntry : cacheEntry, | ||||
| 	glyphCapability : glyphCapability, | ||||
| 	offscreenBitmapCacheCapability : offscreenBitmapCacheCapability, | ||||
| 	virtualChannelCapability : virtualChannelCapability, | ||||
| 	soundCapability : soundCapability, | ||||
| 	controlCapability : controlCapability, | ||||
| 	windowActivationCapability : windowActivationCapability, | ||||
| 	fontCapability : fontCapability, | ||||
| 	colorCacheCapability : colorCacheCapability, | ||||
| 	shareCapability : shareCapability, | ||||
| 	multiFragmentUpdate : multiFragmentUpdate, | ||||
| 	capability : capability | ||||
| }; | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue