URLSessionWebSocketTask SIP Register

I can connect to my SIP server (asterisk), but my REGISTER message is not getting a response, and then I get disconnected 30 seconds later. Does anyone have a working example or maybe a tutorial or video on how to do this? These are the parameters I'm sending:

        REGISTER sip:\(host) SIP/2.0
        Via: SIP/2.0/WSS ij5094obipus.invalid;branch=\(branch)
        Max-Forwards: 69
        To: <sip:\(username)@\(host)>
        From: <sip:\(username)@\(host)>;tag=\(tag)
        Call-ID: \(callID)
        CSeq: 2 REGISTER
        Contact: <sip:pqqr773g@3tb56aj0gkb8.invalid;transport=ws>;+sip.ice;reg-id=1;+sip.instance="<urn:uuid:\(uuid)>";expires=60

        Expires: 60
        Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
        Supported: path,gruu,outbound
        User-Agent: CoNameWebRTC-v1.5
        Content-Length: 0
Add a Comment

Replies

I connect like this:

var request: URLRequest = URLRequest(url: url)

request.addValue("websocket", forHTTPHeaderField: "Upgrade")
request.addValue("sip", forHTTPHeaderField: "Sec-WebSocket-Protocol")
request.addValue("permessage-deflate; client_max_window_bits", forHTTPHeaderField: "Sec-WebSocket-Extensions")
request.addValue("13", forHTTPHeaderField: "Sec-WebSocket-Version")
request.addValue(key, forHTTPHeaderField: "Sec-WebSocket-Key")
request.httpMethod = "GET"

socketTask = session?.webSocketTask(with: request)
socketTask?.resume()

And I send the REGISTER message after connection established and this delegate method fires:

func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didOpenWithProtocol protocol: String?) {}