from threading import Thread, Lock
from encapFramedSock import EncapFramedSock

switchesVarDefaults = (
    (('-l', '--listenPort'), 'listenPort', 50001),
    (('-d', '--debug'), 'debug', False),
    (('-?', '--usage'), 'usage', False),
    (('-c', '--connections'), 'maxConnections', 5)
)

def destroyParams(debug, listenPort, usage, maxConnections):
    return debug, listenPort, usage, maxConnections # destructing dictionary

currentFile = {} # dictionary needed to tell which file is in use

debug, listenPort, usage, maxConnections = destroyParams(**params.parseParams(switchesVarDefaults))

if usage: params.usage()

lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
bindAddr = ('127.0.0.1', int(listenPort))
lsock.bind(bindAddr)
lsock.listen(maxConnections)
print('listening on:', bindAddr)
lock = Lock()

class Server(Thread):
    def __init__(self, sockAddr):
        Thread.__init__(self)
        self.sock, self.addr = sockAddr
        self.fsock = EncapFramedSock(sockAddr)
sys.path.append("../lib")       # for params
import params

from framedSock import framedSend, framedReceive


switchesVarDefaults = (
    (('-s', '--server'), 'server', "127.0.0.1:50001"),
    (('-d', '--debug'), "debug", False), # boolean (set if present)
    (('-?', '--usage'), "usage", False), # boolean (set if present)
    )


progname = "framedClient"
paramMap = params.parseParams(switchesVarDefaults)

server, usage, debug  = paramMap["server"], paramMap["usage"], paramMap["debug"]

if usage:
    params.usage()


try:
    serverHost, serverPort = re.split(":", server)
    serverPort = int(serverPort)
except:
    print("Can't parse server:port from '%s'" % server)
    sys.exit(1)

s = None
def client():
    switchesVarDefaults = (
        (('1', '--server'), 'server', "127.0.0.1:50001"),
        (('?', '--usage'), 'usage', False),
        (('d', '--debug'), 'debug', False),
    )

    parameterMap = params.parseParams(switchesVarDefaults)
    server, usage = parameterMap['server'], parameterMap['usage']

    if usage:
        params.usage()

    try:
        serverHost, serverPort = re.split(":", server)
        serverPort = int(serverPort)
    except:
        print("Can't parse server:port from '%s'" % server)
        sys.exit(1)

    port = (serverHost, serverPort)

    # create socket
    listenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listenSocket.connect(port)

    encapSocket = EncapFramedSock((listenSocket, port))

    while 1:
        fileName = input("Enter a filename > ")
        fileName.strip()

        if fileName == "exit":  # terminate
            sys.exit(0)
        else:
            if not fileName:
                continue
            elif os.path.exists(PATH + fileName):
                f = open(PATH + fileName, "rb")
                contents = f.read()

                if len(contents) < 1:
                    print("Error: File %s is empty" % fileName)
                    continue
                print("encapSocket Before ********")
                encapSocket.send(fileName, contents)
                print("encapSocket After *********")

                # check if server captured and receive the file
                status = encapSocket.Status()
                status = int(status.decode())

                if status:
                    print("File %s received by server." % fileName)
                    sys.exit(0)
                else:
                    print(
                        "File Transfer Error: File %s was not received by server."
                        % fileName)
                    sys.exit(1)

            else:
                print("File Not Found Error: File %s not found!" % fileName)
Example #4
0
def send_file():
    switchesVarDefaults = ( 
        (('-s', '--server'), 'server', "127.0.0.1:50000"),
        (('-f', '--file'), 'filename', 'testfile'),
        (('-r', '--remote'), 'filename_r','testfile'), 
        (('-d', '--debug'), "debug", False),
        (('-?', '--usage'), "usage", False), # boolean (set if present)
        )

    progname = "file_transfer_client"
    paramMap = params.parseParams(switchesVarDefaults)

    server, usage, filename, debug, filename_r = paramMap["server"], paramMap["usage"], paramMap["filename"], paramMap["debug"], paramMap["filename_r"] #Getting parameters usage from args

    if usage:
        params.usage()

    try: #Tries to parse server name 
        serverHost, serverPort = re.split(":", server)
        serverPort = int(serverPort)
    except:
        print("Can't parse server:port from '%s'" % server)
        sys.exit(1)

    addrFamily = socket.AF_INET #Creates socket 
    socktype = socket.SOCK_STREAM
    addrPort = (serverHost, serverPort)
    sock = socket.socket(addrFamily, socktype)

    if sock is None: #If cannot open socket
        print("Could not open socket!")
        sys.exit(1)

    sock.connect(addrPort)

    if os.stat(filename).st_size == 0: #Checks if file is empty and rejects it
        print("No zero length files allowed. Try again.")
        sock.close()
        sys.exit(1)

    file_size = os.path.getsize(filename) #Gets file size 

    if filename_r == "testfile": #If remote usage is default 
        filename_r = filename

    framedSend(sock, bytes(filename_r + ":" + str(file_size), 'utf-8'), debug) #Sends filename to server
    file_exists = framedReceive(sock, debug) #Gets response from server if file exists
    print("Sending file: '" + filename + "', Remote name: '" + filename_r + "'")

    if file_exists == b'1': #If file exists on server
        print("File exists. Will override...")

    try: 
        with open(filename, 'rb') as file: #Opens file to read
            while True:
                data = file.read(16384) #Reads file by 16384 bytes (16kB)
                framedSend(sock, data, debug) #Sends data

                if not data: #Breaks if data is None type
                    break

                data_sent = framedReceive(sock, debug) #Saves server response

                if data != data_sent: #Checks if response from the server is a complete message
                    print("Transfer failed! Connection was dropped or file active.")
                    file.close()
                    sock.close()
                    sys.exit(0)

                if debug:
                    print("Data sent: ", data_sent)

            print("File: '" + filename + "' sent!")
            file.close() #Closes file reader

    except FileNotFoundError: #If file is not found
        print("File not found. Try again.")

    sock.close()
def client():
    switchesVarDefaults = (
        (('-s', '--server'), 'server', "127.0.0.1:50001"),
        (('-d', '--debug'), "debug", False),  # boolean (set if present)
        (('-?', '--usage'), "usage", False),  # boolean (set if present)
    )

    paramMap = params.parseParams(switchesVarDefaults)

    server, usage, debug = paramMap["server"], paramMap["usage"], paramMap[
        "debug"]

    if usage:
        params.usage()

    try:
        serverHost, serverPort = re.split(":", server)
        serverPort = int(serverPort)
    except:
        print("can't parse server:port from '%s'" % server)
        sys.exit(1)

    addr_port = (serverHost, serverPort)

    # create socket object
    listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listen_socket.connect(addr_port)

    # create encapsulated socket
    encap_socket = EncapFramedSock((listen_socket, addr_port))

    while True:
        filename = input("Enter the file to be sent: ")
        filename.strip()

        if filename == "exit":
            sys.exit(0)
        else:
            if not filename:
                continue
            elif os.path.exists(PATH_FILES + filename):
                # open file and read
                file = open(PATH_FILES + filename, "rb")
                file_content = file.read()

                # verify file is not empty before sending
                if len(file_content) < 1:
                    print(EMPTY_MSG % filename)
                    continue

                # send file contents to server
                encap_socket.send(filename, file_content, debug)

                # check if server received file
                status = encap_socket.get_status()
                status = int(status.decode())

                # successful transfer
                if status:
                    print(CONFIRM_MSG % filename)
                    #sys.exit(0)
                # failed transfer
                else:
                    print(REJECT_MSG % filename)
                    sys.exit(1)

            # file not found
            else:
                print("ERROR: file %s not found. Try again" % filename)
Example #6
0
            "Wrong use of command or params, to send a file please use the following notation: ./fileClient.py put <sourceFile> <destinationFile> [params]"
        )
        sys.exit(0)
    putIndex = sys.argv.index('put')
    put, source, destination = True, sys.argv[putIndex +
                                              1], sys.argv[putIndex + 2]
    newArgv = sys.argv
    newArgv.remove('put')
    newArgv.remove(source)
    newArgv.remove(destination)
    sys.argv = newArgv  #resetting argv so that there are no errors when checking for params

import params  # has to be imported until here since params runs code when imported therefore argv needs to be dealt with before importing.

server, debug, usage, proxy = destroyParams(
    **params.parseParams(switchesVarDefaults))

if usage: params.usage()

if put:
    try:
        serverHost, serverPort = re.split(
            ':', ('127.0.0.1:50000' if proxy else server))
        serverPort = int(serverPort)
    except:
        print("Can't parse server:port from '%s'" % server)
        sys.exit(1)

    addrPort = (serverHost, serverPort)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Example #7
0
import os
import statvfs

# defaults for command line arguments for the program
# format ((short switch, long switch), variable name, default value)
switches_var_defaults = (
    (('-l', '--listen-port'), 'listen_port',
     50001),  # port to listen for connections
    (('-d', '--debug'), 'debug',
     False),  # run script in debig mode. boolean (set if present)
    (('-?', '--usage'), 'usage', False
     )  # displays command line arguments. boolean (set if present)
)

# send passed command line arguments to the parser
param_map = params.parseParams(switches_var_defaults)

# assign command line agruments to variables
listen_port = param_map["listen_port"]
usage = param_map["usage"]
debug = param_map["debug"]

# print usage
if usage:
    params.usage()

# cast listen port to integer
try:
    listen_port = int(listen_port)
except:
    print "Can't parse listen port from %s" % listen_port