bt_comm: server starts bit torrent client
authorAdriana Draghici <adriana008@gmail.com>
Fri, 29 Jan 2010 15:05:49 +0000 (17:05 +0200)
committerAdriana Draghici <adriana008@gmail.com>
Fri, 29 Jan 2010 15:05:49 +0000 (17:05 +0200)
bt_comm/Util.py
bt_comm/server/Client.py
bt_comm/server/Server_NO_DAEMON.py [new file with mode: 0644]

index d762ee3..0fc72a7 100644 (file)
@@ -24,5 +24,5 @@ PORT = "port"
 TORRENT = "torrent_file"
 
 #clients
-TRIBLER = tribler
-TRANSMISSION = transmission
+TRIBLER = "tribler"
+TRANSMISSION = "transmission"
index df47042..e8c9003 100644 (file)
@@ -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 (file)
index 0000000..ea83ef6
--- /dev/null
@@ -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()      
+