web socket connection couldn't be established in android instant app by libwebsockets - android-instant-apps

My game couldn't establish websocket connection in Google Play Instant Game environment. It works in installed app, but not in instant app.
The game is built by cocos creator, it use libwebsockets to create websocket connection.
The log is shown below.
2019-01-28 11:23:27.207 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: LoadScene 0fFE2AMtJAV5i2iNn4AVze: 6.237999999997555ms
2019-01-28 11:23:27.208 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: InitScene: 0.2510000000038417ms
2019-01-28 11:23:27.208 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: AttachPersist: 0.21700000000419095ms
2019-01-28 11:23:27.208 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: AutoRelease: 0.23000000001047738ms
2019-01-28 11:23:27.225 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: Destroy: 16.660000000003492ms
2019-01-28 11:23:27.234 26127-26146/org.cocos2d.instant_game D/jswrapper: JS: Activate: 5.010000000009313ms
2019-01-28 11:23:27.235 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: scheme: wss, host: echo.websocket.org, port: 0, path:
2019-01-28 11:23:27.236 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: CA file (/data/user/0/org.cocos2d.instant_game/files/7dfa125f-cee5-4270-9603-f7a0efba19bd.2c435.pem) in writable path exists!
2019-01-28 11:23:27.236 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: NOTICE: Creating Vhost 'default' port -1, 2 protocols, IPv6 on
2019-01-28 11:23:27.256 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) Unhandled websocket event: 32
2019-01-28 11:23:27.252 26127-26127/org.cocos2d.instant_game W/Thread-3: type=1400 audit(0.0:176): avc: denied { node_bind } for scontext=u:r:ephemeral_app:s0:c512,c768 tcontext=u:object_r:node:s0 tclass=tcp_socket permissive=0
2019-01-28 11:23:27.256 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) Unhandled websocket event: 29
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: ERR: ERROR on binding fd 58 to port 0 (-1 13)
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) Unhandled websocket event: 33
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) onConnectionError, state: 0 ...
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) onConnectionClosed, state: 2 ...
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: onConnectionClosed, WebSocket (0x9320da80) is closing by server.
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) onConnectionClosed DONE!
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) onConnectionClosed, state: 3 ...
2019-01-28 11:23:27.257 26127-26168/org.cocos2d.instant_game D/WebSocket.cpp: WebSocket (0x9320da80) onConnectionError, state: 3 ...
2019-01-28 11:23:27.565 1678-2521/? D/NetworkMonitor/NetworkAgentInfo [WIFI () - 101]: PROBE_FALLBACK http://www.google.com/gen_204 Probably not a portal: exception java.net.SocketTimeoutException: failed to connect to www.google.com/2404:6800:4008:800::2004 (port 80) from /fec0::d089:e460:b955:1894 (port 45852) after 10000ms
2019-01-28 11:23:27.567 1678-1762/? D/WifiStateMachine: NETWORK_STATUS_UNWANTED_VALIDATION_FAILED
2019-01-28 11:23:29.864 1678-1695/? E/memtrack: Couldn't load memtrack module
2019-01-28 11:23:29.864 1678-1695/? W/android.os.Debug: failed to get memory consumption info: -1
This is cocos websocket implementation code
According to the error log ERR: ERROR on binding fd 58 to port 0 (-1 13), it means 'permission denied'. Does this mean I could not use libwebsockets in Android Instant App environment?

Related

Can't connect to local mosquitto broker with mqtt.js

I have tried connecting to a local mosquitto broker running on my laptop with mqtt.js.
I can connect with paho-mqtt with python over TLS. I exporting the client of my_mqtt.js and using it in a vue app
my_mqtt.js
import * as mqtt from "precompiled-mqtt";
var options = {
host: '192.168.1.161',
port: 8883,
protocolId: 'ws',
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8)
}
// initialize the MQTT client
const client = mqtt.connect("ws://192.168.1.161:8883", options);
// setup the callbacks
client.on('connect', function () {
console.log('Connected');
});
client.on('error', function (error) {
console.log(error);
});
client.on('message', function (topic, message) {
// called each time a message is received
console.log('Received message:', topic, message.toString());
});
// subscribe to topic 'my/test/topic'
client.subscribe('my/test/topic');
// publish message 'Hello' to topic 'my/test/topic'
client.publish('my/test/topic', 'Hello');
export default client;
mosquitto.conf
listener 1883
protocol mqtt
listener 8883
protocol websockets
allow_anonymous true
COODER#COODER ~ % /usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf -v
1667327393: mosquitto version 2.0.15 starting
1667327393: Config loaded from /usr/local/etc/mosquitto/mosquitto.conf.
1667327393: Opening ipv6 listen socket on port 1883.
1667327393: Opening ipv4 listen socket on port 1883.
1667327393: Opening websockets listen socket on port 8883.
1667327393: mosquitto version 2.0.15 running
1667327404: Client <unknown> closed its connection.
1667327405: Client <unknown> closed its connection.
1667327406: Client <unknown> closed its connection.
1667327408: Client <unknown> closed its connection.
1667327409: Client <unknown> closed its connection.
1667327410: Client <unknown> closed its connection.
1667327411: Client <unknown> closed its connection.
1667327413: Client <unknown> closed its connection.
1667327414: Client <unknown> closed its connection.
1667327415: Client <unknown> closed its connection.
1667327416: Client <unknown> closed its connection.
1667327417: Client <unknown> closed its connection.
1667327419: Client <unknown> closed its connection.
1667327420: Client <unknown> closed its connection.
1667327421: Client <unknown> closed its connection.
1667327422: Client <unknown> closed its connection.
The terminal where I am running the mosquitto broker gives the above output.
protocolId should never be anything other than MQTT
Once you remove that, everything else in the options object is defaults or included in the URI you are already passing to the connect method so you can just replace it with {}

webrtc - In firefox beta version giving InvalidSessionDescriptionError: Local descriptions must have a=mid attributes error

WEBRTC - while setting answer into setLocalDescription getting below error in firefox beta version .63
this.soc.setLocalDescription(answer, function(){}, function(error){ co.handleAnswerLoacalDescError(error); } );
SWRTCAnswerPConn.prototype.handleAnswerLoacalDescError = function (error) {
console.log("error SWRTCAnswerPConn.prototype.handleAnswerLoacalDescError "+error);
}
Below one is the local sdp
"v=0\r\no=mozilla...THIS_IS_SDPARTA-63.0 6779639364423913043 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\n
a=ice-options:trickle\r\n
a=msid-semantic:WMS *\r\nm=audio 9 RTP/SAVPF 0\r\nc=IN IP4 0.0.0.0\r\n
a=sendrecv\r\n
a=ice-pwd:0c25b6011567fa002a87fw6d36d0c32e\r\n
a=ice-ufrag:9cba9881\r\n
a=msid:{342671bf-c92f-4d7e-add6-37228fcaffc4} {6876af26-691b-4beb-9fed-a18e27ea0fe0}\r\n
a=rtcp-mux\r\n
a=rtpmap:0 PCMU/8000\r\n
a=setup:active\r\n
a=ssrc:127692948 cname:{f7d3d74d-86e0-4a27-a143-79f4703d32cf}\r\n"
*
InvalidSessionDescriptionError: Local descriptions must have a=mid attributes
*
Please, anyone, help to resolve this issue.

JSON data sink to Apache Phoenix with Apache Flume Error

I want to sink JSON data into Apache Phoenix with Apache Flume, followed an online guide http://kalyanbigdatatraining.blogspot.com/2016/10/how-to-stream-json-data-into-phoenix.html, but met the following error. How to resolve it? Many thanks!
My environment list as:
hadoop-2.7.3
hbase-1.3.1
phoenix-4.12.0-HBase-1.3-bin
flume-1.7.0
In flume, I added phoenix sink related jars in $FLUME_HOME/plugins.d/phoenix-sink/lib
commons-io-2.4.jar
twill-api-0.8.0.jar
twill-discovery-api-0.8.0.jar
json-path-2.2.0.jar
twill-common-0.8.0.jar
twill-discovery-core-0.8.0.jar
phoenix-flume-4.12.0-HBase-1.3.jar
twill-core-0.8.0.jar
twill-zookeeper-0.8.0.jar
2017-11-11 14:49:54,786 (lifecycleSupervisor-1-1) [DEBUG - org.apache.phoenix.jdbc.PhoenixDriver$2.onRemoval(PhoenixDriver.java:159)] Expiring localhost:2181:/hbase because of EXPLICIT
2017-11-11 14:49:54,787 (lifecycleSupervisor-1-1) [INFO - org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.closeZooKeeperWatcher(ConnectionManager.java:1712)] Closing zookeeper sessionid=0x15fa8952cea00a6
2017-11-11 14:49:54,787 (lifecycleSupervisor-1-1) [DEBUG - org.apache.zookeeper.ZooKeeper.close(ZooKeeper.java:673)] Closing session: 0x15fa8952cea00a6
2017-11-11 14:49:54,787 (lifecycleSupervisor-1-1) [DEBUG - org.apache.zookeeper.ClientCnxn.close(ClientCnxn.java:1306)] Closing client for session: 0x15fa8952cea00a6
2017-11-11 14:49:54,789 (lifecycleSupervisor-1-1-SendThread(localhost:2181)) [DEBUG - org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:818)] Reading reply sessionid:0x15fa8952cea00a6, packet:: clientPath:null serverPath:null finished:false header:: 3,-11 replyHeader:: 3,2620,0 request:: null response:: null
2017-11-11 14:49:54,789 (lifecycleSupervisor-1-1) [DEBUG - org.apache.zookeeper.ClientCnxn.disconnect(ClientCnxn.java:1290)] Disconnecting client for session: 0x15fa8952cea00a6
2017-11-11 14:49:54,789 (lifecycleSupervisor-1-1-SendThread(localhost:2181)) [DEBUG - org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1086)] An exception was thrown while closing send thread for session 0x15fa8952cea00a6 : Unable to read additional data from server sessionid 0x15fa8952cea00a6, likely server has closed socket
2017-11-11 14:49:54,789 (lifecycleSupervisor-1-1) [INFO - org.apache.zookeeper.ZooKeeper.close(ZooKeeper.java:684)] Session: 0x15fa8952cea00a6 closed
2017-11-11 14:49:54,789 (lifecycleSupervisor-1-1-EventThread) [INFO - org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:512)] EventThread shut down
2017-11-11 14:49:54,790 (lifecycleSupervisor-1-1) [ERROR - org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251)] Unable to start SinkRunner: { policy:org.apache.flume.sink.DefaultSinkProcessor#2d2052a0 counterGroup:{ name:null counters:{} } } - Exception follows.
java.lang.NoSuchMethodError:
org.apache.twill.zookeeper.ZKClientService.startAndWait()Lcom/google/common/util/concurrent/Service$State;
at org.apache.phoenix.transaction.TephraTransactionContext.setTransactionClient(TephraTransactionContext.java:147)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.initTxServiceClient(ConnectionQueryServicesImpl.java:401)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.openConnection(ConnectionQueryServicesImpl.java:415)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.access$500(ConnectionQueryServicesImpl.java:257)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:2384)
at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:2360)
at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:76)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:2360)
at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:255)
at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:150)
at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:221)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at org.apache.phoenix.flume.serializer.BaseEventSerializer.initialize(BaseEventSerializer.java:140)
at org.apache.phoenix.flume.sink.PhoenixSink.start(PhoenixSink.java:119)
at org.apache.flume.sink.DefaultSinkProcessor.start(DefaultSinkProcessor.java:45)
at org.apache.flume.SinkRunner.start(SinkRunner.java:79)
at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:249)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
2017-11-11 14:49:54,792 (lifecycleSupervisor-1-1) [INFO - org.apache.flume.instrumentation.MonitoredCounterGroup.stop(MonitoredCounterGroup.java:149)] Component type: SINK, name: Phoenix Sink__1 stopped
2017-11-11 14:49:54,792 (lifecycleSupervisor-1-1) [INFO - org.apache.flume.instrumentation.MonitoredCounterGroup.stop(MonitoredCounterGroup.java:155)] Shutdown Metric for type: SINK, name: Phoenix Sink__1. sink.start.time == 1510382993516
Here is my flume-agent.properties
agent.sources = exec
agent.channels = mem-channel
agent.sinks = phoenix-sink
agent.sources.exec.type = exec
agent.sources.exec.command = tail -F /Users/chenshuai1/tmp/users.json
agent.sources.exec.channels = mem-channel
agent.sinks.phoenix-sink.type = org.apache.phoenix.flume.sink.PhoenixSink
agent.sinks.phoenix-sink.batchSize = 10
agent.sinks.phoenix-sink.zookeeperQuorum = localhost
agent.sinks.phoenix-sink.table = users2
agent.sinks.phoenix-sink.ddl = CREATE TABLE IF NOT EXISTS users2 (userid BIGINT NOT NULL, username VARCHAR, password VARCHAR, email VARCHAR, country VARCHAR, state VARCHAR, city VARCHAR, dt VARCHAR NOT NULL CONSTRAINT PK PRIMARY KEY (userid, dt))
agent.sinks.phoenix-sink.serializer = json
agent.sinks.phoenix-sink.serializer.columnsMapping = {"userid":"userid", "username":"username", "password":"password", "email":"email", "country":"country", "state":"state", "city":"city", "dt":"dt"}
agent.sinks.phoenix-sink.serializer.partialSchema = true
agent.sinks.phoenix-sink.serializer.columns = userid,username,password,email,country,state,city,dt
agent.sinks.phoenix-sink.channel = mem-channel
agent.channels.mem-channel.type = memory
agent.channels.mem-channel.capacity = 1000
agent.channels.mem-channel.transactionCapacity = 100

Adding WSS to Websocket/Autobahn/WAMP/Twisted

There doesn't seem to be much out there right now on how to properly add WSS support to an Autobahn/Twisted setup. I'm starting with the Crossbar serial2ws example, which shows a WS-based connection between frontend and backend.
I'd like to know how to adapt the serial2ws example for an SSL connection.
I changed:
# serial2ws.py
router = args.router or 'ws://localhost:8080'
to
router = args.router or 'wss://localhost:8080'
And on the website JS:
connection = new autobahn.Connection({
url: (document.location.protocol === "http:" ? "ws:" : "wss:") + "//" + ip + ":" + port,
realm: 'realm1',
...
})
But, when I try to connect, it fails with:
WebSocket connection to 'wss://192.168.0.12:8080/' failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
The Python server logs:
2016-06-30 16:52:57-0400 [-] Log opened.
2016-06-30 16:52:57-0400 [-] Using Twisted reactor <class
'twisted.internet.epollreactor.EPollReactor'>
2016-06-30 16:52:59-0400 [-] WampWebSocketServerFactory starting on 8080
2016-06-30 16:52:59-0400 [-] Starting factory <autobahn.twisted.websocket.WampWebSocketServerFactory instance at 0x76669dc8>
2016-06-30 16:53:00-0400 [-] Starting factory <autobahn.twisted.websocket.WampWebSocketClientFactory instance at 0x766112b0>
2016-06-30 16:53:05-0400 [WampWebSocketClientProtocol (TLSMemoryBIOProtocol),client] Stopping factory <autobahn.twisted.websocket.WampWebSocketClientFactory instance at 0x766112b0>
To be clear, when the "wss" instances above are reverted to the original "ws", everything works.
Also tried:
Adding to serial2ws.py:
contextFactory = ssl.DefaultOpenSSLContextFactory('/root/keys/server.key', '/root/keys/server.crt')
# Change
reactor.listenTCP(args.web, Site(File(".")))
# to
reactor.listenSSL(args.web, Site(File(".")), contextFactory)

Gitlab: Can not set relay address for email (state=SSLv2/v3 read server hello A: unknown protocol")

This is what my "/srv/gitlab/config/gitlab.rb" looks like for email settings
################################
# GitLab email server settings #
################################
# see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566f0758d4a27857b52a3/doc/settings/smtp.md#smtp-settings
# Use smtp instead of sendmail/postfix.
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "corp-myorg-com.mail.outlook.com"
gitlab_rails['smtp_port'] = 25
# gitlab_rails['smtp_user_name'] = "smtp user"
# gitlab_rails['smtp_password'] = "smtp password"
# gitlab_rails['smtp_domain'] = "example.com"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# gitlab_rails['smtp_openssl_verify_mode'] = 'none' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
When I try to sign up from GitLab web page, I see in logs that
==> /var/log/gitlab/gitlab-rails/production.log <==
Started POST "/users" for 172.32.1.111 at 2015-09-10 04:50:47 +0000
Processing by RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"Harit Himanshu", "username"=>"harit", "email"=>"harit#myorg.com", "password"=>"[FILTERED]"}}
Completed 200 OK in 364ms (Views: 44.7ms | ActiveRecord: 24.1ms)
==> /var/log/gitlab/nginx/gitlab_access.log <==
172.32.1.111 - - [10/Sep/2015:04:50:48 +0000] "POST /users HTTP/1.1" 200 2223 "http://172.16.205.153:8080/users/sign_in" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"
==> /var/log/gitlab/sidekiq/current <==
2015-09-10_04:50:56.62636 2015-09-10T04:50:56.626Z 447 TID-elbtk Devise::Async::Backend::Sidekiq JID-24a487b2ee95a069f6783b43 INFO: start
==> /var/log/gitlab/gitlab-rails/production.log <==
Sent mail to harit#myorg.com (331.0ms)
==> /var/log/gitlab/sidekiq/current <==
2015-09-10_04:50:57.01071 2015-09-10T04:50:57.010Z 447 TID-elbtk Devise::Async::Backend::Sidekiq JID-24a487b2ee95a069f6783b43 INFO: fail: 0.384 sec
2015-09-10_04:50:57.01139 2015-09-10T04:50:57.011Z 447 TID-elbtk WARN: {"retry"=>true, "queue"=>"mailer", "class"=>"Devise::Async::Backend::Sidekiq", "args"=>["confirmation_instructions", "User", "4", "H7fU4LytjadCSCMyJv-S", {}], "jid"=>"24a487b2ee95a069f6783b43", "enqueued_at"=>1441859975.09268, "error_message"=>"SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol", "error_class"=>"OpenSSL::SSL::SSLError", "failed_at"=>1441859975.4031353, "retry_count"=>5, "retried_at"=>1441860657.0101695}
2015-09-10_04:50:57.01141 2015-09-10T04:50:57.011Z 447 TID-elbtk WARN: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol
2015-09-10_04:50:57.01145 2015-09-10T04:50:57.011Z 447 TID-elbtk WARN: /opt/gitlab/embedded/lib/ruby/2.1.0/net/smtp.rb:586:in `connect'
2015-09-10_04:50:57.01146 /opt/gitlab/embedded/lib/ruby/2.1.0/net/smtp.rb:586:in `tlsconnect'
2015-09-10_04:50:57.01146 /opt/gitlab/embedded/lib/ruby/2.1.0/net/smtp.rb:554:in `do_start'
2015-09-10_04:50:57.01147 /opt/gitlab/embedded/lib/ruby/2.1.0/net/smtp.rb:520:in `start'
2015-09-10_04:50:57.01147 /opt/gitlab/embedded/service/gem/ruby/2.1.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
What is the issue, I am able to use this relay address in production with other projects.
What am I missing?
Thanks
I was having the same issue with Gitlab CE 8.11.4. I found that these settings worked:
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false