{-# LANGUAGE OverloadedStrings #-}
module Udp2Raw where
import System.Process (proc, createProcess, waitForProcess)
import Control.Exception (throwIO)
import System.Exit (ExitCode(..))
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import qualified Data.Text as Text
data RawMode
= ICMP
| UDP Int
| FakeTCP Int
deriving (Show, Eq)
rawModeToArg :: RawMode -> String
rawModeToArg rawMode =
case rawMode of
ICMP -> "icmp"
UDP _ -> "udp"
FakeTCP _-> "faketcp"
getPort :: RawMode -> Maybe Int
getPort rawMode =
case rawMode of
ICMP -> Nothing
UDP p -> Just p
FakeTCP p -> Just p
textToRawMode :: Text -> Maybe Int -> Maybe RawMode
textToRawMode t port =
case Text.toLower (Text.strip t) of
"icmp" -> Just ICMP
"udp" -> Just(UDP (fromMaybe 443 port))
"faketcp" -> Just(FakeTCP (fromMaybe 443 port))
_ -> Nothing
writeEnv :: String -> --SERVER_IP
String -> --UDP2RAW_PWD
String -> --UDP2SPEEDER_PWD
RawMode ->
IO ()
writeEnv ip udp2raw_pwd udpspeeder_pwd raw = do
writeFile "/run/udp2raw/.env" (
"SERVER_IP=" ++ ip ++ "\n"
++ "UDP2RAW_PWD=" ++ udp2raw_pwd ++ "\n"
++ "UDPSPEEDER_PWD=" ++ udpspeeder_pwd ++ "\n"
++ "RAW_MODE=" ++ rawModeToArg raw ++ "\n"
++ "PORT=" ++ show (fromMaybe 443 (getPort raw)))