46 |
return result |
return result |
47 |
|
|
48 |
def replaceHeaderLine(header, field, replacement): |
def replaceHeaderLine(header, field, replacement): |
49 |
result = delHeaderLines(header, [field]) |
result = [] |
50 |
result.append(replacement) |
delLines = 0 |
51 |
|
foundField = 0 |
52 |
|
tField = [] |
53 |
|
field = field.lower() |
54 |
|
replaced = 0 |
55 |
|
|
56 |
|
for line in header: |
57 |
|
tline = line.lower() |
58 |
|
if tline[:len(field)] == field: |
59 |
|
foundField = 1 |
60 |
|
replaced = 1 |
61 |
|
if foundField: |
62 |
|
foundField = 0 |
63 |
|
delLines = 1 |
64 |
|
#tField = [replacement] |
65 |
|
tField.append('X-Gzzmo-OH-' + line) |
66 |
|
elif not (delLines and line[0] == ' '): |
67 |
|
result += tField |
68 |
|
if delLines: result.append(replacement) |
69 |
|
result.append(line) |
70 |
|
delLines = 0 |
71 |
|
tField = [] |
72 |
|
else: |
73 |
|
tField.append(line) |
74 |
|
|
75 |
|
if not replaced: |
76 |
|
result.append(replacement) |
77 |
return result |
return result |
78 |
|
|
79 |
|
|
80 |
def transformHeader(header, bodyID): |
def transformHeader(header, bodyID): |
81 |
"""Transforms message header to a message/external-body header |
"""Transforms message header to a message/external-body header |
89 |
|
|
90 |
header = replaceHeaderLine(header, 'Content-Transfer-Encoding', |
header = replaceHeaderLine(header, 'Content-Transfer-Encoding', |
91 |
'Content-Transfer-Encoding: binary\r\n') |
'Content-Transfer-Encoding: binary\r\n') |
92 |
header = replaceHeaderLine(header, 'Content-ID', 'Content-ID: ' + idstring + '\r\n\r\n') |
header = replaceHeaderLine(header, 'Content-ID', 'Content-ID: ' + idstring + '\r\n') |
93 |
#headers = delHeaderLines (header, ['Content-Transfer-Encoding']) |
header.append('\r\n') |
94 |
#result = result + headers |
print header |
|
#result.append('Content-Transfer-Encoding: binary\r\n') |
|
|
#result.append('Content-ID: ' + idstring + '\r\n\r\n') |
|
95 |
return result + header |
return result + header |
96 |
|
|
97 |
def getCharset(msg): |
def getCharset(msg): |
100 |
else: |
else: |
101 |
return msg.getparam("charset") |
return msg.getparam("charset") |
102 |
|
|
|
#for param in msg.getplist(): |
|
|
# if param[0:7] == 'charset': |
|
|
# return param[8:] |
|
|
# |
|
|
# return "us-ascii" |
|
|
|
|
103 |
def getContentTypeParams(msg): |
def getContentTypeParams(msg): |
104 |
ctparams = [] |
ctparams = [] |
105 |
for param in msg.getplist(): |
for param in msg.getplist(): |
149 |
|
|
150 |
headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n' |
headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n' |
151 |
id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0) |
id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0) |
|
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
|
152 |
if isReconstructable(mediaserver, id2, tempstore): |
if isReconstructable(mediaserver, id2, tempstore): |
153 |
mediaserver.expungeDatum(tempstore) |
mediaserver.expungeDatum(tempstore) |
154 |
else: |
else: |
155 |
id2 = tempstore |
id2 = tempstore |
|
|
|
|
#print eis.getSubject().makeString(), ": ", id2.getString() |
|
|
#print "----" |
|
|
#print eis.getBody().makeString() |
|
|
#print "----" |
|
156 |
else: |
else: |
157 |
headerLinesH = java.util.ArrayList() |
headerLinesH = java.util.ArrayList() |
158 |
headerLinesB = java.util.ArrayList() |
headerLinesB = java.util.ArrayList() |
172 |
mediaserver.expungeDatum(tempstore) |
mediaserver.expungeDatum(tempstore) |
173 |
else: |
else: |
174 |
id2 = tempstore |
id2 = tempstore |
|
|
|
|
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
|
|
#print eis.getSubject().makeString(), ": ", id2.getString() |
|
|
#print "----" |
|
|
#print eis.getBody().makeString() |
|
|
#print "----" |
|
175 |
mail.close() |
mail.close() |
176 |
tMail.close() |
tMail.close() |
177 |
return id2 |
return id2 |
179 |
def isConvertible(body, charset): |
def isConvertible(body, charset): |
180 |
cBody = "" |
cBody = "" |
181 |
print "Charset: ", charset |
print "Charset: ", charset |
|
#if charset == None: |
|
|
# charset = "us-ascii" |
|
182 |
try: |
try: |
183 |
cBody = java.lang.String(body, charset); |
cBody = java.lang.String(body, charset); |
184 |
except java.io.UnsupportedEncodingException: |
except java.io.UnsupportedEncodingException: |
193 |
return 1 |
return 1 |
194 |
|
|
195 |
def isReconstructable(mediaserver, msid, recid): |
def isReconstructable(mediaserver, msid, recid): |
196 |
|
print "==>isReconstructable" |
197 |
mail = str(java.lang.String(mediaserver.getDatum(msid).getBytes(), "us-ascii")) |
mail = str(java.lang.String(mediaserver.getDatum(msid).getBytes(), "us-ascii")) |
198 |
#mail = StringIO.StringIO(mail) |
#mail = StringIO.StringIO(mail) |
199 |
#msg = mimetools.Message(mail) |
#msg = mimetools.Message(mail) |
200 |
t = java.lang.String(mediaserver.getDatum(recid).getBytes(), "UTF8") |
t = java.lang.String(mediaserver.getDatum(recid).getBytes(), "UTF8") |
201 |
|
|
|
rec = "" |
|
202 |
try: |
try: |
203 |
#reconstruct(mail, mediaserver, msid, 0) |
rec = reconstruct(mail, mediaserver, msid, 0) |
204 |
#print "--------\n-------\n%s-------\n--------\n" % \ |
#print "--------\n-------\n%s-------\n--------\n" % \ |
205 |
# msgZip (reconstruct(mail, mediaserver), str(t)) |
# msgZip (reconstruct(mail, mediaserver), str(t)) |
206 |
None |
#None |
207 |
except: |
except java.lang.Throwable, var: |
208 |
print "Reconverting failed." |
print var |
209 |
|
print "\tReconverting failed." |
210 |
return 1 |
return 1 |
211 |
|
|
212 |
|
maker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker() |
213 |
|
rec1 = maker.makeEnfilade(rec) |
214 |
|
print rec1.makeString() |
215 |
|
|
216 |
|
print "===================================================================================" |
217 |
# print "\t\t\t", msg.getparam("access-type") |
# print "\t\t\t", msg.getparam("access-type") |
218 |
# if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
# if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
219 |
# id = msg.getparam("block")[len("storm:block:"):] |
# id = msg.getparam("block")[len("storm:block:"):] |
220 |
# id = gzz.mediaserver.Mediaserver.Id(id) |
# id = gzz.mediaserver.Mediaserver.Id(id) |
221 |
|
|
222 |
#print "Reconstruct==>" |
print "<==isReconstructable" |
|
#print msg |
|
|
#print "<==Reconstruct" |
|
|
#mail.close() |
|
223 |
return 1 |
return 1 |
224 |
|
|
225 |
def msgZip(msg1, msg2): |
def msgZip(msg1, msg2): |
234 |
return ret |
return ret |
235 |
|
|
236 |
def reconstruct(mail, mediaserver, msid, pos): |
def reconstruct(mail, mediaserver, msid, pos): |
237 |
|
print "==>reconstruct" |
238 |
mail = StringIO.StringIO(mail) |
mail = StringIO.StringIO(mail) |
239 |
msg = mimetools.Message(mail) |
msg = mimetools.Message(mail) |
240 |
type = msg.gettype() |
type = msg.gettype() |
241 |
msgData = [] |
msgData = java.util.ArrayList() |
242 |
|
|
243 |
if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
244 |
pts = PermanentTextScroll(ms, msid) |
print "\tmessage/external-body" |
245 |
|
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
246 |
id = msg.getparam("block")[len("storm:block:"):] |
id = msg.getparam("block")[len("storm:block:"):] |
247 |
id = gzz.mediaserver.Mediaserver.Id(id) |
id = gzz.mediaserver.Mediaserver.Id(id) |
248 |
t = java.lang.String(mediaserver.getDatum(id).getBytes(), "UTF8") |
pts1 = gzz.media.impl.PermanentTextScroll(mediaserver, id) |
|
save = msg.fp.read() + str(t) |
|
249 |
|
|
250 |
msgData.append(pts.getSpan(pos, len(save))) |
reconstructHeader(pts, msg.fp.read(), pos + len(str(msg)) + 2, msgData) |
251 |
|
msgData.add(pts1.getCurrent()) |
252 |
elif type[:10] == "multipart/": |
elif type[:10] == "multipart/": |
253 |
|
print "\tmultipart/" |
254 |
|
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
255 |
|
pos = len(str(msg)) + 2 |
256 |
|
#msgData.add(pts.getSpan(0, pos)) |
257 |
|
#reconstructHeader(pts, str(msg), pos, msgData) |
258 |
|
|
259 |
mulmsg = multifile.MultiFile(mail, 0) |
mulmsg = multifile.MultiFile(mail, 0) |
260 |
mulmsg.push(msg.getparam("boundary")) |
mulmsg.push(msg.getparam("boundary")) |
261 |
|
|
262 |
boundary = "--%s" % msg.getparam("boundary") |
boundary = "--%s" % msg.getparam("boundary") |
263 |
msgData.append(PermanentTextScroll(boundary).getCurrent()) |
#msgData.add(pts.getSpan(pos, len(boundary) + 2)) |
264 |
#msgData = "--%s" % msg.getparam("boundary") |
#msgData = "--%s" % msg.getparam("boundary") |
265 |
|
|
266 |
while mulmsg.next(): |
while mulmsg.next(): |
267 |
submsg = mimetools.Message(mulmsg) |
#msgData.add(pts.getSpan(pos, len(boundary))) |
268 |
msgSpan = reconstruct(str(submsg) + submsg.fp.read(), mediaserver, msid, pos + len(boundary)) |
submsg = mimetools.Message(mulmsg) |
269 |
msgData.append(msgSpan) |
#msgData.addAll(reconstruct(str(submsg) + submsg.fp.read(), mediaserver, msid, pos + len(boundary))) |
270 |
|
#msgData.add(msgSpan) |
271 |
|
|
272 |
#msgData += "--%s--" % msg.getparam("boundary") |
#msgData += "--%s--" % msg.getparam("boundary") |
273 |
msgData.append(PermanentTextScroll("--%s--" % msg.getparam("boundary")).getCurrent()) |
|
274 |
|
#msgData.add(gzz.media.impl.PermanentTextScroll("--%s--" % msg.getparam("boundary")).getCurrent()) |
275 |
else: |
else: |
276 |
msgData = str(msg) + '\r\n' + msg.fp.read() |
print "===" |
277 |
|
print str(msg) |
278 |
|
print "===" |
279 |
|
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
280 |
|
msgData.add(pts.getCurrent()) |
281 |
|
#str(msg) + '\r\n' + msg.fp.read() |
282 |
|
#msgData = str(msg) + '\r\n' + msg.fp.read() |
283 |
|
|
284 |
|
print "<====" |
285 |
mail.close() |
mail.close() |
286 |
|
#maker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker() |
287 |
|
print "<==reconstruct" |
288 |
|
#return maker.makeEnfilade(msgData) |
289 |
|
|
290 |
return msgData |
return msgData |
291 |
|
|
292 |
|
def reconstructHeader(pts, header, pos, msgData): |
293 |
|
msgData.add(pts.getSpan(pos, pos + len(header))) |
294 |
|
|
295 |
def storeBody(mediaserver, msg, body, msgID): |
def storeBody(mediaserver, msg, body, msgID): |
296 |
|
print "==>storeBody" |
297 |
msgtype = msg.gettype() |
msgtype = msg.gettype() |
298 |
ctparams = getContentTypeParams(msg) |
ctparams = getContentTypeParams(msg) |
299 |
cbodyid = None |
cbodyid = None |
300 |
print msgID |
print "\t", msgID |
301 |
|
|
302 |
print "\"", msgtype, "\"" |
print "\t\"", msgtype, "\"" |
303 |
|
|
304 |
addDefaultHeaders = 0 |
addDefaultHeaders = 0 |
305 |
|
|
328 |
|
|
329 |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
330 |
|
|
331 |
|
print "<==storeBody" |
332 |
return cbodyid |
return cbodyid |