source: source/ariba/communication/modules/transport/protlib/messages.cpp@ 5638

Last change on this file since 5638 was 5638, checked in by Christoph Mayer, 15 years ago

adress detection aufgeräumt, network info für bleutooth, data stream (hopeful crash fix), logging auf maemo nur warn, ...

File size: 5.6 KB
Line 
1/// ----------------------------------------*- mode: C++; -*--
2/// @file messages.cpp
3/// These messages are sent internally between threads (modules)
4/// ----------------------------------------------------------
5/// $Id: messages.cpp 3013 2008-05-15 16:12:27Z roehricht $
6/// $HeadURL: https://svn.ipv6.tm.uka.de/nsis/protlib/trunk/src/messages.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/** @ingroup messages
30 * These messages are sent internally between threads (modules).
31 */
32
33#include "messages.h"
34//#include "context.h"
35#include "queuemanager.h"
36#include "cleanuphandler.h"
37#include "threadsafe_db.h"
38
39namespace protlib {
40
41/** @addtogroup messages Internal Messages
42 * @{
43 */
44
45/***** class message *****/
46
47/** This array contains printable names of messages sources. */
48const char* const message::qaddr_string[] = {
49 "UNKNOWN",
50 "TransportProtocol",
51 "TimerModule",
52 "Coordination (ext)", // external
53 "Coordination (int)", // internal
54 "Signaling",
55 "Policy",
56 "ResourceModule",
57 "Routing",
58 "Accounting",
59 "RouterConfiguration",
60 "TPoverSCTP",
61 "TPoverTCP",
62 "TPoverTLS_TCP",
63 "TPoverUDP",
64 "TPoverQueryEncapsulation",
65 "QNSLP-TimerProc",
66 "QNSLP-Coordinator",
67 "QNSLP-Signaling",
68 "APPL-QNSLP-Signaling",
69 "QNSLP-APPL-Signaling",
70 "GUI",
71 "API-0",
72 "API-1",
73 "API-2",
74 "API-3",
75 "API-4",
76 "API-5",
77 "API-6",
78 "API-7",
79 "API Wrapper Input (from TP)",
80 "TPoverUDS",
81 "QoS NSLP Client API over UDS",
82 "(INVALID)"
83}; // end qaddr_string
84
85/** This array contains printable names of message types. */
86const char* const message::type_string[] = {
87 "TPMsg",
88 "TimerMsg",
89 "SignalingMsg",
90 "ContextMsg",
91 "InfoMsg",
92 "RoutingMsg",
93 "APIMsg"
94}; // end type_string
95
96/** Set message type, source ID and source queue.
97 * Set message ID to id if possible, otherwise generate a new ID.
98 */
99message::message(type_t t, qaddr_t s, id_t id)
100: type(t), source(s) {
101 if ((!id) || (!set_id(id))) new_id();
102} // end constructor
103
104/** Destructor does nothing for this class. */
105message::~message() {}
106
107message::id_t message::get_id() const { return msg_id; }
108
109message::id_t message::set_id(id_t id) {
110 if (!id) {
111 new_id();
112 return 0;
113 } else {
114 msg_id = id;
115 return id;
116 } // end if id
117} // end set_id
118
119/** Generate an unused ID. */
120message::id_t message::new_id() {
121 msg_id = 0;
122 while (!msg_id) msg_id = tsdb::get_new_id64();;
123 return msg_id;
124} // end new_id
125
126/** Get the message type. */
127message::type_t message::get_type() const { return type; }
128
129FastQueue* message::get_source_queue() const {
130 return QueueManager::instance()->get_queue(source);
131} // end get_source_queue
132
133message::qaddr_t message::get_source() const {
134 return source;
135} // end get_source
136
137/** Set source ID and return old value. */
138message::qaddr_t message::set_source(qaddr_t s) {
139 register qaddr_t os = source;
140 source = s;
141 return os;
142} // end set_source
143
144/** Returns a pointer to a string containing a printable name of the message
145 * source.
146 */
147const char* message::get_qaddr_name() const {
148 return qaddr_string[source];
149} // end get_source_name
150
151/** Get the name of the given source. */
152const char* message::get_qaddr_name(qaddr_t s) {
153 return qaddr_string[s];
154} // end get_source_name
155
156/** Send this message to destqueue.
157 * @returns false if destqueue is NULL or queue does not accept the message.
158 */
159bool message::send(qaddr_t src, FastQueue* destqueue, bool exp) {
160 if (!destqueue) return false;
161 source = src;
162 return destqueue->enqueue(this,exp);
163} // end send
164
165/** Send this message.
166 * @returns false if destination queue cannot be found or queue does not accept the message.
167 */
168bool message::send(qaddr_t src, qaddr_t dest, bool exp) {
169 FastQueue* destqueue = QueueManager::instance()->get_queue(dest);
170 if (!destqueue) return false;
171 source = src;
172 return destqueue->enqueue(this,exp);
173} // end send
174
175/** Send this message.
176 * @returns false if destination queue cannot be found or queue does not accept the message.
177 */
178bool message::send_to(qaddr_t dest, bool exp) {
179 FastQueue* destqueue = QueueManager::instance()->get_queue(dest);
180 if (destqueue) return destqueue->enqueue(this,exp);
181 else return false;
182} // end send_to
183
184bool message::send_to(FastQueue* destqueue, bool exp) {
185 if (destqueue) return destqueue->enqueue(this,exp);
186 else return false;
187} // end send_to
188
189/** Send back this message.
190 * @returns false if destination queue cannot be found or queue does not accept the message.
191 */
192bool message::send_back(qaddr_t from, bool exp) {
193 FastQueue* destqueue = QueueManager::instance()->get_queue(source);
194 if (!destqueue) return false;
195 source = from;
196 return destqueue->enqueue(this,exp);
197} // end send_back
198
199/** Set all pointer fields to NULL. */
200void message::clear_pointers() {}
201
202
203//@}
204
205} // end namespace protlib
Note: See TracBrowser for help on using the repository browser.