backing up
[vsorcdistro/.git] / ryu / build / lib.linux-armv7l-2.7 / ryu / services / protocols / bgp / protocol.py
diff --git a/ryu/build/lib.linux-armv7l-2.7/ryu/services/protocols/bgp/protocol.py b/ryu/build/lib.linux-armv7l-2.7/ryu/services/protocols/bgp/protocol.py
new file mode 100644 (file)
index 0000000..7928305
--- /dev/null
@@ -0,0 +1,88 @@
+# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+ Module defines protocol based classes and utils.
+"""
+
+from abc import ABCMeta
+from abc import abstractmethod
+import six
+
+
+@six.add_metaclass(ABCMeta)
+class Protocol(object):
+    """Interface for various protocols.
+
+    Protocol usually encloses a transport/connection/socket to
+    peer/client/server and encodes and decodes communication/messages. Protocol
+    can also maintain any related state machine, protocol message encoding or
+    decoding utilities. This interface identifies minimum methods to support to
+    facilitate or provide hooks to sub-classes to override behavior as
+    appropriate.
+    """
+
+    @abstractmethod
+    def data_received(self, data):
+        """Handler for date received over connection/transport.
+
+        Here *data* is in raw bytes. This *data* should further be converted to
+        protocol specific messages and as appropriate transition to new state
+        machine state or send appropriate response.
+        """
+        pass
+
+    @abstractmethod
+    def connection_made(self):
+        """Called when connection has been established according to protocol.
+
+        This is the right place to do some initialization or sending initial
+        hello messages.
+        """
+        pass
+
+    @abstractmethod
+    def connection_lost(self, reason):
+        """Handler called when connection to peer/remote according to protocol
+        has been lost.
+
+        Here we can do any clean-up related to connection/transport/timers/etc.
+        """
+        pass
+
+
+@six.add_metaclass(ABCMeta)
+class Factory(object):
+    """This is a factory which produces protocols.
+
+    Can also act as context for protocols.
+    """
+
+    # Put a subclass of Protocol here:
+    protocol = None
+
+    @abstractmethod
+    def build_protocol(self, socket):
+        """Create an instance of a subclass of Protocol.
+
+        Override this method to alter how Protocol instances get created.
+        """
+        raise NotImplementedError()
+
+    @abstractmethod
+    def start_protocol(self, socket):
+        """Launch protocol instance to handle input on an incoming connection.
+        """
+        raise NotImplementedError()