All pastes #203083 Raw Edit

oldie

public text v1 · immutable
#203083 ·published 2006-10-14 22:33 UTC
rendered paste body
import socket
import sys
import sha
import re

# Program call: ./ft.py [a|c][r|s] source_host source_port remote_host remote_port file_name
#
# Variable list:
#
# bm  = ''                # exchange mode
# sh  = ''                #   source port
# sp  = ''                #   source port
# rh  = ''                #   remote host
# rp  = ''                #   remote port
# fn  = ''                #     file name
# fd  = open()            #   file object
# mmr = re.compile()      # mode-match-re
# hsh = sha.new()         #   hash object
# sck = socket.socket()   # connection socket

bm = sys.argv[1]
sh = sys.argv[2]
sp = sys.argv[3]
rh = sys.argv[4]
rp = sys.argv[5]
fn = sys.argv[6]


class FileShare:


    def __init__(self, bm, sh, sp, rh, rp, fn):
        
        self.sp = int(sp)
        self.rp = int(rp)
        self.sh = socket.gethostbyname(sh)
        self.rh = socket.gethostbyname(rh)
        
        self.mmr = re.compile(r'(a|c)(r|s)')
        
        self.bm = bm

        self.fn = fn
        
        self.fd = None
        
        self.hsh = sha.new()
        self.sck = socket.socket()
        

    def await(self):
        
        self.sck.bind((self.sh, self.sp))
        self.sck.listen(1)
        
        self.sck, ra = self.sck.accept()
        ra = (socket.gethostbyname(ra[0]), ra[1])
        
        if ra == (self.rh, self.rp):
            rt = 0
        else: 
            self.sck.close()
            rt = 1
        
        return(rt)


    def connect(self):
        
        self.sck.bind((self.sh, self.sp))
        self.sck.connect((self.rh, self.rp))
        
        return(0)


    def recieve(self):
        self.fd = open(self.fn, 'wb')
        tmp = self.sck.recv(1024)
        
        while tmp:
            self.hsh.update(tmp)
            self.fd.write(tmp)
            tmp = self.sck.recv(1024)
        
        self.close()
        self.mkhash()
        
        return(0)


    def send(self):
        self.fd = open(self.fn, 'rb')
        tmp = self.fd.read(1024)
        
        while tmp:
            self.hsh.update(tmp)
            self.sck.sendall(tmp)
            tmp = self.fd.read(1024)
        
        self.close()
        self.mkhash()
       
        return(0)


    def close(self):
        
        self.fd.close()
        self.sck.close()
        
        return(0)


    def mkhash(self):

        hash = self.hsh.hexdigest() + ' ' + '*' + self.fn
        
        print hash
        
        return(0)


    def barter(self):
        
        mmrm = self.mmr.search(self.bm)
        
        if mmrm:
            
            if   mmrm.groups()[0] == 'a': self.await()
            elif mmrm.groups()[0] == 'c': self.connect()
            
            if   mmrm.groups()[1] == 'r': self.recieve()
            elif mmrm.groups()[1] == 's': self.send()
            
            rt = 0
            
        else:
            
            rt = 1
        
        return(rt)


fs = FileShare(bm, sh, sp, rh, rp, fn)
fs.barter()