Refactored tests
This commit is contained in:
parent
ad59434927
commit
1aa831cbd6
@ -1,80 +0,0 @@
|
||||
tox_version_major
|
||||
tox_version_minor
|
||||
tox_version_patch
|
||||
tox_version_is_compatible
|
||||
tox_public_key_size
|
||||
tox_secret_key_size
|
||||
tox_conference_uid_size
|
||||
tox_conference_id_size
|
||||
tox_nospam_size
|
||||
tox_address_size
|
||||
tox_max_name_length
|
||||
tox_max_status_message_length
|
||||
tox_max_friend_request_length
|
||||
tox_max_message_length
|
||||
tox_max_custom_packet_size
|
||||
tox_hash_length
|
||||
tox_file_id_length
|
||||
tox_max_filename_length
|
||||
tox_max_hostname_length
|
||||
tox_options_get_ipv6_enabled
|
||||
tox_options_get_udp_enabled
|
||||
tox_options_get_local_discovery_enabled
|
||||
tox_options_get_dht_announcements_enabled
|
||||
tox_options_get_proxy_type
|
||||
tox_options_get_proxy_port
|
||||
tox_options_get_start_port
|
||||
tox_options_get_end_port
|
||||
tox_options_get_tcp_port
|
||||
tox_options_get_hole_punching_enabled
|
||||
tox_options_get_savedata_type
|
||||
tox_options_get_savedata_length
|
||||
tox_options_get_experimental_thread_safety
|
||||
tox_file_seek
|
||||
tox_callback_conference_connected
|
||||
tox_callback_conference_message
|
||||
tox_callback_conference_title
|
||||
tox_callback_conference_peer_list_changed
|
||||
tox_conference_new
|
||||
tox_conference_delete
|
||||
tox_conference_peer_count
|
||||
tox_conference_peer_get_name_size
|
||||
tox_conference_peer_get_name
|
||||
tox_conference_peer_get_public_key
|
||||
tox_conference_peer_number_is_ours
|
||||
tox_conference_offline_peer_count
|
||||
tox_conference_offline_peer_get_name_size
|
||||
tox_conference_offline_peer_get_name
|
||||
tox_conference_offline_peer_get_public_key
|
||||
tox_conference_offline_peer_get_last_active
|
||||
tox_conference_set_max_offline
|
||||
tox_conference_invite
|
||||
tox_conference_join
|
||||
tox_conference_send_message
|
||||
tox_conference_get_title_size
|
||||
tox_conference_get_title
|
||||
tox_conference_set_title
|
||||
tox_conference_get_chatlist_size
|
||||
tox_conference_get_chatlist
|
||||
tox_conference_get_type
|
||||
tox_conference_get_id
|
||||
tox_conference_by_id
|
||||
tox_conference_get_uid
|
||||
tox_conference_by_uid
|
||||
tox_group_max_topic_length
|
||||
tox_group_max_part_length
|
||||
tox_group_max_group_name_length
|
||||
tox_group_max_password_size
|
||||
tox_group_chat_id_size
|
||||
tox_group_peer_public_key_size
|
||||
tox_group_peer_get_connection_status
|
||||
tox_group_get_voice_state
|
||||
tox_callback_group_voice_state
|
||||
tox_group_get_topic_lock
|
||||
tox_callback_group_topic_lock
|
||||
tox_group_send_custom_private_packet
|
||||
tox_callback_group_custom_private_packet
|
||||
tox_group_founder_set_topic_lock
|
||||
tox_group_founder_set_voice_state
|
||||
tox_group_set_ignore
|
||||
tox_group_mod_kick_peer
|
@ -175,7 +175,7 @@ class Tox:
|
||||
|
||||
def kill(self):
|
||||
if hasattr(self, 'AV'): del self.AV
|
||||
LOG_DEBUG(f"tox_kill")
|
||||
LOG_INFO(f"tox_kill")
|
||||
try:
|
||||
Tox.libtoxcore.tox_kill(self._tox_pointer)
|
||||
except Exception as e:
|
||||
@ -305,7 +305,7 @@ class Tox:
|
||||
raise ArgumentError('One of the arguments to the function was NULL when it was not expected.')
|
||||
if tox_err_bootstrap == TOX_ERR_BOOTSTRAP['BAD_HOST']:
|
||||
raise ArgumentError('The address could not be resolved to an IP '
|
||||
'address, or the IP address passed was invalid.')
|
||||
'address, or the address passed was invalid.')
|
||||
if tox_err_bootstrap == TOX_ERR_BOOTSTRAP['BAD_PORT']:
|
||||
raise ArgumentError('The port passed was invalid. The valid port range is (1, 65535).')
|
||||
# me - this seems wrong - should be False
|
||||
@ -763,7 +763,8 @@ class Tox:
|
||||
"""
|
||||
Checks if a friend with the given friend number exists and returns true if it does.
|
||||
"""
|
||||
return bool(Tox.libtoxcore.tox_friend_exists(self._tox_pointer, c_uint32(friend_number)))
|
||||
# bool() -> TypeError: 'str' object cannot be interpreted as an integer
|
||||
return Tox.libtoxcore.tox_friend_exists(self._tox_pointer, c_uint32(friend_number))
|
||||
|
||||
def self_get_friend_list_size(self):
|
||||
"""
|
||||
@ -1154,24 +1155,28 @@ class Tox:
|
||||
raise ToxError('The function did not return OK for set typing.')
|
||||
|
||||
def friend_send_message(self, friend_number, message_type, message):
|
||||
"""
|
||||
Send a text chat message to an online friend.
|
||||
"""Send a text chat message to an online friend.
|
||||
|
||||
This function creates a chat message packet and pushes it into the send queue.
|
||||
|
||||
The message length may not exceed TOX_MAX_MESSAGE_LENGTH. Larger messages must be split by the client and sent
|
||||
as separate messages. Other clients can then reassemble the fragments. Messages may not be empty.
|
||||
The message length may not exceed
|
||||
TOX_MAX_MESSAGE_LENGTH. Larger messages must be split by the
|
||||
client and sent as separate messages. Other clients can then
|
||||
reassemble the fragments. Messages may not be empty.
|
||||
|
||||
The return value of this function is the message ID. If a read receipt is received, the triggered
|
||||
`friend_read_receipt` event will be passed this message ID.
|
||||
The return value of this function is the message ID. If a read
|
||||
receipt is received, the triggered `friend_read_receipt` event
|
||||
will be passed this message ID.
|
||||
|
||||
Message IDs are unique per friend. The first message ID is 0. Message IDs are incremented by 1 each time a
|
||||
message is sent. If UINT32_MAX messages were sent, the next message ID is 0.
|
||||
Message IDs are unique per friend. The first message ID is 0.
|
||||
Message IDs are incremented by 1 each time a message is sent.
|
||||
If UINT32_MAX messages were sent, the next message ID is 0.
|
||||
|
||||
:param friend_number: The friend number of the friend to send the message to.
|
||||
:param message_type: Message type (TOX_MESSAGE_TYPE).
|
||||
:param message: A non-None message text.
|
||||
:return: message ID
|
||||
|
||||
"""
|
||||
tox_err_friend_send_message = c_int()
|
||||
LOG_DEBUG(f"tox_friend_send_message")
|
||||
@ -1938,8 +1943,8 @@ class Tox:
|
||||
|
||||
byref(error))
|
||||
if error.value:
|
||||
LOG_ERROR(f"group_join {error.value}")
|
||||
raise ToxError(f"group_join {error.value}")
|
||||
LOG_ERROR(f"group_join {error.value} {TOX_ERR_GROUP_JOIN[error.value]}")
|
||||
raise ToxError(f"group_join {error.value} {TOX_ERR_GROUP_JOIN[error.value]}")
|
||||
return result
|
||||
|
||||
def group_reconnect(self, group_number):
|
||||
@ -2438,12 +2443,12 @@ class Tox:
|
||||
|
||||
def groups_get_list(self):
|
||||
raise NotImplementedError('tox_groups_get_list')
|
||||
groups_list_size = self.group_get_number_groups()
|
||||
groups_list = create_string_buffer(sizeof(c_uint32) * groups_list_size)
|
||||
groups_list = POINTER(c_uint32)(groups_list)
|
||||
LOG_DEBUG(f"tox_groups_get_list")
|
||||
Tox.libtoxcore.tox_groups_get_list(self._tox_pointer, groups_list)
|
||||
return groups_list[0:groups_list_size]
|
||||
# groups_list_size = self.group_get_number_groups()
|
||||
# groups_list = create_string_buffer(sizeof(c_uint32) * groups_list_size)
|
||||
# groups_list = POINTER(c_uint32)(groups_list)
|
||||
# LOG_DEBUG(f"tox_groups_get_list")
|
||||
# Tox.libtoxcore.tox_groups_get_list(self._tox_pointer, groups_list)
|
||||
# return groups_list[0:groups_list_size]
|
||||
|
||||
def group_get_privacy_state(self, group_number):
|
||||
"""
|
||||
@ -3105,6 +3110,9 @@ class Tox:
|
||||
LOG_DEBUG(f"tox_callback_group_moderation")
|
||||
|
||||
def group_toggle_set_ignore(self, group_number, peer_id, ignore):
|
||||
return group_set_ignore(self, group_number, peer_id, ignore)
|
||||
|
||||
def group_set_ignore(self, group_number, peer_id, ignore):
|
||||
"""
|
||||
Ignore or unignore a peer.
|
||||
|
||||
@ -3116,10 +3124,9 @@ class Tox:
|
||||
"""
|
||||
|
||||
error = c_int()
|
||||
LOG_DEBUG(f"tox_group_toggle_set_ignore")
|
||||
result = Tox.libtoxcore.tox_group_toggle_set_ignore(self._tox_pointer, group_number, peer_id, ignore, byref(error))
|
||||
LOG_DEBUG(f"tox_group_set_ignore")
|
||||
result = Tox.libtoxcore.tox_group_set_ignore(self._tox_pointer, group_number, peer_id, ignore, byref(error))
|
||||
if error.value:
|
||||
LOG_ERROR(f"tox_group_toggle_set_ignore {error.value}")
|
||||
raise ToxError("tox_group_toggle_set_ignore {error.value}")
|
||||
LOG_ERROR(f"tox_group_set_ignore {error.value}")
|
||||
raise ToxError("tox_group_set_ignore {error.value}")
|
||||
return result
|
||||
|
||||
|
@ -29,22 +29,177 @@ LOG = logging.getLogger()
|
||||
|
||||
bHAVE_TORR = shutil.which('tor-resolve')
|
||||
|
||||
yKNOWN_ONIONS = """
|
||||
- facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd # facebook
|
||||
- duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad # ddg
|
||||
- zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad # hks
|
||||
"""
|
||||
# grep -B 1 '<li><a href="' /tmp/tor.html |sed -e 's/<li><a href="http:../ - /' -e 's/.onion.*//' -e 's/<li id=./ # /' -e 's/".*//' -e '/^--/d' -e '/<li id/d'
|
||||
# This will slow things down 1-2 min each
|
||||
yKNOWN_ONIONS_TOR = """
|
||||
# 2019.www.torproject.org
|
||||
- jqyzxhjk6psc6ul5jnfwloamhtyh7si74b4743k2qgpskwwxrzhsxmad
|
||||
# api.donate.torproject.org
|
||||
- rbi3fpvpz4vlrx67scoqef2zxz7k4xyiludszg655favvkygjmhz6wyd
|
||||
# archive.torproject.org
|
||||
- uy3qxvwzwoeztnellvvhxh7ju7kfvlsauka7avilcjg7domzxptbq7qd
|
||||
# aus1.torproject.org
|
||||
- ot3ivcdxmalbsbponeeq5222hftpf3pqil24q3s5ejwo5t52l65qusid
|
||||
# aus2.torproject.org
|
||||
- b5t7emfr2rn3ixr4lvizpi3stnni4j4p6goxho7lldf4qg4hz5hvpqid
|
||||
# blog.torproject.org
|
||||
- pzhdfe7jraknpj2qgu5cz2u3i4deuyfwmonvzu5i3nyw4t4bmg7o5pad
|
||||
# bridges.torproject.org
|
||||
- yq5jjvr7drkjrelzhut7kgclfuro65jjlivyzfmxiq2kyv5lickrl4qd
|
||||
# cloud.torproject.org
|
||||
- ui3cpcohcoko6aydhuhlkwqqtvadhaflcc5zb7mwandqmcal7sbwzwqd
|
||||
# collector.torproject.org
|
||||
- pgmrispjerzzf2tdzbfp624cg5vpbvdw2q5a3hvtsbsx25vnni767yad
|
||||
# collector2.torproject.org
|
||||
- 3srlmjzbyyzz62jvdfqwn5ldqmh6mwnqxre2zamxveb75uz2qrqkrkyd
|
||||
# community.torproject.org
|
||||
- xmrhfasfg5suueegrnc4gsgyi2tyclcy5oz7f5drnrodmdtob6t2ioyd
|
||||
# consensus-health.torproject.org
|
||||
- tkskz5dkjel4xqyw5d5l3k52kgglotwn6vgb5wrl2oa5yi2szvywiyid
|
||||
# crm.torproject.org
|
||||
- 6ojylpznauimd2fga3m7g24vd7ebkzlemxdprxckevqpzs347ugmynqd
|
||||
# deb.torproject.org
|
||||
- apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd
|
||||
# dev.crm.torproject.org
|
||||
- eewp4iydzyu2a5d6bvqadadkozxdbhsdtmsoczu2joexfrjjsheaecad
|
||||
# dist.torproject.org
|
||||
- scpalcwstkydpa3y7dbpkjs2dtr7zvtvdbyj3dqwkucfrwyixcl5ptqd
|
||||
# donate-api.torproject.org
|
||||
- lkfkuhcx62yfvzuz5o3ju4divuf4bsh2bybwd3oierq47kyp2ig2gvid
|
||||
# donate.torproject.org
|
||||
- yoaenchicimox2qdc47p36zm3cuclq7s7qxx6kvxqaxjodigfifljqqd
|
||||
# exonerator.torproject.org
|
||||
- pm46i5h2lfewyx6l7pnicbxhts2sxzacvsbmqiemqaspredf2gm3dpad
|
||||
# extra.torproject.org
|
||||
- kkr72iohlfix5ipjg776eyhplnl2oiv5tz4h2y2bkhjix3quafvjd5ad
|
||||
# gettor.torproject.org
|
||||
- ueghr2hzndecdntou33mhymbbxj7pir74nwzhqr6drhxpbz3j272p4id
|
||||
# git.torproject.org
|
||||
- xtlfhaspqtkeeqxk6umggfbr3gyfznvf4jhrge2fujz53433i2fcs3id
|
||||
# gitlab.torproject.org
|
||||
- eweiibe6tdjsdprb4px6rqrzzcsi22m4koia44kc5pcjr7nec2rlxyad
|
||||
# gitweb.torproject.org
|
||||
- gzgme7ov25seqjbphab4fkcph3jkobfwwpivt5kzbv3kqx2y2qttl4yd
|
||||
# grafana1.torproject.org
|
||||
- 7zjnw5lx2x27rwiocxkqdquo7fawj46mf2wiu2l7e6z6ng6nivmdxnad
|
||||
# grafana2.torproject.org
|
||||
- f3vd6fyiccuppybkxiblgigej3pfvvqzjnhd3wyv7h4ee5asawf2fhqd
|
||||
# ircbouncer.torproject.org
|
||||
- moz5kotsnjony4oxccxfo4lwk3pvoxmdoljibhgoonzgzjs5oemtjmqd
|
||||
# metabase.metrics.torproject.org
|
||||
- gr5pseamigereei4c6654hafzhid5z2c3oqzn6cfnx7yfyelt47znhad
|
||||
# metrics.torproject.org
|
||||
- hctxrvjzfpvmzh2jllqhgvvkoepxb4kfzdjm6h7egcwlumggtktiftid
|
||||
# moat.torproject.org
|
||||
- z7m7ogzdhu43nosvjtsuplfmuqa3ge5obahixydhmzdox6owwxfoxzid
|
||||
# nagios.torproject.org
|
||||
- w6vizvw4ckesva5fvlkrepynemxdq6pgo5sh4r76ec6msq5notkhqryd
|
||||
# newsletter.torproject.org
|
||||
- a4ygisnerpgtc5ayerl22pll6cls3oyj54qgpm7qrmb66xrxts6y3lyd
|
||||
# nightlies.tbb.torproject.org
|
||||
- umj4zbqdfcyevlkgqgpq6foxk3z75zzxsbgt5jqmfxofrbrjh3crbnad
|
||||
# nyx.torproject.org
|
||||
- 3ewfgrt4gzfccp6bnquhqb266r3zepiqpnsk3falwygkegtluwuyevid
|
||||
- xao2lxsmia2edq2n5zxg6uahx6xox2t7bfjw6b5vdzsxi7ezmqob6qid
|
||||
- dud2sxm6feahhuwj4y4lzktduy7v3qpaqsfkggtj2ojmzathttkegoid
|
||||
# openpgpkey.torproject.org
|
||||
- 2yldcptk56shc7lwieozoglw3t5ghty7m6mf2faysvfnzccqavbu2mad
|
||||
# people.torproject.org
|
||||
- 5ecey6oe4rocdsfoigr4idu42cecm2j7zfogc3xc7kfn4uriehwrs6qd
|
||||
# prometheus1.torproject.org
|
||||
- ydok5jiruh3ak6hcfdlm2g7iuraaxcomeckj2nucjsxif6qmrrda2byd
|
||||
# prometheus2.torproject.org
|
||||
- vyo6yrqhl3by7d6n5t6hjkflaqbarjpqjnvapr5u5rafk4imnfrmcjyd
|
||||
# rbm.torproject.org
|
||||
- nkuz2tpok7ctwd5ueer5bytj3bm42vp7lgjcsnznal3stotg6vyaakyd
|
||||
# research.torproject.org
|
||||
- xhqthou6scpfnwjyzc3ekdgcbvj76ccgyjyxp6cgypxjlcuhnxiktnqd
|
||||
# review.torproject.net
|
||||
- zhkhhhnppc5k6xju7n25rjba3wuip73jnodicxl65qdpchrwvvsilcyd
|
||||
# rpm.torproject.org
|
||||
- 4ayyzfoh5qdrokqaejis3rdredhvf22n3migyxfudpkpunngfc7g4lqd
|
||||
# snowflake.torproject.org
|
||||
- oljlphash3bpqtrvqpr5gwzrhroziw4mddidi5d2qa4qjejcbrmoypqd
|
||||
# spec.torproject.org
|
||||
- i3xi5qxvbrngh3g6o7czwjfxwjzigook7zxzjmgwg5b7xnjcn5hzciad
|
||||
# staging-api.donate.torproject.org
|
||||
- vorwws6g6mx23djlznmlqva4t5olulpnet6fxyiyytcu5dorp3fstdqd
|
||||
# staging.crm.torproject.org
|
||||
- pt34uujusar4arrvsqljndqlt7tck2d5cosaav5xni4nh7bmvshyp2yd
|
||||
# staging.donate-api.torproject.org
|
||||
- 7niqsyixinnhxvh33zh5dqnplxnc2yd6ktvats3zmtbbpzcphpbsa6qd
|
||||
# status.torproject.org
|
||||
- eixoaclv7qvnmu5rolbdwba65xpdiditdoyp6edsre3fitad777jr3ad
|
||||
# stem.torproject.org
|
||||
- mf34jlghauz5pxjcmdymdqbe5pva4v24logeys446tdrgd5lpsrocmqd
|
||||
# styleguide.torproject.org
|
||||
- 7khzpw47s35pwo3lvtctwf2szvnq3kgglvzc22elx7of2awdzpovqmqd
|
||||
# submission.torproject.org
|
||||
- givpjczyrb5jjseful3o5tn3tg7tidbu4gydl4sa5ekpcipivqaqnpad
|
||||
# support.torproject.org
|
||||
- rzuwtpc4wb3xdzrj3yeajsvm3fkq4vbeubm2tdxaqruzzzgs5dwemlad
|
||||
# survey.torproject.org
|
||||
- eh5esdnd6fkbkapfc6nuyvkjgbtnzq2is72lmpwbdbxepd2z7zbgzsqd
|
||||
# svn-archive.torproject.org
|
||||
- b63iq6es4biaawfilwftlfkw6a6putogxh4iakei2ioppb7dsfucekyd
|
||||
# tb-manual.torproject.org
|
||||
- dsbqrprgkqqifztta6h3w7i2htjhnq7d3qkh3c7gvc35e66rrcv66did
|
||||
# test-api.donate.torproject.org
|
||||
- wiofesr5qt2k7qrlljpk53isgedxi6ddw6z3o7iay2l7ne3ziyagxaid
|
||||
# test-data.tbb.torproject.org
|
||||
- umbk3kbgov4ekg264yulvbrpykfye7ohguqbds53qn547mdpt6o4qkad
|
||||
# test.crm.torproject.org
|
||||
- a4d52y2erv4eijii66cpnyqn7rsnnq3gmtrsdxzt2laoutvu4gz7fwid
|
||||
# test.donate-api.torproject.org
|
||||
- i4zhrn4md3ucd5dfgeo5lnqd3jy2z2kzp3lt4tdisvivzoqqtlrymkid
|
||||
# www
|
||||
- tttyx2vwp7ihml3vkhywwcizv6nbwrikpgeciy3qrow7l7muak2pnhad
|
||||
# www.torproject.org
|
||||
- 2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid
|
||||
"""
|
||||
|
||||
# we check these each time but we got them by sorting bad relays
|
||||
# in the wild we'll keep a copy here so we can avoid restesting
|
||||
yKNOWN_NODNS = """
|
||||
---
|
||||
- 0x0.is
|
||||
- a9.wtf
|
||||
- apt96.com
|
||||
- axims.net
|
||||
- backup.spekadyon.org
|
||||
- dfri.se
|
||||
- dotsrc.org
|
||||
- dtf.contact
|
||||
- ezyn.de
|
||||
- for-privacy.net
|
||||
- galtland.network
|
||||
- heraldonion.org
|
||||
- interfesse.net
|
||||
- kryptonit.org
|
||||
- linkspartei.org
|
||||
- mkg20001.io
|
||||
- nicdex.com
|
||||
- nx42.de
|
||||
- pineapple.cx
|
||||
- privacylayer.xyz
|
||||
- privacysvcs.net
|
||||
- prsv.ch
|
||||
- sebastian-elisa-pfeifer.eu
|
||||
- thingtohide.nl
|
||||
- tor-exit-2.aa78i2efsewr0neeknk.xyz
|
||||
- tor-exit-3.aa78i2efsewr0neeknk.xyz
|
||||
- tor.dlecan.com
|
||||
- tor.skankhunt42.pw
|
||||
- transliberation.today
|
||||
- tuxli.org
|
||||
- unzane.com
|
||||
- verification-for-nusenu.net
|
||||
- www.defcon.org
|
||||
"""
|
||||
# - 0x0.is
|
||||
# - a9.wtf
|
||||
# - aklad5.com
|
||||
# - artikel5ev.de
|
||||
# - arvanode.net
|
||||
@ -218,7 +373,8 @@ def lIntroductionPoints(controller=None, lOnions=[], itimeout=120, log_level=10)
|
||||
l += lp
|
||||
except (Empty, Timeout,) as e: # noqa
|
||||
LOG.warn(f"Timed out getting introduction points for {elt}")
|
||||
continue
|
||||
except stem.DescriptorUnavailable as e:
|
||||
LOG.error(e)
|
||||
except Exception as e:
|
||||
LOG.exception(e)
|
||||
return l
|
||||
|
@ -16,6 +16,7 @@ import traceback
|
||||
import unittest
|
||||
from ctypes import *
|
||||
from random import Random
|
||||
import functools
|
||||
|
||||
random = Random()
|
||||
|
||||
@ -108,16 +109,28 @@ bHAVE_BASH = shutil.which('bash')
|
||||
bHAVE_TORR = shutil.which('tor-resolve')
|
||||
|
||||
lDEAD_BS = [
|
||||
# [notice] Have tried resolving or connecting to address
|
||||
# at 3 different places. Giving up.
|
||||
'104.244.74.69',
|
||||
'172.93.52.70',
|
||||
'tox.abilinski.com',
|
||||
'tox.novg.net',
|
||||
# Failed to resolve "tox3.plastiras.org".
|
||||
# Failed to resolve "tox3.plastiras.org"
|
||||
"tox3.plastiras.org",
|
||||
'tox.kolka.tech',
|
||||
# IPs that do not reverse resolve
|
||||
'49.12.229.145',
|
||||
"46.101.197.175",
|
||||
'114.35.245.150',
|
||||
'172.93.52.70',
|
||||
'195.123.208.139',
|
||||
'205.185.115.131',
|
||||
# IPs that do not rreverse resolve
|
||||
'yggnode.cf', '188.225.9.167',
|
||||
'85-143-221-42.simplecloud.ru', '85.143.221.42',
|
||||
# IPs that do not ping
|
||||
'104.244.74.69', 'tox.plastiras.org',
|
||||
'195.123.208.139',
|
||||
'gt.sot-te.ch', '32.226.5.82',
|
||||
# suspicious IPs
|
||||
'tox.abilinski.com', '172.103.164.250', '172.103.164.250.tpia.cipherkey.com',
|
||||
]
|
||||
|
||||
|
||||
def assert_main_thread():
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
from qtpy.QtWidgets import QApplication
|
||||
@ -266,7 +279,7 @@ def get_audio():
|
||||
'enabled': input_devices and output_devices}
|
||||
return audio
|
||||
|
||||
def oMainArgparser(_=None, iMode=2):
|
||||
def oMainArgparser(_=None, iMode=0):
|
||||
# 'Mode: 0=chat 1=chat+audio 2=chat+audio+video default: 0'
|
||||
if not os.path.exists('/proc/sys/net/ipv6'):
|
||||
bIpV6 = 'False'
|
||||
@ -274,15 +287,24 @@ def oMainArgparser(_=None, iMode=2):
|
||||
bIpV6 = 'True'
|
||||
lIpV6Choices=[bIpV6, 'False']
|
||||
|
||||
sNodesJson = os.path.join(os.environ['HOME'], '.config', 'tox', 'DHTnodes.json')
|
||||
if not os.path.exists(sNodesJson): sNodesJson = ''
|
||||
|
||||
logfile = os.path.join(os.environ.get('TMPDIR', '/tmp'), 'toxygen.log')
|
||||
if not os.path.exists(sNodesJson): logfile = ''
|
||||
|
||||
parser = argparse.ArgumentParser(add_help=True)
|
||||
parser.add_argument('--proxy_host', '--proxy-host', type=str,
|
||||
default='',
|
||||
# oddball - we want to use '' as a setting
|
||||
default='0.0.0.0',
|
||||
help='proxy host')
|
||||
parser.add_argument('--proxy_port', '--proxy-port', default=0, type=int,
|
||||
help='proxy port')
|
||||
parser.add_argument('--proxy_type', '--proxy-type', default=0, type=int,
|
||||
choices=[0,1,2],
|
||||
help='proxy type 1=http, 2=socks')
|
||||
parser.add_argument('--tcp_port', '--tcp-port', default=0, type=int,
|
||||
help='tcp port')
|
||||
parser.add_argument('--udp_enabled', type=str, default='True',
|
||||
choices=['True', 'False'],
|
||||
help='En/Disable udp')
|
||||
@ -297,26 +319,26 @@ def oMainArgparser(_=None, iMode=2):
|
||||
choices=['True', 'False'],
|
||||
help='Download nodes list')
|
||||
parser.add_argument('--nodes_json', type=str,
|
||||
default='')
|
||||
default=sNodesJson)
|
||||
parser.add_argument('--network', type=str,
|
||||
choices=['old', 'main', 'local'],
|
||||
choices=['main', 'local'],
|
||||
default='main')
|
||||
parser.add_argument('--download_nodes_url', type=str,
|
||||
default='https://nodes.tox.chat/json')
|
||||
parser.add_argument('--logfile', default='',
|
||||
parser.add_argument('--logfile', default=logfile,
|
||||
help='Filename for logging - start with + for stdout too')
|
||||
parser.add_argument('--loglevel', default=logging.INFO, type=int,
|
||||
# choices=[logging.info,logging.trace,logging.debug,logging.error]
|
||||
help='Threshold for logging (lower is more) default: 20')
|
||||
parser.add_argument('--tcp_port', '--tcp-port', default=0, type=int,
|
||||
help='tcp port')
|
||||
parser.add_argument('--mode', type=int, default=iMode,
|
||||
choices=[0,1,2],
|
||||
help='Mode: 0=chat 1=chat+audio 2=chat+audio+video default: 0')
|
||||
parser.add_argument('--sleep', type=str, default='time',
|
||||
# could expand this to tk, gtk, gevent...
|
||||
choices=['qt','gevent','time'],
|
||||
help='Sleep method - one of qt, gevent , time')
|
||||
parser.add_argument('--hole_punching_enabled',type=str,
|
||||
default='False', choices=['True','False'],
|
||||
help='En/Enable hole punching')
|
||||
parser.add_argument('--dht_announcements_enabled',type=str,
|
||||
default='True', choices=['True','False'],
|
||||
help='En/Disable DHT announcements')
|
||||
return parser
|
||||
|
||||
def vSetupLogging(oArgs):
|
||||
@ -471,7 +493,7 @@ def lSdSamplerates(iDev):
|
||||
return supported_samplerates
|
||||
|
||||
def _get_nodes_path(oArgs=None):
|
||||
if oArgs and hasattr(oArgs, 'nodes_json') and oArgs.nodes_json:
|
||||
if oArgs and oArgs.nodes_json and os.path.isfile(oArgs.nodes_json):
|
||||
LOG.debug("_get_nodes_path: " +oArgs.nodes_json)
|
||||
default = oArgs.nodes_json
|
||||
elif get_user_config_path:
|
||||
@ -486,10 +508,9 @@ DEFAULT_NODES_COUNT = 8
|
||||
|
||||
global aNODES
|
||||
aNODES = {}
|
||||
import functools
|
||||
|
||||
|
||||
# @functools.lru_cache(maxsize=12)
|
||||
# @functools.lru_cache(maxsize=12) TypeError: unhashable type: 'Namespace'
|
||||
def generate_nodes(oArgs=None,
|
||||
nodes_count=DEFAULT_NODES_COUNT,
|
||||
ipv='ipv4',
|
||||
@ -572,7 +593,7 @@ def tox_bootstrapd_port():
|
||||
port = int(line[7:])
|
||||
return port
|
||||
|
||||
def bootstrap_local(self, elts, lToxes):
|
||||
def bootstrap_local(elts, lToxes, oArgs=None):
|
||||
if os.path.exists('/run/tox-bootstrapd/tox-bootstrapd.pid'):
|
||||
LOG.debug('/run/tox-bootstrapd/tox-bootstrapd.pid')
|
||||
iRet = True
|
||||
@ -581,11 +602,12 @@ def bootstrap_local(self, elts, lToxes):
|
||||
if iRet > 0:
|
||||
LOG.warn(f'bootstraping local No local DHT running')
|
||||
LOG.info(f'bootstraping local')
|
||||
return bootstrap_udp(self, elts, lToxes)
|
||||
return bootstrap_udp(elts, lToxes, oArgs)
|
||||
|
||||
def lDNSClean(l):
|
||||
# [elt for elt in l if elt not in lDEAD_BS]
|
||||
return list(set(l).difference(lDEAD_BS))
|
||||
global lDEAD_BS
|
||||
# list(set(l).difference(set(lDEAD_BS)))
|
||||
return [elt for elt in l if elt not in lDEAD_BS]
|
||||
|
||||
def lExitExcluder(oArgs, iPort=9051):
|
||||
"""
|
||||
@ -625,29 +647,33 @@ def lExitExcluder(oArgs, iPort=9051):
|
||||
LOG.exception('ExcludeExitNodes ' +str(e))
|
||||
return exit_excludelist
|
||||
|
||||
aHOSTS = {}
|
||||
@functools.lru_cache(maxsize=20)
|
||||
def sDNSLookup(host):
|
||||
global aHOSTS
|
||||
ipv = 0
|
||||
if host in lDEAD_BS:
|
||||
LOG.warn(f"address skipped because in lDEAD_BS {host}")
|
||||
# LOG.warn(f"address skipped because in lDEAD_BS {host}")
|
||||
return ''
|
||||
# return host
|
||||
if host in aHOSTS:
|
||||
return aHOSTS[host]
|
||||
|
||||
try:
|
||||
s = host.replace('.','')
|
||||
int(s)
|
||||
ipv = 4
|
||||
except:
|
||||
try:
|
||||
s = host.replace(':','')
|
||||
int(s)
|
||||
except: pass
|
||||
else:
|
||||
ipv = 6
|
||||
else:
|
||||
ipv = 4
|
||||
except: pass
|
||||
|
||||
if ipv > 0:
|
||||
# LOG.debug(f"{ipv} IP address {host}")
|
||||
# LOG.debug(f"v={ipv} IP address {host}")
|
||||
return host
|
||||
|
||||
LOG.debug(f"sDNSLookup {host}")
|
||||
ip = ''
|
||||
if host.endswith('.tox') or host.endswith('.onion'):
|
||||
if False and stem:
|
||||
@ -677,7 +703,11 @@ def sDNSLookup(host):
|
||||
else:
|
||||
try:
|
||||
ip = socket.gethostbyname(host)
|
||||
LOG.debug(f"host={host} gethostbyname IP address {ip}")
|
||||
if ip:
|
||||
aHOSTS[host] = ip
|
||||
return ip
|
||||
# drop through
|
||||
except:
|
||||
# drop through
|
||||
pass
|
||||
@ -685,62 +715,77 @@ def sDNSLookup(host):
|
||||
if ip == '':
|
||||
try:
|
||||
sout = f"/tmp/TR{os.getpid()}.log"
|
||||
i = os.system(f"dig {host}|grep ^{host}|sed -e 's/.* //'> {sout}")
|
||||
i = os.system(f"dig {host} +timeout=15|grep ^{host}|sed -e 's/.* //'> {sout}")
|
||||
if not i:
|
||||
LOG.warn(f"address skipped because dig failed on {host}")
|
||||
return ''
|
||||
ip = open(sout, 'rt').read().strip()
|
||||
LOG.debug(f"address dig {ip} on {host}")
|
||||
aHOSTS[host] = ip
|
||||
return ip
|
||||
except:
|
||||
ip = host
|
||||
LOG.debug(f'sDNSLookup {host} -> {ip}')
|
||||
if ip and ip != host:
|
||||
aHOSTS[host] = ip
|
||||
return ip
|
||||
|
||||
def bootstrap_good(lelts, lToxes):
|
||||
return bootstrap_udp(lelts, lToxes)
|
||||
|
||||
def bootstrap_udp(lelts, lToxes):
|
||||
def bootstrap_udp(lelts, lToxes, oArgs=None):
|
||||
lelts = lDNSClean(lelts)
|
||||
LOG.debug(f'DHT bootstraping {len(lelts)}')
|
||||
for elt in lToxes:
|
||||
socket.setdefaulttimeout(15.0)
|
||||
for oTox in lToxes:
|
||||
random.shuffle(lelts)
|
||||
if hasattr(oTox, 'oArgs'):
|
||||
oArgs = oTox.oArgs
|
||||
if hasattr(oArgs, 'contents') and oArgs.contents.proxy_type != 0:
|
||||
lelts = lelts[:1]
|
||||
|
||||
# LOG.debug(f'bootstrap_udp DHT bootstraping {oTox.name} {len(lelts)}')
|
||||
for largs in lelts:
|
||||
assert len(largs) == 3
|
||||
host, port, key = largs
|
||||
assert host; assert port; assert key
|
||||
if host in lDEAD_BS: continue
|
||||
ip = sDNSLookup(host)
|
||||
if not ip:
|
||||
LOG.warn(f'bootstrap_udp to {host} did not resolve')
|
||||
LOG.warn(f'bootstrap_udp to host={host} port={port} did not resolve ip={ip}')
|
||||
continue
|
||||
|
||||
if type(port) == str:
|
||||
port = int(port)
|
||||
try:
|
||||
assert len(key) == 64, key
|
||||
oRet = elt.bootstrap(ip,
|
||||
# NOT ip
|
||||
oRet = oTox.bootstrap(host,
|
||||
port,
|
||||
key)
|
||||
except Exception as e:
|
||||
LOG.error(f'bootstrap to {host}:' +str(largs[1]) \
|
||||
+' ' +str(e))
|
||||
if oArgs is None or (
|
||||
hasattr(oArgs, 'contents') and oArgs.contents.proxy_type == 0):
|
||||
pass
|
||||
# LOG.error(f'bootstrap_udp failed to host={host} port={port} {e}')
|
||||
continue
|
||||
if not oRet:
|
||||
LOG.warn(f'bootstrap failed to {host} : ' +str(oRet))
|
||||
elif elt.self_get_connection_status() != TOX_CONNECTION['NONE']:
|
||||
LOG.info(f'bootstrap to {host} connected')
|
||||
LOG.warn(f'bootstrap_udp failed to {host} : {oRet}')
|
||||
elif oTox.self_get_connection_status() != TOX_CONNECTION['NONE']:
|
||||
LOG.info(f'bootstrap_udp to {host} connected')
|
||||
break
|
||||
else:
|
||||
LOG.debug(f'bootstrap to {host} not connected')
|
||||
# LOG.debug(f'bootstrap_udp to {host} not connected')
|
||||
pass
|
||||
|
||||
def bootstrap_tcp(lelts, lToxes):
|
||||
def bootstrap_tcp(lelts, lToxes, oArgs=None):
|
||||
lelts = lDNSClean(lelts)
|
||||
for oTox in lToxes:
|
||||
if hasattr(oTox, 'oArgs'): oArgs = oTox.oArgs
|
||||
random.shuffle(lelts)
|
||||
LOG.info(f'bootstrap_tcp bootstapping {[l[0] for l in lelts]}')
|
||||
# LOG.debug(f'bootstrap_tcp bootstapping {oTox.name} {len(lelts)}')
|
||||
for (host, port, key,) in lelts:
|
||||
assert host; assert port;assert key
|
||||
if host in lDEAD_BS: continue
|
||||
ip = sDNSLookup(host)
|
||||
if not ip:
|
||||
LOG.warn(f'bootstrap_tcp to {host} did not resolve {ip}')
|
||||
LOG.warn(f'bootstrap_tcp to {host} did not resolve ip={ip}')
|
||||
# continue
|
||||
ip = host
|
||||
if host.endswith('.onion') and stem:
|
||||
@ -759,12 +804,19 @@ def bootstrap_tcp(lelts, lToxes):
|
||||
LOG.error(f'bootstrap_tcp to {host} : ' +str(e))
|
||||
continue
|
||||
if not oRet:
|
||||
LOG.warn(f'bootstrap_tcp failed to {host} : ' +str(oRet))
|
||||
LOG.warn(f'bootstrap_tcp failed to {host} : {oRet}')
|
||||
elif oTox.mycon_time == 1:
|
||||
LOG.info(f'bootstrap_tcp to {host} not yet connected last=1')
|
||||
elif oTox.mycon_status is False:
|
||||
LOG.info(f'bootstrap_tcp to {host} not True' \
|
||||
+f" last={int(oTox.mycon_time)}" )
|
||||
elif oTox.self_get_connection_status() != TOX_CONNECTION['NONE']:
|
||||
LOG.info(f'bootstrap_tcp to {host} connected')
|
||||
LOG.info(f'bootstrap_tcp to {host} connected' \
|
||||
+f" last={int(oTox.mycon_time)}" )
|
||||
break
|
||||
else:
|
||||
LOG.debug(f'bootstrap_tcp to {host} but not connected')
|
||||
LOG.debug(f'bootstrap_tcp to {host} but not connected' \
|
||||
+f" last={int(oTox.mycon_time)}" )
|
||||
pass
|
||||
|
||||
def iNmapInfoNmap(sProt, sHost, sPort, key=None, environ=None, cmd=''):
|
||||
@ -812,13 +864,16 @@ def bootstrap_iNmapInfo(lElts, oArgs, protocol="tcp4", bIS_LOCAL=False, iNODES=i
|
||||
if not bIS_LOCAL and not bAreWeConnected():
|
||||
LOG.warn(f"bootstrap_iNmapInfo not local and NOT CONNECTED")
|
||||
return True
|
||||
if os.environ['USER'] != 'root':
|
||||
LOG.warn(f"bootstrap_iNmapInfo not ROOT")
|
||||
return True
|
||||
|
||||
lRetval = []
|
||||
for elts in lElts[:iNODES]:
|
||||
host, port, key = elts
|
||||
ip = sDNSLookup(host)
|
||||
if not ip:
|
||||
LOG.info('bootstrap_iNmapInfo to {host} did not resolve')
|
||||
LOG.info('bootstrap_iNmapInfo to {host} did not resolve ip={ip}')
|
||||
continue
|
||||
if type(port) == str:
|
||||
port = int(port)
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user