| 343 | |
| 344 | # My handshake info |
| 345 | def getHandshakeInfo(self): |
| 346 | # No TLS for onion connections |
| 347 | if self.ip_type == "onion": |
| 348 | crypt_supported = [] |
| 349 | elif self.ip in self.server.broken_ssl_ips: |
| 350 | crypt_supported = [] |
| 351 | else: |
| 352 | crypt_supported = CryptConnection.manager.crypt_supported |
| 353 | # No peer id for onion connections |
| 354 | if self.ip_type == "onion" or self.ip in config.ip_local: |
| 355 | peer_id = "" |
| 356 | else: |
| 357 | peer_id = self.server.peer_id |
| 358 | # Setup peer lock from requested onion address |
| 359 | if self.handshake and self.handshake.get("target_ip", "").endswith(".onion") and self.server.tor_manager.start_onions: |
| 360 | self.target_onion = self.handshake.get("target_ip").replace(".onion", "") # My onion address |
| 361 | if not self.server.tor_manager.site_onions.values(): |
| 362 | self.server.log.warning("Unknown target onion address: %s" % self.target_onion) |
| 363 | |
| 364 | handshake = { |
| 365 | "version": config.version, |
| 366 | "protocol": "v2", |
| 367 | "use_bin_type": True, |
| 368 | "peer_id": peer_id, |
| 369 | "fileserver_port": self.server.port, |
| 370 | "port_opened": self.server.port_opened.get(self.ip_type, None), |
| 371 | "target_ip": self.ip, |
| 372 | "rev": config.rev, |
| 373 | "crypt_supported": crypt_supported, |
| 374 | "crypt": self.crypt, |
| 375 | "time": int(time.time()) |
| 376 | } |
| 377 | if self.target_onion: |
| 378 | handshake["onion"] = self.target_onion |
| 379 | elif self.ip_type == "onion": |
| 380 | handshake["onion"] = self.server.tor_manager.getOnion("global") |
| 381 | |
| 382 | if self.is_tracker_connection: |
| 383 | handshake["tracker_connection"] = True |
| 384 | |
| 385 | if config.debug_socket: |
| 386 | self.log("My Handshake: %s" % handshake) |
| 387 | |
| 388 | return handshake |
| 389 | |
| 390 | def setHandshake(self, handshake): |
| 391 | if config.debug_socket: |