]>
jfr.im git - irc/quakenet/qwebirc.git/blob - qwebirc/root.py
1 from twisted
.web
import resource
, server
, static
, http
2 from twisted
.internet
import error
, reactor
7 class RootResource(resource
.Resource
):
8 def getChild(self
, name
, request
):
11 return self
.primaryChild
.getChild(name
, request
)
13 # we do NOT use the built-in timeOut mixin as it's very very buggy!
14 class TimeoutHTTPChannel(http
.HTTPChannel
):
15 timeout
= config
.HTTP_REQUEST_TIMEOUT
17 def connectionMade(self
):
18 self
.customTimeout
= reactor
.callLater(self
.timeout
, self
.timeoutOccured
)
19 http
.HTTPChannel
.connectionMade(self
)
21 def timeoutOccured(self
):
22 self
.customTimeout
= None
23 self
.transport
.loseConnection()
25 def cancelTimeout(self
):
26 if self
.customTimeout
is not None:
28 self
.customTimeout
.cancel()
29 self
.customTimeout
= None
30 except error
.AlreadyCalled
:
33 def connectionLost(self
, reason
):
35 http
.HTTPChannel
.connectionLost(self
, reason
)
37 class RootSite(server
.Site
):
38 # we do this ourselves as the built in timeout stuff is really really buggy
39 protocol
= TimeoutHTTPChannel
41 def __init__(self
, path
, *args
, **kwargs
):
43 server
.Site
.__init
__(self
, root
, *args
, **kwargs
)
46 services
["StaticEngine"] = root
.primaryChild
= engines
.StaticEngine(path
)
48 def register(service
, path
, *args
, **kwargs
):
49 sobj
= service("/" + path
, *args
, **kwargs
)
50 services
[service
.__name
__] = sobj
51 root
.putChild(path
, sobj
)
53 register(engines
.AJAXEngine
, "e")
54 register(engines
.FeedbackEngine
, "feedback")
55 register(engines
.AuthgateEngine
, "auth")
56 register(engines
.AdminEngine
, "adminengine", services
)
58 mimetypes
.types_map
[".ico"] = "image/vnd.microsoft.icon"