summaryrefslogtreecommitdiff
path: root/Presence/SocketLike.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Presence/SocketLike.hs')
-rw-r--r--Presence/SocketLike.hs76
1 files changed, 0 insertions, 76 deletions
diff --git a/Presence/SocketLike.hs b/Presence/SocketLike.hs
deleted file mode 100644
index af0249ae..00000000
--- a/Presence/SocketLike.hs
+++ /dev/null
@@ -1,76 +0,0 @@
1{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2module SocketLike
3 ( SocketLike
4 , getSocketName
5 , getPeerName
6 , getPeerCred
7 , socketPort
8 , sIsConnected
9 , sIsBound
10 , sIsListening
11 , sIsReadable
12 , sIsWritable
13 , sClose
14 , RestrictedSocket
15 , restrictSocket
16 , restrictHandleSocket
17 , PortNumber
18 , SockAddr(..)
19 , CUInt
20 ) where
21
22import Network.Socket
23 ( PortNumber
24 , SockAddr
25 )
26import Foreign.C.Types ( CUInt )
27
28import qualified Network.Socket as NS
29import System.IO (Handle,hClose)
30
31class SocketLike sock where
32 getSocketName :: sock -> IO SockAddr
33 getPeerName :: sock -> IO SockAddr
34 getPeerCred :: sock -> IO (CUInt, CUInt, CUInt)
35 socketPort :: sock -> IO PortNumber
36 sIsConnected :: sock -> IO Bool
37 sIsBound :: sock -> IO Bool
38 sIsListening :: sock -> IO Bool
39 sIsReadable :: sock -> IO Bool
40 sIsWritable :: sock -> IO Bool
41 sClose :: sock -> IO ()
42
43instance SocketLike NS.Socket where
44 getSocketName = NS.getSocketName
45 getPeerName = NS.getPeerName
46 getPeerCred = NS.getPeerCred
47 socketPort = NS.socketPort
48 sIsConnected = NS.sIsConnected -- warning: this is always False if the socket
49 -- was converted to a Handle
50 sIsBound = NS.sIsBound
51 sIsListening = NS.sIsListening
52 sIsReadable = NS.sIsReadable
53 sIsWritable = NS.sIsWritable
54
55 sClose = NS.sClose
56
57-- newtype RestrictedSocket = Restricted NS.Socket deriving (SocketLike,Show)
58data RestrictedSocket = Restricted (Maybe Handle) NS.Socket deriving Show
59
60instance SocketLike RestrictedSocket where
61 getSocketName (Restricted mb sock) = NS.getSocketName sock
62 getPeerName (Restricted mb sock) = NS.getPeerName sock
63 getPeerCred (Restricted mb sock) = NS.getPeerCred sock
64 socketPort (Restricted mb sock) = NS.socketPort sock
65 sIsConnected (Restricted mb sock) = NS.sIsConnected sock
66 sIsBound (Restricted mb sock) = NS.sIsBound sock
67 sIsListening (Restricted mb sock) = NS.sIsListening sock
68 sIsReadable (Restricted mb sock) = NS.sIsReadable sock
69 sIsWritable (Restricted mb sock) = NS.sIsWritable sock
70 sClose (Restricted mb sock) = maybe (NS.sClose sock) (\h -> hClose h >> NS.sClose sock) mb
71
72restrictSocket :: NS.Socket -> RestrictedSocket
73restrictSocket socket = Restricted Nothing socket
74
75restrictHandleSocket :: Handle -> NS.Socket -> RestrictedSocket
76restrictHandleSocket h socket = Restricted (Just h) socket