diff options
Diffstat (limited to 'Presence')
-rw-r--r-- | Presence/LocalPeerCred.hs | 2 | ||||
-rw-r--r-- | Presence/SocketLike.hs | 76 |
2 files changed, 1 insertions, 77 deletions
diff --git a/Presence/LocalPeerCred.hs b/Presence/LocalPeerCred.hs index 6f7735dd..3396358e 100644 --- a/Presence/LocalPeerCred.hs +++ b/Presence/LocalPeerCred.hs | |||
@@ -18,7 +18,7 @@ import Data.Bits | |||
18 | import System.Posix.Types | 18 | import System.Posix.Types |
19 | import System.Posix.Files | 19 | import System.Posix.Files |
20 | import Logging | 20 | import Logging |
21 | import SocketLike | 21 | import Network.SocketLike |
22 | import ControlMaybe | 22 | import ControlMaybe |
23 | 23 | ||
24 | xs ?? n | n < 0 = Nothing | 24 | xs ?? n | n < 0 = Nothing |
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 #-} | ||
2 | module 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 | |||
22 | import Network.Socket | ||
23 | ( PortNumber | ||
24 | , SockAddr | ||
25 | ) | ||
26 | import Foreign.C.Types ( CUInt ) | ||
27 | |||
28 | import qualified Network.Socket as NS | ||
29 | import System.IO (Handle,hClose) | ||
30 | |||
31 | class 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 | |||
43 | instance 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) | ||
58 | data RestrictedSocket = Restricted (Maybe Handle) NS.Socket deriving Show | ||
59 | |||
60 | instance 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 | |||
72 | restrictSocket :: NS.Socket -> RestrictedSocket | ||
73 | restrictSocket socket = Restricted Nothing socket | ||
74 | |||
75 | restrictHandleSocket :: Handle -> NS.Socket -> RestrictedSocket | ||
76 | restrictHandleSocket h socket = Restricted (Just h) socket | ||