This commit consists of:
1) Improved error handling
2) Return correct XML message for unimplemented rpcs
3) Clean up

Change-Id: Ia59d203840efc2e238a50d4f05e56f854cca9fc7
diff --git a/netconf/nc_common/error.py b/netconf/nc_common/error.py
index bb28490..0cf900d 100644
--- a/netconf/nc_common/error.py
+++ b/netconf/nc_common/error.py
@@ -72,19 +72,6 @@
     XML_ERROR_SEV = "error-severity"
 
 
-    # def __init__(self, replynode=None, error_type=None, error_tag=None,
-    #              error_severity=None, error_tag_app=None, error_path=None,
-    #              error_message=None):
-    #
-    #     self.replynode = replynode
-    #     self.error_type = error_type
-    #     self.error_tag = error_tag
-    #     self.error_severity = error_severity
-    #     self.error_tag_app = error_tag_app
-    #     self.error_path = error_path
-    #     self.error_message = error_message
-    #     self.error_info = []
-
 class ChannelClosed(Error):
     pass
 
@@ -117,23 +104,23 @@
         if "severity" not in kwargs:
             etree.SubElement(rpcerr, Error.XML_ERROR_SEV).text = "error"
 
-        # Convert all remaining arguments to xml
-        for key, value in kwargs.items():
-            key = key.replace('_', '-')
-            etree.SubElement(rpcerr, "error-{}".format(key)).text = str(value)
+        # # Convert all remaining arguments to xml
+        # for key, value in kwargs.items():
+        #     key = key.replace('_', '-')
+        #     etree.SubElement(rpcerr, "error-{}".format(key)).text = str(value)
 
-        # super(RPCError, self).__init__(self.get_xml_reply())
-
-    def get_xml_reply(self):
-        return etree.tounicode(self.reply)
 
 
 class BadMsg(RPCError):
-    def __init__(self, origmsg):
-        RPCError.__init__(self,
-                          origmsg,
-                          Error.RPC,
-                          Error.MALFORMED_MESSAGE)
+    def __init__(self, origmsg, exception=None):
+        super(BadMsg, self).__init__(
+                            origmsg,
+                            Error.RPC,
+                            Error.MALFORMED_MESSAGE,
+                            info=str(exception))
+
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
 
 
 class InvalidValue(Error):
@@ -143,6 +130,9 @@
                           Error.RPC,
                           Error.INVALID_VALUE,
                           **kwargs)
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
+
 
 
 class MissingElement(RPCError):
@@ -153,6 +143,9 @@
                           Error.MISSING_ELEMENT,
                           info=tag,
                           **kwargs)
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
+
 
 
 class BadElement(RPCError):
@@ -164,6 +157,9 @@
                           info=element.tag,
                           **kwargs)
 
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
+
 
 class UnknownElement(RPCError):
     def __init__(self, origmsg, element, **kwargs):
@@ -173,23 +169,31 @@
                           Error.UNKNOWN_ELEMENT,
                           info=element.tag,
                           **kwargs)
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
 
 
 class NotImpl(RPCError):
     def __init__(self, origmsg, **kwargs):
         RPCError.__init__(self,
                           origmsg,
-                          Error.PROTOCOL,
+                          Error.APPLICATION,
                           Error.OPERATION_NOT_SUPPORTED,
                           **kwargs)
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
+
 
 
 class ServerException(RPCError):
     def __init__(self, origmsg, exception, **kwargs):
         RPCError.__init__(self,
                           origmsg,
-                          Error.PROTOCOL,
+                          Error.APPLICATION,
                           Error.OPERATION_FAILED,
                           info=str(exception),
                           **kwargs)
 
+    def get_xml_reply(self):
+        return etree.tounicode(self.reply)
+