#!/usr/bin/env python

#-----------------------------------------------------------------------------
# Name:        LRWPAdapter.py
#
# Purpose:     LRWP Adapter for the WebKit AppServer and the Xitami Web Server.
#              Adapted from the CGI Adapter for WebKit.
#
# Author:      Jim Madsen
#
# Created:     09/27/02
#-----------------------------------------------------------------------------
##    """Set Program Parameters"""

webKitDir = None

LRWPappName = 'testing'

LRWPhost = 'localhost'

LRWPport = 81

#-----------------------------------------------------------------------------

import os, sys, string

if webKitDir is None:
	webKitDir = os.path.dirname(os.getcwd())
webwareDir = os.path.dirname(webKitDir)
sys.path.insert(1, webwareDir)

from Adapter import Adapter
from lrwplib import LRWP



class LRWPAdapter(Adapter):
	def __init__(self, webkitdir):
		Adapter.__init__(self, webkitdir)
		if sys.platform == 'win32':
			import msvcrt
			msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
			msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)		

		# Get Host and Port information for WebKit AppServer
		(self.host, self.port) = string.split(open(os.path.join(self._webKitDir, 'address.text')).read(), ':')
		self.port = int(self.port)


	def lrwpConnect(self, LRWPappName, LRWPhost, LRWPport):
		try:
			#Make connection to Xitami
			self.lrwp = LRWP(LRWPappName, LRWPhost, LRWPport)
			self.lrwp.connect()
			print ('\r\n Connected to Xitami -- Listening for ' + LRWPappName + '\r\n')
			self.LRWPappName = LRWPappName

		except:
			sys.exit('Could not make proper connection to Xitami')
			

	def handler(self):
		while (1):
			try:
				# Accept requests
				self.request = self.lrwp.acceptRequest()

				# Read input from request object
				self.myInput = ''
				if self.request.env.has_key('CONTENT_LENGTH'):
					length = int(self.request.env['CONTENT_LENGTH'])
					self.myInput = self.myInput + self.request.inp.read(length)

				# Fix environment variables due to the way Xitami reports them under LRWP
				self.request.env['SCRIPT_NAME'] = ('/' + self.LRWPappName)
				self.request.env['REQUEST_URI'] = ('/' + self.LRWPappName + self.request.env['PATH_INFO'])
				
				# Transact with the app server
				self.response = self.transactWithAppServer(self.request.env, self.myInput, self.host, self.port)

				# Log page handled to the console
				print self.request.env['REQUEST_URI']

				# Close request to handle another
				self.request.finish()				

			# Capture Ctrl-C...shutdown will occur on next request handled
			except KeyboardInterrupt:
				print '\r\n Closing connection to Xitami \r\n'
				self.lrwp.close()
				sys.exit(' Clean Exit')

			except:				
				print 'Error handling requests'				



	# Output through request object
	def processResponse(self, data):
		self.request.out.write(data)


def main():
	# Startup LRWP to WebKit interface
	lrwpInterface = LRWPAdapter(webKitDir)
	lrwpInterface.lrwpConnect(LRWPappName, LRWPhost, LRWPport)
	lrwpInterface.handler()


if __name__ == '__main__':
    main()
    
