summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py
diff options
context:
space:
mode:
authorAnton Kiselev <anton.kisel@gmail.com>2016-10-17 14:16:16 +0700
committerAnton Kiselev <anton.kisel@gmail.com>2016-10-17 14:47:45 +0700
commit83f32a72a59a1d6fafcaa9b3829874990df7735a (patch)
tree87ab7246c6f9b4411eb90d750a9f47621f0cdace /scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py
parent56c59d54a48eeb9430d4a05402b5b9c001adef3e (diff)
update scapy_service for gui usage.
- build_pkt, reconstruct_pkt and corresponding data structures changed in order to support nested protocols and correct field ordering - binary packet editing capabilities with reconstruct_pkt - added read_pcap, write_pcap for working with pcap files - added get_definitions for retrieving scapy_service definitions for GUI - added get_payload_classes for retrieving available payload classes - python2, python3 support squash-merge of kisel / 196d638
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py')
-rwxr-xr-xscripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py b/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py
index 82bd9fec..6489b36a 100755
--- a/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py
+++ b/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py
@@ -2,6 +2,7 @@
import time
import sys
import os
+import traceback
stl_pathname = os.path.abspath(os.path.join(os.pardir, os.pardir))
if stl_pathname not in sys.path:
@@ -28,7 +29,7 @@ class Scapy_wrapper:
def parse_req_msg(self,JSON_req):
try:
req = json.loads(JSON_req)
- req_id=b'null'
+ req_id='null'
if (type(req)!= type({})):
raise ParseException(req_id)
json_rpc_keys = ['jsonrpc','id','method']
@@ -55,10 +56,10 @@ class Scapy_wrapper:
except ValueError:
raise ParseException(req_id)
- def create_error_response(self,error_code,error_msg,req_id='null'):
+ def create_error_response(self,error_code,error_msg,req_id):
return {"jsonrpc": "2.0", "error": {"code": error_code, "message": error_msg}, "id": req_id}
- def create_success_response(self,result,req_id=b'null'):
+ def create_success_response(self,result,req_id):
return {"jsonrpc": "2.0", "result": result, "id": req_id }
def get_exception(self):
@@ -142,9 +143,17 @@ class Scapy_server():
except Exception as e:
response = self.scapy_wrapper.error_handler(e,req_id)
self.logger.info('ERROR %s: %s',response['error']['code'], response['error']['message'])
+ self.logger.info('Exception info: %s' % traceback.format_exc())
finally:
- json_response = json.dumps(response)
- self.logger.info('Sending Message: %s' % json_response)
+ try:
+ json_response = json.dumps(response)
+ self.logger.info('Sending Message: %s' % json_response)
+ except Exception as e:
+ # rare case when json can not be searialized due to encoding issues
+ # object is not JSON serializable
+ self.logger.error('Unexpected Error: %s' % traceback.format_exc())
+ json_response = json.dumps(self.scapy_wrapper.error_handler(e,req_id))
+
# Send reply back to client
self.socket.send_string(json_response)
if (method == 'shut_down'):