00001 // GENERAL PUBLIC LICENSE AGREEMENT 00002 // 00003 // PLEASE READ THIS DOCUMENT CAREFULLY BEFORE UTILIZING THE PROGRAM 00004 // 00005 // BY UTILIZING THIS PROGRAM, YOU AGREE TO BECOME BOUND BY THE TERMS OF 00006 // THIS LICENSE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, DO 00007 // NOT USE THIS PROGRAM OR ANY PORTION THEREOF IN ANY FORM OR MANNER. 00008 // 00009 // This Program is licensed, not sold to you by GEORGIA TECH RESEARCH 00010 // CORPORATION ("GTRC"), owner of all code and accompanying documentation 00011 // (hereinafter "Program"), for use only under the terms of this License, 00012 // and GTRC reserves any rights not expressly granted to you. 00013 // 00014 // 1. This License allows you to: 00015 // 00016 // (a) make copies and distribute copies of the Program's source code 00017 // provide that any such copy clearly displays any and all appropriate 00018 // copyright notices and disclaimer of warranty as set forth in Article 5 00019 // and 6 of this License. All notices that refer to this License and to 00020 // the absence of any warranty must be kept intact at all times. A copy 00021 // of this License must accompany any and all copies of the Program 00022 // distributed to third parties. 00023 // 00024 // A fee may be charged to cover the cost associated with the physical 00025 // act of transferring a copy to a third party. At no time shall the 00026 // program be sold for commercial gain either alone or incorporated with 00027 // other program(s) without entering into a separate agreement with GTRC. 00028 // 00029 // 00030 // (b) modify the original copy or copies of the Program or any portion 00031 // thereof ("Modification(s)"). Modifications may be copied and 00032 // distributed under the terms and conditions as set forth above, 00033 // provided the following conditions are met: 00034 // 00035 // i) any and all modified files must be affixed with prominent 00036 // notices that you have changed the files and the date that the changes 00037 // occurred. 00038 // 00039 // ii) any work that you distribute, publish, or make available, that 00040 // in whole or in part contains portions of the Program or derivative 00041 // work thereof, must be licensed at no charge to all third parties under 00042 // the terms of this License. 00043 // 00044 // iii) if the modified program normally reads commands interactively 00045 // when run, you must cause it, when started running for such interactive 00046 // use in the most ordinary way, to display and/or print an announcement 00047 // with all appropriate copyright notices and disclaimer of warranty as 00048 // set forth in Article 5 and 6 of this License to be clearly displayed. 00049 // In addition, you must provide reasonable access to this License to the 00050 // user. 00051 // 00052 // Any portion of a Modification that can be reasonably considered 00053 // independent of the Program and separate work in and of itself is not 00054 // subject to the terms and conditions set forth in this License as long 00055 // as it is not distributed with the Program or any portion thereof. 00056 // 00057 // 00058 // 2. This License further allows you to copy and distribute the Program 00059 // or a work based on it, as set forth in Article 1 Section b in 00060 // object code or executable form under the terms of Article 1 above 00061 // provided that you also either: 00062 // 00063 // i) accompany it with complete corresponding machine-readable source 00064 // code, which must be distributed under the terms of Article 1, on a 00065 // medium customarily used for software interchange; or, 00066 // 00067 // ii) accompany it with a written offer, valid for no less than three 00068 // (3) years from the time of distribution, to give any third party, for 00069 // no consideration greater than the cost of physical transfer, a 00070 // complete machine-readable copy of the corresponding source code, to be 00071 // distributed under the terms of Article 1 on a medium customarily used 00072 // for software interchange; or, 00073 // 00074 // 00075 // 3. Export Law Assurance. 00076 // 00077 // You agree that the Software will not be shipped, transferred or 00078 // exported, directly into any country prohibited by the United States 00079 // Export Administration Act and the regulations thereunder nor will be 00080 // used for any purpose prohibited by the Act. 00081 // 00082 // 4. Termination. 00083 // 00084 // If at anytime you are unable to comply with any portion of this 00085 // License you must immediately cease use of the Program and all 00086 // distribution activities involving the Program or any portion thereof. 00087 // 00088 // 00089 // 5. Disclaimer of Warranties and Limitation on Liability. 00090 // 00091 // YOU ACCEPT THE PROGRAM ON AN "AS IS" BASIS. GTRC MAKES NO WARRANTY 00092 // THAT ALL ERRORS CAN BE OR HAVE BEEN ELIMINATED FROM PROGRAM. GTRC 00093 // SHALL NOT BE RESPONSIBLE FOR LOSSES OF ANY KIND RESULTING FROM THE USE 00094 // OF PROGRAM AND ITS ACCOMPANYING DOCUMENT(S), AND CAN IN NO WAY PROVIDE 00095 // COMPENSATION FOR ANY LOSSES SUSTAINED, INCLUDING BUT NOT LIMITED TO 00096 // ANY OBLIGATION, LIABILITY, RIGHT, CLAIM OR REMEDY FOR TORT, OR FOR ANY 00097 // ACTUAL OR ALLEGED INFRINGEMENT OF PATENTS, COPYRIGHTS, TRADE SECRETS, 00098 // OR SIMILAR RIGHTS OF THIRD PARTIES, NOR ANY BUSINESS EXPENSE, MACHINE 00099 // DOWNTIME OR DAMAGES CAUSED TO YOU BY ANY DEFICIENCY, DEFECT OR ERROR 00100 // IN PROGRAM OR MALFUNCTION THEREOF, NOR ANY INCIDENTAL OR CONSEQUENTIAL 00101 // DAMAGES, HOWEVER CAUSED. GTRC DISCLAIMS ALL WARRANTIES, BOTH EXPRESS 00102 // AND IMPLIED RESPECTING THE USE AND OPERATION OF PROGRAM AND ITS 00103 // ACCOMPANYING DOCUMENTATION, INCLUDING ALL IMPLIED WARRANTIES OF 00104 // MERCHANTABILITY AND FITNESS FOR PARTICULAR PURPOSE AND ANY IMPLIED 00105 // WARRANTY ARISING FROM COURSE OF PERFORMANCE, COURSE OF DEALING OR 00106 // USAGE OF TRADE. GTRC MAKES NO WARRANTY THAT PROGRAM IS ADEQUATELY OR 00107 // COMPLETELY DESCRIBED IN, OR BEHAVES IN ACCORDANCE WITH ANY 00108 // ACCOMPANYING DOCUMENTATION. THE USER OF PROGRAM IS EXPECTED TO MAKE 00109 // THE FINAL EVALUATION OF PROGRAM'S USEFULNESS IN USER'S OWN 00110 // ENVIRONMENT. 00111 // 00112 // GTRC represents that, to the best of its knowledge, the software 00113 // furnished hereunder does not infringe any copyright or patent. 00114 // 00115 // GTRC shall have no obligation for support or maintenance of Program. 00116 // 00117 // 6. Copyright Notice. 00118 // 00119 // THE SOFTWARE AND ACCOMPANYING DOCUMENTATION ARE COPYRIGHTED WITH ALL 00120 // RIGHTS RESERVED BY GTRC. UNDER UNITED STATES COPYRIGHT LAWS, THE 00121 // SOFTWARE AND ITS ACCOMPANYING DOCUMENTATION MAY NOT BE COPIED EXCEPT 00122 // AS GRANTED HEREIN. 00123 // 00124 // You acknowledge that GTRC is the sole owner of Program, including all 00125 // copyrights subsisting therein. Any and all copies or partial copies 00126 // of Program made by you shall bear the copyright notice set forth below 00127 // and affixed to the original version or such other notice as GTRC shall 00128 // designate. Such notice shall also be affixed to all improvements or 00129 // enhancements of Program made by you or portions thereof in such a 00130 // manner and location as to give reasonable notice of GTRC's copyright 00131 // as set forth in Article 1. 00132 // 00133 // Said copyright notice shall read as follows: 00134 // 00135 // Copyright 2004 00136 // Dr. George F. Riley 00137 // Georgia Tech Research Corporation 00138 // Atlanta, Georgia 30332-0415 00139 // All Rights Reserved 00140 // 00141 // $Id: l4protocol.h 475 2006-03-13 17:03:29Z sunithab $ 00142 00143 00144 00145 // Georgia Tech Network Simulator - Layer 4 Protocol base class 00146 // George F. Riley. Georgia Tech, Spring 2002 00147 00148 // Define the layer 4 protocol interface 00149 00150 #ifndef __l4protocol_h__ 00151 #define __l4protocol_h__ 00152 00153 #include "protocol.h" 00154 #include "l3protocol.h" 00155 #include "node.h" 00156 #include "ipv4.h" 00157 #include "datapdu.h" 00158 #include "event.h" 00159 #include "handler.h" 00160 00161 class Application; 00162 class Interface; 00163 class Notifier; 00164 class Interface; 00165 00166 class QColor; 00167 00168 //Doc:ClassXRef 00169 class L4PDU : public PDU { 00170 public: 00171 L4PDU() : PDU() { } 00172 virtual Layer_t Layer() { return 4; } 00173 }; 00174 00175 //Doc:ClassXRef 00176 class L4Protocol : public Protocol, public Handler { 00177 //Doc:Class Class {\tt L4Protocol} is a virtual base class defines 00178 //Doc:Class the interface 00179 //Doc:Class for all of the layer 4 protocols in \GTNS. 00180 00181 public: 00182 typedef enum { DELAYED_RX, DELAYED_TX } L4DelayEv_t; 00183 00184 public: 00185 //Doc:Method 00186 L4Protocol(); 00187 //Doc:Desc Default constructor, no arguments. 00188 00189 //Doc:Method 00190 L4Protocol(Node* n); 00191 //Doc:Desc Construct a layer 4 protocol and assign it to the specified 00192 //Doc:Desc node. 00193 //Doc:Arg1 Pointer to node to which to assign this protocol. 00194 00195 //Doc:Method 00196 L4Protocol(const L4Protocol&); // Copy constructor 00197 //Doc:Desc Copy constructor. 00198 //Doc:Arg1 L4Protocol object to copy. 00199 00200 virtual ~L4Protocol(); 00201 00202 //Doc:Method 00203 virtual void Handle(Event*, Time_t); 00204 //Doc:Desc The layer 4 protocol class is a subclass of {\tt Handler}, 00205 //Doc:Desc since it must handle events, specificaly 00206 //Doc:Desc the delayed transmit and receive events for processing 00207 //Doc:Desc "ExtraDelay". 00208 //Doc:Arg1 A pointer to the event being handled. 00209 //Doc:Arg2 The current simulation time. 00210 00211 00212 //Doc:Method 00213 virtual Layer_t Layer() { return 4;} // Protocol layer number 00214 //Doc:Desc All protocol objects in \GTNS\ must define the {\tt Layer} 00215 //Doc:Desc method, returning the protocol layer for this protocol. 00216 //Doc:Return Protocol layer number for this L4 protocol (always 4). 00217 00218 public: 00219 // Data indication From lower layer 00220 //Doc:Method 00221 virtual void DataIndication(Node*, Packet*, IPAddr_t, Interface*) = 0; 00222 //Doc:Desc Indicates that a packet has been received by the layer 3 00223 //Doc:Desc protocol addressed to this node, and the protocol number in 00224 //Doc:Desc the L3 header matches the registered protocol number for 00225 //Doc:Desc this protocol. 00226 //Doc:Arg1 Node pointer to associated node. 00227 //Doc:Arg2 Pointer to the received packet. The L3 PDU has been removed, 00228 //Doc:Arg3 so the L4 PDU is the top of the PDU stack. 00229 //Doc:Arg3 \IPA\ of destination, since nodes can have multiple \IPA{s}. 00230 //Doc:Arg4 Interface from which this packet was received. 00231 public: 00232 // Sending data 00233 //Doc:Method 00234 virtual NCount_t Send(Size_t) = 0; // Send empty data 00235 //Doc:Desc Send the specified amount of data. This version of {\tt Send} 00236 //Doc:Desc does not actually use data contents, just an indication 00237 //Doc:Desc of the amount of data. This is useful for applications 00238 //Doc:Desc where data contents is not needed for the simulation. 00239 //Doc:Arg1 Number of bytes to send. 00240 //Doc:Return Number of bytes actually sent. 00241 00242 //Doc:Method 00243 virtual NCount_t Send(char*, Size_t) = 0; // Send with data 00244 //Doc:Desc Send the specified data. This version uses both data size 00245 //Doc:Desc and data contents. 00246 //Doc:Arg1 Pointer to data to send. 00247 //Doc:Arg2 Number of bytes to send. 00248 //Doc:Return Number of bytes actually sent. 00249 00250 //Doc:Method 00251 virtual NCount_t Send(Data&) = 0; // Send with data 00252 //Doc:Desc Send the specified {\tt Data} PDU. 00253 //Doc:Arg1 Reference to the {\tt Data} PDU to send. {\tt Data} PDUs 00254 //Doc:Arg1 have size and an optional contents field. 00255 //Doc:Return Number of bytes actually sent. 00256 00257 //Doc:Method 00258 virtual NCount_t SendTo(Size_t, IPAddr_t, PortId_t) = 0; // Send to target 00259 //Doc:Desc Send the specifed number of bytes to the specified \IPA\ and 00260 //Doc:Desc port. Does not include data contents. 00261 //Doc:Arg1 Number of bytes to send. 00262 //Doc:Arg2 Destination \IPA. 00263 //Doc:Arg3 Destination port. 00264 //Doc:Return Number of bytes actually sent. 00265 00266 //Doc:Method 00267 virtual NCount_t SendTo(char*, Size_t, IPAddr_t, PortId_t) = 0;// Send w/data 00268 //Doc:Desc Send the specifed number of bytes with associated 00269 //Doc:Desc data contents to the specified \IPA\ and 00270 //Doc:Desc port. 00271 //Doc:Arg1 Number of bytes to send. 00272 //Doc:Arg2 Pointer to data to send. 00273 //Doc:Arg3 Destination \IPA. 00274 //Doc:Arg4 Destination port. 00275 //Doc:Return Number of bytes actually sent. 00276 00277 //Doc:Method 00278 virtual NCount_t SendTo(Data&, IPAddr_t, PortId_t) = 0; // Send w/data 00279 //Doc:Desc Send a {\tt Data} PDU to the specified destination. 00280 //Doc:Arg1 Reference to the {\tt Data} PDU to send. {\tt Data} PDUs 00281 //Doc:Arg1 have size and an optional contents field. 00282 //Doc:Arg2 Destination \IPA. 00283 //Doc:Arg3 Destination port. 00284 //Doc:Return Number of bytes actually sent. 00285 00286 // Binding 00287 //Doc:Method 00288 virtual bool Bind(PortId_t); // Bind to specific port 00289 //Doc:Desc Bind this L4 protocol to the specifed port on the the attached 00290 //Doc:Desc node. 00291 //Doc:Arg1 Port number to bind. 00292 //Doc:Return True if successful. 00293 00294 //Doc:Method 00295 virtual bool Bind(); // Bind to available port 00296 //Doc:Desc Bind this L4 protocol to any available port on the 00297 //Doc:Desc attached node. 00298 //Doc:Return True if successful. 00299 00300 //Doc:Method 00301 virtual bool Unbind(Proto_t proto, PortId_t port); // Remove port binding 00302 //Doc:Desc Remove a port binding. 00303 //Doc:Arg1 Protocol number for this L4 object. 00304 //Doc:Arg2 Port number to remove binding for. 00305 //Doc:Return True if successful. 00306 00307 // Connection management 00308 //Doc:Method 00309 void Attach(Node* n) { localNode = n;} 00310 //Doc:Desc Attach this L4 object to the specified node. 00311 //Doc:Arg1 Pointer to node to attach. 00312 00313 //Doc:Method 00314 PortId_t Port() { return localPort;} 00315 //Doc:Desc Return the currently bound port number. 00316 //Doc:Return Currently bound port, or PORT_NONE if not bound. 00317 00318 //Doc:Method 00319 virtual Proto_t Proto() const = 0; 00320 //Doc:Desc Return the protocol number for this layer 4 protocol 00321 //Doc:Return Protocol number 00322 00323 //Doc:Method 00324 virtual bool Connect(IPAddr_t, PortId_t) = 0; // Connect to remote host 00325 //Doc:Desc Initiate a connection to a remote host. 00326 //Doc:Arg1 \IPA\ of remote host. 00327 //Doc:Arg2 Port number of remote L4 protocol. 00328 //Doc:Return True if connection initiated ok. This does not mean 00329 //Doc:Return the connection was successful if a {\tt TCP} L4 object. 00330 00331 //Doc:Method 00332 virtual bool Close() = 0; // Close connection to remote 00333 //Doc:Desc Close an open connection. 00334 //Doc:Return True if close is successful. This does not mean that a 00335 //Doc:Return {\tt TCP} connection has completely closed, since the 00336 //Doc:Return return is immediate. {\tt TCP} will timeout and retry 00337 //Doc:Return the close action if the {\tt FIN} packet is lost. 00338 00339 // Miscellaneous 00340 //Doc:Method 00341 void TTL(Count_t t) { ttl = t;} // Set TTL 00342 //Doc:Desc Set the time--to--live value to set in all packet created 00343 //Doc:Desc by this protocol endpoing. 00344 //Doc:Arg1 {\tt TTL} value to set. 00345 00346 //Doc:Method 00347 Count_t TTl() { return ttl;} // Get TTL 00348 //Doc:Desc Return the current {\tt TTL} value for this connection. 00349 //Doc:Return Current {\tt TTL} value for this connection. 00350 00351 //Doc:Method 00352 void TOS(Byte_t t) { tos = t;} 00353 //Doc:Desc Set the "Type of Service" required for all packets created 00354 //Doc:Desc by this protocol. It will be passed to the L3 processor 00355 //Doc:Desc which will set the appropriate field in the L3 header. 00356 //Doc:Arg1 TOS desired. 00357 00358 //Doc:Method 00359 Byte_t TOS() { return tos;} 00360 //Doc:Desc Return the current {\tt Tos} value for this protocol. 00361 //Doc:Return TOS Value. 00362 00363 //Doc:Method 00364 void FlowId(FId_t f){ fid = f;} // Set flow id 00365 //Doc:Desc Assign a {\em Flow Identifier} for this connection. 00366 //Doc:Desc The flow id is a simulation artifact with no basis in 00367 //Doc:Desc real networks, but is useful for simulations to keep 00368 //Doc:Desc track of all packets associated with a given flow. 00369 //Doc:Desc The flow identifer is logged in the trace file for 00370 //Doc:Desc each packet. 00371 //Doc:Arg1 Flow identifier to assign. 00372 00373 //Doc:Method 00374 FId_t FlowId() { return fid;} // Get flow id 00375 //Doc:Desc Return the current flow identifier for this connection. 00376 //Doc:Return Flow identifier for this connection. 00377 00378 //Doc:Method 00379 virtual L4Protocol* Copy() const = 0; // Create a copy of this protocol 00380 //Doc:Desc Make a copy of this protocol endpoint. 00381 //Doc:Return Pointer to copy of this protocol. 00382 00383 //Doc:Method 00384 virtual Proto_t ProtocolNumber() = 0; // Return the l4 protocol number 00385 //Doc:Desc Return the protocol number registered for this layer 4 protocol. 00386 //Doc:Return Protocol number. 00387 00388 //Doc:Method 00389 virtual bool IsTCP() = 0; // True if TCP 00390 //Doc:Desc Determine if this endpoint is {\tt TCP}. 00391 //Doc:Return True if {\tt TCP} 00392 00393 //Doc:Method 00394 void AttachApplication(Application* a) { localApplication = a;} 00395 //Doc:Desc Attach an application to this L4 protocol. 00396 //Doc:Arg1 Pointer to application to attach. 00397 00398 //Doc:Method 00399 Application* GetApplication() { return localApplication;} 00400 //Doc:Desc Get the currently attached application. 00401 //Doc:Return Pointer to the currently attached application, or {\tt nil} 00402 //Doc:Return if none. 00403 00404 //Doc:Method 00405 void AddNotification(NotifyHandler* n); 00406 //Doc:Desc Adds a "Packet Transmission" notification for all packets 00407 //Doc:Desc sent by this protocol. 00408 //Doc:Arg1 Notifier object to receive the notification. 00409 00410 #ifdef HAVE_QT 00411 //Doc:Method 00412 bool IsColored() {return (color!=nil);} 00413 //Doc:Desc Determine if this application has a color assigned for 00414 //Doc:Desc created packets 00415 //Doc:Return True if a color assigned. 00416 00417 //Doc:Method 00418 void SetColor(const QColor&); 00419 //Doc:Desc Specifiy a color for all packets generated by this protocol. 00420 //Doc:Arg1 Desired color (see qcolor.h in qt). 00421 #endif 00422 00423 //Doc:Method 00424 Packet* NewPacket(); 00425 //Doc:Desc Allocate a new packet. 00426 //Doc:Desc Uses either a normal "uncolored" packet or 00427 //Doc:Desc a colored packet, depending on whether the protocol is colored 00428 //Doc:Desc or not. 00429 00430 //Doc:Method 00431 void AddExtraRxDelay(Time_t); 00432 //Doc:Desc The "Extra Delay" mechanism allows the simulator to 00433 //Doc:Desc vary the round--trip time on a protocol by protocol basis, 00434 //Doc:Desc rather than using link delays. 00435 //Doc:Desc The Rx delay is extra delay added to received packets. 00436 //Doc:Arg1 Extra propagation delay on the last--hop link. 00437 00438 //Doc:Method 00439 void AddExtraTxDelay(Time_t); 00440 //Doc:Desc The "Extra Delay" mechanism allows the simulator to 00441 //Doc:Desc vary the round--trip time on a protocol by protocol basis, 00442 //Doc:Desc rather than using link delays. 00443 //Doc:Desc The Rx delay is extra delay added to received packets. 00444 //Doc:Arg1 Extra propagation delay on the last--hop link. 00445 00446 00447 protected: 00448 void RequestNotification(NotifyHandler*, void*); // Request notification 00449 void CancelNotification(NotifyHandler*); // Cancel pending notif. 00450 bool BufferAvailable(Size_t,Packet* = nil); // True if output buff avail. 00451 private: 00452 void SetInterface(); // Set the interface for tx packets 00453 public: 00454 Node* localNode; // Local node 00455 IPAddr_t peerIP; // Remote peer IP Address 00456 PortId_t localPort; // Local port number 00457 PortId_t peerPort; // Remote peer port 00458 Application* localApplication; // Local application object 00459 NotifyHandler* notification; // Object to notify on packet tx 00460 L3Protocol* l3Proto; // Layer 3 protocol to use 00461 Count_t ttl; // Layer 3 ttl 00462 FId_t fid; // Flow id 00463 Byte_t tos; // Layer 3 "type of service" 00464 Interface* iFace; // Interface used for this flow 00465 Time_t extraRxDelay; // Extra Rx Delay info (if any) 00466 Time_t extraTxDelay; // Extra Tx Delay info (if any) 00467 bool deleteAppOnComplete; 00468 #ifdef HAVE_QT 00469 QColor* color; // Color for all packets (if non-nil) 00470 #endif 00471 }; 00472 00473 // Define the event for a delayed receive. This allows for variable 00474 // round trip times for flows. 00475 //Doc:ClassXRef 00476 class L4DelayedRxEvent : public Event { 00477 public: 00478 L4DelayedRxEvent() 00479 : Event(L4Protocol::DELAYED_RX), l4Proto(nil), node(nil), packet(nil), 00480 ipAddr(IPADDR_NONE), fromIF(nil) {} 00481 L4DelayedRxEvent(L4Protocol* l4,Node* n,Packet* p,IPAddr_t ip,Interface* i) 00482 : Event(L4Protocol::DELAYED_RX), l4Proto(l4), node(n), packet(p), 00483 ipAddr(ip), fromIF(i) {} 00484 public: 00485 L4Protocol* l4Proto; 00486 Node* node; 00487 Packet* packet; 00488 IPAddr_t ipAddr; 00489 Interface* fromIF; 00490 }; 00491 00492 00493 // Define the event for a delayed transmit. This allows for variable 00494 // round trip times for flows. 00495 //Doc:ClassXRef 00496 class L4DelayedTxEvent : public Event { 00497 public: 00498 L4DelayedTxEvent() 00499 : Event(L4Protocol::DELAYED_TX), l3Proto(nil), node(nil), packet(nil), 00500 msgLength(0), notifySent(false) {} 00501 L4DelayedTxEvent(L3Protocol* l3, Node* n, Packet* p, const IPV4ReqInfo& v4, 00502 Count_t m, bool notif) 00503 : Event(L4Protocol::DELAYED_TX), l3Proto(l3), node(n), packet(p), 00504 reqInfo(v4), msgLength(m), notifySent(notif) {} 00505 public: 00506 L3Protocol* l3Proto; 00507 Node* node; 00508 Packet* packet; 00509 IPV4ReqInfo reqInfo; 00510 Count_t msgLength; 00511 bool notifySent; 00512 }; 00513 00514 00515 #endif
1.3.9.1