37 |
result.append(' access-type=\"x-storm\";\r\n') |
result.append(' access-type=\"x-storm\";\r\n') |
38 |
result.append(' block=\"' + idstring + '\"\r\n\r\n') |
result.append(' block=\"' + idstring + '\"\r\n\r\n') |
39 |
|
|
|
header = replaceHeaderLine(header, 'Content-Transfer-Encoding', |
|
|
'Content-Transfer-Encoding: binary\r\n') |
|
40 |
header = replaceHeaderLine(header, 'Content-ID', 'Content-ID: ' + idstring + '\r\n') |
header = replaceHeaderLine(header, 'Content-ID', 'Content-ID: ' + idstring + '\r\n') |
41 |
|
header = replaceHeaderLine(header, 'Content-Transfer-Encoding', 'Content-Transfer-Encoding: binary\r\n') |
42 |
header.append('\r\n') |
header.append('\r\n') |
43 |
return result + header |
return result + header |
44 |
|
|
129 |
return 1 |
return 1 |
130 |
|
|
131 |
def isReconstructable(mediaserver, msid, recid): |
def isReconstructable(mediaserver, msid, recid): |
|
print "==>isReconstructable" |
|
132 |
mail = str(java.lang.String(mediaserver.getDatum(msid).getBytes(), "us-ascii")) |
mail = str(java.lang.String(mediaserver.getDatum(msid).getBytes(), "us-ascii")) |
133 |
#mail = StringIO.StringIO(mail) |
#mail = StringIO.StringIO(mail) |
134 |
#msg = mimetools.Message(mail) |
#msg = mimetools.Message(mail) |
136 |
|
|
137 |
try: |
try: |
138 |
rec = reconstruct(mail, mediaserver, msid, 0) |
rec = reconstruct(mail, mediaserver, msid, 0) |
|
#print "--------\n-------\n%s-------\n--------\n" % \ |
|
|
# msgZip (reconstruct(mail, mediaserver), str(t)) |
|
|
#None |
|
139 |
except java.lang.Throwable, var: |
except java.lang.Throwable, var: |
140 |
print var |
print var |
141 |
print "\tReconverting failed." |
print "\tReconverting failed." |
142 |
return 1 |
return 0 |
143 |
|
|
144 |
spans = java.util.ArrayList() |
spans = java.util.ArrayList() |
145 |
for element in rec: |
for element in rec: |
146 |
spans.add(element) |
spans.add(element) |
147 |
maker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker() |
maker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker() |
148 |
rec = maker.makeEnfilade(spans) |
rec = maker.makeEnfilade(spans) |
149 |
|
|
150 |
|
#print "----------------------------------------------------%s-----------------------------------------------" % rec.makeString() # % msgZip(rec.makeString(), t) |
151 |
|
|
152 |
|
headerLines = java.util.ArrayList() |
153 |
|
headerLines.add('Content-Type: message/rfc822') |
154 |
|
tempstore = mediaserver.addDatum(rec.makeString() , headerLines, None, 0) |
155 |
|
|
156 |
|
#print "(%s | %s)" % (tempstore.getString(), recid.getString()) |
157 |
|
#print "diff testdir/b_%s testdir/b_%s" % (tempstore.getString(), recid.getString()) |
158 |
|
|
159 |
|
if tempstore.equals(recid): |
160 |
|
print "\tCould be reconverted." |
161 |
|
return 1 |
162 |
|
else: |
163 |
|
print "\tReconverting failed." |
164 |
|
return 0 |
165 |
|
|
166 |
#print "===================================================================================" |
#print "===================================================================================" |
167 |
#print rec.makeString() |
#print rec.makeString() |
168 |
#print msgZip(t, rec.makeString()) |
#print msgZip(t, rec.makeString()) |
172 |
# id = msg.getparam("block")[len("storm:block:"):] |
# id = msg.getparam("block")[len("storm:block:"):] |
173 |
# id = gzz.mediaserver.Mediaserver.Id(id) |
# id = gzz.mediaserver.Mediaserver.Id(id) |
174 |
|
|
|
print "<==isReconstructable" |
|
175 |
return 1 |
return 1 |
176 |
|
|
177 |
def reconstruct(mail, mediaserver, msid, pos): |
def reconstruct(mail, mediaserver, msid, pos): |
178 |
print "==>reconstruct" |
#ptsmark = gzz.media.impl.PermanentTextScroll(">--X--<").getCurrent() |
179 |
|
#ptsmark1 = gzz.media.impl.PermanentTextScroll(">--Y--<").getCurrent() |
180 |
|
tMail = mail |
181 |
mail = StringIO.StringIO(mail) |
mail = StringIO.StringIO(mail) |
182 |
msg = mimetools.Message(mail) |
msg = mimetools.Message(mail) |
183 |
type = msg.gettype() |
type = msg.gettype() |
184 |
msgData = [] |
msgData = [] |
185 |
|
|
186 |
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": |
|
print "\tmessage/external-body" |
|
187 |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
188 |
id = msg.getparam("block")[len("storm:block:"):] |
id = msg.getparam("block")[len("storm:block:"):] |
189 |
id = gzz.mediaserver.Mediaserver.Id(id) |
id = gzz.mediaserver.Mediaserver.Id(id) |
192 |
reconstructHeader(pts, msg.fp.read(), pos + len(str(msg)) + 2, msgData) |
reconstructHeader(pts, msg.fp.read(), pos + len(str(msg)) + 2, msgData) |
193 |
msgData.append(pts1.getCurrent()) |
msgData.append(pts1.getCurrent()) |
194 |
elif type[:10] == "multipart/": |
elif type[:10] == "multipart/": |
|
print "\tmultipart/" |
|
195 |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
196 |
pos = len(str(msg)) + 2 |
boundary = "--%s" % msg.getparam("boundary") |
|
#msgData.append(pts.getSpan(0, pos)) |
|
|
#reconstructHeader(pts, str(msg), pos, msgData) |
|
197 |
|
|
198 |
mulmsg = multifile.MultiFile(mail, 0) |
mulmsg = multifile.MultiFile(mail, 0) |
199 |
mulmsg.push(msg.getparam("boundary")) |
mulmsg.push(msg.getparam("boundary")) |
200 |
|
|
201 |
boundary = "--%s" % msg.getparam("boundary") |
prevMsgLen = len(str(msg)) |
|
#msgData.append(pts.getSpan(pos, len(boundary) + 2)) |
|
|
#msgData = "--%s" % msg.getparam("boundary") |
|
202 |
|
|
203 |
|
msgData.append(pts.getSpan(pos, prevMsgLen)) |
204 |
|
msgData.append(pts.getSpan(prevMsgLen-2, prevMsgLen+2)) |
205 |
while mulmsg.next(): |
while mulmsg.next(): |
|
#msgData.append(pts.getSpan(pos, len(boundary))) |
|
206 |
submsg = mimetools.Message(mulmsg) |
submsg = mimetools.Message(mulmsg) |
207 |
#msgData.addAll(reconstruct(str(submsg) + submsg.fp.read(), mediaserver, msid, pos + len(boundary))) |
|
208 |
#msgData.append(msgSpan) |
msgData.append(pts.getSpan(pos + prevMsgLen + 2, pos + prevMsgLen + 4 + len(boundary))) |
209 |
|
|
210 |
#msgData += "--%s--" % msg.getparam("boundary") |
pos += prevMsgLen + 4 + len(boundary) |
211 |
|
|
212 |
|
sMsg = str(submsg) + '\r\n' + submsg.fp.read() |
213 |
|
msgData += reconstruct(sMsg, mediaserver, msid, pos) |
214 |
|
|
215 |
|
prevMsgLen = len(sMsg) - 2 |
216 |
|
pos += prevMsgLen + 2 |
217 |
|
msgData.append(pts.getSpan(pos, len(tMail))) |
218 |
|
|
219 |
else: |
else: |
220 |
#print "===" |
#print "===" |
223 |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
pts = gzz.media.impl.PermanentTextScroll(mediaserver, msid) |
224 |
msgData.append(pts.getCurrent()) |
msgData.append(pts.getCurrent()) |
225 |
|
|
|
print "<====" |
|
226 |
mail.close() |
mail.close() |
|
print "<==reconstruct" |
|
227 |
|
|
228 |
return msgData |
return msgData |
229 |
|
|
230 |
def reconstructHeader(pts, header, pos, msgData): |
def reconstructHeader(pts, header, pos, msgData): |
231 |
sPos = pos |
offset = pos |
232 |
|
sPos = pos = 0 |
233 |
|
|
234 |
headerf = string.split(header, '\r\n') |
headerf = string.split(header, '\r\n') |
235 |
ignore = 0 |
ignore = 0 |
239 |
sPos += len(line) + 2 |
sPos += len(line) + 2 |
240 |
pos += len(line) + 2 |
pos += len(line) + 2 |
241 |
elif line[:21] == 'X-Gzzmo-OH-Content-ID' or line[:36] == 'X-Gzzmo-OH-Content-Transfer-Encoding': |
elif line[:21] == 'X-Gzzmo-OH-Content-ID' or line[:36] == 'X-Gzzmo-OH-Content-Transfer-Encoding': |
242 |
msgData.append(pts.getSpan(sPos, pos)) |
msgData.append(pts.getSpan(sPos + offset, pos + offset)) |
243 |
sPos = pos + 11 |
sPos = pos + 11 |
244 |
pos += len(line) + 2 |
pos += len(line) + 2 |
245 |
ignore = 0 |
ignore = 0 |
246 |
elif line[:25] == 'Content-Transfer-Encoding' or line[:10] == 'Content-ID': |
elif line[:25] == 'Content-Transfer-Encoding' or line[:10] == 'Content-ID': |
247 |
msgData.append(pts.getSpan(sPos, pos)) |
msgData.append(pts.getSpan(sPos + offset, pos + offset)) |
248 |
ignore = 1 |
ignore = 1 |
249 |
pos += len(line) + 2 |
pos += len(line) + 2 |
250 |
sPos = pos |
sPos = pos |
252 |
ignore = 0 |
ignore = 0 |
253 |
pos += len(line) + 2 |
pos += len(line) + 2 |
254 |
|
|
255 |
msgData.append(pts.getSpan(sPos, pos-2)) |
msgData.append(pts.getSpan(sPos + offset, pos-2 + offset)) |
256 |
|
|
257 |
def storeBody(mediaserver, msg, body, msgID): |
def storeBody(mediaserver, msg, body, msgID): |
|
print "==>storeBody" |
|
258 |
msgtype = msg.gettype() |
msgtype = msg.gettype() |
259 |
ctparams = getContentTypeParams(msg) |
ctparams = getContentTypeParams(msg) |
260 |
cbodyid = None |
cbodyid = None |
277 |
|
|
278 |
tBody = java.lang.String(body, getCharset(msg)) |
tBody = java.lang.String(body, getCharset(msg)) |
279 |
cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0) |
cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0) |
280 |
|
elif msg.getencoding() == "base64"\ |
281 |
|
or msg.getencoding() == "quoted-printable"\ |
282 |
|
or msg.getencoding() == "uuencode": |
283 |
|
headerLinesB = java.util.ArrayList() |
284 |
|
headerLinesB.add('Content-Type: ' + msgtype |
285 |
|
+ string.join(ctparams, '')) |
286 |
|
if msgID != None: |
287 |
|
headerLinesB.add('Message-ID: ' + msgID) |
288 |
|
else: |
289 |
|
addDefaultHeaders = 1 |
290 |
|
headerLinesB.add('Content-Transfer-Encoding: binary') |
291 |
|
body = StringIO.StringIO(body) |
292 |
|
bodyW = StringIO.StringIO() |
293 |
|
mimetools.decode(body, bodyW, msg.getencoding()) |
294 |
|
|
295 |
|
cbodyid = mediaserver.addDatum(bodyW.getvalue(), headerLinesB, None, addDefaultHeaders) |
296 |
|
body.close() |
297 |
|
bodyW.close() |
298 |
else: |
else: |
299 |
headerLinesB = java.util.ArrayList() |
headerLinesB = java.util.ArrayList() |
300 |
headerLinesB.add('Content-Type: ' + msgtype |
headerLinesB.add('Content-Type: ' + msgtype |
307 |
|
|
308 |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
309 |
|
|
|
print "<==storeBody" |
|
310 |
return cbodyid |
return cbodyid |