/* This file is part of IFS. IFS is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. IFS 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with IFS. If not, see . */ using IFS.Gateway; using System.IO; namespace IFS.Transport { /// /// IPupPacketInterface provides an abstraction over a transport (Ethernet, IP, Carrier Pigeon) /// which can provide encapsulation for PUPs. /// public interface IPupPacketInterface { /// /// Sends the given PUP over the transport. /// /// void Send(PUP p); /// /// Registers a callback (into the router) to be invoked on receipt of a PUP. /// /// void RegisterRouterCallback(ReceivedPacketCallback callback); /// /// Shuts down the interface. /// void Shutdown(); } /// /// IRawPacketInterface provides an abstraction over a transport (Ethernet, IP, Carrier Pigeon) /// which can provide encapsulation for raw Ethernet frames. /// /// For the time being, this exists only to provide support for BreathOfLife packets (the only non-PUP /// Ethernet Packet the IFS suite deals with). This only requires being able to send packets, so no /// receive is implemented. /// /// Note also that no routing will be provided for raw packets; they are sent to the local 'net only. /// public interface IRawPacketInterface { /// /// Sends the specified data over the transport. /// /// /// /// /// void Send(byte[] data, byte source, byte destination, ushort frameType); /// /// Sends the specified data over the transport. /// /// void Send(MemoryStream encapsulatedFrameStream); } public interface IPacketInterface : IPupPacketInterface, IRawPacketInterface { } }