HOST = "127.0.0.1"
PORT = 10005
class MySocket:
- def __init__(self, sock=None):
- if sock is None:
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- else:
- self.sock = sock
+ def __init__(self, sock=None):
+ if sock is None:
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ else:
+ self.sock = sock
- def connect(self, host, port):
- self.sock.connect((host, port))
- print "connected to %s %s"%(host, port)
+ def connect(self, host, port):
+ self.sock.connect((host, port))
+ print "connected to %s %s"%(host, port)
- def send_msg(self, msg):
- totalsent = 0
- while totalsent < len(msg):
- sent = self.sock.send(msg[totalsent:])
- if sent == 0:
- raise RuntimeError, "socket connection broken"
- totalsent = totalsent + sent
-
- def send_command(self, msg_type, config_data):
- self.send_msg(msg_type)
- response = self.recv_msg()
- if response == ACK_MSG:
- print "aici"
-
- self.send_dict(config_data)
- print "am trimis"
- response = self.recv_msg()
-
- return response
+ def send_msg(self, msg):
+ totalsent = 0
+ while totalsent < len(msg):
+ sent = self.sock.send(msg[totalsent:])
+ if sent == 0:
+ raise RuntimeError, "socket connection broken"
+ totalsent = totalsent + sent
- def recv_msg(self):
- msg = ''
- chunk = self.sock.recv(MSGLEN)
- if chunk == '':
- raise RuntimeError, "socket connection broken"
- msg = msg + chunk
- print msg
- return msg
+ def send_command(self, msg_type, config_data):
+ self.send_msg(msg_type)
+ print "am trimis ", msg_type
+ response = self.recv_msg()
+ if response == ACK_MSG:
+ self.send_dict(config_data)
+ print "am trimis"
+ response = self.recv_msg()
- # send a pickled dictionary
- def send_dict(self, data):
- dumped_data = pickle.dumps(data)
- self.send_msg(dumped_data)
+ return response
-if __name__ == "__main__":
+ def recv_msg(self):
+ msg = ''
+ chunk = self.sock.recv(MSGLEN)
+ if chunk == '':
+ raise RuntimeError, "socket connection broken"
+ msg = msg + chunk
+ print "am primit ", msg
+ return msg
+
+ # send a pickled dictionary
+ def send_dict(self, data):
+ dumped_data = pickle.dumps(data)
+ self.send_msg(dumped_data)
+
+# basic test that starts and stops a BT Client
+def test_all_commands():
+ s = MySocket()
+ s.connect(HOST, PORT)
+ 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",
- s = MySocket()
- s.connect(HOST, PORT)
- # test 1
- #s.send_msg("hello")
- # test 2
- #dd = {'a':1, 'b':2}
- #s.send_dict(dd)
- #s.recv_msg()
+ }
+ response = s.send_command(START_MSG, start_data)
+ print response
+ pid = (response.split(" "))[1]
+ print pid
+ #pid = 8065
+ s = MySocket()
+ s.connect(HOST, PORT)
- # test config
- """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(STOP_MSG, pid)
+ print response
- 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",
+def test_send_recv():
+ # test 1
- }
- response = s.send_command(START_MSG, start_data)
+ s.send_msg("hello")
+ # test 2
+ dd = {'a':1, 'b':2}
+ s.send_dict(dd)
+ s.recv_msg()
+
+
+if __name__ == "__main__":
-
- print response
- pid = (response.split())[1]
- print "pid = ", pid
- response = s.send_command(STOP_MSG, response)
+
+ test_all_commands()
import sys, os, socket
import pickle
+import signal
from daemon import Daemon
from Util import *
from BitTorrentClientRun import *
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
+ # 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()
- pid = btcr.run_client(btcr.simple_run_command)
- return pid
-
- return -1
- """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")
+ if bt_client_data[CLIENT] == TRANSMISSION:
+ """btcr = BitTorrentClientRun("/usr/bin/transmissioncli",
+ "$base_path --port $port $torrent_file $download_dir> $output_dir/$output_file",
+ "TR_DEBUG=2 $base_path/cli/transmissioncli --port $port $torrent_file $download_dir 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 = BitTorrentClientRun("/usr/bin/transmissioncli",
+ "$base_path --port $port $torrent_file $download_dir",
+ "TR_DEBUG=2 $base_path/cli/transmissioncli --port $port $torrent_file $download_dir 2> $log_dir/$log_file > $output_dir/$output_file")
- btcr.start()
- btcr.run_client(btcr.simple_run_command)
- """
+ 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()
+ pid = btcr.run_client(btcr.simple_run_command)
+ #stop_bt_client(pid)
+ return pid
+ return -1
+ """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 stop_bt_client(pid):
- os.kill(pid, signal.SIGKILL) # kill generates zombies
+ print "la kill pid=", pid
+
+ os.kill(int(pid), signal.SIGKILL) # kill generates zombies
os.wait()
print "killed ", pid
def doServer():
- serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- print HOST
- print PORT
- 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)
- client_pid = start_bt_client(bt_client_data)
- clientsock.send(ACK_MSG +" "+ str(client_pid))
-
- elif states[clientsock] == WAITING_STOP_DATA:
- client_pid = recv_pickled_data(clientsock)
- stop_bt_client(client_pid)
- clientsock.send(ACK_MSG)
-
- elif states[clientsock] == WAITING_STATUS_DATA:
- config = recv_pickled_data(clientsock)
- clientsock.send(ACK_MSG)
-
- states[clientsock] = WAITING_MSG_TYPE
-
- # clientsock.recv(BUFFER_SIZE)
- # recv_pickled_data(clientsock)
-
- clientsock.close()
+ serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ print HOST
+ print PORT
+ serversocket.bind((HOST, PORT));
+ serversocket.listen(10) #max 10 requests
+ clientsocks = []
+ while(1):
+ print >> sys.stderr, "inainte de accept"
+ (clientsock, address) = serversocket.accept();
+ print >>sys.stderr, "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)
+ print >>sys.stderr, "Server: Received:\n", msg
+ print >>sys.stderr, "******** END MESSAGE ********"
+ 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)
+ client_pid = start_bt_client(bt_client_data)
+ clientsock.send(ACK_MSG +" "+ str(client_pid))
+
+ elif states[clientsock] == WAITING_STOP_DATA:
+ print >>sys.stderr,"la WAITING_STOP_DATA"
+ client_pid = recv_pickled_data(clientsock)
+ stop_bt_client(client_pid)
+ clientsock.send(ACK_MSG)
+
+ elif states[clientsock] == WAITING_STATUS_DATA:
+ config = recv_pickled_data(clientsock)
+ clientsock.send(ACK_MSG)
+
+ states[clientsock] = WAITING_MSG_TYPE
+
+ # clientsock.recv(BUFFER_SIZE)
+ # recv_pickled_data(clientsock)
+ clientsock.close()
+ #clientsocks.append(clientsock)
+ #for i in range(0, len(clientsocks)):
+ # clientsocks[i].close()
if __name__ == "__main__":
doServer()