Example #1
0
 def __WaitforConnection(self, *targs):
     self.__tcpSerSock.InitServSock(self.__Addr,self.__MaxNumConn)
     if VERBOSE:
         print "Waiting for connection..."
     while True:            
         (tcpClientSock, CLIENT_ADDR) = self.__tcpSerSock.WaitforConn()
         self.__connectionLock.acquire();
         clitcpsock = Mytcpsocket(tcpClientSock)
         if self.__NumofConnections < self.__MaxNumConn:
             servport = clitcpsock.recvmsg(BUFSIZ)
             ack = clitcpsock.sendmsg('ACK')
             CLIENT_SERV_ADDR = (CLIENT_ADDR[0],servport)
             if ((CLIENT_SERV_ADDR in self.__ClientConnectionIPs) 
                 or (not ack) or servport == 'closed'):
                 clitcpsock.close()
             else:
                 self.__ClientConnectionSocks.append(clitcpsock);
                 self.__ClientConnectionIPs.append(CLIENT_SERV_ADDR);
                 self.__NumofConnections += 1;
                 if VERBOSE:
                     print "...connected from:", CLIENT_ADDR
                 t = MyThread(self.__upload,(clitcpsock,CLIENT_SERV_ADDR),self.__upload.__name__)
                 self.__UploadThreadsLock.acquire(); self.__UploadThreads.append(t); self.__UploadThreadsLock.release()
                 self.__BWControlBoot.set();               # start BW control
                 self.__RateAllocBoot.set();               # start rate allocation
                 t.start(); sleep(PROCESS_TIME);
         else:
             clitcpsock.close()          # close if the number of connections exceeds max
         self.__connectionLock.release();
Example #2
0
 def __WaitforConnection(self, *targs):
     self.__tcpListenSock.InitServSock(self.__Addr,self.__MaxNumConn)
     while True:     
         if self.__EXIT:
             return       
         (tcpServSock, SERVER_ADDR) = self.__tcpListenSock.WaitforConn()
         self.__connectionLock.acquire();
         servtcpsock = Mytcpsocket(tcpServSock)
         if self.__NumofConnections < self.__MaxNumConn:
             servport = servtcpsock.recvmsg(BUFSIZ)
             ack = servtcpsock.sendmsg('ACK')                    # send ACK
             SERVER_SERV_ADDR = (SERVER_ADDR[0],servport)
             if ((SERVER_SERV_ADDR in self.__ServerConnectionIPs) or 
                 (SERVER_SERV_ADDR == self.__ExcludedServerAddr) or 
                 (not ack) or servport == 'closed'):
                 servtcpsock.close()
             else:
                 self.__ServerConnectionSocks.append(servtcpsock)
                 self.__ServerConnectionIPs.append(SERVER_SERV_ADDR)
                 self.__NumofConnections += 1
                 if VERBOSE:
                     print "...connected from:", SERVER_SERV_ADDR
                 t = MyThread(self.__download,
                              (servtcpsock,SERVER_SERV_ADDR,self.__currentvid),self.__download.__name__)
                 t.start(); sleep(PROCESS_TIME);
                 self.__downloadthreads.append(t)
         else:
             servtcpsock.close()                                # close if the number of connections exceeds max
         self.__connectionLock.release();
Example #3
0
 def __WaitforConnection(self, *targs):
     self.__tcpListenSock.InitServSock(self.__Addr, self.__MaxNumConn)
     while True:
         if self.__EXIT:
             return
         (tcpServSock, SERVER_ADDR) = self.__tcpListenSock.WaitforConn()
         self.__connectionLock.acquire()
         servtcpsock = Mytcpsocket(tcpServSock)
         if self.__NumofConnections < self.__MaxNumConn:
             servport = servtcpsock.recvmsg(BUFSIZ)
             ack = servtcpsock.sendmsg('ACK')  # send ACK
             SERVER_SERV_ADDR = (SERVER_ADDR[0], servport)
             if ((SERVER_SERV_ADDR in self.__ServerConnectionIPs)
                     or (SERVER_SERV_ADDR == self.__ExcludedServerAddr)
                     or (not ack) or servport == 'closed'):
                 servtcpsock.close()
             else:
                 self.__ServerConnectionSocks.append(servtcpsock)
                 self.__ServerConnectionIPs.append(SERVER_SERV_ADDR)
                 self.__NumofConnections += 1
                 if VERBOSE:
                     print "...connected from:", SERVER_SERV_ADDR
                 t = MyThread(
                     self.__download,
                     (servtcpsock, SERVER_SERV_ADDR, self.__currentvid),
                     self.__download.__name__)
                 t.start()
                 sleep(PROCESS_TIME)
                 self.__downloadthreads.append(t)
         else:
             servtcpsock.close(
             )  # close if the number of connections exceeds max
         self.__connectionLock.release()
Example #4
0
 def __registerpeer(
         self, *targs
 ):  # register the peer and obtain a list of potential neighbors
     args = targs[0]
     CliSocket = args[0]
     CliAddr = args[1]
     myClisock = Mytcpsocket(CliSocket)
     IS_SERV = -1
     while True:
         data = myClisock.recvmsg(BUFSIZ)
         if 'serv' in str.lower(data):
             IS_SERV = 1
             CliAddr = (CliAddr[0], int(data.split('+')[1]))
             self.__servDict[CliAddr] = 1
             pc = self.__potentialconn(
                 CliAddr, self.__userDict
             )  # return a list of user addresses \ itself
             myClisock.sendmsg(pc)
             myClisock.sendmsg(self.__movieList)  # send movie list to watch
         elif 'user' in str.lower(data):
             IS_SERV = 0
             CliAddr = (CliAddr[0], int(data.split('+')[1]))
             self.__userDict[CliAddr] = 1
             pc = self.__potentialconn(
                 CliAddr, self.__servDict
             )  # return a list of serv addresses \ itself
             myClisock.sendmsg(pc)
             myClisock.sendmsg(self.__movieList)  # send movie list to watch
         elif 'list' in str.lower(data):
             data = data.split('+')
             for i in range(1, len(data)):
                 videostat = data[i].split('#')
                 self.__movieList[videostat[0]] = [
                     int(videostat[1]),
                     int(videostat[2])
                 ]
             myClisock.sendmsg('ACK')
         elif str.lower(data) == 'alive':  # still alive
             print data, ' from ', CliAddr
             pass
         else:
             if IS_SERV == 1:
                 self.__servDict.pop(CliAddr)
             elif IS_SERV == 0:
                 self.__userDict.pop(CliAddr)
             myClisock.close()  # close the connection
             break
Example #5
0
 def __registerpeer(self,*targs):                    # register the peer and obtain a list of potential neighbors
     args = targs[0]
     CliSocket = args[0]; CliAddr = args[1];
     myClisock = Mytcpsocket(CliSocket)  
     IS_SERV = -1      
     while True:
         data = myClisock.recvmsg(BUFSIZ)
         if 'serv' in str.lower(data):
             IS_SERV = 1;
             CliAddr = (CliAddr[0],int(data.split('+')[1]))
             self.__servDict[CliAddr] = 1
             pc = self.__potentialconn(CliAddr, self.__userDict) # return a list of user addresses \ itself
             myClisock.sendmsg(pc)
             myClisock.sendmsg(self.__movieList)                 # send movie list to watch
         elif 'user' in str.lower(data):
             IS_SERV = 0;
             CliAddr = (CliAddr[0],int(data.split('+')[1]))
             self.__userDict[CliAddr] = 1
             pc = self.__potentialconn(CliAddr, self.__servDict) # return a list of serv addresses \ itself
             myClisock.sendmsg(pc)
             myClisock.sendmsg(self.__movieList)                 # send movie list to watch
         elif 'list' in str.lower(data):
             data = data.split('+')
             for i in range(1,len(data)):
                 videostat = data[i].split('#'); 
                 self.__movieList[videostat[0]] = [int(videostat[1]),int(videostat[2])]
             myClisock.sendmsg('ACK')
         elif str.lower(data) == 'alive':                        # still alive
             print data, ' from ', CliAddr 
             pass;
         else:
             if IS_SERV == 1:
                 self.__servDict.pop(CliAddr)
             elif IS_SERV == 0:
                 self.__userDict.pop(CliAddr)                             
             myClisock.close()                                           # close the connection
             break
Example #6
0
 def __WaitforConnection(self, *targs):
     self.__tcpSerSock.InitServSock(self.__Addr, self.__MaxNumConn)
     if VERBOSE:
         print "Waiting for connection..."
     while True:
         (tcpClientSock, CLIENT_ADDR) = self.__tcpSerSock.WaitforConn()
         self.__connectionLock.acquire()
         clitcpsock = Mytcpsocket(tcpClientSock)
         if self.__NumofConnections < self.__MaxNumConn:
             servport = clitcpsock.recvmsg(BUFSIZ)
             ack = clitcpsock.sendmsg('ACK')
             CLIENT_SERV_ADDR = (CLIENT_ADDR[0], servport)
             if ((CLIENT_SERV_ADDR in self.__ClientConnectionIPs)
                     or (not ack) or servport == 'closed'):
                 clitcpsock.close()
             else:
                 self.__ClientConnectionSocks.append(clitcpsock)
                 self.__ClientConnectionIPs.append(CLIENT_SERV_ADDR)
                 self.__NumofConnections += 1
                 if VERBOSE:
                     print "...connected from:", CLIENT_ADDR
                 t = MyThread(self.__upload, (clitcpsock, CLIENT_SERV_ADDR),
                              self.__upload.__name__)
                 self.__UploadThreadsLock.acquire()
                 self.__UploadThreads.append(t)
                 self.__UploadThreadsLock.release()
                 self.__BWControlBoot.set()
                 # start BW control
                 self.__RateAllocBoot.set()
                 # start rate allocation
                 t.start()
                 sleep(PROCESS_TIME)
         else:
             clitcpsock.close(
             )  # close if the number of connections exceeds max
         self.__connectionLock.release()
Example #7
0
class Tracker(object):
    def __init__(self, Tracker_Addr = TRACKER_ADDRESS):
        self.__socket = Mytcpsocket()                  # a new socket
        self.__Addr = Tracker_Addr                     # IP address + port
        self.__MaxNumConn = MAX_TRAC_CONNECTION        
        self.__userDict = {}                           # connecting addresses of active (estimate) users
        self.__servDict = {}                           # connecting addresses of active (estimate) helpers
        #self.__servDict[MEDIA_SERVER_ADDRESS] = 1      # the central server
        self.__inputLock = thread.allocate_lock()      # lock for the input variables
        self.__EXIT = 0                                # exit the system or not
        self.__movieList = {}                          # list of movie names
   
    def __userprompt(self, *args):
        while True:
            userinput = raw_input('Input your choice:\n[0] Print All Movies\n[1] Print Registered Peers\n[2] Disconnect\nYour choice>> ')
            if userinput =='0':
                self.__printAllMovies()
            elif userinput == '1':
                self.__printAllregistered()
            elif userinput == '2':
                self.__inputLock.acquire(); self.__EXIT = 1; self.__inputLock.release();
                break;
            else:
                pass;
    
    def boot(self):
        t = MyThread(self.__userprompt,(1,),self.__userprompt.__name__) # open a new thread for new requests
        t.start(); sleep(PROCESS_TIME);
        
        self.__socket.InitServSock(self.__Addr,self.__MaxNumConn)             
        while True:
            (tcpCliSock, CIENT_ADDR) = self.__socket.WaitforConn()            
            t = MyThread(self.__registerpeer,(tcpCliSock,CIENT_ADDR),
                         self.__registerpeer.__name__) # open a new thread for new requests
            #self.__threads.append(t)         
            t.start(); sleep(PROCESS_TIME)             # allow process time for the thread
            self.__inputLock.acquire() 
            if self.__EXIT == 1:
                self.__socket.close(); 
                break;
            self.__inputLock.release()

    def __registerpeer(self,*targs):                    # register the peer and obtain a list of potential neighbors
        args = targs[0]
        CliSocket = args[0]; CliAddr = args[1];
        myClisock = Mytcpsocket(CliSocket)  
        IS_SERV = -1      
        while True:
            data = myClisock.recvmsg(BUFSIZ)
            if 'serv' in str.lower(data):
                IS_SERV = 1;
                CliAddr = (CliAddr[0],int(data.split('+')[1]))
                self.__servDict[CliAddr] = 1
                pc = self.__potentialconn(CliAddr, self.__userDict) # return a list of user addresses \ itself
                myClisock.sendmsg(pc)
                myClisock.sendmsg(self.__movieList)                 # send movie list to watch
            elif 'user' in str.lower(data):
                IS_SERV = 0;
                CliAddr = (CliAddr[0],int(data.split('+')[1]))
                self.__userDict[CliAddr] = 1
                pc = self.__potentialconn(CliAddr, self.__servDict) # return a list of serv addresses \ itself
                myClisock.sendmsg(pc)
                myClisock.sendmsg(self.__movieList)                 # send movie list to watch
            elif 'list' in str.lower(data):
                data = data.split('+')
                for i in range(1,len(data)):
                    videostat = data[i].split('#'); 
                    self.__movieList[videostat[0]] = [int(videostat[1]),int(videostat[2])]
                myClisock.sendmsg('ACK')
            elif str.lower(data) == 'alive':                        # still alive
                print data, ' from ', CliAddr 
                pass;
            else:
                if IS_SERV == 1:
                    self.__servDict.pop(CliAddr)
                elif IS_SERV == 0:
                    self.__userDict.pop(CliAddr)                             
                myClisock.close()                                           # close the connection
                break
            
            
    def __potentialconn(self, CliAddr, PotentialConnections):
        'return a list of potential connections -- list of IP/ports in the other Dictionary set-minus itself'
        def notself(query):
            return (CliAddr != query);
        return filter(notself,sample(PotentialConnections, 
                                     min(len(PotentialConnections),NUM_RETURNED_PEERS)))
    def __printAllregistered(self):
        print 'Registered users:'
        for eachUsr in self.__userDict:
            print eachUsr
        print '\nRegistered servers:'
        for eachServ in self.__servDict:
            print eachServ
     
    def __printAllMovies(self):
        for i, eachmovie in enumerate(self.__movieList):
            print repr(i+1)+'. ' + eachmovie   
Example #8
0
class Tracker(object):
    def __init__(self, Tracker_Addr=TRACKER_ADDRESS):
        self.__socket = Mytcpsocket()  # a new socket
        self.__Addr = Tracker_Addr  # IP address + port
        self.__MaxNumConn = MAX_TRAC_CONNECTION
        self.__userDict = {}  # connecting addresses of active (estimate) users
        self.__servDict = {
        }  # connecting addresses of active (estimate) helpers
        #self.__servDict[MEDIA_SERVER_ADDRESS] = 1      # the central server
        self.__inputLock = thread.allocate_lock(
        )  # lock for the input variables
        self.__EXIT = 0  # exit the system or not
        self.__movieList = {}  # list of movie names

    def __userprompt(self, *args):
        while True:
            userinput = raw_input(
                'Input your choice:\n[0] Print All Movies\n[1] Print Registered Peers\n[2] Disconnect\nYour choice>> '
            )
            if userinput == '0':
                self.__printAllMovies()
            elif userinput == '1':
                self.__printAllregistered()
            elif userinput == '2':
                self.__inputLock.acquire()
                self.__EXIT = 1
                self.__inputLock.release()
                break
            else:
                pass

    def boot(self):
        t = MyThread(
            self.__userprompt, (1, ),
            self.__userprompt.__name__)  # open a new thread for new requests
        t.start()
        sleep(PROCESS_TIME)

        self.__socket.InitServSock(self.__Addr, self.__MaxNumConn)
        while True:
            (tcpCliSock, CIENT_ADDR) = self.__socket.WaitforConn()
            t = MyThread(self.__registerpeer, (tcpCliSock, CIENT_ADDR),
                         self.__registerpeer.__name__
                         )  # open a new thread for new requests
            #self.__threads.append(t)
            t.start()
            sleep(PROCESS_TIME)  # allow process time for the thread
            self.__inputLock.acquire()
            if self.__EXIT == 1:
                self.__socket.close()
                break
            self.__inputLock.release()

    def __registerpeer(
            self, *targs
    ):  # register the peer and obtain a list of potential neighbors
        args = targs[0]
        CliSocket = args[0]
        CliAddr = args[1]
        myClisock = Mytcpsocket(CliSocket)
        IS_SERV = -1
        while True:
            data = myClisock.recvmsg(BUFSIZ)
            if 'serv' in str.lower(data):
                IS_SERV = 1
                CliAddr = (CliAddr[0], int(data.split('+')[1]))
                self.__servDict[CliAddr] = 1
                pc = self.__potentialconn(
                    CliAddr, self.__userDict
                )  # return a list of user addresses \ itself
                myClisock.sendmsg(pc)
                myClisock.sendmsg(self.__movieList)  # send movie list to watch
            elif 'user' in str.lower(data):
                IS_SERV = 0
                CliAddr = (CliAddr[0], int(data.split('+')[1]))
                self.__userDict[CliAddr] = 1
                pc = self.__potentialconn(
                    CliAddr, self.__servDict
                )  # return a list of serv addresses \ itself
                myClisock.sendmsg(pc)
                myClisock.sendmsg(self.__movieList)  # send movie list to watch
            elif 'list' in str.lower(data):
                data = data.split('+')
                for i in range(1, len(data)):
                    videostat = data[i].split('#')
                    self.__movieList[videostat[0]] = [
                        int(videostat[1]),
                        int(videostat[2])
                    ]
                myClisock.sendmsg('ACK')
            elif str.lower(data) == 'alive':  # still alive
                print data, ' from ', CliAddr
                pass
            else:
                if IS_SERV == 1:
                    self.__servDict.pop(CliAddr)
                elif IS_SERV == 0:
                    self.__userDict.pop(CliAddr)
                myClisock.close()  # close the connection
                break

    def __potentialconn(self, CliAddr, PotentialConnections):
        'return a list of potential connections -- list of IP/ports in the other Dictionary set-minus itself'

        def notself(query):
            return (CliAddr != query)

        return filter(
            notself,
            sample(PotentialConnections,
                   min(len(PotentialConnections), NUM_RETURNED_PEERS)))

    def __printAllregistered(self):
        print 'Registered users:'
        for eachUsr in self.__userDict:
            print eachUsr
        print '\nRegistered servers:'
        for eachServ in self.__servDict:
            print eachServ

    def __printAllMovies(self):
        for i, eachmovie in enumerate(self.__movieList):
            print repr(i + 1) + '. ' + eachmovie