123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /**********
- This library is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 3 of the License, or (at your
- option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
- This library 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 Lesser General Public License for
- more details.
- You should have received a copy of the GNU Lesser General Public License
- along with this library; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- **********/
- // "mTunnel" multicast access service
- // Copyright (c) 1996-2019 Live Networks, Inc. All rights reserved.
- // Network Interfaces
- // C++ header
- #ifndef _NET_INTERFACE_HH
- #define _NET_INTERFACE_HH
- #ifndef _NET_ADDRESS_HH
- #include "NetAddress.hh"
- #endif
- class NetInterface {
- public:
- virtual ~NetInterface();
- static UsageEnvironment* DefaultUsageEnvironment;
- // if non-NULL, used for each new interfaces
- protected:
- NetInterface(); // virtual base class
- };
- class DirectedNetInterface: public NetInterface {
- public:
- virtual ~DirectedNetInterface();
- virtual Boolean write(unsigned char* data, unsigned numBytes) = 0;
- virtual Boolean SourceAddrOKForRelaying(UsageEnvironment& env,
- unsigned addr) = 0;
- protected:
- DirectedNetInterface(); // virtual base class
- };
- class DirectedNetInterfaceSet {
- public:
- DirectedNetInterfaceSet();
- virtual ~DirectedNetInterfaceSet();
- DirectedNetInterface* Add(DirectedNetInterface const* interf);
- // Returns the old value if different, otherwise 0
- Boolean Remove(DirectedNetInterface const* interf);
- Boolean IsEmpty() { return fTable->IsEmpty(); }
- // Used to iterate through the interfaces in the set
- class Iterator {
- public:
- Iterator(DirectedNetInterfaceSet& interfaces);
- virtual ~Iterator();
- DirectedNetInterface* next(); // NULL iff none
- private:
- HashTable::Iterator* fIter;
- };
- private:
- friend class Iterator;
- HashTable* fTable;
- };
- class Socket: public NetInterface {
- public:
- virtual ~Socket();
- void reset(); // closes the socket, and sets "fSocketNum" to -1
- virtual Boolean handleRead(unsigned char* buffer, unsigned bufferMaxSize,
- unsigned& bytesRead,
- struct sockaddr_in& fromAddress) = 0;
- // Returns False on error; resultData == NULL if data ignored
- int socketNum() const { return fSocketNum; }
- Port port() const {
- return fPort;
- }
- UsageEnvironment& env() const { return fEnv; }
- static int DebugLevel;
- protected:
- Socket(UsageEnvironment& env, Port port); // virtual base class
- Boolean changePort(Port newPort); // will also cause socketNum() to change
- private:
- int fSocketNum;
- UsageEnvironment& fEnv;
- Port fPort;
- };
- UsageEnvironment& operator<<(UsageEnvironment& s, const Socket& sock);
- // A data structure for looking up a Socket by port:
- class SocketLookupTable {
- public:
- virtual ~SocketLookupTable();
- Socket* Fetch(UsageEnvironment& env, Port port, Boolean& isNew);
- // Creates a new Socket if none already exists
- Boolean Remove(Socket const* sock);
- protected:
- SocketLookupTable(); // abstract base class
- virtual Socket* CreateNew(UsageEnvironment& env, Port port) = 0;
- private:
- HashTable* fTable;
- };
- // A data structure for counting traffic:
- class NetInterfaceTrafficStats {
- public:
- NetInterfaceTrafficStats();
- void countPacket(unsigned packetSize);
- float totNumPackets() const {return fTotNumPackets;}
- float totNumBytes() const {return fTotNumBytes;}
- Boolean haveSeenTraffic() const;
- private:
- float fTotNumPackets;
- float fTotNumBytes;
- };
- #endif
|