#57 Allow to specify websocket ping frequency
Former-commit-id: 31c30bf3ff09e54b8fb8e7610aabae0b1247502f Former-commit-id: 3149f827351c421bc99edad7381643bbac567d56 [formerly 084fb35038a11bf8f4016f1eca51295199534d68] [formerly d6284387041bc84ebc3859d2a357cb7e9b678e9e [formerly 8413b4a3244698b20e3356cb5f9d76b24122d93c [formerly 8413b4a3244698b20e3356cb5f9d76b24122d93c [formerly 8413b4a3244698b20e3356cb5f9d76b24122d93c [formerly fddae990cae36aba019f83124e522d2545b93ecf]]]]] Former-commit-id: 186beb54d83f454ae545c45194e1ba3e9eab1495 [formerly a7d06a8c6e0064c48eee331b9fa6f87496ba0f37] Former-commit-id: 5f88e7d16eb372828bbfeaba017699f62db92c6c Former-commit-id: a7fb9dc52d52d177d26ebdd78ab69dadddd17939 Former-commit-id: b1a292297fb943c3f555ff639802fcdf81005240 Former-commit-id: ea8f23d6c60e0b316358255156bbd644330a90e9 [formerly 961596cfff926e301cf39cf0b2114d58a62b7e9a] Former-commit-id: 1b85c73b4c55a63dc96af4c7af6e1a5edc3d9616
This commit is contained in:
parent
e8f3fc0259
commit
5d62604582
4 changed files with 16 additions and 3 deletions
13
app/Main.hs
13
app/Main.hs
|
@ -33,8 +33,8 @@ data WsTunnel = WsTunnel
|
|||
, pathPrefix :: String
|
||||
, hostHeader :: String
|
||||
, tlsSNI :: String
|
||||
, wsTunnelCredentials
|
||||
:: String
|
||||
, websocketPingFrequencySec :: Int
|
||||
, wsTunnelCredentials :: String
|
||||
} deriving (Show, Data, Typeable)
|
||||
|
||||
data WsServerInfo = WsServerInfo
|
||||
|
@ -77,6 +77,8 @@ cmdLine = WsTunnel
|
|||
&= help "If set, use custom string in the SNI during TLS handshake" &= typ "String" &= groupname "Client options"
|
||||
, soMark = def &= explicit &= name "soMark"
|
||||
&= help "(linux only) Mark network packet with SO_MARK sockoption with the specified value. You need to use {root, sudo, capabilities} to run wstunnel when using this option" &= typ "int"
|
||||
, websocketPingFrequencySec = def &= explicit &= name "websocketPingFrequencySec"
|
||||
&= help "do a hearthbeat ping every x seconds to maintain websocket connection" &= typ "int"
|
||||
, wsTunnelServer = def &= argPos 0 &= typ "ws[s]://wstunnelServer[:port]"
|
||||
|
||||
, serverMode = def &= explicit &= name "server"
|
||||
|
@ -180,6 +182,9 @@ main = do
|
|||
, Main.udpTimeout = if Main.udpTimeout cfg' == 0 then 30 * 10^(6 :: Int)
|
||||
else if Main.udpTimeout cfg' == -1 then -1
|
||||
else Main.udpTimeout cfg' * 10^(6:: Int)
|
||||
, Main.websocketPingFrequencySec = if Main.websocketPingFrequencySec cfg' == 0
|
||||
then 30
|
||||
else Main.websocketPingFrequencySec cfg'
|
||||
}
|
||||
|
||||
let serverInfo = parseServerInfo (WsServerInfo False "" 0) (wsTunnelServer cfg)
|
||||
|
@ -236,6 +241,7 @@ runApp cfg serverInfo
|
|||
, udpTimeout = Main.udpTimeout cfg
|
||||
, tlsSNI = BC.pack $ Main.tlsSNI cfg
|
||||
, hostHeader = BC.pack $ Main.hostHeader cfg
|
||||
, websocketPingFrequencySec = Main.websocketPingFrequencySec cfg
|
||||
}
|
||||
|
||||
toTcpLocalToRemoteTunnelSetting cfg serverInfo (TunnelInfo lHost lPort rHost rPort) =
|
||||
|
@ -255,6 +261,7 @@ runApp cfg serverInfo
|
|||
, udpTimeout = Main.udpTimeout cfg
|
||||
, tlsSNI = BC.pack $ Main.tlsSNI cfg
|
||||
, hostHeader = BC.pack $ Main.hostHeader cfg
|
||||
, websocketPingFrequencySec = Main.websocketPingFrequencySec cfg
|
||||
}
|
||||
|
||||
toUdpLocalToRemoteTunnelSetting cfg serverInfo (TunnelInfo lHost lPort rHost rPort) =
|
||||
|
@ -274,6 +281,7 @@ runApp cfg serverInfo
|
|||
, udpTimeout = Main.udpTimeout cfg
|
||||
, tlsSNI = BC.pack $ Main.tlsSNI cfg
|
||||
, hostHeader = BC.pack $ Main.hostHeader cfg
|
||||
, websocketPingFrequencySec = Main.websocketPingFrequencySec cfg
|
||||
}
|
||||
|
||||
toDynamicTunnelSetting cfg serverInfo (TunnelInfo lHost lPort _ _) =
|
||||
|
@ -293,4 +301,5 @@ runApp cfg serverInfo
|
|||
, udpTimeout = Main.udpTimeout cfg
|
||||
, tlsSNI = BC.pack $ Main.tlsSNI cfg
|
||||
, hostHeader = BC.pack $ Main.hostHeader cfg
|
||||
, websocketPingFrequencySec = Main.websocketPingFrequencySec cfg
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ tunnelingClientP cfg@TunnelSettings{..} app conn = onError $ do
|
|||
connectionToStream Connection{..} = WS.makeStream read (write . toStrict . fromJust)
|
||||
onError = flip catch (\(e :: SomeException) -> return . throwError . WebsocketError $ show e)
|
||||
run cnx = do
|
||||
WS.forkPingThread cnx 30
|
||||
WS.forkPingThread cnx websocketPingFrequencySec
|
||||
app (toConnection cnx)
|
||||
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@ data TunnelSettings = TunnelSettings
|
|||
, tlsSNI :: ByteString
|
||||
, hostHeader :: ByteString
|
||||
, udpTimeout :: Int
|
||||
, websocketPingFrequencySec :: Int
|
||||
}
|
||||
|
||||
instance Show TunnelSettings where
|
||||
|
|
|
@ -50,6 +50,7 @@ testTCPLocalToRemote useTLS = do
|
|||
, upgradeCredentials = ""
|
||||
, hostHeader = "toto.com"
|
||||
, tlsSNI = "toto.com"
|
||||
, websocketPingFrequencySec = 30
|
||||
}
|
||||
let client = runClient tunnelSetting
|
||||
|
||||
|
@ -110,6 +111,7 @@ testUDPLocalToRemote useTLS = do
|
|||
, upgradeCredentials = ""
|
||||
, hostHeader = "toto.com"
|
||||
, tlsSNI = "toto.com"
|
||||
, websocketPingFrequencySec = 30
|
||||
}
|
||||
let client = runClient tunnelSetting
|
||||
|
||||
|
@ -169,6 +171,7 @@ testSocks5Tunneling useTLS = do
|
|||
, upgradeCredentials = ""
|
||||
, hostHeader = "toto.com"
|
||||
, tlsSNI = "toto.com"
|
||||
, websocketPingFrequencySec = 30
|
||||
}
|
||||
let client = runClient tunnelSetting
|
||||
|
||||
|
|
Loading…
Reference in a new issue