Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
ASWBXML.py904 linesDownload Raw Back to wbxml
1#!/usr/bin/env python32'''3@author: David Shaw, shawd@vmware.com4 5Inspired by EAS Inspector for Fiddler6https://easinspectorforfiddler.codeplex.com7 8----- The MIT License (MIT) ----- 9Filename: ASWBXML.py10Copyright (c) 2014, David P. Shaw11 12Permission is hereby granted, free of charge, to any person obtaining a copy13of this software and associated documentation files (the "Software"), to deal14in the Software without restriction, including without limitation the rights15to use, copy, modify, merge, publish, distribute, sublicense, and/or sell16copies of the Software, and to permit persons to whom the Software is17furnished to do so, subject to the following conditions:18 19The above copyright notice and this permission notice shall be included in20all copies or substantial portions of the Software.21 22THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR23IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,24FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE25AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER26LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,27OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN28THE SOFTWARE.29'''30import xml.dom.minidom31import logging32 33from .ASWBXMLCodePage import ASWBXMLCodePage34from .ASWBXMLByteQueue import ASWBXMLByteQueue35from .GlobalTokens import GlobalTokens36from .InvalidDataException import InvalidDataException37 38class ASWBXML:39	versionByte = 0x0340	publicIdentifierByte = 0x0141	characterSetByte = 0x6A42	stringTableLengthByte = 0x0043	44	def __init__(self):45		46		# empty on init47		self.xmlDoc = xml.dom.minidom.Document()48		self.currentCodePage = 049		self.defaultCodePage = -150		51		# Load up code pages52		# Currently there are 25 code pages as per MS-ASWBXML53		self.codePages = []54 55		# region Code Page Initialization56		# Code Page 0: AirSync57		# region AirSync Code Page58		page = ASWBXMLCodePage()59		page.namespace = "AirSync:"60		page.xmlns = "airsync"61 62		page.addToken(0x05, "Sync")63		page.addToken(0x06, "Responses")64		page.addToken(0x07, "Add")65		page.addToken(0x08, "Change")66		page.addToken(0x09, "Delete")67		page.addToken(0x0A, "Fetch")68		page.addToken(0x0B, "SyncKey")69		page.addToken(0x0C, "ClientId")70		page.addToken(0x0D, "ServerId")71		page.addToken(0x0E, "Status")72		page.addToken(0x0F, "Collection")73		page.addToken(0x10, "Class")74		page.addToken(0x12, "CollectionId")75		page.addToken(0x13, "GetChanges")76		page.addToken(0x14, "MoreAvailable")77		page.addToken(0x15, "WindowSize")78		page.addToken(0x16, "Commands")79		page.addToken(0x17, "Options")80		page.addToken(0x18, "FilterType")81		page.addToken(0x1B, "Conflict")82		page.addToken(0x1C, "Collections")83		page.addToken(0x1D, "ApplicationData")84		page.addToken(0x1E, "DeletesAsMoves")85		page.addToken(0x20, "Supported")86		page.addToken(0x21, "SoftDelete")87		page.addToken(0x22, "MIMESupport")88		page.addToken(0x23, "MIMETruncation")89		page.addToken(0x24, "Wait")90		page.addToken(0x25, "Limit")91		page.addToken(0x26, "Partial")92		page.addToken(0x27, "ConversationMode")93		page.addToken(0x28, "MaxItems")94		page.addToken(0x29, "HeartbeatInterval")95		self.codePages.append(page)96		# endregion97 98		# Code Page 1: Contacts99		# region Contacts Code Page100		page = ASWBXMLCodePage()101		page.namespace = "Contacts:"102		page.xmlns = "contacts"103 104		page.addToken(0x05, "Anniversary")105		page.addToken(0x06, "AssistantName")106		page.addToken(0x07, "AssistantTelephoneNumber")107		page.addToken(0x08, "Birthday")108		page.addToken(0x0C, "Business2PhoneNumber")109		page.addToken(0x0D, "BusinessCity")110		page.addToken(0x0E, "BusinessCountry")111		page.addToken(0x0F, "BusinessPostalCode")112		page.addToken(0x10, "BusinessState")113		page.addToken(0x11, "BusinessStreet")114		page.addToken(0x12, "BusinessFaxNumber")115		page.addToken(0x13, "BusinessPhoneNumber")116		page.addToken(0x14, "CarPhoneNumber")117		page.addToken(0x15, "Categories")118		page.addToken(0x16, "Category")119		page.addToken(0x17, "Children")120		page.addToken(0x18, "Child")121		page.addToken(0x19, "CompanyName")122		page.addToken(0x1A, "Department")123		page.addToken(0x1B, "Email1Address")124		page.addToken(0x1C, "Email2Address")125		page.addToken(0x1D, "Email3Address")126		page.addToken(0x1E, "FileAs")127		page.addToken(0x1F, "FirstName")128		page.addToken(0x20, "Home2PhoneNumber")129		page.addToken(0x21, "HomeCity")130		page.addToken(0x22, "HomeCountry")131		page.addToken(0x23, "HomePostalCode")132		page.addToken(0x24, "HomeState")133		page.addToken(0x25, "HomeStreet")134		page.addToken(0x26, "HomeFaxNumber")135		page.addToken(0x27, "HomePhoneNumber")136		page.addToken(0x28, "JobTitle")137		page.addToken(0x29, "LastName")138		page.addToken(0x2A, "MiddleName")139		page.addToken(0x2B, "MobilePhoneNumber")140		page.addToken(0x2C, "OfficeLocation")141		page.addToken(0x2D, "OtherCity")142		page.addToken(0x2E, "OtherCountry")143		page.addToken(0x2F, "OtherPostalCode")144		page.addToken(0x30, "OtherState")145		page.addToken(0x31, "OtherStreet")146		page.addToken(0x32, "PagerNumber")147		page.addToken(0x33, "RadioPhoneNumber")148		page.addToken(0x34, "Spouse")149		page.addToken(0x35, "Suffix")150		page.addToken(0x36, "Title")151		page.addToken(0x37, "Webpage")152		page.addToken(0x38, "YomiCompanyName")153		page.addToken(0x39, "YomiFirstName")154		page.addToken(0x3A, "YomiLastName")155		page.addToken(0x3C, "Picture")156		page.addToken(0x3D, "Alias")157		page.addToken(0x3E, "WeightedRank")158		self.codePages.append(page)159		# endregion160 161		# Code Page 2: Email162		# region Email Code Page163		page = ASWBXMLCodePage()164		page.namespace = "Email:"165		page.xmlns = "email"166 167		page.addToken(0x0F, "DateReceived")168		page.addToken(0x11, "DisplayTo")169		page.addToken(0x12, "Importance")170		page.addToken(0x13, "MessageClass")171		page.addToken(0x14, "Subject")172		page.addToken(0x15, "Read")173		page.addToken(0x16, "To")174		page.addToken(0x17, "CC")175		page.addToken(0x18, "From")176		page.addToken(0x19, "ReplyTo")177		page.addToken(0x1A, "AllDayEvent")178		page.addToken(0x1B, "Categories")179		page.addToken(0x1C, "Category")180		page.addToken(0x1D, "DTStamp")181		page.addToken(0x1E, "EndTime")182		page.addToken(0x1F, "InstanceType")183		page.addToken(0x20, "BusyStatus")184		page.addToken(0x21, "Location")185		page.addToken(0x22, "MeetingRequest")186		page.addToken(0x23, "Organizer")187		page.addToken(0x24, "RecurrenceId")188		page.addToken(0x25, "Reminder")189		page.addToken(0x26, "ResponseRequested")190		page.addToken(0x27, "Recurrences")191		page.addToken(0x28, "Recurrence")192		page.addToken(0x29, "Recurrence_Type")193		page.addToken(0x2A, "Recurrence_Until")194		page.addToken(0x2B, "Recurrence_Occurrences")195		page.addToken(0x2C, "Recurrence_Interval")196		page.addToken(0x2D, "Recurrence_DayOfWeek")197		page.addToken(0x2E, "Recurrence_DayOfMonth")198		page.addToken(0x2F, "Recurrence_WeekOfMonth")199		page.addToken(0x30, "Recurrence_MonthOfYear")200		page.addToken(0x31, "StartTime")201		page.addToken(0x32, "Sensitivity")202		page.addToken(0x33, "TimeZone")203		page.addToken(0x34, "GlobalObjId")204		page.addToken(0x35, "ThreadTopic")205		page.addToken(0x39, "InternetCPID")206		page.addToken(0x3A, "Flag")207		page.addToken(0x3B, "FlagStatus")208		page.addToken(0x3C, "ContentClass")209		page.addToken(0x3D, "FlagType")210		page.addToken(0x3E, "CompleteTime")211		page.addToken(0x3F, "DisallowNewTimeProposal")212		self.codePages.append(page)213		# endregion214 215		# Code Page 3: AirNotify - retired216		# region AirNotify Code Page217		page = ASWBXMLCodePage()218		page.namespace = ""219		page.xmlns = ""220		self.codePages.append(page)221		# endregion222 223		# Code Page 4: Calendar224		# region Calendar Code Page225		page = ASWBXMLCodePage()226		page.namespace = "Calendar:"227		page.xmlns = "calendar"228 229		page.addToken(0x05, "TimeZone")230		page.addToken(0x06, "AllDayEvent")231		page.addToken(0x07, "Attendees")232		page.addToken(0x08, "Attendee")233		page.addToken(0x09, "Attendee_Email")234		page.addToken(0x0A, "Attendee_Name")235		page.addToken(0x0D, "BusyStatus")236		page.addToken(0x0E, "Categories")237		page.addToken(0x0F, "Category")238		page.addToken(0x11, "DTStamp")239		page.addToken(0x12, "EndTime")240		page.addToken(0x13, "Exception")241		page.addToken(0x14, "Exceptions")242		page.addToken(0x15, "Exception_Deleted")243		page.addToken(0x16, "Exception_StartTime")244		page.addToken(0x17, "Location")245		page.addToken(0x18, "MeetingStatus")246		page.addToken(0x19, "Organizer_Email")247		page.addToken(0x1A, "Organizer_Name")248		page.addToken(0x1B, "Recurrence")249		page.addToken(0x1C, "Recurrence_Type")250		page.addToken(0x1D, "Recurrence_Until")251		page.addToken(0x1E, "Recurrence_Occurrences")252		page.addToken(0x1F, "Recurrence_Interval")253		page.addToken(0x20, "Recurrence_DayOfWeek")254		page.addToken(0x21, "Recurrence_DayOfMonth")255		page.addToken(0x22, "Recurrence_WeekOfMonth")256		page.addToken(0x23, "Recurrence_MonthOfYear")257		page.addToken(0x24, "Reminder")258		page.addToken(0x25, "Sensitivity")259		page.addToken(0x26, "Subject")260		page.addToken(0x27, "StartTime")261		page.addToken(0x28, "UID")262		page.addToken(0x29, "Attendee_Status")263		page.addToken(0x2A, "Attendee_Type")264		page.addToken(0x33, "DisallowNewTimeProposal")265		page.addToken(0x34, "ResponseRequested")266		page.addToken(0x35, "AppointmentReplyTime")267		page.addToken(0x36, "ResponseType")268		page.addToken(0x37, "CalendarType")269		page.addToken(0x38, "IsLeapMonth")270		page.addToken(0x39, "FirstDayOfWeek")271		page.addToken(0x3A, "OnlineMeetingConfLink")272		page.addToken(0x3B, "OnlineMeetingExternalLink")273		self.codePages.append(page)274		# endregion275 276		# Code Page 5: Move277		# region Move Code Page278		page = ASWBXMLCodePage()279		page.namespace = "Move:"280		page.xmlns = "move"281 282		page.addToken(0x05, "MoveItems")283		page.addToken(0x06, "Move")284		page.addToken(0x07, "SrcMsgId")285		page.addToken(0x08, "SrcFldId")286		page.addToken(0x09, "DstFldId")287		page.addToken(0x0A, "Response")288		page.addToken(0x0B, "Status")289		page.addToken(0x0C, "DstMsgId")290		self.codePages.append(page)291		# endregion292 293		# Code Page 6: ItemEstimate294		# region ItemEstimate Code Page295		page = ASWBXMLCodePage()296		page.namespace = "GetItemEstimate:"297		page.xmlns = "getitemestimate"298 299		page.addToken(0x05, "GetItemEstimate")300		page.addToken(0x06, "Version")301		page.addToken(0x07, "Collections")302		page.addToken(0x08, "Collection")303		page.addToken(0x09, "Class")304		page.addToken(0x0A, "CollectionId")305		page.addToken(0x0B, "DateTime")306		page.addToken(0x0C, "Estimate")307		page.addToken(0x0D, "Response")308		page.addToken(0x0E, "Status")309		self.codePages.append(page)310		# endregion311 312		# Code Page 7: FolderHierarchy313		# region FolderHierarchy Code Page314		page = ASWBXMLCodePage()315		page.namespace = "FolderHierarchy:"316		page.xmlns = "folderhierarchy"317 318		page.addToken(0x07, "DisplayName")319		page.addToken(0x08, "ServerId")320		page.addToken(0x09, "ParentId")321		page.addToken(0x0A, "Type")322		page.addToken(0x0C, "Status")323		page.addToken(0x0E, "Changes")324		page.addToken(0x0F, "Add")325		page.addToken(0x10, "Delete")326		page.addToken(0x11, "Update")327		page.addToken(0x12, "SyncKey")328		page.addToken(0x13, "FolderCreate")329		page.addToken(0x14, "FolderDelete")330		page.addToken(0x15, "FolderUpdate")331		page.addToken(0x16, "FolderSync")332		page.addToken(0x17, "Count")333 334		self.codePages.append(page)335		# endregion336 337		# Code Page 8: MeetingResponse338		# region MeetingResponse Code Page339		page = ASWBXMLCodePage()340		page.namespace = "MeetingResponse:"341		page.xmlns = "meetingresponse"342 343		page.addToken(0x05, "CalendarId")344		page.addToken(0x06, "CollectionId")345		page.addToken(0x07, "MeetingResponse")346		page.addToken(0x08, "RequestId")347		page.addToken(0x09, "Request")348		page.addToken(0x0A, "Result")349		page.addToken(0x0B, "Status")350		page.addToken(0x0C, "UserResponse")351		page.addToken(0x0E, "InstanceId")352		self.codePages.append(page)353		# endregion354 355		# Code Page 9: Tasks356		# region Tasks Code Page357		page = ASWBXMLCodePage()358		page.namespace = "Tasks:"359		page.xmlns = "tasks"360 361		page.addToken(0x08, "Categories")362		page.addToken(0x09, "Category")363		page.addToken(0x0A, "Complete")364		page.addToken(0x0B, "DateCompleted")365		page.addToken(0x0C, "DueDate")366		page.addToken(0x0D, "UTCDueDate")367		page.addToken(0x0E, "Importance")368		page.addToken(0x0F, "Recurrence")369		page.addToken(0x10, "Recurrence_Type")370		page.addToken(0x11, "Recurrence_Start")371		page.addToken(0x12, "Recurrence_Until")372		page.addToken(0x13, "Recurrence_Occurrences")373		page.addToken(0x14, "Recurrence_Interval")374		page.addToken(0x15, "Recurrence_DayOfMonth")375		page.addToken(0x16, "Recurrence_DayOfWeek")376		page.addToken(0x17, "Recurrence_WeekOfMonth")377		page.addToken(0x18, "Recurrence_MonthOfYear")378		page.addToken(0x19, "Recurrence_Regenerate")379		page.addToken(0x1A, "Recurrence_DeadOccur")380		page.addToken(0x1B, "ReminderSet")381		page.addToken(0x1C, "ReminderTime")382		page.addToken(0x1D, "Sensitivity")383		page.addToken(0x1E, "StartDate")384		page.addToken(0x1F, "UTCStartDate")385		page.addToken(0x20, "Subject")386		page.addToken(0x22, "OrdinalDate")387		page.addToken(0x23, "SubOrdinalDate")388		page.addToken(0x24, "CalendarType")389		page.addToken(0x25, "IsLeapMonth")390		page.addToken(0x26, "FirstDayOfWeek")391		self.codePages.append(page)392		# endregion393 394		# Code Page 10: ResolveRecipients395		# region ResolveRecipients Code Page396		page = ASWBXMLCodePage()397		page.namespace = "ResolveRecipients:"398		page.xmlns = "resolverecipients"399 400		page.addToken(0x05, "ResolveRecipients")401		page.addToken(0x06, "Response")402		page.addToken(0x07, "Status")403		page.addToken(0x08, "Type")404		page.addToken(0x09, "Recipient")405		page.addToken(0x0A, "DisplayName")406		page.addToken(0x0B, "EmailAddress")407		page.addToken(0x0C, "Certificates")408		page.addToken(0x0D, "Certificate")409		page.addToken(0x0E, "MiniCertificate")410		page.addToken(0x0F, "Options")411		page.addToken(0x10, "To")412		page.addToken(0x11, "CertificateRetrieval")413		page.addToken(0x12, "RecipientCount")414		page.addToken(0x13, "MaxCertificates")415		page.addToken(0x14, "MaxAmbiguousRecipients")416		page.addToken(0x15, "CertificateCount")417		page.addToken(0x16, "Availability")418		page.addToken(0x17, "StartTime")419		page.addToken(0x18, "EndTime")420		page.addToken(0x19, "MergedFreeBusy")421		page.addToken(0x1A, "Picture")422		page.addToken(0x1B, "MaxSize")423		page.addToken(0x1C, "Data")424		page.addToken(0x1D, "MaxPictures")425		self.codePages.append(page)426		# endregion427 428		# Code Page 11: ValidateCert429		# region ValidateCert Code Page430		page = ASWBXMLCodePage()431		page.namespace = "ValidateCert:"432		page.xmlns = "validatecert"433 434		page.addToken(0x05, "ValidateCert")435		page.addToken(0x06, "Certificates")436		page.addToken(0x07, "Certificate")437		page.addToken(0x08, "CertificateChain")438		page.addToken(0x09, "CheckCRL")439		page.addToken(0x0A, "Status")440		self.codePages.append(page)441		# endregion442 443		# Code Page 12: Contacts2444		# region Contacts2 Code Page445		page = ASWBXMLCodePage()446		page.namespace = "Contacts2:"447		page.xmlns = "contacts2"448 449		page.addToken(0x05, "CustomerId")450		page.addToken(0x06, "GovernmentId")451		page.addToken(0x07, "IMAddress")452		page.addToken(0x08, "IMAddress2")453		page.addToken(0x09, "IMAddress3")454		page.addToken(0x0A, "ManagerName")455		page.addToken(0x0B, "CompanyMainPhone")456		page.addToken(0x0C, "AccountName")457		page.addToken(0x0D, "NickName")458		page.addToken(0x0E, "MMS")459		self.codePages.append(page)460		# endregion461 462		# Code Page 13: Ping463		# region Ping Code Page464		page = ASWBXMLCodePage()465		page.namespace = "Ping:"466		page.xmlns = "ping"467 468		page.addToken(0x05, "Ping")469		page.addToken(0x06, "AutdState")  # Per MS-ASWBXML, this tag is not used by protocol470		page.addToken(0x07, "Status")471		page.addToken(0x08, "HeartbeatInterval")472		page.addToken(0x09, "Folders")473		page.addToken(0x0A, "Folder")474		page.addToken(0x0B, "Id")475		page.addToken(0x0C, "Class")476		page.addToken(0x0D, "MaxFolders")477		self.codePages.append(page)478		# endregion479 480		# Code Page 14: Provision481		# region Provision Code Page482		page = ASWBXMLCodePage()483		page.namespace = "Provision:"484		page.xmlns = "provision"485 486		page.addToken(0x05, "Provision")487		page.addToken(0x06, "Policies")488		page.addToken(0x07, "Policy")489		page.addToken(0x08, "PolicyType")490		page.addToken(0x09, "PolicyKey")491		page.addToken(0x0A, "Data")492		page.addToken(0x0B, "Status")493		page.addToken(0x0C, "RemoteWipe")494		page.addToken(0x0D, "EASProvisionDoc")495		page.addToken(0x0E, "DevicePasswordEnabled")496		page.addToken(0x0F, "AlphanumericDevicePasswordRequired")497		page.addToken(0x10, "RequireStorageCardEncryption")498		page.addToken(0x11, "PasswordRecoveryEnabled")499		page.addToken(0x13, "AttachmentsEnabled")500		page.addToken(0x14, "MinDevicePasswordLength")501		page.addToken(0x15, "MaxInactivityTimeDeviceLock")502		page.addToken(0x16, "MaxDevicePasswordFailedAttempts")503		page.addToken(0x17, "MaxAttachmentSize")504		page.addToken(0x18, "AllowSimpleDevicePassword")505		page.addToken(0x19, "DevicePasswordExpiration")506		page.addToken(0x1A, "DevicePasswordHistory")507		page.addToken(0x1B, "AllowStorageCard")508		page.addToken(0x1C, "AllowCamera")509		page.addToken(0x1D, "RequireDeviceEncryption")510		page.addToken(0x1E, "AllowUnsignedApplications")511		page.addToken(0x1F, "AllowUnsignedInstallationPackages")512		page.addToken(0x20, "MinDevicePasswordComplexCharacters")513		page.addToken(0x21, "AllowWiFi")514		page.addToken(0x22, "AllowTextMessaging")515		page.addToken(0x23, "AllowPOPIMAPEmail")516		page.addToken(0x24, "AllowBluetooth")517		page.addToken(0x25, "AllowIrDA")518		page.addToken(0x26, "RequireManualSyncWhenRoaming")519		page.addToken(0x27, "AllowDesktopSync")520		page.addToken(0x28, "MaxCalendarAgeFilter")521		page.addToken(0x29, "AllowHTMLEmail")522		page.addToken(0x2A, "MaxEmailAgeFilter")523		page.addToken(0x2B, "MaxEmailBodyTruncationSize")524		page.addToken(0x2C, "MaxEmailHTMLBodyTruncationSize")525		page.addToken(0x2D, "RequireSignedSMIMEMessages")526		page.addToken(0x2E, "RequireEncryptedSMIMEMessages")527		page.addToken(0x2F, "RequireSignedSMIMEAlgorithm")528		page.addToken(0x30, "RequireEncryptionSMIMEAlgorithm")529		page.addToken(0x31, "AllowSMIMEEncryptionAlgorithmNegotiation")530		page.addToken(0x32, "AllowSMIMESoftCerts")531		page.addToken(0x33, "AllowBrowser")532		page.addToken(0x34, "AllowConsumerEmail")533		page.addToken(0x35, "AllowRemoteDesktop")534		page.addToken(0x36, "AllowInternetSharing")535		page.addToken(0x37, "UnapprovedInROMApplicationList")536		page.addToken(0x38, "ApplicationName")537		page.addToken(0x39, "ApprovedApplicationList")538		page.addToken(0x3A, "Hash")539		self.codePages.append(page)540		# endregion541 542		# Code Page 15: Search543		# region Search Code Page544		page = ASWBXMLCodePage()545		page.namespace = "Search:"546		page.xmlns = "search"547 548		page.addToken(0x05, "Search")549		page.addToken(0x07, "Store")550		page.addToken(0x08, "Name")551		page.addToken(0x09, "Query")552		page.addToken(0x0A, "Options")553		page.addToken(0x0B, "Range")554		page.addToken(0x0C, "Status")555		page.addToken(0x0D, "Response")556		page.addToken(0x0E, "Result")557		page.addToken(0x0F, "Properties")558		page.addToken(0x10, "Total")559		page.addToken(0x11, "EqualTo")560		page.addToken(0x12, "Value")561		page.addToken(0x13, "And")562		page.addToken(0x14, "Or")563		page.addToken(0x15, "FreeText")564		page.addToken(0x17, "DeepTraversal")565		page.addToken(0x18, "LongId")566		page.addToken(0x19, "RebuildResults")567		page.addToken(0x1A, "LessThan")568		page.addToken(0x1B, "GreaterThan")569		page.addToken(0x1E, "UserName")570		page.addToken(0x1F, "Password")571		page.addToken(0x20, "ConversationId")572		page.addToken(0x21, "Picture")573		page.addToken(0x22, "MaxSize")574		page.addToken(0x23, "MaxPictures")575		self.codePages.append(page)576		# endregion577 578		# Code Page 16: GAL579		# region GAL Code Page580		page = ASWBXMLCodePage()581		page.namespace = "GAL:"582		page.xmlns = "gal"583 584		page.addToken(0x05, "DisplayName")585		page.addToken(0x06, "Phone")586		page.addToken(0x07, "Office")587		page.addToken(0x08, "Title")588		page.addToken(0x09, "Company")589		page.addToken(0x0A, "Alias")590		page.addToken(0x0B, "FirstName")591		page.addToken(0x0C, "LastName")592		page.addToken(0x0D, "HomePhone")593		page.addToken(0x0E, "MobilePhone")594		page.addToken(0x0F, "EmailAddress")595		page.addToken(0x10, "Picture")596		page.addToken(0x11, "Status")597		page.addToken(0x12, "Data")598		self.codePages.append(page)599		# endregion600 601		# Code Page 17: AirSyncBase602		# region AirSyncBase Code Page603		page = ASWBXMLCodePage()604		page.namespace = "AirSyncBase:"605		page.xmlns = "airsyncbase"606 607		page.addToken(0x05, "BodyPreference")608		page.addToken(0x06, "Type")609		page.addToken(0x07, "TruncationSize")610		page.addToken(0x08, "AllOrNone")611		page.addToken(0x0A, "Body")612		page.addToken(0x0B, "Data")613		page.addToken(0x0C, "EstimatedDataSize")614		page.addToken(0x0D, "Truncated")615		page.addToken(0x0E, "Attachments")616		page.addToken(0x0F, "Attachment")617		page.addToken(0x10, "DisplayName")618		page.addToken(0x11, "FileReference")619		page.addToken(0x12, "Method")620		page.addToken(0x13, "ContentId")621		page.addToken(0x14, "ContentLocation")622		page.addToken(0x15, "IsInline")623		page.addToken(0x16, "NativeBodyType")624		page.addToken(0x17, "ContentType")625		page.addToken(0x18, "Preview")626		page.addToken(0x19, "BodyPartPreference")627		page.addToken(0x1A, "BodyPart")628		page.addToken(0x1B, "Status")629		self.codePages.append(page)630		# endregion631 632		# Code Page 18: Settings633		# region Settings Code Page634		page = ASWBXMLCodePage()635		page.namespace = "Settings:"636		page.xmlns = "settings"637 638		page.addToken(0x05, "Settings")639		page.addToken(0x06, "Status")640		page.addToken(0x07, "Get")641		page.addToken(0x08, "Set")642		page.addToken(0x09, "Oof")643		page.addToken(0x0A, "OofState")644		page.addToken(0x0B, "StartTime")645		page.addToken(0x0C, "EndTime")646		page.addToken(0x0D, "OofMessage")647		page.addToken(0x0E, "AppliesToInternal")648		page.addToken(0x0F, "AppliesToExternalKnown")649		page.addToken(0x10, "AppliesToExternalUnknown")650		page.addToken(0x11, "Enabled")651		page.addToken(0x12, "ReplyMessage")652		page.addToken(0x13, "BodyType")653		page.addToken(0x14, "DevicePassword")654		page.addToken(0x15, "Password")655		page.addToken(0x16, "DeviceInformation")656		page.addToken(0x17, "Model")657		page.addToken(0x18, "IMEI")658		page.addToken(0x19, "FriendlyName")659		page.addToken(0x1A, "OS")660		page.addToken(0x1B, "OSLanguage")661		page.addToken(0x1C, "PhoneNumber")662		page.addToken(0x1D, "UserInformation")663		page.addToken(0x1E, "EmailAddresses")664		page.addToken(0x1F, "SmtpAddress")665		page.addToken(0x20, "UserAgent")666		page.addToken(0x21, "EnableOutboundSMS")667		page.addToken(0x22, "MobileOperator")668		page.addToken(0x23, "PrimarySmtpAddress")669		page.addToken(0x24, "Accounts")670		page.addToken(0x25, "Account")671		page.addToken(0x26, "AccountId")672		page.addToken(0x27, "AccountName")673		page.addToken(0x28, "UserDisplayName")674		page.addToken(0x29, "SendDisabled")675		page.addToken(0x2B, "RightsManagementInformation")676		self.codePages.append(page)677		# endregion678 679		# Code Page 19: DocumentLibrary680		# region DocumentLibrary Code Page681		page = ASWBXMLCodePage()682		page.namespace = "DocumentLibrary:"683		page.xmlns = "documentlibrary"684 685		page.addToken(0x05, "LinkId")686		page.addToken(0x06, "DisplayName")687		page.addToken(0x07, "IsFolder")688		page.addToken(0x08, "CreationDate")689		page.addToken(0x09, "LastModifiedDate")690		page.addToken(0x0A, "IsHidden")691		page.addToken(0x0B, "ContentLength")692		page.addToken(0x0C, "ContentType")693		self.codePages.append(page)694		# endregion695 696		# Code Page 20: ItemOperations697		# region ItemOperations Code Page698		page = ASWBXMLCodePage()699		page.namespace = "ItemOperations:"700		page.xmlns = "itemoperations"701 702		page.addToken(0x05, "ItemOperations")703		page.addToken(0x06, "Fetch")704		page.addToken(0x07, "Store")705		page.addToken(0x08, "Options")706		page.addToken(0x09, "Range")707		page.addToken(0x0A, "Total")708		page.addToken(0x0B, "Properties")709		page.addToken(0x0C, "Data")710		page.addToken(0x0D, "Status")711		page.addToken(0x0E, "Response")712		page.addToken(0x0F, "Version")713		page.addToken(0x10, "Schema")714		page.addToken(0x11, "Part")715		page.addToken(0x12, "EmptyFolderContents")716		page.addToken(0x13, "DeleteSubFolders")717		page.addToken(0x14, "UserName")718		page.addToken(0x15, "Password")719		page.addToken(0x16, "Move")720		page.addToken(0x17, "DstFldId")721		page.addToken(0x18, "ConversationId")722		page.addToken(0x19, "MoveAlways")723		self.codePages.append(page)724		# endregion725 726		# Code Page 21: ComposeMail727		# region ComposeMail Code Page728		page = ASWBXMLCodePage()729		page.namespace = "ComposeMail:"730		page.xmlns = "composemail"731 732		page.addToken(0x05, "SendMail")733		page.addToken(0x06, "SmartForward")734		page.addToken(0x07, "SmartReply")735		page.addToken(0x08, "SaveInSentItems")736		page.addToken(0x09, "ReplaceMime")737		page.addToken(0x0B, "Source")738		page.addToken(0x0C, "FolderId")739		page.addToken(0x0D, "ItemId")740		page.addToken(0x0E, "LongId")741		page.addToken(0x0F, "InstanceId")742		page.addToken(0x10, "MIME")743		page.addToken(0x11, "ClientId")744		page.addToken(0x12, "Status")745		page.addToken(0x13, "AccountId")746		self.codePages.append(page)747		# endregion748 749		# Code Page 22: Email2750		# region Email2 Code Page751		page = ASWBXMLCodePage()752		page.namespace = "Email2:"753		page.xmlns = "email2"754 755		page.addToken(0x05, "UmCallerID")756		page.addToken(0x06, "UmUserNotes")757		page.addToken(0x07, "UmAttDuration")758		page.addToken(0x08, "UmAttOrder")759		page.addToken(0x09, "ConversationId")760		page.addToken(0x0A, "ConversationIndex")761		page.addToken(0x0B, "LastVerbExecuted")762		page.addToken(0x0C, "LastVerbExecutionTime")763		page.addToken(0x0D, "ReceivedAsBcc")764		page.addToken(0x0E, "Sender")765		page.addToken(0x0F, "CalendarType")766		page.addToken(0x10, "IsLeapMonth")767		page.addToken(0x11, "AccountId")768		page.addToken(0x12, "FirstDayOfWeek")769		page.addToken(0x13, "MeetingMessageType")770		self.codePages.append(page)771		# endregion772 773		# Code Page 23: Notes774		# region Notes Code Page775		page = ASWBXMLCodePage()776		page.namespace = "Notes:"777		page.xmlns = "notes"778 779		page.addToken(0x05, "Subject")780		page.addToken(0x06, "MessageClass")781		page.addToken(0x07, "LastModifiedDate")782		page.addToken(0x08, "Categories")783		page.addToken(0x09, "Category")784		self.codePages.append(page)785		# endregion786 787		# Code Page 24: RightsManagement788		# region RightsManagement Code Page789		page = ASWBXMLCodePage()790		page.namespace = "RightsManagement:"791		page.xmlns = "rightsmanagement"792 793		page.addToken(0x05, "RightsManagementSupport")794		page.addToken(0x06, "RightsManagementTemplates")795		page.addToken(0x07, "RightsManagementTemplate")796		page.addToken(0x08, "RightsManagementLicense")797		page.addToken(0x09, "EditAllowed")798		page.addToken(0x0A, "ReplyAllowed")799		page.addToken(0x0B, "ReplyAllAllowed")800		page.addToken(0x0C, "ForwardAllowed")801		page.addToken(0x0D, "ModifyRecipientsAllowed")802		page.addToken(0x0E, "ExtractAllowed")803		page.addToken(0x0F, "PrintAllowed")804		page.addToken(0x10, "ExportAllowed")805		page.addToken(0x11, "ProgrammaticAccessAllowed")806		page.addToken(0x12, "RMOwner")807		page.addToken(0x13, "ContentExpiryDate")808		page.addToken(0x14, "TemplateID")809		page.addToken(0x15, "TemplateName")810		page.addToken(0x16, "TemplateDescription")811		page.addToken(0x17, "ContentOwner")812		page.addToken(0x18, "RemoveRightsManagementDistribution")813		self.codePages.append(page)814		# endregion815		# endregion816	817	def loadXml(self, strXML):818		# note xmlDoc has .childNodes and .parentNode819		self.xmlDoc = xml.dom.minidom.parseString(strXML)820 821	def getXml(self):822		if (self.xmlDoc != None):823			try:824				return self.xmlDoc.toprettyxml(indent="    ", newl="\n")825			except:826				return self.xmlDoc.toxml()827	828	def loadBytes(self, byteWBXML):829		830		currentNode = self.xmlDoc831		832		wbXMLBytes = ASWBXMLByteQueue(byteWBXML)833		# Version is ignored834		version = wbXMLBytes.dequeueAndLog()835 836		# Public Identifier is ignored837		publicId = wbXMLBytes.dequeueMultibyteInt()838		839		logging.debug("Version: %d, Public Identifier: %d" % (version, publicId))840		841		# Character set842		# Currently only UTF-8 is supported, throw if something else843		charset = wbXMLBytes.dequeueMultibyteInt()844		if (charset != 0x6A):845			raise InvalidDataException("ASWBXML only supports UTF-8 encoded XML.")846 847		# String table length848		# This should be 0, MS-ASWBXML does not use string tables849		stringTableLength = wbXMLBytes.dequeueMultibyteInt()850		if (stringTableLength != 0):851			raise InvalidDataException("WBXML data contains a string table.")852 853		# Now we should be at the body of the data.854		# Add the declaration855		unusedArray = [GlobalTokens.ENTITY, GlobalTokens.EXT_0, GlobalTokens.EXT_1, GlobalTokens.EXT_2, GlobalTokens.EXT_I_0, GlobalTokens.EXT_I_1, GlobalTokens.EXT_I_2, GlobalTokens.EXT_T_0, GlobalTokens.EXT_T_1, GlobalTokens.EXT_T_2, GlobalTokens.LITERAL, GlobalTokens.LITERAL_A, GlobalTokens.LITERAL_AC, GlobalTokens.LITERAL_C, GlobalTokens.PI, GlobalTokens.STR_T]856		857		while ( wbXMLBytes.qsize() > 0):858			currentByte = wbXMLBytes.dequeueAndLog()859			if ( currentByte == GlobalTokens.SWITCH_PAGE ):860				newCodePage = wbXMLBytes.dequeueAndLog()861				if (newCodePage >= 0 and newCodePage < 25):862					self.currentCodePage = newCodePage863				else:864					raise InvalidDataException("Unknown code page ID 0x{0:X} encountered in WBXML".format(currentByte))865			elif  ( currentByte == GlobalTokens.END ):866				if (currentNode != None and currentNode.parentNode != None):867					currentNode = currentNode.parentNode868				else:869					raise InvalidDataException("END global token encountered out of sequence")870					break871			elif  ( currentByte == GlobalTokens.OPAQUE ):872				CDATALength = wbXMLBytes.dequeueMultibyteInt()873				newOpaqueNode = self.xmlDoc.createCDATASection(wbXMLBytes.dequeueString(CDATALength))874				currentNode.appendChild(newOpaqueNode)875 876			elif  ( currentByte == GlobalTokens.STR_I ):877				newTextNode = self.xmlDoc.createTextNode(wbXMLBytes.dequeueString())878				currentNode.appendChild(newTextNode)879 880			elif ( currentByte in unusedArray):881				raise InvalidDataException("Encountered unknown global token 0x{0:X}.".format(currentByte))882			else:883				hasAttributes = (currentByte & 0x80) > 0884				hasContent = (currentByte & 0x40) > 0885 886				token = currentByte & 0x3F887				if (hasAttributes):888					raise InvalidDataException("Token 0x{0:X} has attributes.".format(token))889 890				strTag = self.codePages[self.currentCodePage].getTag(token)891				if (strTag == None):892					strTag = "UNKNOWN_TAG_{0,2:X}".format(token)893 894				newNode = self.xmlDoc.createElement(strTag)895				# not sure if this should be set on every node or not896				#newNode.setAttribute("xmlns", self.codePages[self.currentCodePage].xmlns)897				898				currentNode.appendChild(newNode)899 900				if (hasContent):901					currentNode = newNode902 903		logging.debug("Total bytes dequeued: %d" % wbXMLBytes.bytesDequeued)904 
codekingpro/portable-devtools · Team Ai