xorp

transmit.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 
00003 // Copyright (c) 2001-2009 XORP, Inc.
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License, Version 2, June
00007 // 1991 as published by the Free Software Foundation. Redistribution
00008 // and/or modification of this program under the terms of any other
00009 // version of the GNU General Public License is not permitted.
00010 // 
00011 // This program is distributed in the hope that it will be useful, but
00012 // WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
00014 // see the GNU General Public License, Version 2, a copy of which can be
00015 // found in the XORP LICENSE.gpl file.
00016 // 
00017 // XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
00018 // http://xorp.net
00019 
00020 // $XORP: xorp/ospf/transmit.hh,v 1.8 2008/10/02 21:57:50 bms Exp $
00021 
00022 #ifndef __OSPF_TRANSMIT_HH__
00023 #define __OSPF_TRANSMIT_HH__
00024 
00038 template <typename A>
00039 class Transmit {
00040  public:
00041     typedef ref_ptr<Transmit> TransmitRef;
00042 
00043     virtual ~Transmit()
00044     {}
00045 
00051     virtual bool valid() = 0;
00052 
00059     virtual bool multiple() = 0;
00060 
00066     virtual TransmitRef clone() = 0;
00067 
00075     virtual uint8_t *generate(size_t &len) = 0;
00076 
00080     virtual A destination() = 0;
00081 
00085     virtual A source() = 0;
00086 };
00087 
00091 template <typename A>
00092 class SimpleTransmit : public Transmit<A> {
00093  public:
00094     SimpleTransmit(vector<uint8_t>& pkt, A dst, A src) : _dst(dst), _src(src)
00095     {
00096     _pkt.resize(pkt.size());
00097     memcpy(&_pkt[0], &pkt[0], pkt.size());
00098     }
00099 
00100     bool valid() { return true; }
00101     bool multiple() { return false; }
00102     typename Transmit<A>::TransmitRef clone() { return this; }
00103     uint8_t *generate(size_t &len) {
00104     len = _pkt.size();
00105     return &_pkt[0];
00106     }
00107     A destination() { return _dst; }
00108     A source() { return _src; }
00109 
00110  private:
00111     vector<uint8_t> _pkt;
00112     A _dst; // Destination address
00113     A _src; // Source address
00114 };
00115 #endif // __OSPF_TRANSMIT_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations