An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/transport/tcpip/protlib/tp.cpp @ 5284

Last change on this file since 5284 was 5284, checked in by mies, 10 years ago

+ added new transport modules and adapted ariba to them
+ exchange endpoint descriptors an link establishment
+ clean up of base communication
+ link establishment with in the presence of multiple endpoints
+ local discovery for ipv6, ipv4 and bluetooth mac addresses

File size: 3.5 KB
Line 
1/// ----------------------------------------*- mode: C++; -*--
2/// @file tp.cpp
3/// generic interface for sending/receiving network messages via a transport protocol
4/// ----------------------------------------------------------
5/// $Id: tp.cpp 2872 2008-02-18 10:58:03Z bless $
6/// $HeadURL: https://svn.ipv6.tm.uka.de/nsis/protlib/trunk/src/tp.cpp $
7// ===========================================================
8//                     
9// Copyright (C) 2005-2007, all rights reserved by
10// - Institute of Telematics, Universitaet Karlsruhe (TH)
11//
12// More information and contact:
13// https://projekte.tm.uka.de/trac/NSIS
14//                     
15// This program is free software; you can redistribute it and/or modify
16// it under the terms of the GNU General Public License as published by
17// the Free Software Foundation; version 2 of the License
18//
19// This program is distributed in the hope that it will be useful,
20// but WITHOUT ANY WARRANTY; without even the implied warranty of
21// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22// GNU General Public License for more details.
23//
24// You should have received a copy of the GNU General Public License along
25// with this program; if not, write to the Free Software Foundation, Inc.,
26// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27//
28// ===========================================================
29
30/** @ingroup transport
31 * This is the interface for sending network messages over a transport
32 * protocol. You can receive messages through queues.
33 */
34
35#include "tp.h"
36#include "threadsafe_db.h"
37#include "logfile.h"
38
39namespace protlib {
40
41/** @addtogroup transport Transport Protocol
42 * @ingroup network
43 * @{
44 */
45
46  using namespace log;
47
48
49/***** class TP *****/
50
51/** Set ID of the underlying transport protocol, e.g. TCP, SCTP or UDP.
52 * Init is set false here, set to true in constructors of derived classes if
53 * initialization is done.
54 * If the maximum payload is greater than the maximum size of a network
55 * message, it is decreased.
56 */
57TP::TP(protocol_t p, const string& pname, const string& tpn, 
58       const unsigned short common_header_length, 
59       bool (*const getmsglength)(NetMsg& netmsg, uint32& msglen),
60       uint32 mp) 
61        : protocol(p), protoname(pname), tp_name(tpn), 
62          common_header_length(common_header_length), 
63          getmsglength(getmsglength),
64          init(false), 
65          max_payload((mp<NetMsg::max_size)?mp:(NetMsg::max_size))
66          {}
67
68/** TP destructor does nothing. */
69TP::~TP() { init = false; }
70
71/** Get the ID of the underlying transport protocol. */
72protocol_t TP::get_underlying_protocol() const { return protocol; }
73
74/** Get the name of the underlying transport protocol. */
75string TP::get_underlying_protocol_name() const { return protoname; }
76
77/** Get the name of this TP implementation. */
78string TP::get_tp_name() const { return tp_name; }
79
80uint32 TP::get_max_payload() const { return max_payload; }
81
82/* @param msg NetMsg to send
83 * @param addr destination address
84 * @return true if args are OK.
85 */
86
87void TP::check_send_args(const NetMsg& msg, const address& addr)
88                const {
89  if (!init) {
90    Log(ERROR_LOG,LOG_NORMAL, "TP", "TP::check_send_args: " << tp_name << " not initialized");
91    throw TPErrorArgsNotInit();
92  } // end if not init
93 
94  if ((msg.get_size()==0) || (msg.get_size()>max_payload)) {
95    Log(ERROR_LOG,LOG_NORMAL, "TP", "TP::check_send_args: NetMsg empty or too big. Size: " << msg.get_size() << ", " << tp_name << ", max_payload " << max_payload);
96    throw TPErrorPayload();
97  } // end if too big
98
99} // end check_send_args
100
101
102//@}
103
104} // end namespace protlib
Note: See TracBrowser for help on using the repository browser.