Esempio n. 1
0
def Update_Window():
    filename = "input.txt"
    with open(filename) as f:
        content = f.read()
    global window
    global window_size
    global window_condition
    global SEGMENT_SIZE
    global sent_number_of_segment
    global ofset
    global updateWindow
    global is_Update_Window_ACTIVE

    while ofset < len(content):

        if updateWindow == True:
            lock.acquire()#lock
            print "window acquiring..."
            print "ofset = " + str(ofset)
            print "len(content) = " + str(len(content))
            if updateWindow == True:
                window = []
                window_condition = []
                updateWindow = False
                seq = 0
                print "window updating..."
                while True:
                    if ofset + SEGMENT_SIZE > len(content):
                        segment = content[ofset:]
                        window.append(ip_checksum(segment) + str(seq) +  segment)
                        window_condition.append(1)
                        ofset = len(content)
                        break
                    else:
                        segment = content[ofset: ofset + SEGMENT_SIZE]
                        ofset += SEGMENT_SIZE
                        window.append(ip_checksum(segment) +  str(seq) +  segment)
                        window_condition.append(1)
                        seq += 1
                        #print window_condition
                    if len(window) == window_size:
                        break
            time.sleep(0.01)
            print "window releasing..."
            lock.release()#unlock
    print "Update_Window is finishing..."
    is_Update_Window_ACTIVE = False
Esempio n. 2
0
def Get_Packet(dest, listen):
    global window
    global window_condition
    global update_Window_and_write_to_file_FLAG
    global numberofActive_Get_Packet
    global half

    send_sock = socket(AF_INET, SOCK_DGRAM)
    recv_sock = socket(AF_INET, SOCK_DGRAM)

    recv_sock.bind(listen)
    recv_sock.settimeout(20)
    while True:
        if sum(window_condition) != len(window_condition):
            #            lock.acquire()#lock
            try:
                message, address = recv_sock.recvfrom(1000)
                message_list = message.split(' ', 2)

                checksum = message[:2]
                seq = int(message[2])
                content = message[3:]
                print "taken seq is " + str(seq)
                print "-----------------------"
                if ip_checksum(content) == checksum:
                    print window_condition

                    if window_condition[
                            seq] == -1:  #implementing of window and pipelining taken packets displayed as 1 , waiting packets -1 on client
                        if (half == 0 and seq < len(window) / 2) or (
                                half == 1 and seq >= len(window) / 2):
                            window_condition[seq] = 1  # seq th is taken
                            window[seq] = content
                            checksum = ip_checksum(str(seq))
                            print "sending seq is  " + str(seq)

                            send_sock.sendto(checksum + " " + str(seq), dest)
                            if half == 0 and sum(window_condition) == 0:
                                half = 1
                            if sum(window_condition) == len(window_condition):
                                update_Window_and_write_to_file_FLAG = True
                                half = 0
                        elif half == 0 and seq >= len(window) / 2:
                            checksum = ip_checksum(str(seq))
                            send_sock.sendto(checksum + " " + str(seq), dest)
                            print "sending seq is " + str(seq)
                        else:
                            seq = -1
                            checksum = ip_checksum(str(seq))
                            send_sock.sendto(checksum + " " + str(seq), dest)
                            print "half error sending seq is  -1"
                    else:
                        checksum = ip_checksum(str(seq))
                        send_sock.sendto(checksum + " " + str(seq), dest)
                        print "sending seq is " + str(seq)

                else:
                    seq = -1
                    checksum = ip_checksum(str(seq))
                    send_sock.sendto(checksum + " " + str(seq), dest)
                    print "checksum error sending seq is  -1"


#                lock.release()#unlock

            except timeout:
                print "timeout"
                #               lock.release()#unlock
                break

    numberofActive_Get_Packet -= 1
    if numberofActive_Get_Packet <= 0:
        update_Window_and_write_to_file_FLAG = True
Esempio n. 3
0
def send(content, to):
    checksum = ip_checksum(content)
    send_sock.sendto(checksum + content, to)
Esempio n. 4
0
    recv_sock.bind(listen)
    recv_sock.settimeout(1)

    offset = 0
    seq = 0

    while offset < len(content):
        if offset + SEGMENT_SIZE > len(content):
            segment = content[offset:]
        else:
            segment = content[offset:offset + SEGMENT_SIZE]
        offset += SEGMENT_SIZE

        ack_received = False
        while not ack_received:
            send_sock.sendto(ip_checksum(segment) + str(seq) + segment, dest)

            try:
                message, address = recv_sock.recvfrom(4096)
            except timeout:
                print "Timeout"
            else:
                print message
                checksum = message[:2]
                ack_seq = message[5]
                if ip_checksum(
                        message[2:]) == checksum and ack_seq == str(seq):
                    ack_received = True

        seq = 1 - seq
Esempio n. 5
0
    recv_sock.bind(listen)
    recv_sock.settimeout(1)

    offset = 0
    seq = 0

    while offset < len(content):
        if offset + SEGMENT_SIZE > len(content):
            segment = content[offset:]
        else:
            segment = content[offset:offset + SEGMENT_SIZE]
        offset += SEGMENT_SIZE

        ack_received = False
        while not ack_received:
            send_sock.sendto(ip_checksum(segment) + str(seq) + segment, dest)

            try:
                message, address = recv_sock.recvfrom(4096)
            except timeout:
                print "Timeout"
            else:
                print message
                checksum = message[:2]
                ack_seq = message[5]
                if ip_checksum(message[2:]) == checksum and ack_seq == str(seq):
                    ack_received = True

        seq = 1 - seq
Esempio n. 6
0
if __name__ == "__main__":
    dest_addr = argv[1]
    dest_port = int(argv[2])
    dest = (dest_addr, dest_port)
    listen_addr = argv[3]
    listen_port = int(argv[4])
    listen = (listen_addr, listen_port)

    send_sock = socket(AF_INET, SOCK_DGRAM)
    recv_sock = socket(AF_INET, SOCK_DGRAM)

    recv_sock.bind(listen)

    expecting_seq = 0

    while True:
        message, address = recv_sock.recvfrom(4096)

        checksum = message[:2]
        seq = message[2]
        content = message[3:]

        if ip_checksum(content) == checksum:
            send("ACK" + seq, dest)
            if seq == str(expecting_seq):
                stdout.write(content)
                expecting_seq = 1 - expecting_seq
        else:
            negative_seq = str(1 - expecting_seq)
            send("ACK" + negative_seq, dest)
Esempio n. 7
0
def send(content, to):
    checksum = ip_checksum(content)
    send_sock.sendto(checksum + content, to)
Esempio n. 8
0
if __name__ == "__main__":
    dest_addr = argv[1]
    dest_port = int(argv[2])
    dest = (dest_addr, dest_port)
    listen_addr = argv[3]
    listen_port = int(argv[4])
    listen = (listen_addr, listen_port)

    send_sock = socket(AF_INET, SOCK_DGRAM)
    recv_sock = socket(AF_INET, SOCK_DGRAM)

    recv_sock.bind(listen)

    expecting_seq = 0

    while True:
        message, address = recv_sock.recvfrom(4096)

        checksum = message[:2]
        seq = message[2]
        content = message[3:]

        if ip_checksum(content) == checksum:
            send("ACK" + seq, dest)
            if seq == str(expecting_seq):
                stdout.write(content)
                expecting_seq = 1 - expecting_seq
        else:
            negative_seq = str(1 - expecting_seq)
            send("ACK" + negative_seq, dest)