"""
Copyright 2016 Open Networking Foundation (ONF)

Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>

    TestON is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 2 of the License, or
    (at your option) any later version.

    TestON is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with TestON.  If not, see <http://www.gnu.org/licenses/>.
"""

#!/usr/bin/python           # This is server.py file
from scapy.all import *
import socket               # Import socket module
import time                 # Import Time module
import sys
import os

path = os.getcwd()
sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
from Nbdata import BgpLs

obj = BgpLs()
returnlist = obj.Constants()
peerIp = returnlist[0][0]

load_contrib('bgp')
s = socket.socket()         # Create a socket object
host = peerIp # Get local machine name
port = 179                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port
pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap")
time.sleep(15)
pkts[759][BGPOpen].bgp_id = peerIp

s.listen(5)                   # Now wait for client connection.

print("starting Connecting to ONOS peer")
c, addr = s.accept()     # Establish connection with client.
print 'Got connection from ONOS :', addr
c.send(str(pkts[759][BGPHeader])) # OPEN MESSAGE
c.recv(4096)
c.send(str(pkts[765][BGPHeader]))# KEEPALIVE MESSAGE
c.recv(4096)
c.send(str(pkts[768][BGPHeader]))   # UPDATE MESSAGES
c.send(str(pkts[771][BGPHeader]))
c.send(str(pkts[773][BGPHeader]))
c.send(str(pkts[775][BGPHeader]))
c.send(str(pkts[778][BGPHeader]))
c.send(str(pkts[765][BGPHeader]))

time.sleep(15)
c.send(str(pkts[1168][BGPHeader]))
c.send(str(pkts[1250][BGPHeader]))
c.send(str(pkts[1354][BGPHeader]))
print ("Node Delete msg sent")


while True:
    c.recv(4096)
    c.send(str(pkts[765][BGPHeader]))

  # c.close()                # Close the connection
