From a3cbf01d83c85fad5a41c4a49aa2718e0976fe22 Mon Sep 17 00:00:00 2001
From: Yang Yuechun <younggy1997@outlook.com>
Date: Tue, 18 Dec 2018 15:24:25 -0600
Subject: [PATCH] server

---
 server/__pycache__/gns3.cpython-36.pyc        | Bin 5644 -> 7687 bytes
 server/__pycache__/gns3_helper.cpython-36.pyc | Bin 0 -> 1016 bytes
 server/client.py                              |  24 ++---
 server/gns3.py                                |  78 ++++++++++++----
 server/gns3_helper.py                         |  29 ++++++
 server/index_instruction.txt                  |  16 +++-
 server/server.py                              |  83 +++++++++++-------
 7 files changed, 164 insertions(+), 66 deletions(-)
 create mode 100644 server/__pycache__/gns3_helper.cpython-36.pyc
 create mode 100644 server/gns3_helper.py

diff --git a/server/__pycache__/gns3.cpython-36.pyc b/server/__pycache__/gns3.cpython-36.pyc
index 0d46a1e4e32c07ca592b45698856de2191a0415a..53742264b3cf9ba6d500f54ddb1cc925e0791cdd 100644
GIT binary patch
literal 7687
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

delta 1514
zcmbtUO>fgc5cM{$9TGbqPMXG{N$NzUwJ0el5=c-!PN*jiaA_li8?Z5v(%7tRpsh+J
zF1>JKZ%F(DE|fpOi4zjynkzp732|U&oshI7DX5Y1)`@rL&D(i12dl4_t94n9U456o
ze>lf+-?^brjXvL^Ur+c@70@)g$LV)IzC@eRN+ap{P3#-ZcH8JUrsXvfp6|FrzYk-d
zkuXCK|6C?t;+o<=a#!q*SFgF--8?)PM3*!)OTMWpxstt1-b$qniSE}$oTdv-0>}Uf
zfE0iNkfESQaGov=$;8d)t&Z&(0dC_gyavt?a`dU23%Mj&Ln^7s>-%u78|$4jTIP<p
zdvR}N_tKt@@W1o(j2{;uSiB!>Tn;IggKhbSiQgn<$OU<WrNNG$$lr*#fqz{85I;T(
zibrYBFy6p5o4!S<*-bsAn>~Sx(FG|ehj5YJib~?iYZFouj+LY#m{!~JtwC1$e<T#1
z?I-jsOo-#ir=*BVL`$#PQTkuM90D^zmv<e{4^6?Wz&rwep!-H?&ob?1u;m)2^)RrF
zR_C$v3b=R*94buVdCH}doALUSGhv)w`3I(B9z04H+HW*x`cIub%lE;S2SbDiYanh7
zuKuXF(BUJ<CTb(^(?wM2YapqVc>A;hLZgxgii)b_g>sh$onD$^Z4v4g!;UOd34hgs
z{7}k;@ueW=Gi9{UZ+BY^ZvndT#15D+0lJZKP1kGuUl|Q8_E@iPo|X=u1LdPc_UOK5
zHF*i7<=KT{nK*Ne{lP#RjImjWqyo^f%i$tG31A*T1E>I00Tuuj0U-F$jAPS|4Z7&+
ZmSYBO>jt7bJaBpxMUlkwh$lP6?cV~i5u*SA

diff --git a/server/__pycache__/gns3_helper.cpython-36.pyc b/server/__pycache__/gns3_helper.cpython-36.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..745646374da305b41ff475d36728bc237db394c5
GIT binary patch
literal 1016
zcmZ8fO>f#j5Z$%cU}!<1<v@DMp%)I+O(7MLqN-AJMpdhR$ZF*p??OzB?d~opL2#n~
zrRrbWYft$LJ$1$qpf%dZ&YKU<%yYL^tN#3W{3Wyr`ArTU3+}Jss1pEAI8BI8xaCuB
zbM}My7I%0F{%ua*lXm$IqR3$JwBH@}o}ZufJA#XsogNoa=R6vXI^y(n$Vc7&a2Q1q
z#^U3^VQ}8SQ44@ESrJVpR9kDhqMWX*8-GbJ$=7!)J0>f(v?n$P-;#0bf)tirSoYRp
zYYGw0n#ym5cV|O}12JU6mcUW+z4eJ`m;moff)fl3F)R(I!j#jDiy-EHHJ4c~q>hC$
zZk~jCl*#F$hHiB-%Xz2;Z<h=kr>bij1s%jG28BA#QiJ&u5oxGp?6J_M6y~`|xp8tC
zr@HN!>ORRZOf?LuhR_JS!>=F~6@L+V1pE0j^gbvdl{XC|?^391o#oyvjrDD?eU&F7
z(d(WCQJ5>8r6QQi04qi!)j|gISk1yDUKIU#P--ruhwTSfB7sq#<+rA>nJn11hB~Ph
z0HKUlx2I0)^oTYAT`C`eZzn5Cx|3Cd@vp2mp9@Lft}Kw$URod+1rY&3AhbYWZXXl4
zfmFbwaQA%afG=+ag--wkZ5D#MJ3%W0znsMBH7?&NW|0(nk=U8pZk7k9cS!E-7mJ6O
zv{zS_(BD8(9f~VmELK6NB0K<SGgCbXtN~>h5`G17la4wTV#)^k@3+0rdknN{0&KR8
s`>xX#{EAIK0lv+Ot~M>;>Ls$9qW_h5FQyrvCE^v1sc;t8VwPL~3qHvJSO5S3

literal 0
HcmV?d00001

diff --git a/server/client.py b/server/client.py
index 54a6846..3a3f2d5 100644
--- a/server/client.py
+++ b/server/client.py
@@ -2,14 +2,16 @@
 
 import socket
 
-TCP_IP = '127.0.0.1'
-TCP_PORT = 5005
+# TCP_IP = '127.0.0.1'
+# TCP_PORT = 5006
 BUFFER_SIZE = 1024
+UDP_IP = "127.0.0.1"
+UDP_PORT = 5005
+# MESSAGE = "Hello, World!"
 
-s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-s.connect((TCP_IP, TCP_PORT))
+sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+# sock.connect((TCP_IP, TCP_PORT))
 
-#print index instruction
 f = open('index_instruction.txt', 'r')
 file_contents = ''
 file_contents += f.read()
@@ -22,15 +24,15 @@ while 1:
 	index = input()
 	while not index:
 		index = input(file_contents)
-	s.send(index.encode('utf-8'))
-	data = s.recv(BUFFER_SIZE).decode('utf-8')
+	sock.sendto(index.encode('utf-8'), (UDP_IP, UDP_PORT))
+	msg, addr = sock.recvfrom(BUFFER_SIZE)
+	data = msg.decode()
 	text += data
 
 	while text.find('END') == -1:
-		data = s.recv(BUFFER_SIZE).decode('utf-8')
+		msg, addr = sock.recvfrom(BUFFER_SIZE)
+		data = msg.decode()
 		text += data
 	print(text[:-3])
 	if text[:-3] == 'close':	break
-s.close()
-
-# print("received text:", text)
\ No newline at end of file
+# sock.close()
diff --git a/server/gns3.py b/server/gns3.py
index 5b4142d..a23a96f 100644
--- a/server/gns3.py
+++ b/server/gns3.py
@@ -90,7 +90,7 @@ GNS3_AUTH = HTTPBasicAuth(GNS3_USERNAME, GNS3_PASSWORD)
 ##########Appliance
 ################################################################################
 
-def gns3_get_appliances_list():
+def get_appliances_list():
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['appliances']), auth=GNS3_AUTH)
     return r.json()
 
@@ -100,22 +100,22 @@ def gns3_get_appliances_list():
 ##########Drawing
 ################################################################################
 
-def gns3_get_drawings_list(project_id):
+def get_drawings_list(project_id):
     drawings_url = GNS3_URLS['drawings'].format(project_id=project_id)
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawings_url), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_get_drawing(project_id, drawing_id):
+def get_drawing(project_id, drawing_id):
     drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_update_drawing(project_id, drawing_id):
+def update_drawing(project_id, drawing_id):
     drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
     r = requests.put('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_delete_drawing(project_id, drawing_id):
+def delete_drawing(project_id, drawing_id):
     drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id)
     r = requests.delete('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH)
     #TODO what do we return?
@@ -127,25 +127,25 @@ def gns3_delete_drawing(project_id, drawing_id):
 #########Server
 ################################################################################
 
-def gns3_dump_debug_info():
+def dump_debug_info():
     r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['debug']), auth=GNS3_AUTH)
     #TODO what do we return?
     return r
 
-def gns3_get_settings():
+def get_settings():
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['settings']), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_shutdown_server():
+def shutdown_server():
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['shutdown']), auth=GNS3_AUTH)
     #TODO what do we return?
     return r
 
-def gns3_get_version():
+def get_version():
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_compare_version(version_to_compare):
+def compare_version(version_to_compare):
     r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH,
         json={'version': str(version_to_compare)})
     return r
@@ -154,20 +154,64 @@ def gns3_compare_version(version_to_compare):
 ################################################################################
 ##########Implementation
 ################################################################################
-def gns3_nodes_information(project_id):
+def nodes_information(project_id):
     url = GNS3_URLS['nodes'].format(project_id=project_id)
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
     return r.json()
 
-def gns3_links_information(project_id):
+def links_information(project_id):
     url = GNS3_URLS['links'].format(project_id=project_id)
     r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
     return r.json()
 
+def node_create(project_id, name):
+    para = '{"compute_id": "local", "name": "'+str(name)+'", "node_type": "vpcs"}'
+    url = GNS3_URLS['nodes'].format(project_id=project_id)
+    r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH, data=para)
+    return r.json()
+
+def node_delete(project_id, node_id):
+    url = GNS3_URLS['nodes'].format(project_id=project_id)
+    r = requests.delete('{0}/{1}/{2}'.format(GNS3_ADDR, url, node_id), auth=GNS3_AUTH)
+    return r
+
+def link_create(project_id, node_id_1, node_id_2, adapter_1, adapter_2, port_1, port_2):
+    para = '{"nodes": [{"adapter_number": '+adapter_1+', "label": {"text": "Text", "x": 0, "y": 0}, "node_id": "'+node_id_1+'", "port_number": '+port_1+'}, {"adapter_number": '+adapter_2+', "node_id": "'+node_id_2+'", "port_number": '+port_2+'}]}'
+    r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH, data=para)
+    return r
+
+def link_delete():
+    return
+
+def node_start_all(project_id):
+    url = GNS3_URLS['start_all_nodes'].format(project_id=project_id)
+    r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
+    return r
+
+def node_stop_all(project_id):
+    url = GNS3_URLS['stop_all_nodes'].format(project_id=project_id)
+    r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
+    return r
+
+def node_suspend_all(project_id):
+    url = GNS3_URLS['suspend__all_nodes'].format(project_id=project_id)
+    r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH)
+    return r
+
+def node_start():
+    return 
+
+def node_stop():
+    return
+
+def node_suspend():
+    return
+
+
 
 #Testing
-# print(gns3_get_version())
-# gns3_get_settings()
-# print(gns3_shutdown_server())
-# print(gns3_compare_version('2.1.12dev1'))
-# print(gns3_get_drawings_list('a'))
\ No newline at end of file
+# print(get_version())
+# get_settings()
+# print(shutdown_server())
+# print(compare_version('2.1.12dev1'))
+# print(get_drawings_list('a'))
\ No newline at end of file
diff --git a/server/gns3_helper.py b/server/gns3_helper.py
new file mode 100644
index 0000000..2ef94a2
--- /dev/null
+++ b/server/gns3_helper.py
@@ -0,0 +1,29 @@
+import gns3
+
+project_id ='83b40958-ede6-4dec-9cff-e11bdf38bbcc'
+
+def update_nodes_info():
+  nodes_info = []
+  info = gns3.nodes_information(project_id)
+  data = ''
+  for node in info:
+    node_info = {}
+    node_info['name'] = node.get('name')
+    node_info['node_id'] = node.get('node_id')
+    if node.get('properties').get('platform'):
+      node_info['platform'] = node.get('properties').get('platform')
+    nodes_info.append(node_info)
+  print('nodes updated')
+  return nodes_info
+
+def update_links_info():
+  links_info = []
+  info = gns3.links_information(project_id)
+  for link in info:
+    link_info = {}
+    link_info['link_id'] = link.get('link_id')
+    link_info['node_id_1'] = link.get('nodes')[0].get('node_id')
+    link_info['node_id_2'] = link.get('nodes')[1].get('node_id')
+    links_info.append(link_info)
+  print('link updated')
+  return links_info
\ No newline at end of file
diff --git a/server/index_instruction.txt b/server/index_instruction.txt
index 8f2fc13..f02ed0b 100644
--- a/server/index_instruction.txt
+++ b/server/index_instruction.txt
@@ -1,10 +1,18 @@
 Provided functionality in GNS3:
 
 0: version information
-1: drawing list
-2: setting information
-3: nodes information
-4: links information
+1: nodes information
+2: links information
+3: create node
+4: delete node
+5: create link
+6: delete link
+7: start all nodes
+8: stop all nodes
+9: suspend all nodes
+10: start one node
+11: stop one node
+12: suspend one node
 -1: close connection
 
 Enter index:
\ No newline at end of file
diff --git a/server/server.py b/server/server.py
index ea4d0b1..21081ac 100644
--- a/server/server.py
+++ b/server/server.py
@@ -2,61 +2,76 @@
 
 import socket
 import gns3
+import gns3_helper as gn
+import time
 
 
-TCP_IP = '127.0.0.1'
-TCP_PORT = 5005
+# TCP_IP = '127.0.0.1'
+# TCP_PORT = 5006
 BUFFER_SIZE = 1024  # Normally 1024, but we want fast response
 project_id ='83b40958-ede6-4dec-9cff-e11bdf38bbcc'
+UDP_IP = "127.0.0.1"
+UDP_PORT = 5005
 
-s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-s.bind((TCP_IP, TCP_PORT))
-s.listen(1)
+sock = socket.socket(socket.AF_INET, # Internet
+                     socket.SOCK_DGRAM) # UDP
+sock.bind((UDP_IP, UDP_PORT))
+
+# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+# s.bind((TCP_IP, TCP_PORT))
+# s.listen(1)
+
+# conn, addr = s.accept()
+# print('Connection address:', addr)
+
+############update information#########
+nodes_info = gn.update_nodes_info()
+links_info = gn.update_links_info()
 
-conn, addr = s.accept()
-print('Connection address:', addr)
 while 1:
 
-  index = conn.recv(BUFFER_SIZE).decode('utf-8')
+  msg, addr = sock.recvfrom(BUFFER_SIZE)
+  index = msg.decode('utf-8')
 
   if index == '0':
-    data = str(gns3.gns3_get_version())+str('END')
+    data = str(gns3.get_version())+str('END')
 
   elif index == '1':
-    data = str(gns3.gns3_get_drawings_list(project_id))+str('END')
+    nodes_info = gn.update_nodes_info()
+    data = str(nodes_info)+str('END')
 
   elif index == '2':
-    data = str(gns3.gns3_get_settings())+str('END')
+    links_info = gn.update_links_info()
+    data = str(links_info)+str('END')
 
   elif index == '3':
-    info = gns3.gns3_nodes_information(project_id)
-    data = ''
-    for nodes in info:
-      data += str('name: ') + str(nodes.get('name')) + '\n'
-      data += str('node_id: ') + str(nodes.get('node_id')) + '\n'
-      if nodes.get('properties').get('platform'):
-        data += str('platform: ') + str(nodes.get('properties').get('platform')) + '\n'
-      data += '\n'
-    data += str('END')
+    nodes_info = gn.update_nodes_info()
+    name = len(nodes_info)+1
+    # gns3.node_create(project_id, name)
+    data = str(gns3.node_create(project_id, name))+str('END')
+    # data = str('OK 4')
 
   elif index == '4':
-    info = gns3.gns3_links_information(project_id)
-    data = ''
-    for links in info:
-      data += str('link_id: ') + str(links.get('link_id')) + '\n'
-      nodes = links.get('nodes')
-      for node in nodes:
-        data += str('node_id: ') + str(node.get('node_id')) + '\n'
-      data += '\n'
-    data += str('END')
+    nodes_info = gn.update_nodes_info()
+    node_id = nodes_info[-1].get('node_id')
+    data = str(gns3.node_delete(project_id, node_id))+str('END')
+
+  elif index == '7':
+    data = str(gns3.node_start_all(project_id))+str('END')
+
+  elif index == '8':
+    data = str(gns3.node_stop_all(project_id))+str('END')
+
+  elif index == '9':
+    data = str(gns3.node_suspend_all(project_id))+str('END')
 
   elif index == '-1':
     data = str('close')+str('END')
-    conn.send(data.encode('utf-8'))  # echo
-    break
+
+  elif not index: break
+
   else:
     data = str('incorrect msg')+str('END')
-  conn.send(data.encode('utf-8'))  # echo
-
-conn.close()
+  sock.sendto(data.encode('utf-8'), addr)  # echo
 
+# conn.close()
-- 
GitLab