From f70e8e24fc550e225f891768ee66ee8916c53750 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Tue, 26 Jun 2007 16:08:51 +0000
Subject: [PATCH] Increase timeout when talking to oood

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@14986 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5OOo/Document/OOoDocument.py | 31 +++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/product/ERP5OOo/Document/OOoDocument.py b/product/ERP5OOo/Document/OOoDocument.py
index 4b22d702bb..0fb18e9905 100644
--- a/product/ERP5OOo/Document/OOoDocument.py
+++ b/product/ERP5OOo/Document/OOoDocument.py
@@ -29,6 +29,8 @@ import xmlrpclib, base64, re, zipfile, cStringIO, socket
 from warnings import warn
 from DateTime import DateTime
 from xmlrpclib import Fault
+from xmlrpclib import Transport
+from xmlrpclib import SafeTransport
 from AccessControl import ClassSecurityInfo
 from OFS.Image import Pdata
 from Products.CMFCore.utils import getToolByName, _setCacheHeaders
@@ -48,6 +50,29 @@ dec=base64.decodestring
 _MARKER = []
 STANDARD_IMAGE_FORMAT_LIST = ('png', 'jpg', 'gif', )
 
+
+class TimeoutTransport(SafeTransport):
+  """A xmlrpc transport with configurable timeout.
+  """
+  def __init__(self, timeout=None, scheme='http'):
+    self._timeout = timeout
+    self._scheme = scheme
+
+  def send_content(self, connection, request_body):
+    connection.putheader("Content-Type", "text/xml")
+    connection.putheader("Content-Length", str(len(request_body)))
+    connection.endheaders()
+    if self._timeout:
+      connection._conn.sock.settimeout(self._timeout)
+    if request_body:
+      connection.send(request_body)
+
+  def make_connection(self, h):
+    if self._scheme == 'http':
+      return Transport.make_connection(self, h)
+    return SafeTransport.make_connection(self, h)
+
+
 class OOoDocument(File, ConversionCacheMixin):
   """
     A file document able to convert OOo compatible files to
@@ -165,8 +190,10 @@ class OOoDocument(File, ConversionCacheMixin):
     """
       Create an XML-RPC proxy to access the conversion server.
     """
-    server_proxy = xmlrpclib.ServerProxy('http://%s:%d' % self._getServerCoordinate(),
-                                         allow_none=True)
+    server_proxy = xmlrpclib.ServerProxy(
+             'http://%s:%d' % self._getServerCoordinate(),
+             allow_none=True,
+             transport=TimeoutTransport(timeout=360, scheme='http'))
     return server_proxy
 
   security.declareProtected(Permissions.AccessContentsInformation,
-- 
2.30.9