MCPcopy Index your code
hub / github.com/HelloZeroNet/ZeroNet / connect

Method connect

src/Connection/Connection.py:120–180  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

118
119 # Open connection to peer and wait for handshake
120 def connect(self):
121 self.type = "out"
122 if self.ip_type == "onion":
123 if not self.server.tor_manager or not self.server.tor_manager.enabled:
124 raise Exception("Can't connect to onion addresses, no Tor controller present")
125 self.sock = self.server.tor_manager.createSocket(self.ip, self.port)
126 elif config.tor == "always" and helper.isPrivateIp(self.ip) and self.ip not in config.ip_local:
127 raise Exception("Can't connect to local IPs in Tor: always mode")
128 elif config.trackers_proxy != "disable" and config.tor != "always" and self.is_tracker_connection:
129 if config.trackers_proxy == "tor":
130 self.sock = self.server.tor_manager.createSocket(self.ip, self.port)
131 else:
132 import socks
133 self.sock = socks.socksocket()
134 proxy_ip, proxy_port = config.trackers_proxy.split(":")
135 self.sock.set_proxy(socks.PROXY_TYPE_SOCKS5, proxy_ip, int(proxy_port))
136 else:
137 self.sock = self.createSocket()
138
139 if "TCP_NODELAY" in dir(socket):
140 self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
141
142 timeout_before = self.sock.gettimeout()
143 self.sock.settimeout(30)
144 if self.ip_type == "ipv6" and not hasattr(self.sock, "proxy"):
145 sock_address = (self.ip, self.port, 1, 1)
146 else:
147 sock_address = (self.ip, self.port)
148
149 self.sock.connect(sock_address)
150
151 # Implicit SSL
152 should_encrypt = not self.ip_type == "onion" and self.ip not in self.server.broken_ssl_ips and self.ip not in config.ip_local
153 if self.cert_pin:
154 self.sock = CryptConnection.manager.wrapSocket(self.sock, "tls-rsa", cert_pin=self.cert_pin)
155 self.sock.do_handshake()
156 self.crypt = "tls-rsa"
157 self.sock_wrapped = True
158 elif should_encrypt and "tls-rsa" in CryptConnection.manager.crypt_supported:
159 try:
160 self.sock = CryptConnection.manager.wrapSocket(self.sock, "tls-rsa")
161 self.sock.do_handshake()
162 self.crypt = "tls-rsa"
163 self.sock_wrapped = True
164 except Exception as err:
165 if not config.force_encryption:
166 self.log("Crypt connection error, adding %s:%s as broken ssl. %s" % (self.ip, self.port, Debug.formatException(err)))
167 self.server.broken_ssl_ips[self.ip] = True
168 self.sock.close()
169 self.crypt = None
170 self.sock = self.createSocket()
171 self.sock.settimeout(30)
172 self.sock.connect(sock_address)
173
174 # Detect protocol
175 self.send({"cmd": "handshake", "req_id": 0, "params": self.getHandshakeInfo()})
176 event_connected = self.event_connected
177 gevent.spawn(self.messageLoop)

Callers 1

getConnectionMethod · 0.95

Calls 7

createSocketMethod · 0.95
logMethod · 0.95
sendMethod · 0.95
getHandshakeInfoMethod · 0.95
wrapSocketMethod · 0.80
closeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected