| 
					
				 | 
			
			
				@@ -20,9 +20,12 @@ import Control.Applicative 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Network 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import System.IO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--import System.IO.Uniform 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--import System.IO.Uniform.HandlePair as HP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--import System.IO.Uniform.Network as Net 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import qualified System.Process as P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-data Backend = TCPBackend String Int | UnixSocketBackend String | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+data Backend = TCPBackend String Int | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ExecBackend String [String] deriving (Show, Read, Ord, Eq) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 parseBackend :: A.Parser Backend 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -33,14 +36,10 @@ parseBackend = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       h <- tillSpace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       p <- A.decimal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return $ TCPBackend h p, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      tp "unix" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      tp "socket" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      p <- qStr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return $ UnixSocketBackend p, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       tp "exec" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       f <- qStr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skipHorizontalSpace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       pp <- parseParameters 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return $ ExecBackend f pp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -66,7 +65,6 @@ runBackend b (m, qdt) = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let rm = renderMetadata m 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   edt' <- intBk b $ LBS.concat [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fromTextual rm, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    "\r\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     qdt] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   case LA.parse repParse edt' of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     LA.Fail _ _ e -> return $ Left e 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -74,11 +72,9 @@ runBackend b (m, qdt) = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     intBk :: Backend -> LBS.ByteString -> IO LBS.ByteString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     intBk (TCPBackend h p) = runTcp h p 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    intBk (UnixSocketBackend f) = runUnix f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     intBk (ExecBackend f aa) = runExec f aa 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     repParse = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       m' <- parseMetadata 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      A.endOfLine 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return m' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 runTcp :: String -> Int -> LBS.ByteString -> IO LBS.ByteString 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -86,11 +82,6 @@ runTcp host port dt = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   h <- connectTo host (PortNumber . fromIntegral $ port) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   bkgTrans h dt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-runUnix :: String -> LBS.ByteString -> IO LBS.ByteString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-runUnix path dt = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  h <- connectTo "localhost" (UnixSocket path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bkgTrans h dt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bkgTrans :: Handle -> LBS.ByteString -> IO LBS.ByteString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bkgTrans h dt = do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   hSetNewlineMode h noNewlineTranslation 
			 |