From: Adriana Draghici Date: Fri, 29 Jan 2010 15:05:49 +0000 (+0200) Subject: bt_comm: server starts bit torrent client X-Git-Tag: getopt_long~189 X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=5196091b4b28fd70a69a91915f92c54e82faa2c7;p=cs-p2p-next.git bt_comm: server starts bit torrent client --- diff --git a/bt_comm/Util.py b/bt_comm/Util.py index d762ee3..0fc72a7 100644 --- a/bt_comm/Util.py +++ b/bt_comm/Util.py @@ -24,5 +24,5 @@ PORT = "port" TORRENT = "torrent_file" #clients -TRIBLER = tribler -TRANSMISSION = transmission +TRIBLER = "tribler" +TRANSMISSION = "transmission" diff --git a/bt_comm/server/Client.py b/bt_comm/server/Client.py index df47042..e8c9003 100644 --- a/bt_comm/server/Client.py +++ b/bt_comm/server/Client.py @@ -62,13 +62,22 @@ if __name__ == "__main__": #s.recv_msg() # test config - config_data = [{CLIENT:"tribler", FILE:"Tribler/Tools/cmdline.py", + """config_data = [{CLIENT:"tribler", FILE:"Tribler/Tools/cmdline.py", RUN_TYPE:"script", INTERPRETER:"python", PREFIX:"PYTHONPATH=.",SUFFIX:"", UP_LIMIT_OPTION:"",DL_LIMIT_OPTION:"", PORT_OPTION:"-p", LOG_DIR_OPTION:"-l",DL_DIR_OPTION:"-d"}] +""" - response = s.send_command(CONFIG_MSG, config_data) + start_data = {CLIENT: TRANSMISSION, PORT:10150, + TORRENT: "/home/adriana/p2p/p2p-meta/scrubs.torrent", + DL_DIR: "/home/adriana/p2p/p2p-dld/transmission", + LOG_DIR: "/home/adriana/p2p/p2p-log/transmission", + OUT_FILE: "scrubs.out", + LOG_FILE: "transmission-scrubs.log", + + } + response = s.send_command(START_MSG, start_data) print response diff --git a/bt_comm/server/Server_NO_DAEMON.py b/bt_comm/server/Server_NO_DAEMON.py new file mode 100644 index 0000000..ea83ef6 --- /dev/null +++ b/bt_comm/server/Server_NO_DAEMON.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import sys, os, socket +import pickle +from daemon import Daemon +from Util import * +from BitTorrentClientRun import * + +PORT = 10001 +HOST = "127.0.0.1" + +BUFFER_SIZE = 4096 + +states = {} # keeps track of what kind of message was previously receveid on a socket. + +WAITING_MSG_TYPE = 0 +WAITING_START_DATA = 3 +WAITING_STOP_DATA = 4 +WAITING_STATUS_DATA = 5 + + + +def recv_pickled_data(clientsock): +# while chunk: +# chunk = clientsock.recv(BUFFER_SIZE) +# data += chunk + data = clientsock.recv(BUFFER_SIZE) + + dd = pickle.loads(data) + return dd + +#TODO + +def start_bt_client(bt_client_data): + + if bt_client_data[CLIENT] == TRANSMISSION: + btcr = BitTorrentClientRun("/usr/bin/transmissioncli", + "$base_path --download-dir $download_dir --port $port $torrent_file > $output_dir/$output_file", + "TR_DEBUG=2 $base_path/cli/transmissioncli --download-dir $download_dir --port $port $torrent_file 2> $log_dir/$log_file > $output_dir/$output_file") + btcr.config_run(bt_client_data[DL_DIR], bt_client_data[LOG_DIR], + bt_client_data[OUT_FILE], bt_client_data[LOG_DIR], + bt_client_data[LOG_FILE], bt_client_data[PORT], + bt_client_data[TORRENT]) + + btcr.start() + btcr.run_client(btcr.simple_run_command) + + """Simple test + + btcr = BitTorrentClientRun("/usr/bin/transmissioncli", + "$base_path --download-dir $download_dir --port $port $torrent_file > $output_dir/$output_file", + "TR_DEBUG=2 $base_path/cli/transmissioncli --download-dir $download_dir --port $port $torrent_file 2> $log_dir/$log_file > $output_dir/$output_file") + + btcr.config_run("/home/adriana/p2p/p2p-dld/transmission", + "/home/adriana/p2p/p2p-log/transmission", + "scrubs.out", "/home/adriana/p2p/", + "transmission-scrubs.log", 10150, + "/home/adriana/p2p/p2p-meta/scrubs.torrent") + + btcr.start() + btcr.run_client(btcr.simple_run_command) + """ +def doServer(): + #os.spawnvp(os.P_NOWAIT,"/usr/bin/transmission",[]) + + serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + serversocket.bind((HOST, PORT)); + serversocket.listen(10) #max 10 requests + + while(1): + print "inainte de accept" + (clientsock, address) = serversocket.accept(); + print "aici" + if clientsock not in states: + states[clientsock] = WAITING_MSG_TYPE; + + if states[clientsock] == WAITING_MSG_TYPE: + print states[clientsock] + msg = clientsock.recv(BUFFER_SIZE) + + msg_types = { + START_MSG: WAITING_START_DATA, + STOP_MSG: WAITING_STOP_DATA, + STATUS_MSG: WAITING_STATUS_DATA + } + if msg not in msg_types: + clientsock.send(ERROR_MSG +"wrong message type " + msg) + else: + states[clientsock] = msg_types[msg] + clientsock.send(ACK_MSG) + #else: + print states[clientsock] + + if states[clientsock] == WAITING_START_DATA: + bt_client_data = recv_pickled_data(clientsock) + start_bt_client(bt_client_data) + + elif states[clientsock] == WAITING_STOP_DATA: + config = recv_pickled_data(clientsock) + + elif states[clientsock] == WAITING_STATUS_DATA: + config = recv_pickled_data(clientsock) + + states[clientsock] = WAITING_MSG_TYPE + + + # clientsock.recv(BUFFER_SIZE) + # recv_pickled_data(clientsock) + clientsock.send(ACK_MSG) + print "am trimis ack" + clientsock.close() + +if __name__ == "__main__": + doServer() +