मैं एक समसामयिक संदर्भ में OpenSSL.Session एपीआई का सही तरीके से उपयोग करने का तरीका जानने की कोशिश कर रहा हूं
उदाहरण के लिए stunnel-style ssl-wrapper
, मुझे लगता है कि मैं इसे लागू करना चाहता हूं , मुझे निम्नलिखित बुनियादी कंकाल संरचना की उम्मीद है, जो एक भोले को लागू करता हैfull-duplex tcp-port-forwarder:
runProxy :: PortID -> AddrInfo -> IO ()
runProxy localPort@(PortNumber lpn) serverAddrInfo = do
listener <- listenOn localPort
forever $ do
(sClient, clientAddr) <- accept listener
let finalize sServer = do
sClose sServer
sClose sClient
forkIO $ do
tidToServer <- myThreadId
bracket (connectToServer serverAddrInfo) finalize $ \sServer -> do
-- execute one 'copySocket' thread for each data direction
-- and make sure that if one direction dies, the other gets
-- pulled down as well
bracket (forkIO (copySocket sServer sClient
`finally` killThread tidToServer))
(killThread) $ \_ -> do
copySocket sClient sServer -- "controlling" thread
where
-- |Copy data from source to dest until EOF occurs on source
-- Copying may also be aborted due to exceptions
copySocket :: Socket -> Socket -> IO ()
copySocket src dst = go
where
go = do
buf <- B.recv src 4096
unless (B.null buf) $ do
B.sendAll dst buf
go
-- |Create connection to given AddrInfo target and return socket
connectToServer saddr = do
sServer <- socket (addrFamily saddr) Stream defaultProtocol
connect sServer (addrAddress saddr)
return sServer
मैं उपरोक्त कंकाल को एक में कैसे बदलूं full-duplex ssl-wrapping tcp-forwarding proxy
? HsOpenSSL एपीआई द्वारा प्रदान किए गए फ़ंक्शन कॉल के समवर्ती / समानांतर निष्पादन (उपरोक्त उपयोग के मामले के संदर्भ में) WRT के खतरे कहाँ हैं?
पुनश्च: मैं अभी भी पूरी तरह से समझने के लिए संघर्ष कर रहा हूं कि अपवाद और संसाधन-लीक को कोड को मजबूत कैसे बनाया जाए। इसलिए, इस प्रश्न का प्राथमिक ध्यान नहीं होने के बावजूद, यदि आपको ऊपर दिए गए कोड में कुछ बुरा दिखाई देता है, तो कृपया एक टिप्पणी छोड़ दें।
full-duplex ssl-rewrapping tcp-forwarding
), लेकिन इसका इस्तेमाल Network.TLS
(पैकेज tls
) के बजाय किया। और यह बदसूरत था। आप इसे यहां पा सकते हैं , अगर सभी रुचि रखते हैं।