00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00033 #include "messages.h"
00034
00035 #include "queuemanager.h"
00036 #include "cleanuphandler.h"
00037 #include "threadsafe_db.h"
00038
00039 namespace protlib {
00040
00045
00046
00048 const char* const message::qaddr_string[] = {
00049 "UNKNOWN",
00050 "TransportProtocol",
00051 "TimerModule",
00052 "Coordination (ext)",
00053 "Coordination (int)",
00054 "Signaling",
00055 "Policy",
00056 "ResourceModule",
00057 "Routing",
00058 "Accounting",
00059 "RouterConfiguration",
00060 "TPoverSCTP",
00061 "TPoverTCP",
00062 "TPoverTLS_TCP",
00063 "TPoverUDP",
00064 "TPoverQueryEncapsulation",
00065 "QNSLP-TimerProc",
00066 "QNSLP-Coordinator",
00067 "QNSLP-Signaling",
00068 "APPL-QNSLP-Signaling",
00069 "QNSLP-APPL-Signaling",
00070 "GUI",
00071 "API-0",
00072 "API-1",
00073 "API-2",
00074 "API-3",
00075 "API-4",
00076 "API-5",
00077 "API-6",
00078 "API-7",
00079 "API Wrapper Input (from TP)",
00080 "TPoverUDS",
00081 "QoS NSLP Client API over UDS",
00082 "(INVALID)"
00083 };
00084
00086 const char* const message::type_string[] = {
00087 "TPMsg",
00088 "TimerMsg",
00089 "SignalingMsg",
00090 "ContextMsg",
00091 "InfoMsg",
00092 "RoutingMsg",
00093 "APIMsg"
00094 };
00095
00099 message::message(type_t t, qaddr_t s, id_t id)
00100 : type(t), source(s) {
00101 if ((!id) || (!set_id(id))) new_id();
00102 }
00103
00105 message::~message() {}
00106
00107 message::id_t message::get_id() const { return msg_id; }
00108
00109 message::id_t message::set_id(id_t id) {
00110 if (!id) {
00111 new_id();
00112 return 0;
00113 } else {
00114 msg_id = id;
00115 return id;
00116 }
00117 }
00118
00120 message::id_t message::new_id() {
00121 msg_id = 0;
00122 while (!msg_id) msg_id = tsdb::get_new_id64();;
00123 return msg_id;
00124 }
00125
00127 message::type_t message::get_type() const { return type; }
00128
00129 FastQueue* message::get_source_queue() const {
00130 return QueueManager::instance()->get_queue(source);
00131 }
00132
00133 message::qaddr_t message::get_source() const {
00134 return source;
00135 }
00136
00138 message::qaddr_t message::set_source(qaddr_t s) {
00139 register qaddr_t os = source;
00140 source = s;
00141 return os;
00142 }
00143
00147 const char* message::get_qaddr_name() const {
00148 return qaddr_string[source];
00149 }
00150
00152 const char* message::get_qaddr_name(qaddr_t s) {
00153 return qaddr_string[s];
00154 }
00155
00159 bool message::send(qaddr_t src, FastQueue* destqueue, bool exp) {
00160 if (!destqueue) return false;
00161 source = src;
00162 return destqueue->enqueue(this,exp);
00163 }
00164
00168 bool message::send(qaddr_t src, qaddr_t dest, bool exp) {
00169 FastQueue* destqueue = QueueManager::instance()->get_queue(dest);
00170 if (!destqueue) return false;
00171 source = src;
00172 return destqueue->enqueue(this,exp);
00173 }
00174
00178 bool message::send_to(qaddr_t dest, bool exp) {
00179 FastQueue* destqueue = QueueManager::instance()->get_queue(dest);
00180 if (destqueue) return destqueue->enqueue(this,exp);
00181 else return false;
00182 }
00183
00184 bool message::send_to(FastQueue* destqueue, bool exp) {
00185 if (destqueue) return destqueue->enqueue(this,exp);
00186 else return false;
00187 }
00188
00192 bool message::send_back(qaddr_t from, bool exp) {
00193 FastQueue* destqueue = QueueManager::instance()->get_queue(source);
00194 if (!destqueue) return false;
00195 source = from;
00196 return destqueue->enqueue(this,exp);
00197 }
00198
00200 void message::clear_pointers() {}
00201
00202
00204
00205 }