Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discover and expose SFT servers in /calls/config/v2 #1177

Merged
merged 48 commits into from
Jul 31, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
14b3692
Add comment, minor hlint
jschaul Jul 21, 2020
189043f
Add FUTUREWORK to ensure we watch the threads we spawn
akshaymankar Jul 23, 2020
27fc2e8
Copy code for SRV lookup from federation-util to dedicated package
akshaymankar Jul 24, 2020
f9de188
Read SFT options and start service discovery thread
akshaymankar Jul 24, 2020
07f848a
[WIP] Return discovered SFT servers in /calls/config/v2
akshaymankar Jul 27, 2020
a345016
Fix typo
akshaymankar Jul 28, 2020
8a5f363
Add unit tests for sftDiscoveryLoop
akshaymankar Jul 28, 2020
a0d7fe5
rename Wire.API.TURN -> Wire.API.Calling
jschaul Jul 28, 2020
eaaa4f3
second rename TURN -> Calling
jschaul Jul 28, 2020
7101bd9
merge TURN into Calling
jschaul Jul 28, 2020
fb42bc3
another TURN -> Calling rename
jschaul Jul 28, 2020
1b5804d
rename dns-srv to dns-util
jschaul Jul 28, 2020
b6c81ad
Rename testGroup "turn" -> "calling"
akshaymankar Jul 29, 2020
c00e688
Ormolu for module rename
akshaymankar Jul 29, 2020
a7820b5
Remove dependency on polysemy-plugin so we can compile on alpine
akshaymankar Jul 29, 2020
6fcb23f
Add unit test for SrvTarget -> SFTServer conversion
akshaymankar Jul 29, 2020
28d9971
Deflake brig calling unit tests
akshaymankar Jul 29, 2020
05145d1
Make SFT discovery interval configurable
akshaymankar Jul 29, 2020
46df70e
Fix brig's API.Calling integration test
akshaymankar Jul 29, 2020
1b1a85f
Give up on avoiding Embed IO for threadDelay
akshaymankar Jul 29, 2020
b51205f
Add comment to explain integration-test dns names
akshaymankar Jul 29, 2020
a4e51da
WIP: Move orderSrvEntry to dns-util
akshaymankar Jul 29, 2020
f4d5282
finish copying to dns-util
jschaul Jul 29, 2020
3327d9f
remove federation-util
jschaul Jul 29, 2020
c7a8150
dns-util: remove unnecessary comment
akshaymankar Jul 29, 2020
bbe9458
Abandon QQ because stack does something bad
akshaymankar Jul 29, 2020
096a8e5
add LICENSE file that was forgotten when moving
jschaul Jul 29, 2020
271f648
remove unnecessary comment
jschaul Jul 29, 2020
42d6584
Log whenever sft service discovery fails or returns empty
akshaymankar Jul 29, 2020
fde6771
move defaults to Options.hs
jschaul Jul 29, 2020
009961d
randomize sft URLs
jschaul Jul 29, 2020
b554390
Commit the forgotten Brig.PolyLog module
akshaymankar Jul 29, 2020
7525503
Fix compile errors
akshaymankar Jul 30, 2020
7edee6a
Simplify DNSLookup interpretation
akshaymankar Jul 30, 2020
959adfa
Cleanup async thread creation for SFT discovery
akshaymankar Jul 30, 2020
a48689c
Remove leftover TODO comment
akshaymankar Jul 30, 2020
7ec72b1
Add a safe way to create `HttpsUrl`
akshaymankar Jul 30, 2020
c4a6a9a
Replace maybe with another type to clarify semantics of discovery
akshaymankar Jul 30, 2020
2f7c0fb
Group TURN tests so they can be skipped by CI as they were
akshaymankar Jul 30, 2020
b5e26ae
Put SFT test in a testGroup for symmetry
akshaymankar Jul 30, 2020
939c802
brig/integration API.Calling: Slightly better formatting
akshaymankar Jul 30, 2020
2c3ef08
Add FUTUREWORK to extract a function
akshaymankar Jul 30, 2020
f54e611
Add roundtrip test for Call.Config.SFTServer
akshaymankar Jul 30, 2020
4f0d7d2
More accurate doc for SFTServer
akshaymankar Jul 30, 2020
b7b92d8
Add link to issue for FUTUREWORK
akshaymankar Jul 30, 2020
3929ea6
Pointfree sft discovery async call
akshaymankar Jul 30, 2020
1f176f4
Add deprecation notice to /calls/config swagger docs
akshaymankar Jul 30, 2020
55cb7b0
Brig.Calling.Internal: Declutter sftServerFromSrvTarget
akshaymankar Jul 30, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions libs/wire-api/src/Wire/API/Call/TURN.hs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ parseTurnURI = parseOnly (parser <* endOfInput)
<$> ((takeWhile1 (/= ':') <* char ':' >>= parseScheme) <?> "parsingScheme")
<*> ((takeWhile1 (/= ':') <* char ':' >>= parseHost) <?> "parsingHost")
<*> (decimal <?> "parsingPort")
<*> ((optional ((string "?transport=" *> takeText) >>= parseTransport)) <?> "parsingTransport")
<*> (optional ((string "?transport=" *> takeText) >>= parseTransport) <?> "parsingTransport")
parseScheme = parse "parseScheme"
parseHost = parse "parseHost"
parseTransport = parse "parseTransport"
Expand Down Expand Up @@ -421,19 +421,19 @@ limitServers uris limit = limitServers' [] limit uris
isUdp :: TurnURI -> Bool
isUdp uri =
_turiScheme uri == SchemeTurn
&& ( _turiTransport uri == Just (TransportUDP)
|| _turiTransport uri == Nothing
&& ( _turiTransport uri == Just TransportUDP
|| isNothing (_turiTransport uri)
)

isTcp :: TurnURI -> Bool
isTcp uri =
_turiScheme uri == SchemeTurn
&& _turiTransport uri == Just (TransportTCP)
&& _turiTransport uri == Just TransportTCP

isTls :: TurnURI -> Bool
isTls uri =
_turiScheme uri == SchemeTurns
&& _turiTransport uri == Just (TransportTCP)
&& _turiTransport uri == Just TransportTCP

makeLenses ''RTCConfiguration
makeLenses ''RTCIceServer
Expand Down
3 changes: 3 additions & 0 deletions services/brig/src/Brig/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ import Network.Wai.Utilities.Server
import qualified Network.Wai.Utilities.Server as Server
import Util.Options

-- FUTUREWORK: If any of these async threads die, we will have no clue about it
-- and brig could start misbehaving. We should ensure that brig dies whenever a
-- thread is returns for any reason.
akshaymankar marked this conversation as resolved.
Show resolved Hide resolved
run :: Opts -> IO ()
run o = do
(app, e) <- mkApp o
Expand Down
8 changes: 5 additions & 3 deletions services/brig/src/Brig/TURN/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ import qualified Wire.API.Call.TURN as Public

routesPublic :: Routes Doc.ApiBuilder Handler ()
routesPublic = do
-- Deprecated endpoint, but still used by old clients.
-- See https://github.com/zinfra/backend-issues/issues/1616 for context
get "/calls/config" (continue getCallsConfigH) $
accept "application" "json"
.&. header "Z-User"
Expand Down Expand Up @@ -78,7 +80,7 @@ routesPublic = do
Doc.response 200 "RTCConfiguration" Doc.end

getCallsConfigV2H :: JSON ::: UserId ::: ConnId ::: Maybe (Range 1 10 Int) -> Handler Response
getCallsConfigV2H (_ ::: uid ::: connid ::: limit) = do
getCallsConfigV2H (_ ::: uid ::: connid ::: limit) =
json <$> getCallsConfigV2 uid connid limit

-- | ('UserId', 'ConnId' are required as args here to make sure this is an authenticated end-point.)
Expand All @@ -88,7 +90,7 @@ getCallsConfigV2 _ _ limit = do
newConfig env limit

getCallsConfigH :: JSON ::: UserId ::: ConnId -> Handler Response
getCallsConfigH (_ ::: uid ::: connid) = do
getCallsConfigH (_ ::: uid ::: connid) =
json <$> getCallsConfig uid connid

getCallsConfig :: UserId -> ConnId -> Handler Public.RTCConfiguration
Expand Down Expand Up @@ -125,7 +127,7 @@ newConfig env limit = do
(f : fs) <- shuffleM (toList xs)
return $ List1.list1 f fs
limitedList :: List1 Public.TurnURI -> Range 1 10 Int -> List1 Public.TurnURI
limitedList uris lim = do
limitedList uris lim =
-- assuming limitServers is safe with respect to the length of its return value
-- (see property tests in brig-types)
-- since the input is List1 and limit is in Range 1 10
Expand Down