Commit 08785ce4 authored by Amos Latteier's avatar Amos Latteier

Improve the 'Server' and 'SERVER_SOFTWARE' HTTP and CGI headers. Retrieve the Zope version

from Zope.app.Control_Panel if possible.
parent 0a89c829
......@@ -99,9 +99,6 @@ from medusa.producers import hooked_producer
from medusa import http_server
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer
__version__='1.0b1'
__zope_version__='1.11a1' # XXX retrieve this somehow
# XXX there should be a method somewhere for this
class ZServerHTTPResponse(HTTPResponse):
"Used to push data into a channel's producer fifo"
......@@ -153,7 +150,7 @@ class ZServerHTTPResponse(HTTPResponse):
del headers['status']
# add zserver headers
append('Server: Zope/%s ZServer/%s' % (__zope_version__, __version__))
append('Server: %s' % self._server_version)
append('Date: %s' % build_http_date(time.time()))
append('X-Powered-By: Zope (www.zope.org), Python (www.python.org)')
chunk=0
......@@ -262,5 +259,6 @@ def make_response(request, headers):
response._http_version=request.version
response._http_connection=string.lower(
http_server.get_header(http_server.CONNECTION, request.header))
response._server_version=request.channel.server.SERVER_IDENT
return response
\ No newline at end of file
......@@ -122,6 +122,14 @@ from medusa.default_handler import split_path, unquote, get_header
CONTENT_LENGTH = regex.compile('Content-Length: \([0-9]+\)',regex.casefold)
CONNECTION = regex.compile ('Connection: \(.*\)', regex.casefold)
ZSERVER_VERSION='1.1b1'
try:
import Main
ZOPE_VERSION=Main.app.Control_Panel.version_txt()
del Main
except:
ZOPE_VERSION='experimental'
# maps request some headers to environment variables.
# (those that don't start with 'HTTP_')
header2env={'content-length' : 'CONTENT_LENGTH',
......@@ -206,7 +214,7 @@ class zhttp_handler:
env['REQUEST_METHOD']=string.upper(request.command)
env['SERVER_PORT']=str(request.channel.server.port)
env['SERVER_NAME']=request.channel.server.server_name
env['SERVER_SOFTWARE']=request['Server']
env['SERVER_SOFTWARE']=request.channel.server.SERVER_IDENT
env['SERVER_PROTOCOL']=request.version
if self.uri_base=='/':
env['SCRIPT_NAME']=''
......@@ -232,6 +240,7 @@ class zhttp_handler:
env['REMOTE_HOST']=dns_cache[env['REMOTE_ADDR']][2]
except AttributeError:
pass
for header in request.header:
[key,value]=string.split(header,": ",1)
key=string.lower(key)
......@@ -317,4 +326,6 @@ class zhttp_channel(http_channel):
class zhttp_server(http_server):
"http server"
SERVER_IDENT='Zope/%s ZServer/%s' % (ZOPE_VERSION,ZSERVER_VERSION)
channel_class = zhttp_channel
......@@ -99,9 +99,6 @@ from medusa.producers import hooked_producer
from medusa import http_server
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer
__version__='1.0b1'
__zope_version__='1.11a1' # XXX retrieve this somehow
# XXX there should be a method somewhere for this
class ZServerHTTPResponse(HTTPResponse):
"Used to push data into a channel's producer fifo"
......@@ -153,7 +150,7 @@ class ZServerHTTPResponse(HTTPResponse):
del headers['status']
# add zserver headers
append('Server: Zope/%s ZServer/%s' % (__zope_version__, __version__))
append('Server: %s' % self._server_version)
append('Date: %s' % build_http_date(time.time()))
append('X-Powered-By: Zope (www.zope.org), Python (www.python.org)')
chunk=0
......@@ -262,5 +259,6 @@ def make_response(request, headers):
response._http_version=request.version
response._http_connection=string.lower(
http_server.get_header(http_server.CONNECTION, request.header))
response._server_version=request.channel.server.SERVER_IDENT
return response
\ No newline at end of file
......@@ -122,6 +122,14 @@ from medusa.default_handler import split_path, unquote, get_header
CONTENT_LENGTH = regex.compile('Content-Length: \([0-9]+\)',regex.casefold)
CONNECTION = regex.compile ('Connection: \(.*\)', regex.casefold)
ZSERVER_VERSION='1.1b1'
try:
import Main
ZOPE_VERSION=Main.app.Control_Panel.version_txt()
del Main
except:
ZOPE_VERSION='experimental'
# maps request some headers to environment variables.
# (those that don't start with 'HTTP_')
header2env={'content-length' : 'CONTENT_LENGTH',
......@@ -206,7 +214,7 @@ class zhttp_handler:
env['REQUEST_METHOD']=string.upper(request.command)
env['SERVER_PORT']=str(request.channel.server.port)
env['SERVER_NAME']=request.channel.server.server_name
env['SERVER_SOFTWARE']=request['Server']
env['SERVER_SOFTWARE']=request.channel.server.SERVER_IDENT
env['SERVER_PROTOCOL']=request.version
if self.uri_base=='/':
env['SCRIPT_NAME']=''
......@@ -232,6 +240,7 @@ class zhttp_handler:
env['REMOTE_HOST']=dns_cache[env['REMOTE_ADDR']][2]
except AttributeError:
pass
for header in request.header:
[key,value]=string.split(header,": ",1)
key=string.lower(key)
......@@ -317,4 +326,6 @@ class zhttp_channel(http_channel):
class zhttp_server(http_server):
"http server"
SERVER_IDENT='Zope/%s ZServer/%s' % (ZOPE_VERSION,ZSERVER_VERSION)
channel_class = zhttp_channel
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment