Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
dmzoneill committed May 16, 2024
1 parent 082b2ed commit b70b5e7
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ DEB_FILENAME := $(deb_package_name)_$(package_version).deb
RPM_FILENAME := $(rpm_package_name)-$(package_version)

required:
pip3 install -r requirements.txt
pip3 install -r requirements.txt --break-system-packages


clearlog: required
Expand Down
1 change: 0 additions & 1 deletion d_fake_seeder/lib/component/torrents.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@


class Torrents(Component):

def __init__(self, builder, model):
logger.info(
"Torrents view startup",
Expand Down
3 changes: 3 additions & 0 deletions d_fake_seeder/lib/controller.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os

from lib.listener import Listener
from lib.logger import logger
from lib.settings import Settings

Expand All @@ -14,6 +15,8 @@ def __init__(self, view, model):

self.view = view
self.model = model
self.listener = Listener(self.model)
self.listener.start()
self.view.set_model(self.model)
self.view.connect_signals()

Expand Down
94 changes: 94 additions & 0 deletions d_fake_seeder/lib/listener.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import signal
import socket
import struct
import threading

# Importing necessary libraries
from lib.logger import logger


class Listener:
def __init__(self, model):
self.model = model
self.server_socket = None
self.thread = None
self.running = False
logger.info(
"Listener instantiated", extra={"class_name": self.__class__.__name__}
)
signal.signal(signal.SIGINT, self.quit)

def handle_connection(self, client_socket):
while True:
data = client_socket.recv(1024)
if not data:
break
# Process the received data
# You can send responses back to the client if needed
logger.info("Expected input information for BitTorrent client connection")

def start_listening(self, port):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind(("0.0.0.0", port))
self.server_socket.listen(5)
self.running = True

def listening_thread():
while self.running:
client_socket, address = self.server_socket.accept()
self.handle_connection(client_socket)
client_socket.close()

self.thread = threading.Thread(target=listening_thread)
self.thread.start()

def start(self):
self.start_listening(34567)

# Sending a handshake message
def send_handshake(peer_id, info_hash, peer_ip, peer_port):
info_hash = (info_hash + b"\x00" * 20)[:20]
peer_id = (peer_id + b"\x00" * 20)[:20]
handshake = struct.pack(
"!B19s8x20s20s", 19, b"BitTorrent protocol", info_hash, peer_id
)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((peer_ip, peer_port))
sock.send(handshake)
# Close the socket after sending the message
sock.close()

# Sending an "interested" message
def send_interested(peer_ip, peer_port):
interested = struct.pack(
"!IB", 1, 2
) # Message length (1) and message ID for "interested" (2)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((peer_ip, peer_port))
sock.send(interested)
# Close the socket after sending the message
sock.close()

def process_scrape_response(self, response):
files = []
action, transaction_id = struct.unpack_from("!II", response, offset=0)
offset = 8
while offset + 12 <= len(response):
seeders, completed, leechers = struct.unpack_from(
"!III", response, offset=offset
)
files.append((seeders, completed, leechers))
offset += 12
return files

def stop(self):
self.running = False
if self.server_socket:
self.server_socket.close()
if self.thread:
self.thread.join()

# Function to quit the application
def quit(self, widget=None, event=None):
logger.info("View quit", extra={"class_name": self.__class__.__name__})
self.stop()
5 changes: 5 additions & 0 deletions d_fake_seeder/lib/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ def get_trackers_liststore(self):

return list_store

def stop(self):
# Stopping all torrents before quitting
for torrent in self.torrent_list:
torrent.stop()

# Method to get ListStore of torrents for Gtk.TreeView
def get_liststore_item(self, index):
logger.info(
Expand Down
1 change: 0 additions & 1 deletion d_fake_seeder/lib/torrent/seeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@


class Seeder:

def __init__(self, torrent):
logger.info("Seeder Startup", extra={"class_name": self.__class__.__name__})
parsed_url = urlparse(torrent.announce)
Expand Down
3 changes: 3 additions & 0 deletions d_fake_seeder/lib/torrent/seeders/BaseSeeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ def handle_settings_changed(self, source, key, value):
if key == "concurrent_http_connections":
BaseSeeder.recreate_semaphore(self)

def generate_transaction_id(self):
return random.randint(0, 255)

def __str__(self):
logger.info("Seeder __get__", extra={"class_name": self.__class__.__name__})
result = "Peer ID: %s\n" % self.peer_id
Expand Down
1 change: 0 additions & 1 deletion d_fake_seeder/lib/torrent/seeders/HTTPSeeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@


class HTTPSeeder(BaseSeeder):

def __init__(self, torrent):
super().__init__(torrent)

Expand Down
4 changes: 0 additions & 4 deletions d_fake_seeder/lib/torrent/seeders/UDPSeeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,9 @@


class UDPSeeder(BaseSeeder):

def __init__(self, torrent):
super().__init__(torrent)

def generate_transaction_id(self):
return random.randint(0, 255)

def build_announce_packet(self, connection_id, transaction_id, info_hash, peer_id):
info_hash = (info_hash + b"\x00" * 20)[:20]
peer_id = (peer_id + b"\x00" * 20)[:20]
Expand Down
4 changes: 1 addition & 3 deletions d_fake_seeder/lib/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,7 @@ def on_help_clicked(self, menu_item):
def quit(self, widget=None, event=None):
logger.info("View quit", extra={"class_name": self.__class__.__name__})

# Stopping all torrents before quitting
for torrent in self.model.torrent_list:
torrent.stop()
self.model.stop()
self.settings.save_quit()
self.window.destroy()

Expand Down
File renamed without changes.

0 comments on commit b70b5e7

Please sign in to comment.