From d4c67c343ebfc0fb8bb404400b4b4ba8ff11f046 Mon Sep 17 00:00:00 2001 From: Christian Lavoie Date: Wed, 9 Feb 2011 14:37:53 +0000 Subject: [PATCH] Fix file 'added twice' by accident by previous commit. git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1068909 13f79535-47bb-0310-9956-ffa450edef68 --- lib/hs/src/Thrift/Transport/Framed.hs | 119 -------------------------- 1 file changed, 119 deletions(-) diff --git a/lib/hs/src/Thrift/Transport/Framed.hs b/lib/hs/src/Thrift/Transport/Framed.hs index ed8755ed..70705be7 100644 --- a/lib/hs/src/Thrift/Transport/Framed.hs +++ b/lib/hs/src/Thrift/Transport/Framed.hs @@ -106,125 +106,6 @@ flushBuf :: WriteBuffer -> IO (LBS.ByteString) flushBuf w = BB.toLazyByteString `liftM` swapMVar w mempty -type ReadBuffer = MVar (LBS.ByteString) - -newReadBuffer :: IO ReadBuffer -newReadBuffer = newMVar mempty - -fillBuf :: ReadBuffer -> LBS.ByteString -> IO () -fillBuf r s = swapMVar r s >> return () - -readBuf :: ReadBuffer -> Int -> IO (LBS.ByteString) -readBuf r n = modifyMVar r $ return . flipPair . LBS.splitAt (fromIntegral n) - where flipPair (a, b) = (b, a) -{-# LANGUAGE FlexibleInstances #-} --- --- Licensed to the Apache Software Foundation (ASF) under one --- or more contributor license agreements. See the NOTICE file --- distributed with this work for additional information --- regarding copyright ownership. The ASF licenses this file --- to you under the Apache License, Version 2.0 (the --- "License"); you may not use this file except in compliance --- with the License. You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, --- software distributed under the License is distributed on an --- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY --- KIND, either express or implied. See the License for the --- specific language governing permissions and limitations --- under the License. --- - -module Thrift.Transport.Framed - ( module Thrift.Transport - , FramedTransport - , openFramedTransport - ) where - -import Thrift.Transport - -import Control.Monad (liftM) -import Data.Monoid (mappend, mempty) -import Control.Concurrent.MVar -import qualified Data.Binary as B -import qualified Data.Binary.Builder as BB -import qualified Data.ByteString.Lazy as LBS - - --- | FramedTransport wraps a given transport in framed mode. -data FramedTransport t = FramedTransport { - wrappedTrans :: t, -- ^ Underlying transport. - writeBuffer :: WriteBuffer, -- ^ Write buffer. - readBuffer :: ReadBuffer -- ^ Read buffer. - } - --- | Create a new framed transport which wraps the given transport. -openFramedTransport :: Transport t => t -> IO (FramedTransport t) -openFramedTransport trans = do - wbuf <- newWriteBuffer - rbuf <- newReadBuffer - return FramedTransport{ wrappedTrans = trans, writeBuffer = wbuf, readBuffer = rbuf } - -instance Transport t => Transport (FramedTransport t) where - - tClose = tClose . wrappedTrans - - tRead trans n = do - -- First, check the read buffer for any data. - bs <- readBuf (readBuffer trans) n - if LBS.null bs - then - -- When the buffer is empty, read another frame from the - -- underlying transport. - do len <- readFrame trans - if len > 0 - then tRead trans n - else return bs - else return bs - - tWrite trans = writeBuf (writeBuffer trans) - - tFlush trans = do - bs <- flushBuf (writeBuffer trans) - let szBs = B.encode $ LBS.length bs - tWrite (wrappedTrans trans) szBs - tWrite (wrappedTrans trans) bs - tFlush (wrappedTrans trans) - - tIsOpen = tIsOpen . wrappedTrans - -readFrame :: Transport t => FramedTransport t -> IO Int -readFrame trans = do - -- Read and decode the frame size. - szBs <- tRead (wrappedTrans trans) 4 - let sz = B.decode szBs - - -- Read the frame and stuff it into the read buffer. - bs <- tRead (wrappedTrans trans) sz - fillBuf (readBuffer trans) bs - - -- Return the frame size so that the caller knows whether to expect - -- something in the read buffer or not. - return sz - - --- Mini IO buffers (stolen from HttpClient.hs) - -type WriteBuffer = MVar (BB.Builder) - -newWriteBuffer :: IO WriteBuffer -newWriteBuffer = newMVar mempty - -writeBuf :: WriteBuffer -> LBS.ByteString -> IO () -writeBuf w s = modifyMVar_ w $ return . (\builder -> - builder `mappend` (BB.fromLazyByteString s)) - -flushBuf :: WriteBuffer -> IO (LBS.ByteString) -flushBuf w = BB.toLazyByteString `liftM` swapMVar w mempty - - type ReadBuffer = MVar (LBS.ByteString) newReadBuffer :: IO ReadBuffer -- 2.17.1