[wwwsearch-commits] r22905 - wwwsearch/ClientForm/trunk
jjlee at codespeak.net
jjlee at codespeak.net
Tue Jan 31 20:18:08 CET 2006
Author: jjlee
Date: Tue Jan 31 20:18:07 2006
New Revision: 22905
Modified:
wwwsearch/ClientForm/trunk/ClientForm.py
Log:
Follow IE and Firefox on algorithm for choosing MIME boundary -- servers are buggy on this
Modified: wwwsearch/ClientForm/trunk/ClientForm.py
==============================================================================
--- wwwsearch/ClientForm/trunk/ClientForm.py (original)
+++ wwwsearch/ClientForm/trunk/ClientForm.py Tue Jan 31 20:18:07 2006
@@ -245,75 +245,15 @@
else: return True
-# XXX don't really want to drag this along (MimeWriter, choose_boundary)
-
-# --------------------------------------------------------------------
-# grabbed from Python standard library mimetools module and tweaked to
-# avoid socket.gaierror and to avoid dots (".") in MIME boundaries
-try:
- import thread
- _thread = thread; del thread
-except ImportError:
- import dummy_thread
- _thread = dummy_thread; del dummy_thread
-_counter_lock = _thread.allocate_lock()
-del _thread
-
-_counter = 0
-def _get_next_counter():
- global _counter
- _counter_lock.acquire()
- _counter = _counter + 1
- result = _counter
- _counter_lock.release()
- return result
-
-_prefix = None
-
def choose_boundary():
- """Return a string usable as a multipart boundary.
-
- The string chosen is unique within a single program run, and
- incorporates the user id (if available), process id (if available),
- and current time. So it's very unlikely the returned string appears
- in message text, but there's no guarantee.
-
- The boundary contains dots so you have to quote it in the header."""
-
- global _prefix
- import time
- import os
- import socket
- if _prefix is None:
- try:
- socket.gaierror
- except AttributeError:
- exc = socket.error
- else:
- exc = socket.gaierror
-
- try:
- hostid = socket.gethostbyname(socket.gethostname())
- except exc:
- hostid = 'localhost'
- try:
- uid = repr(os.getuid())
- except AttributeError:
- uid = '1'
- try:
- pid = repr(os.getpid())
- except AttributeError:
- pid = '1'
- _prefix = hostid + uid + pid
- bndy = "%s%d%d" % (_prefix, long(time.time()*100), _get_next_counter())
- return bndy.replace(".", "")
-
-# end of code from mimetools module
-# --------------------------------------------------------------------
+ """Return a string usable as a multipart boundary."""
+ # follow IE and firefox
+ nonce = "".join([str(random.randint(0, sys.maxint-1)) for i in 0,1,2])
+ return "-"*27 + nonce
# This cut-n-pasted MimeWriter from standard library is here so can add
# to HTTP headers rather than message body when appropriate. It also uses
-# \r\n in place of \n. This is nasty.
+# \r\n in place of \n. This is a bit nasty.
class MimeWriter:
"""Generic MIME writer.
More information about the wwwsearch-commits
mailing list