aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/contrib/wbxml/ASWBXML.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/contrib/wbxml/ASWBXML.py')
-rw-r--r--libmproxy/contrib/wbxml/ASWBXML.py903
1 files changed, 0 insertions, 903 deletions
diff --git a/libmproxy/contrib/wbxml/ASWBXML.py b/libmproxy/contrib/wbxml/ASWBXML.py
deleted file mode 100644
index 926d18c0..00000000
--- a/libmproxy/contrib/wbxml/ASWBXML.py
+++ /dev/null
@@ -1,903 +0,0 @@
-#!/usr/bin/env python
-'''
-@author: David Shaw, david.shaw.aw@gmail.com
-
-Inspired by EAS Inspector for Fiddler
-https://easinspectorforfiddler.codeplex.com
-
------ The MIT License (MIT) -----
-Filename: ASWBXML.py
-Copyright (c) 2014, David P. Shaw
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-'''
-import xml.dom.minidom
-import logging
-
-from ASWBXMLCodePage import ASWBXMLCodePage
-from ASWBXMLByteQueue import ASWBXMLByteQueue
-from GlobalTokens import GlobalTokens
-from InvalidDataException import InvalidDataException
-
-class ASWBXML:
- versionByte = 0x03
- publicIdentifierByte = 0x01
- characterSetByte = 0x6A
- stringTableLengthByte = 0x00
-
- def __init__(self):
-
- # empty on init
- self.xmlDoc = xml.dom.minidom.Document()
- self.currentCodePage = 0
- self.defaultCodePage = -1
-
- # Load up code pages
- # Currently there are 25 code pages as per MS-ASWBXML
- self.codePages = []
-
- # region Code Page Initialization
- # Code Page 0: AirSync
- # region AirSync Code Page
- page = ASWBXMLCodePage()
- page.namespace = "AirSync:"
- page.xmlns = "airsync"
-
- page.addToken(0x05, "Sync")
- page.addToken(0x06, "Responses")
- page.addToken(0x07, "Add")
- page.addToken(0x08, "Change")
- page.addToken(0x09, "Delete")
- page.addToken(0x0A, "Fetch")
- page.addToken(0x0B, "SyncKey")
- page.addToken(0x0C, "ClientId")
- page.addToken(0x0D, "ServerId")
- page.addToken(0x0E, "Status")
- page.addToken(0x0F, "Collection")
- page.addToken(0x10, "Class")
- page.addToken(0x12, "CollectionId")
- page.addToken(0x13, "GetChanges")
- page.addToken(0x14, "MoreAvailable")
- page.addToken(0x15, "WindowSize")
- page.addToken(0x16, "Commands")
- page.addToken(0x17, "Options")
- page.addToken(0x18, "FilterType")
- page.addToken(0x1B, "Conflict")
- page.addToken(0x1C, "Collections")
- page.addToken(0x1D, "ApplicationData")
- page.addToken(0x1E, "DeletesAsMoves")
- page.addToken(0x20, "Supported")
- page.addToken(0x21, "SoftDelete")
- page.addToken(0x22, "MIMESupport")
- page.addToken(0x23, "MIMETruncation")
- page.addToken(0x24, "Wait")
- page.addToken(0x25, "Limit")
- page.addToken(0x26, "Partial")
- page.addToken(0x27, "ConversationMode")
- page.addToken(0x28, "MaxItems")
- page.addToken(0x29, "HeartbeatInterval")
- self.codePages.append(page)
- # endregion
-
- # Code Page 1: Contacts
- # region Contacts Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Contacts:"
- page.xmlns = "contacts"
-
- page.addToken(0x05, "Anniversary")
- page.addToken(0x06, "AssistantName")
- page.addToken(0x07, "AssistantTelephoneNumber")
- page.addToken(0x08, "Birthday")
- page.addToken(0x0C, "Business2PhoneNumber")
- page.addToken(0x0D, "BusinessCity")
- page.addToken(0x0E, "BusinessCountry")
- page.addToken(0x0F, "BusinessPostalCode")
- page.addToken(0x10, "BusinessState")
- page.addToken(0x11, "BusinessStreet")
- page.addToken(0x12, "BusinessFaxNumber")
- page.addToken(0x13, "BusinessPhoneNumber")
- page.addToken(0x14, "CarPhoneNumber")
- page.addToken(0x15, "Categories")
- page.addToken(0x16, "Category")
- page.addToken(0x17, "Children")
- page.addToken(0x18, "Child")
- page.addToken(0x19, "CompanyName")
- page.addToken(0x1A, "Department")
- page.addToken(0x1B, "Email1Address")
- page.addToken(0x1C, "Email2Address")
- page.addToken(0x1D, "Email3Address")
- page.addToken(0x1E, "FileAs")
- page.addToken(0x1F, "FirstName")
- page.addToken(0x20, "Home2PhoneNumber")
- page.addToken(0x21, "HomeCity")
- page.addToken(0x22, "HomeCountry")
- page.addToken(0x23, "HomePostalCode")
- page.addToken(0x24, "HomeState")
- page.addToken(0x25, "HomeStreet")
- page.addToken(0x26, "HomeFaxNumber")
- page.addToken(0x27, "HomePhoneNumber")
- page.addToken(0x28, "JobTitle")
- page.addToken(0x29, "LastName")
- page.addToken(0x2A, "MiddleName")
- page.addToken(0x2B, "MobilePhoneNumber")
- page.addToken(0x2C, "OfficeLocation")
- page.addToken(0x2D, "OtherCity")
- page.addToken(0x2E, "OtherCountry")
- page.addToken(0x2F, "OtherPostalCode")
- page.addToken(0x30, "OtherState")
- page.addToken(0x31, "OtherStreet")
- page.addToken(0x32, "PagerNumber")
- page.addToken(0x33, "RadioPhoneNumber")
- page.addToken(0x34, "Spouse")
- page.addToken(0x35, "Suffix")
- page.addToken(0x36, "Title")
- page.addToken(0x37, "Webpage")
- page.addToken(0x38, "YomiCompanyName")
- page.addToken(0x39, "YomiFirstName")
- page.addToken(0x3A, "YomiLastName")
- page.addToken(0x3C, "Picture")
- page.addToken(0x3D, "Alias")
- page.addToken(0x3E, "WeightedRank")
- self.codePages.append(page)
- # endregion
-
- # Code Page 2: Email
- # region Email Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Email:"
- page.xmlns = "email"
-
- page.addToken(0x0F, "DateReceived")
- page.addToken(0x11, "DisplayTo")
- page.addToken(0x12, "Importance")
- page.addToken(0x13, "MessageClass")
- page.addToken(0x14, "Subject")
- page.addToken(0x15, "Read")
- page.addToken(0x16, "To")
- page.addToken(0x17, "CC")
- page.addToken(0x18, "From")
- page.addToken(0x19, "ReplyTo")
- page.addToken(0x1A, "AllDayEvent")
- page.addToken(0x1B, "Categories")
- page.addToken(0x1C, "Category")
- page.addToken(0x1D, "DTStamp")
- page.addToken(0x1E, "EndTime")
- page.addToken(0x1F, "InstanceType")
- page.addToken(0x20, "BusyStatus")
- page.addToken(0x21, "Location")
- page.addToken(0x22, "MeetingRequest")
- page.addToken(0x23, "Organizer")
- page.addToken(0x24, "RecurrenceId")
- page.addToken(0x25, "Reminder")
- page.addToken(0x26, "ResponseRequested")
- page.addToken(0x27, "Recurrences")
- page.addToken(0x28, "Recurrence")
- page.addToken(0x29, "Recurrence_Type")
- page.addToken(0x2A, "Recurrence_Until")
- page.addToken(0x2B, "Recurrence_Occurrences")
- page.addToken(0x2C, "Recurrence_Interval")
- page.addToken(0x2D, "Recurrence_DayOfWeek")
- page.addToken(0x2E, "Recurrence_DayOfMonth")
- page.addToken(0x2F, "Recurrence_WeekOfMonth")
- page.addToken(0x30, "Recurrence_MonthOfYear")
- page.addToken(0x31, "StartTime")
- page.addToken(0x32, "Sensitivity")
- page.addToken(0x33, "TimeZone")
- page.addToken(0x34, "GlobalObjId")
- page.addToken(0x35, "ThreadTopic")
- page.addToken(0x39, "InternetCPID")
- page.addToken(0x3A, "Flag")
- page.addToken(0x3B, "FlagStatus")
- page.addToken(0x3C, "ContentClass")
- page.addToken(0x3D, "FlagType")
- page.addToken(0x3E, "CompleteTime")
- page.addToken(0x3F, "DisallowNewTimeProposal")
- self.codePages.append(page)
- # endregion
-
- # Code Page 3: AirNotify - retired
- # region AirNotify Code Page
- page = ASWBXMLCodePage()
- page.namespace = ""
- page.xmlns = ""
- self.codePages.append(page)
- # endregion
-
- # Code Page 4: Calendar
- # region Calendar Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Calendar:"
- page.xmlns = "calendar"
-
- page.addToken(0x05, "TimeZone")
- page.addToken(0x06, "AllDayEvent")
- page.addToken(0x07, "Attendees")
- page.addToken(0x08, "Attendee")
- page.addToken(0x09, "Attendee_Email")
- page.addToken(0x0A, "Attendee_Name")
- page.addToken(0x0D, "BusyStatus")
- page.addToken(0x0E, "Categories")
- page.addToken(0x0F, "Category")
- page.addToken(0x11, "DTStamp")
- page.addToken(0x12, "EndTime")
- page.addToken(0x13, "Exception")
- page.addToken(0x14, "Exceptions")
- page.addToken(0x15, "Exception_Deleted")
- page.addToken(0x16, "Exception_StartTime")
- page.addToken(0x17, "Location")
- page.addToken(0x18, "MeetingStatus")
- page.addToken(0x19, "Organizer_Email")
- page.addToken(0x1A, "Organizer_Name")
- page.addToken(0x1B, "Recurrence")
- page.addToken(0x1C, "Recurrence_Type")
- page.addToken(0x1D, "Recurrence_Until")
- page.addToken(0x1E, "Recurrence_Occurrences")
- page.addToken(0x1F, "Recurrence_Interval")
- page.addToken(0x20, "Recurrence_DayOfWeek")
- page.addToken(0x21, "Recurrence_DayOfMonth")
- page.addToken(0x22, "Recurrence_WeekOfMonth")
- page.addToken(0x23, "Recurrence_MonthOfYear")
- page.addToken(0x24, "Reminder")
- page.addToken(0x25, "Sensitivity")
- page.addToken(0x26, "Subject")
- page.addToken(0x27, "StartTime")
- page.addToken(0x28, "UID")
- page.addToken(0x29, "Attendee_Status")
- page.addToken(0x2A, "Attendee_Type")
- page.addToken(0x33, "DisallowNewTimeProposal")
- page.addToken(0x34, "ResponseRequested")
- page.addToken(0x35, "AppointmentReplyTime")
- page.addToken(0x36, "ResponseType")
- page.addToken(0x37, "CalendarType")
- page.addToken(0x38, "IsLeapMonth")
- page.addToken(0x39, "FirstDayOfWeek")
- page.addToken(0x3A, "OnlineMeetingConfLink")
- page.addToken(0x3B, "OnlineMeetingExternalLink")
- self.codePages.append(page)
- # endregion
-
- # Code Page 5: Move
- # region Move Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Move:"
- page.xmlns = "move"
-
- page.addToken(0x05, "MoveItems")
- page.addToken(0x06, "Move")
- page.addToken(0x07, "SrcMsgId")
- page.addToken(0x08, "SrcFldId")
- page.addToken(0x09, "DstFldId")
- page.addToken(0x0A, "Response")
- page.addToken(0x0B, "Status")
- page.addToken(0x0C, "DstMsgId")
- self.codePages.append(page)
- # endregion
-
- # Code Page 6: ItemEstimate
- # region ItemEstimate Code Page
- page = ASWBXMLCodePage()
- page.namespace = "GetItemEstimate:"
- page.xmlns = "getitemestimate"
-
- page.addToken(0x05, "GetItemEstimate")
- page.addToken(0x06, "Version")
- page.addToken(0x07, "Collections")
- page.addToken(0x08, "Collection")
- page.addToken(0x09, "Class")
- page.addToken(0x0A, "CollectionId")
- page.addToken(0x0B, "DateTime")
- page.addToken(0x0C, "Estimate")
- page.addToken(0x0D, "Response")
- page.addToken(0x0E, "Status")
- self.codePages.append(page)
- # endregion
-
- # Code Page 7: FolderHierarchy
- # region FolderHierarchy Code Page
- page = ASWBXMLCodePage()
- page.namespace = "FolderHierarchy:"
- page.xmlns = "folderhierarchy"
-
- page.addToken(0x07, "DisplayName")
- page.addToken(0x08, "ServerId")
- page.addToken(0x09, "ParentId")
- page.addToken(0x0A, "Type")
- page.addToken(0x0C, "Status")
- page.addToken(0x0E, "Changes")
- page.addToken(0x0F, "Add")
- page.addToken(0x10, "Delete")
- page.addToken(0x11, "Update")
- page.addToken(0x12, "SyncKey")
- page.addToken(0x13, "FolderCreate")
- page.addToken(0x14, "FolderDelete")
- page.addToken(0x15, "FolderUpdate")
- page.addToken(0x16, "FolderSync")
- page.addToken(0x17, "Count")
-
- self.codePages.append(page)
- # endregion
-
- # Code Page 8: MeetingResponse
- # region MeetingResponse Code Page
- page = ASWBXMLCodePage()
- page.namespace = "MeetingResponse:"
- page.xmlns = "meetingresponse"
-
- page.addToken(0x05, "CalendarId")
- page.addToken(0x06, "CollectionId")
- page.addToken(0x07, "MeetingResponse")
- page.addToken(0x08, "RequestId")
- page.addToken(0x09, "Request")
- page.addToken(0x0A, "Result")
- page.addToken(0x0B, "Status")
- page.addToken(0x0C, "UserResponse")
- page.addToken(0x0E, "InstanceId")
- self.codePages.append(page)
- # endregion
-
- # Code Page 9: Tasks
- # region Tasks Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Tasks:"
- page.xmlns = "tasks"
-
- page.addToken(0x08, "Categories")
- page.addToken(0x09, "Category")
- page.addToken(0x0A, "Complete")
- page.addToken(0x0B, "DateCompleted")
- page.addToken(0x0C, "DueDate")
- page.addToken(0x0D, "UTCDueDate")
- page.addToken(0x0E, "Importance")
- page.addToken(0x0F, "Recurrence")
- page.addToken(0x10, "Recurrence_Type")
- page.addToken(0x11, "Recurrence_Start")
- page.addToken(0x12, "Recurrence_Until")
- page.addToken(0x13, "Recurrence_Occurrences")
- page.addToken(0x14, "Recurrence_Interval")
- page.addToken(0x15, "Recurrence_DayOfMonth")
- page.addToken(0x16, "Recurrence_DayOfWeek")
- page.addToken(0x17, "Recurrence_WeekOfMonth")
- page.addToken(0x18, "Recurrence_MonthOfYear")
- page.addToken(0x19, "Recurrence_Regenerate")
- page.addToken(0x1A, "Recurrence_DeadOccur")
- page.addToken(0x1B, "ReminderSet")
- page.addToken(0x1C, "ReminderTime")
- page.addToken(0x1D, "Sensitivity")
- page.addToken(0x1E, "StartDate")
- page.addToken(0x1F, "UTCStartDate")
- page.addToken(0x20, "Subject")
- page.addToken(0x22, "OrdinalDate")
- page.addToken(0x23, "SubOrdinalDate")
- page.addToken(0x24, "CalendarType")
- page.addToken(0x25, "IsLeapMonth")
- page.addToken(0x26, "FirstDayOfWeek")
- self.codePages.append(page)
- # endregion
-
- # Code Page 10: ResolveRecipients
- # region ResolveRecipients Code Page
- page = ASWBXMLCodePage()
- page.namespace = "ResolveRecipients:"
- page.xmlns = "resolverecipients"
-
- page.addToken(0x05, "ResolveRecipients")
- page.addToken(0x06, "Response")
- page.addToken(0x07, "Status")
- page.addToken(0x08, "Type")
- page.addToken(0x09, "Recipient")
- page.addToken(0x0A, "DisplayName")
- page.addToken(0x0B, "EmailAddress")
- page.addToken(0x0C, "Certificates")
- page.addToken(0x0D, "Certificate")
- page.addToken(0x0E, "MiniCertificate")
- page.addToken(0x0F, "Options")
- page.addToken(0x10, "To")
- page.addToken(0x11, "CertificateRetrieval")
- page.addToken(0x12, "RecipientCount")
- page.addToken(0x13, "MaxCertificates")
- page.addToken(0x14, "MaxAmbiguousRecipients")
- page.addToken(0x15, "CertificateCount")
- page.addToken(0x16, "Availability")
- page.addToken(0x17, "StartTime")
- page.addToken(0x18, "EndTime")
- page.addToken(0x19, "MergedFreeBusy")
- page.addToken(0x1A, "Picture")
- page.addToken(0x1B, "MaxSize")
- page.addToken(0x1C, "Data")
- page.addToken(0x1D, "MaxPictures")
- self.codePages.append(page)
- # endregion
-
- # Code Page 11: ValidateCert
- # region ValidateCert Code Page
- page = ASWBXMLCodePage()
- page.namespace = "ValidateCert:"
- page.xmlns = "validatecert"
-
- page.addToken(0x05, "ValidateCert")
- page.addToken(0x06, "Certificates")
- page.addToken(0x07, "Certificate")
- page.addToken(0x08, "CertificateChain")
- page.addToken(0x09, "CheckCRL")
- page.addToken(0x0A, "Status")
- self.codePages.append(page)
- # endregion
-
- # Code Page 12: Contacts2
- # region Contacts2 Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Contacts2:"
- page.xmlns = "contacts2"
-
- page.addToken(0x05, "CustomerId")
- page.addToken(0x06, "GovernmentId")
- page.addToken(0x07, "IMAddress")
- page.addToken(0x08, "IMAddress2")
- page.addToken(0x09, "IMAddress3")
- page.addToken(0x0A, "ManagerName")
- page.addToken(0x0B, "CompanyMainPhone")
- page.addToken(0x0C, "AccountName")
- page.addToken(0x0D, "NickName")
- page.addToken(0x0E, "MMS")
- self.codePages.append(page)
- # endregion
-
- # Code Page 13: Ping
- # region Ping Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Ping:"
- page.xmlns = "ping"
-
- page.addToken(0x05, "Ping")
- page.addToken(0x06, "AutdState") # Per MS-ASWBXML, this tag is not used by protocol
- page.addToken(0x07, "Status")
- page.addToken(0x08, "HeartbeatInterval")
- page.addToken(0x09, "Folders")
- page.addToken(0x0A, "Folder")
- page.addToken(0x0B, "Id")
- page.addToken(0x0C, "Class")
- page.addToken(0x0D, "MaxFolders")
- self.codePages.append(page)
- # endregion
-
- # Code Page 14: Provision
- # region Provision Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Provision:"
- page.xmlns = "provision"
-
- page.addToken(0x05, "Provision")
- page.addToken(0x06, "Policies")
- page.addToken(0x07, "Policy")
- page.addToken(0x08, "PolicyType")
- page.addToken(0x09, "PolicyKey")
- page.addToken(0x0A, "Data")
- page.addToken(0x0B, "Status")
- page.addToken(0x0C, "RemoteWipe")
- page.addToken(0x0D, "EASProvisionDoc")
- page.addToken(0x0E, "DevicePasswordEnabled")
- page.addToken(0x0F, "AlphanumericDevicePasswordRequired")
- page.addToken(0x10, "RequireStorageCardEncryption")
- page.addToken(0x11, "PasswordRecoveryEnabled")
- page.addToken(0x13, "AttachmentsEnabled")
- page.addToken(0x14, "MinDevicePasswordLength")
- page.addToken(0x15, "MaxInactivityTimeDeviceLock")
- page.addToken(0x16, "MaxDevicePasswordFailedAttempts")
- page.addToken(0x17, "MaxAttachmentSize")
- page.addToken(0x18, "AllowSimpleDevicePassword")
- page.addToken(0x19, "DevicePasswordExpiration")
- page.addToken(0x1A, "DevicePasswordHistory")
- page.addToken(0x1B, "AllowStorageCard")
- page.addToken(0x1C, "AllowCamera")
- page.addToken(0x1D, "RequireDeviceEncryption")
- page.addToken(0x1E, "AllowUnsignedApplications")
- page.addToken(0x1F, "AllowUnsignedInstallationPackages")
- page.addToken(0x20, "MinDevicePasswordComplexCharacters")
- page.addToken(0x21, "AllowWiFi")
- page.addToken(0x22, "AllowTextMessaging")
- page.addToken(0x23, "AllowPOPIMAPEmail")
- page.addToken(0x24, "AllowBluetooth")
- page.addToken(0x25, "AllowIrDA")
- page.addToken(0x26, "RequireManualSyncWhenRoaming")
- page.addToken(0x27, "AllowDesktopSync")
- page.addToken(0x28, "MaxCalendarAgeFilter")
- page.addToken(0x29, "AllowHTMLEmail")
- page.addToken(0x2A, "MaxEmailAgeFilter")
- page.addToken(0x2B, "MaxEmailBodyTruncationSize")
- page.addToken(0x2C, "MaxEmailHTMLBodyTruncationSize")
- page.addToken(0x2D, "RequireSignedSMIMEMessages")
- page.addToken(0x2E, "RequireEncryptedSMIMEMessages")
- page.addToken(0x2F, "RequireSignedSMIMEAlgorithm")
- page.addToken(0x30, "RequireEncryptionSMIMEAlgorithm")
- page.addToken(0x31, "AllowSMIMEEncryptionAlgorithmNegotiation")
- page.addToken(0x32, "AllowSMIMESoftCerts")
- page.addToken(0x33, "AllowBrowser")
- page.addToken(0x34, "AllowConsumerEmail")
- page.addToken(0x35, "AllowRemoteDesktop")
- page.addToken(0x36, "AllowInternetSharing")
- page.addToken(0x37, "UnapprovedInROMApplicationList")
- page.addToken(0x38, "ApplicationName")
- page.addToken(0x39, "ApprovedApplicationList")
- page.addToken(0x3A, "Hash")
- self.codePages.append(page)
- # endregion
-
- # Code Page 15: Search
- # region Search Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Search:"
- page.xmlns = "search"
-
- page.addToken(0x05, "Search")
- page.addToken(0x07, "Store")
- page.addToken(0x08, "Name")
- page.addToken(0x09, "Query")
- page.addToken(0x0A, "Options")
- page.addToken(0x0B, "Range")
- page.addToken(0x0C, "Status")
- page.addToken(0x0D, "Response")
- page.addToken(0x0E, "Result")
- page.addToken(0x0F, "Properties")
- page.addToken(0x10, "Total")
- page.addToken(0x11, "EqualTo")
- page.addToken(0x12, "Value")
- page.addToken(0x13, "And")
- page.addToken(0x14, "Or")
- page.addToken(0x15, "FreeText")
- page.addToken(0x17, "DeepTraversal")
- page.addToken(0x18, "LongId")
- page.addToken(0x19, "RebuildResults")
- page.addToken(0x1A, "LessThan")
- page.addToken(0x1B, "GreaterThan")
- page.addToken(0x1E, "UserName")
- page.addToken(0x1F, "Password")
- page.addToken(0x20, "ConversationId")
- page.addToken(0x21, "Picture")
- page.addToken(0x22, "MaxSize")
- page.addToken(0x23, "MaxPictures")
- self.codePages.append(page)
- # endregion
-
- # Code Page 16: GAL
- # region GAL Code Page
- page = ASWBXMLCodePage()
- page.namespace = "GAL:"
- page.xmlns = "gal"
-
- page.addToken(0x05, "DisplayName")
- page.addToken(0x06, "Phone")
- page.addToken(0x07, "Office")
- page.addToken(0x08, "Title")
- page.addToken(0x09, "Company")
- page.addToken(0x0A, "Alias")
- page.addToken(0x0B, "FirstName")
- page.addToken(0x0C, "LastName")
- page.addToken(0x0D, "HomePhone")
- page.addToken(0x0E, "MobilePhone")
- page.addToken(0x0F, "EmailAddress")
- page.addToken(0x10, "Picture")
- page.addToken(0x11, "Status")
- page.addToken(0x12, "Data")
- self.codePages.append(page)
- # endregion
-
- # Code Page 17: AirSyncBase
- # region AirSyncBase Code Page
- page = ASWBXMLCodePage()
- page.namespace = "AirSyncBase:"
- page.xmlns = "airsyncbase"
-
- page.addToken(0x05, "BodyPreference")
- page.addToken(0x06, "Type")
- page.addToken(0x07, "TruncationSize")
- page.addToken(0x08, "AllOrNone")
- page.addToken(0x0A, "Body")
- page.addToken(0x0B, "Data")
- page.addToken(0x0C, "EstimatedDataSize")
- page.addToken(0x0D, "Truncated")
- page.addToken(0x0E, "Attachments")
- page.addToken(0x0F, "Attachment")
- page.addToken(0x10, "DisplayName")
- page.addToken(0x11, "FileReference")
- page.addToken(0x12, "Method")
- page.addToken(0x13, "ContentId")
- page.addToken(0x14, "ContentLocation")
- page.addToken(0x15, "IsInline")
- page.addToken(0x16, "NativeBodyType")
- page.addToken(0x17, "ContentType")
- page.addToken(0x18, "Preview")
- page.addToken(0x19, "BodyPartPreference")
- page.addToken(0x1A, "BodyPart")
- page.addToken(0x1B, "Status")
- self.codePages.append(page)
- # endregion
-
- # Code Page 18: Settings
- # region Settings Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Settings:"
- page.xmlns = "settings"
-
- page.addToken(0x05, "Settings")
- page.addToken(0x06, "Status")
- page.addToken(0x07, "Get")
- page.addToken(0x08, "Set")
- page.addToken(0x09, "Oof")
- page.addToken(0x0A, "OofState")
- page.addToken(0x0B, "StartTime")
- page.addToken(0x0C, "EndTime")
- page.addToken(0x0D, "OofMessage")
- page.addToken(0x0E, "AppliesToInternal")
- page.addToken(0x0F, "AppliesToExternalKnown")
- page.addToken(0x10, "AppliesToExternalUnknown")
- page.addToken(0x11, "Enabled")
- page.addToken(0x12, "ReplyMessage")
- page.addToken(0x13, "BodyType")
- page.addToken(0x14, "DevicePassword")
- page.addToken(0x15, "Password")
- page.addToken(0x16, "DeviceInformation")
- page.addToken(0x17, "Model")
- page.addToken(0x18, "IMEI")
- page.addToken(0x19, "FriendlyName")
- page.addToken(0x1A, "OS")
- page.addToken(0x1B, "OSLanguage")
- page.addToken(0x1C, "PhoneNumber")
- page.addToken(0x1D, "UserInformation")
- page.addToken(0x1E, "EmailAddresses")
- page.addToken(0x1F, "SmtpAddress")
- page.addToken(0x20, "UserAgent")
- page.addToken(0x21, "EnableOutboundSMS")
- page.addToken(0x22, "MobileOperator")
- page.addToken(0x23, "PrimarySmtpAddress")
- page.addToken(0x24, "Accounts")
- page.addToken(0x25, "Account")
- page.addToken(0x26, "AccountId")
- page.addToken(0x27, "AccountName")
- page.addToken(0x28, "UserDisplayName")
- page.addToken(0x29, "SendDisabled")
- page.addToken(0x2B, "RightsManagementInformation")
- self.codePages.append(page)
- # endregion
-
- # Code Page 19: DocumentLibrary
- # region DocumentLibrary Code Page
- page = ASWBXMLCodePage()
- page.namespace = "DocumentLibrary:"
- page.xmlns = "documentlibrary"
-
- page.addToken(0x05, "LinkId")
- page.addToken(0x06, "DisplayName")
- page.addToken(0x07, "IsFolder")
- page.addToken(0x08, "CreationDate")
- page.addToken(0x09, "LastModifiedDate")
- page.addToken(0x0A, "IsHidden")
- page.addToken(0x0B, "ContentLength")
- page.addToken(0x0C, "ContentType")
- self.codePages.append(page)
- # endregion
-
- # Code Page 20: ItemOperations
- # region ItemOperations Code Page
- page = ASWBXMLCodePage()
- page.namespace = "ItemOperations:"
- page.xmlns = "itemoperations"
-
- page.addToken(0x05, "ItemOperations")
- page.addToken(0x06, "Fetch")
- page.addToken(0x07, "Store")
- page.addToken(0x08, "Options")
- page.addToken(0x09, "Range")
- page.addToken(0x0A, "Total")
- page.addToken(0x0B, "Properties")
- page.addToken(0x0C, "Data")
- page.addToken(0x0D, "Status")
- page.addToken(0x0E, "Response")
- page.addToken(0x0F, "Version")
- page.addToken(0x10, "Schema")
- page.addToken(0x11, "Part")
- page.addToken(0x12, "EmptyFolderContents")
- page.addToken(0x13, "DeleteSubFolders")
- page.addToken(0x14, "UserName")
- page.addToken(0x15, "Password")
- page.addToken(0x16, "Move")
- page.addToken(0x17, "DstFldId")
- page.addToken(0x18, "ConversationId")
- page.addToken(0x19, "MoveAlways")
- self.codePages.append(page)
- # endregion
-
- # Code Page 21: ComposeMail
- # region ComposeMail Code Page
- page = ASWBXMLCodePage()
- page.namespace = "ComposeMail:"
- page.xmlns = "composemail"
-
- page.addToken(0x05, "SendMail")
- page.addToken(0x06, "SmartForward")
- page.addToken(0x07, "SmartReply")
- page.addToken(0x08, "SaveInSentItems")
- page.addToken(0x09, "ReplaceMime")
- page.addToken(0x0B, "Source")
- page.addToken(0x0C, "FolderId")
- page.addToken(0x0D, "ItemId")
- page.addToken(0x0E, "LongId")
- page.addToken(0x0F, "InstanceId")
- page.addToken(0x10, "MIME")
- page.addToken(0x11, "ClientId")
- page.addToken(0x12, "Status")
- page.addToken(0x13, "AccountId")
- self.codePages.append(page)
- # endregion
-
- # Code Page 22: Email2
- # region Email2 Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Email2:"
- page.xmlns = "email2"
-
- page.addToken(0x05, "UmCallerID")
- page.addToken(0x06, "UmUserNotes")
- page.addToken(0x07, "UmAttDuration")
- page.addToken(0x08, "UmAttOrder")
- page.addToken(0x09, "ConversationId")
- page.addToken(0x0A, "ConversationIndex")
- page.addToken(0x0B, "LastVerbExecuted")
- page.addToken(0x0C, "LastVerbExecutionTime")
- page.addToken(0x0D, "ReceivedAsBcc")
- page.addToken(0x0E, "Sender")
- page.addToken(0x0F, "CalendarType")
- page.addToken(0x10, "IsLeapMonth")
- page.addToken(0x11, "AccountId")
- page.addToken(0x12, "FirstDayOfWeek")
- page.addToken(0x13, "MeetingMessageType")
- self.codePages.append(page)
- # endregion
-
- # Code Page 23: Notes
- # region Notes Code Page
- page = ASWBXMLCodePage()
- page.namespace = "Notes:"
- page.xmlns = "notes"
-
- page.addToken(0x05, "Subject")
- page.addToken(0x06, "MessageClass")
- page.addToken(0x07, "LastModifiedDate")
- page.addToken(0x08, "Categories")
- page.addToken(0x09, "Category")
- self.codePages.append(page)
- # endregion
-
- # Code Page 24: RightsManagement
- # region RightsManagement Code Page
- page = ASWBXMLCodePage()
- page.namespace = "RightsManagement:"
- page.xmlns = "rightsmanagement"
-
- page.addToken(0x05, "RightsManagementSupport")
- page.addToken(0x06, "RightsManagementTemplates")
- page.addToken(0x07, "RightsManagementTemplate")
- page.addToken(0x08, "RightsManagementLicense")
- page.addToken(0x09, "EditAllowed")
- page.addToken(0x0A, "ReplyAllowed")
- page.addToken(0x0B, "ReplyAllAllowed")
- page.addToken(0x0C, "ForwardAllowed")
- page.addToken(0x0D, "ModifyRecipientsAllowed")
- page.addToken(0x0E, "ExtractAllowed")
- page.addToken(0x0F, "PrintAllowed")
- page.addToken(0x10, "ExportAllowed")
- page.addToken(0x11, "ProgrammaticAccessAllowed")
- page.addToken(0x12, "RMOwner")
- page.addToken(0x13, "ContentExpiryDate")
- page.addToken(0x14, "TemplateID")
- page.addToken(0x15, "TemplateName")
- page.addToken(0x16, "TemplateDescription")
- page.addToken(0x17, "ContentOwner")
- page.addToken(0x18, "RemoveRightsManagementDistribution")
- self.codePages.append(page)
- # endregion
- # endregion
-
- def loadXml(self, strXML):
- # note xmlDoc has .childNodes and .parentNode
- self.xmlDoc = xml.dom.minidom.parseString(strXML)
-
- def getXml(self):
- if (self.xmlDoc != None):
- try:
- return self.xmlDoc.toprettyxml(indent=" ", newl="\n")
- except:
- return self.xmlDoc.toxml()
-
- def loadBytes(self, byteWBXML):
-
- currentNode = self.xmlDoc
-
- wbXMLBytes = ASWBXMLByteQueue(byteWBXML)
- # Version is ignored
- version = wbXMLBytes.dequeueAndLog()
-
- # Public Identifier is ignored
- publicId = wbXMLBytes.dequeueMultibyteInt()
-
- logging.debug("Version: %d, Public Identifier: %d" % (version, publicId))
-
- # Character set
- # Currently only UTF-8 is supported, throw if something else
- charset = wbXMLBytes.dequeueMultibyteInt()
- if (charset != 0x6A):
- raise InvalidDataException("ASWBXML only supports UTF-8 encoded XML.")
-
- # String table length
- # This should be 0, MS-ASWBXML does not use string tables
- stringTableLength = wbXMLBytes.dequeueMultibyteInt()
- if (stringTableLength != 0):
- raise InvalidDataException("WBXML data contains a string table.")
-
- # Now we should be at the body of the data.
- # Add the declaration
- 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]
-
- while ( wbXMLBytes.qsize() > 0):
- currentByte = wbXMLBytes.dequeueAndLog()
- if ( currentByte == GlobalTokens.SWITCH_PAGE ):
- newCodePage = wbXMLBytes.dequeueAndLog()
- if (newCodePage >= 0 and newCodePage < 25):
- self.currentCodePage = newCodePage
- else:
- raise InvalidDataException("Unknown code page ID 0x{0:X} encountered in WBXML".format(currentByte))
- elif ( currentByte == GlobalTokens.END ):
- if (currentNode != None and currentNode.parentNode != None):
- currentNode = currentNode.parentNode
- else:
- raise InvalidDataException("END global token encountered out of sequence")
- break
- elif ( currentByte == GlobalTokens.OPAQUE ):
- CDATALength = wbXMLBytes.dequeueMultibyteInt()
- newOpaqueNode = self.xmlDoc.createCDATASection(wbXMLBytes.dequeueString(CDATALength))
- currentNode.appendChild(newOpaqueNode)
-
- elif ( currentByte == GlobalTokens.STR_I ):
- newTextNode = self.xmlDoc.createTextNode(wbXMLBytes.dequeueString())
- currentNode.appendChild(newTextNode)
-
- elif ( currentByte in unusedArray):
- raise InvalidDataException("Encountered unknown global token 0x{0:X}.".format(currentByte))
- else:
- hasAttributes = (currentByte & 0x80) > 0
- hasContent = (currentByte & 0x40) > 0
-
- token = currentByte & 0x3F
- if (hasAttributes):
- raise InvalidDataException("Token 0x{0:X} has attributes.".format(token))
-
- strTag = self.codePages[self.currentCodePage].getTag(token)
- if (strTag == None):
- strTag = "UNKNOWN_TAG_{0,2:X}".format(token)
-
- newNode = self.xmlDoc.createElement(strTag)
- # not sure if this should be set on every node or not
- #newNode.setAttribute("xmlns", self.codePages[self.currentCodePage].xmlns)
-
- currentNode.appendChild(newNode)
-
- if (hasContent):
- currentNode = newNode
-
- logging.debug("Total bytes dequeued: %d" % wbXMLBytes.bytesDequeued)