eric6/WebBrowser/FlashCookieManager/FlashCookieReader.py

Wed, 01 Jan 2020 11:57:23 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 01 Jan 2020 11:57:23 +0100
changeset 7360
9190402e4505
parent 7249
0bf517e60f54
child 7781
607a6098cb44
permissions
-rw-r--r--

Updated copyright for 2020.

4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
7360
9190402e4505 Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
3 # Copyright (c) 2015 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a class to read flash cookies.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 # Note: The code is based on s2x.py
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 #
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import struct
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import io
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from PyQt5.QtCore import QDateTime
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class FlashCookieReaderError(Exception):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class containing data of a reader error.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, msg):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Constructor
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @param msg error message
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.msg = msg
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 class FlashCookieReader(object):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Class implementing a reader for flash cookies (*.sol files).
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Number = b'\x00'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 Boolean = b'\x01'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 String = b'\x02'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 ObjObj = b'\x03'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 Null = b'\x05'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 Undef = b'\x06'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 ObjArr = b'\x08'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 ObjDate = b'\x0B'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 ObjM = b'\x0D'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 ObjXml = b'\x0F'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 ObjCc = b'\x10'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 EpochCorrectionMsecs = 31 * 24 * 60 * 60 * 1000
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 # Flash Epoch starts at 1969-12-01
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 def __init__(self):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Constructor
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__result = {}
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 # dictionary with element name as key and tuple of
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 # type and value as value
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__data = None
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.__parsed = False
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 def setBytes(self, solData):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 Public method to set the contents of a sol file to be parsed.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param solData contents of the file
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @type bytes
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__data = io.BytesIO(solData)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 def setFileName(self, solFilename):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 Public method to set the name of a sol file to be parsed.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @param solFilename name of the sol file
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.__data = open(solFilename, "rb")
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 def setFile(self, solFile):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 Public method to set an open sol file to be parsed.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @param solFile sol file to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @type io.FileIO
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.__data = solFile
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def parse(self):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Public method to parse the sol file.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @exception FlashCookieReaderError raised when encountering a parse
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 issue
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 if self.__data is None:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 return
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.__data.seek(0, 2)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 lenSolData = self.__data.tell()
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 self.__data.seek(0)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self.__data.read(2)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 sLenData = self.__data.read(4)
4934
aeffa295acdb Fixed an issue reading an invalid Flash cookie.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4751
diff changeset
106 if len(sLenData) != 4:
aeffa295acdb Fixed an issue reading an invalid Flash cookie.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4751
diff changeset
107 raise FlashCookieReaderError("Flash cookie is invalid.")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 lenData, = struct.unpack(">L", sLenData) # unsigned long, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 if lenSolData != lenData + 6:
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
110 raise FlashCookieReaderError(
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
111 "Flash cookie data lengths don't match\n"
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
112 " file length: {0}\n"
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
113 " data length: {1}"
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
114 .format(lenSolData - 6, lenData))
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 sDataType = self.__data.read(4).decode("utf-8") # 'TCSO'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 if sDataType != "TCSO":
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 raise FlashCookieReaderError(
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 "Flash cookie type is not 'TCSO'; found '{0}'."
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 .format(sDataType))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__data.read(6)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 lenSolName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 solName = self.__data.read(lenSolName)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
124 solName = solName.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.__result["SolName"] = ("string", solName)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.__data.read(4)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 while self.__data.tell() < lenSolData:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 variableName = self.__data.read(lenVariableName)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
131 variableName = variableName.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 variableType = self.__data.read(1)
4466
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
133 if len(variableType):
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
134 if variableType == self.Number:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
135 self.__parseNumber(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
136 elif variableType == self.Boolean:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
137 self.__parseBoolean(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
138 elif variableType == self.String:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
139 self.__parseString(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
140 elif variableType == self.ObjObj:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
141 self.__parseObject(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
142 elif variableType == self.ObjArr:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
143 self.__parseArray(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
144 elif variableType == self.ObjDate:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
145 self.__parseDate(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
146 elif variableType == self.ObjXml:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
147 self.__parseXml(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
148 elif variableType == self.ObjCc:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
149 self.__parseOcc(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
150 elif variableType == self.ObjM:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
151 self.__parseOjm(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
152 elif variableType == self.Null:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
153 self.__parseNull(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
154 elif variableType == self.Undef:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
155 self.__parseUndefined(variableName, self.__result)
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
156 else:
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
157 raise FlashCookieReaderError(
184660eecb94 Fixed a bug in the Flash cookie reader causing an exception when reading beyond the cookie (wrong cookie length given).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4370
diff changeset
158 "Unexpected Data Type: " + hex(ord(variableType)))
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.__data.read(1) # '\x00'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__data.close()
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.__parsed = True
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 def __parseNumber(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 Private method to parse a number.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 b = self.__data.read(8)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 if b == b"\x7F\xF0\x00\x00\x00\x00\x00\x00":
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 value = "Infinity"
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 elif b == b"\xFF\xF0\x00\x00\x00\x00\x00\x00":
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 value = "-Infinity"
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
177 elif b == b"\x7F\xF8\x00\x00\x00\x00\x00\x00":
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 value = "NaN"
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 else:
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
180 value, = struct.unpack(">d", b) # double, big-endian
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 value = str(value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 parent[variableName] = ("number", value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 def __parseBoolean(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 Private method to parse a boolean.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 b = self.__data.read(1)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 if b == b"\x00":
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 value = "False"
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 elif b == b"\x01":
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 value = "True"
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 else:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 # boolean value error; default to True
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 value = "True"
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 parent[variableName] = ("boolean", value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 def __parseString(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 Private method to parse a string.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 lenStr, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 b = self.__data.read(lenStr)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
215 value = b.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 parent[variableName] = ("string", value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 def __parseDate(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 Private method to parse a date.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 msec, = struct.unpack(">d", self.__data.read(8))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 # double, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 # DateObject: Milliseconds Count From Dec. 1, 1969
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 msec -= self.EpochCorrectionMsecs # correct for Unix epoch
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 minOffset, = struct.unpack(">h", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 # short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 offset = minOffset // 60 # offset in hours
7249
0bf517e60f54 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
234 # Timezone is UTC + Offset
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 value = QDateTime()
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 value.setMSecsSinceEpoch(msec)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 value.setOffsetFromUtc(offset * 3600)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 parent[variableName] = ("date",
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 value.toString("yyyy-MM-dd HH:mm:ss t"))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 def __parseXml(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 Private method to parse XML.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 """
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
250 lenCData, = struct.unpack(">L", self.__data.read(4))
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 # unsigned long, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 cData = self.__data.read(lenCData)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
253 value = cData.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 parent[variableName] = ("xml", value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 def __parseOjm(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 Private method to parse an m_object.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 parent[variableName] = ("m_object", "")
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 def __parseNull(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 Private method to parse a null object.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 parent[variableName] = ("null", "")
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 def __parseUndefined(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 Private method to parse an undefined object.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 @type dict
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 parent[variableName] = ("undefined", "")
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 def __parseObject(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 Private method to parse an object.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 @type dict
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
297 @exception FlashCookieReaderError raised when an issue with the cookie
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
298 file is found
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 value = {}
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 parent[variableName] = ("object", value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 while lenVariableName != 0:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 variableName = self.__data.read(lenVariableName)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
307 variableName = variableName.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 variableType = self.__data.read(1)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 if variableType == self.Number:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 self.__parseNumber(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 elif variableType == self.Boolean:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 self.__parseBoolean(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 elif variableType == self.String:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self.__parseString(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 elif variableType == self.ObjObj:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 self.__parseObject(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 elif variableType == self.ObjArr:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 self.__parseArray(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 elif variableType == self.ObjDate:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 self.__parseDate(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 elif variableType == self.ObjXml:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 self.__parseXml(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 elif variableType == self.ObjCc:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 self.__parseOcc(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 elif variableType == self.ObjM:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 self.__parseOjm(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 elif variableType == self.Null:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 self.__parseNull(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 elif variableType == self.Undef:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 self.__parseUndefined(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 else:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 raise FlashCookieReaderError(
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 "Unexpected Data Type: " + hex(ord(variableType)))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 self.__data.read(1) # '\x09'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 def __parseArray(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 Private method to parse an array.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 @type dict
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
345 @exception FlashCookieReaderError raised when an issue with the cookie
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
346 file is found
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 arrayLength, = struct.unpack(">L", self.__data.read(4))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 # unsigned long, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 value = {}
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 parent[variableName] = ("array; length={0}".format(arrayLength), value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 while lenVariableName != 0:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 variableName = self.__data.read(lenVariableName)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
358 variableName = variableName.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 variableType = self.__data.read(1)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 if variableType == self.Number:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 self.__parseNumber(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 elif variableType == self.Boolean:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 self.__parseBoolean(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 elif variableType == self.String:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 self.__parseString(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 elif variableType == self.ObjObj:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 self.__parseObject(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 elif variableType == self.ObjArr:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 self.__parseArray(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 elif variableType == self.ObjDate:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 self.__parseDate(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 elif variableType == self.ObjXml:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 self.__parseXml(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 elif variableType == self.ObjCc:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 self.__parseOcc(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 elif variableType == self.ObjM:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 self.__parseOjm(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 elif variableType == self.Null:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 self.__parseNull(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 elif variableType == self.Undef:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 self.__parseUndefined(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 else:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 raise FlashCookieReaderError(
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 "Unexpected Data Type: " + hex(ord(variableType)))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 self.__data.read(1) # '\x09'
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 def __parseOcc(self, variableName, parent):
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 Private method to parse a c_object.
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 @param variableName name of the variable to be parsed
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 @type str
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 @param parent reference to the dictionary to insert the result into
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 @type dict
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
396 @exception FlashCookieReaderError raised when an issue with the cookie
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
397 file is found
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 """
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 lenCname = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 cname = self.__data.read(lenCname)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
402 cname = cname.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 value = {}
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 parent[variableName] = ("c_object; cname={0}".format(cname), value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 # unsigned short, big-endian
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 while lenVariableName != 0:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 variableName = self.__data.read(lenVariableName)
4614
e8996f522895 Changed the Flash Cookie Reader to ignore UTF-8 decoding issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4466
diff changeset
411 variableName = variableName.decode("utf-8", "replace")
4360
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 variableType = self.__data.read(1)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 if variableType == self.Number:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 self.__parseNumber(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 elif variableType == self.Boolean:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 self.__parseBoolean(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 elif variableType == self.String:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 self.__parseString(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 elif variableType == self.ObjObj:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 self.__parseObject(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 elif variableType == self.ObjArr:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 self.__parseArray(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 elif variableType == self.ObjDate:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 self.__parseDate(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 elif variableType == self.ObjXml:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 self.__parseXml(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 elif variableType == self.ObjCc:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 self.__parseOcc(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 elif variableType == self.ObjM:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 self.__parseOjm(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 elif variableType == self.Null:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 self.__parseNull(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 elif variableType == self.Undef:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 self.__parseUndefined(variableName, value)
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 else:
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 raise FlashCookieReaderError(
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 "Unexpected Data Type: " + hex(ord(variableType)))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 lenVariableName, = struct.unpack(">H", self.__data.read(2))
b8bdb7cd4a92 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 self.__data.read(1) # '\x09'
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
440
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
441 def toString(self, indent=0, parent=None):
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
442 """
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
443 Public method to convert the parsed cookie to a string representation.
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
444
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
445 @param indent indentation level
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
446 @type int
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
447 @param parent reference to the dictionary to be converted
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
448 @type dict
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
449 @return string representation of the cookie
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
450 @rtype str
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
451 """
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
452 indentStr = " " * indent
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
453 strArr = []
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
454
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
455 if parent is None:
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
456 parent = self.__result
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
457
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
458 if not parent:
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
459 return ""
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
460
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
461 for variableName in sorted(parent.keys()):
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
462 variableType, value = parent[variableName]
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
463 if isinstance(value, dict):
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
464 resultStr = self.toString(indent + 1, value)
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
465 if resultStr:
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
466 strArr.append("{0}{1}:\n{2}"
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
467 .format(indentStr, variableName, resultStr))
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
468 else:
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
469 strArr.append("{0}{1}:"
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
470 .format(indentStr, variableName))
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
471 else:
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
472 strArr.append("{0}{1}: {2}"
4370
54dbb658f9e6 Corrected some code style issues and regenerated the source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4361
diff changeset
473 .format(indentStr, variableName, value))
4361
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
474
9eec3a532d59 Continued adding code for a Flash cookie manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4360
diff changeset
475 return "\n".join(strArr)

eric ide

mercurial