source: trash/old-modules/transport/protlib/tp.cpp@ 10640

Last change on this file since 10640 was 5641, checked in by Christoph Mayer, 15 years ago
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.