net/packets.h

00001 
00002 /* Copyright (c) 2005-2009, Stefan Eilemann <eile@equalizergraphics.com> 
00003  *
00004  * This library is free software; you can redistribute it and/or modify it under
00005  * the terms of the GNU Lesser General Public License version 2.1 as published
00006  * by the Free Software Foundation.
00007  *  
00008  * This library is distributed in the hope that it will be useful, but WITHOUT
00009  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00010  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00011  * details.
00012  * 
00013  * You should have received a copy of the GNU Lesser General Public License
00014  * along with this library; if not, write to the Free Software Foundation, Inc.,
00015  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00016  */
00017 
00018 #ifndef EQNET_PACKETS_H
00019 #define EQNET_PACKETS_H
00020 
00021 #include <eq/net/commands.h> // used for CMD_ enums
00022 #include <eq/net/types.h>
00023 
00024 #include <eq/base/idPool.h> // for EQ_ID_*
00025 
00026 namespace eq
00027 {
00028 namespace net
00029 {
00030     enum
00031     {
00032         DATATYPE_EQNET_NODE,
00033         DATATYPE_EQNET_SESSION,
00034         DATATYPE_EQNET_OBJECT,
00035         DATATYPE_EQNET_CUSTOM = 1<<7
00036     };
00037 
00041     struct Packet
00042     {
00043         Packet(){}
00044         uint64_t size;
00045         uint32_t datatype;
00046         uint32_t command;
00047         
00048 #if 0
00049         union
00050         {
00051             Foo foo;
00052             uint64_t paddingPacket; // pad to multiple-of-8
00053         };
00054 #endif
00055 
00056         static size_t minSize;
00057         bool exceedsMinSize() const { return (size > minSize); }
00058     };
00059 
00060     // String transmission: the packets define a 8-char string at the end of the
00061     // packet. When the packet is sent using Node::send( Packet&, string& ), the
00062     // whole string is appended to the packet, so that the receiver has to do
00063     // nothing special to receive and use the full packet.
00064 
00065     //------------------------------------------------------------
00066     // Node
00067     //------------------------------------------------------------
00068     struct NodePacket: public Packet
00069     {
00070         NodePacket(){ datatype = DATATYPE_EQNET_NODE; }
00071     };
00072 
00074     struct NodeStopPacket : public NodePacket
00075     {
00076         NodeStopPacket()
00077             {
00078                 command = CMD_NODE_STOP;
00079                 size    = sizeof( NodeStopPacket );
00080             }
00081     };
00082 
00083     struct NodeRegisterSessionPacket : public NodePacket
00084     {
00085         NodeRegisterSessionPacket()
00086             {
00087                 command   = CMD_NODE_REGISTER_SESSION;
00088                 size      = sizeof(NodeRegisterSessionPacket);
00089             }
00090 
00091         uint32_t requestID;
00092     };
00093 
00094     struct NodeRegisterSessionReplyPacket : public NodePacket
00095     {
00096         NodeRegisterSessionReplyPacket(const NodeRegisterSessionPacket* request)
00097             {
00098                 command   = CMD_NODE_REGISTER_SESSION_REPLY;
00099                 size      = sizeof( NodeRegisterSessionReplyPacket );
00100                 requestID = request->requestID;
00101             }
00102             
00103         uint32_t requestID;
00104         uint32_t sessionID;
00105     };
00106 
00107     struct NodeMapSessionPacket : public NodePacket
00108     {
00109         NodeMapSessionPacket()
00110             {
00111                 command   = CMD_NODE_MAP_SESSION;
00112                 size      = sizeof(NodeMapSessionPacket);
00113             }
00114 
00115         uint32_t requestID;
00116         uint32_t sessionID;
00117     };
00118 
00119     struct NodeMapSessionReplyPacket : public NodePacket
00120     {
00121         NodeMapSessionReplyPacket( const NodeMapSessionPacket* requestPacket ) 
00122             {
00123                 command   = CMD_NODE_MAP_SESSION_REPLY;
00124                 size      = sizeof( NodeMapSessionReplyPacket );
00125                 requestID = requestPacket->requestID;
00126                 sessionID = requestPacket->sessionID;
00127             }
00128             
00129         uint32_t requestID;
00130         uint32_t sessionID;
00131     };
00132 
00133     struct NodeUnmapSessionPacket : public NodePacket
00134     {
00135         NodeUnmapSessionPacket()
00136             {
00137                 command   = CMD_NODE_UNMAP_SESSION;
00138                 size      = sizeof(NodeUnmapSessionPacket);
00139                 sessionID = EQ_ID_INVALID;
00140             }
00141 
00142         uint32_t requestID;
00143         uint32_t sessionID;
00144     };
00145 
00146     struct NodeUnmapSessionReplyPacket : public NodePacket
00147     {
00148         NodeUnmapSessionReplyPacket( const NodeUnmapSessionPacket* request )
00149             {
00150                 command   = CMD_NODE_UNMAP_SESSION_REPLY;
00151                 size      = sizeof( NodeUnmapSessionReplyPacket );
00152                 requestID = request->requestID;
00153             }
00154             
00155         uint32_t requestID;
00156         bool     result;
00157     };
00158 
00159     struct NodeConnectPacket : public NodePacket
00160     {
00161         NodeConnectPacket() 
00162             {
00163                 command     = CMD_NODE_CONNECT;
00164                 size        = sizeof( NodeConnectPacket ); 
00165                 requestID   = EQ_ID_INVALID;
00166                 launchID    = EQ_ID_INVALID;
00167                 nodeData[0] = '\0';
00168             }
00169 
00170         NodeID   nodeID;
00171         uint32_t requestID;
00172         uint32_t type;
00173         uint32_t launchID;
00174         EQ_ALIGN8( char nodeData[8] );
00175     };
00176 
00177     struct NodeConnectReplyPacket : public NodePacket
00178     {
00179         NodeConnectReplyPacket( const NodeConnectPacket* request ) 
00180             {
00181                 command     = CMD_NODE_CONNECT_REPLY;
00182                 size        = sizeof( NodeConnectReplyPacket ); 
00183                 requestID   = request->requestID;
00184                 nodeData[0] = '\0';
00185             }
00186 
00187         NodeID   nodeID;
00188         uint32_t requestID;
00189         uint32_t type;
00190         EQ_ALIGN8( char nodeData[8] );
00191     };
00192 
00193     struct NodeDisconnectPacket : public NodePacket
00194     {
00195         NodeDisconnectPacket() 
00196             {
00197                 command                  = CMD_NODE_DISCONNECT;
00198                 size                     = sizeof( NodeDisconnectPacket ); 
00199             }
00200 
00201         uint32_t requestID;
00202     };
00203 
00204     struct NodeGetNodeDataPacket : public NodePacket
00205     {
00206         NodeGetNodeDataPacket()
00207             {
00208                 command = CMD_NODE_GET_NODE_DATA;
00209                 size    = sizeof( NodeGetNodeDataPacket );
00210             }
00211 
00212         NodeID   nodeID;
00213         uint32_t requestID;
00214     };
00215 
00216     struct NodeGetNodeDataReplyPacket : public NodePacket
00217     {
00218         NodeGetNodeDataReplyPacket(
00219             const NodeGetNodeDataPacket* request )
00220             {
00221                 command     = CMD_NODE_GET_NODE_DATA_REPLY;
00222                 size        = sizeof( NodeGetNodeDataReplyPacket );
00223                 nodeID      = request->nodeID;
00224                 requestID   = request->requestID;
00225                 nodeData[0] = '\0';
00226             } 
00227 
00228         NodeID   nodeID;
00229         uint32_t requestID;
00230         uint32_t type;        
00231         EQ_ALIGN8( char nodeData[8] );
00232     };
00233 
00234     struct NodeAcquireSendTokenPacket : public NodePacket
00235     {
00236         NodeAcquireSendTokenPacket()
00237             {
00238                 command = CMD_NODE_ACQUIRE_SEND_TOKEN;
00239                 size    = sizeof( NodeAcquireSendTokenPacket );
00240             }
00241 
00242         uint32_t requestID;
00243     };
00244 
00245     struct NodeAcquireSendTokenReplyPacket : public NodePacket
00246     {
00247         NodeAcquireSendTokenReplyPacket(
00248             const NodeAcquireSendTokenPacket* request )
00249 
00250             {
00251                 command = CMD_NODE_ACQUIRE_SEND_TOKEN_REPLY;
00252                 size    = sizeof( NodeAcquireSendTokenReplyPacket );
00253                 requestID = request->requestID;
00254             }
00255 
00256         uint32_t requestID;
00257     };
00258 
00259     struct NodeReleaseSendTokenPacket : public NodePacket
00260     {
00261         NodeReleaseSendTokenPacket()
00262             {
00263                 command = CMD_NODE_RELEASE_SEND_TOKEN;
00264                 size    = sizeof( NodeReleaseSendTokenPacket );
00265             }
00266     };
00269     //------------------------------------------------------------
00270     // Session
00271     //------------------------------------------------------------
00272     struct SessionPacket : public NodePacket
00273     {
00274         SessionPacket() { datatype = DATATYPE_EQNET_SESSION; }
00275         uint32_t sessionID;
00276         uint32_t paddingSessionPacket; // pad to multiple-of-8
00277     };
00278 
00280     struct SessionAckRequestPacket : public SessionPacket
00281     {
00282         SessionAckRequestPacket( const uint32_t requestID_ )
00283             {
00284                 command   = CMD_SESSION_ACK_REQUEST;
00285                 size      = sizeof( SessionAckRequestPacket ); 
00286                 requestID = requestID_;
00287             }
00288         
00289         uint32_t requestID;
00290     };
00291 
00292     struct SessionGenIDsPacket : public SessionPacket
00293     {
00294         SessionGenIDsPacket() 
00295             {
00296                 command = CMD_SESSION_GEN_IDS;
00297                 size    = sizeof( SessionGenIDsPacket ); 
00298             }
00299 
00300         uint32_t requestID;
00301         uint32_t range;
00302     };
00303 
00304     struct SessionGenIDsReplyPacket : public SessionPacket
00305     {
00306         SessionGenIDsReplyPacket( const SessionGenIDsPacket* request )
00307             {
00308                 command   = CMD_SESSION_GEN_IDS_REPLY;
00309                 size      = sizeof( SessionGenIDsReplyPacket ); 
00310                 requestID = request->requestID;
00311                 requested = request->range;
00312             }
00313 
00314         uint32_t requestID;
00315         uint32_t id;
00316         uint32_t requested;
00317         uint32_t allocated;
00318     };
00319 
00320     struct SessionSetIDMasterPacket : public SessionPacket
00321     {
00322         SessionSetIDMasterPacket()
00323             {
00324                 command   = CMD_SESSION_SET_ID_MASTER;
00325                 size      = sizeof( SessionSetIDMasterPacket ); 
00326                 requestID = EQ_ID_INVALID;
00327             }
00328 
00329         NodeID   masterID;
00330         uint32_t id;
00331         uint32_t requestID;
00332     };
00333 
00334     struct SessionGetIDMasterPacket : public SessionPacket
00335     {
00336         SessionGetIDMasterPacket()
00337             {
00338                 command = CMD_SESSION_GET_ID_MASTER;
00339                 size    = sizeof( SessionGetIDMasterPacket ); 
00340             }
00341 
00342         uint32_t requestID;
00343         uint32_t id;
00344     };
00345 
00346     struct SessionGetIDMasterReplyPacket : public SessionPacket
00347     {
00348         SessionGetIDMasterReplyPacket( const SessionGetIDMasterPacket* request )
00349             {
00350                 command   = CMD_SESSION_GET_ID_MASTER_REPLY;
00351                 size      = sizeof( SessionGetIDMasterReplyPacket );
00352                 requestID = request->requestID;
00353                 id        = request->id;
00354             }
00355 
00356         NodeID   masterID;
00357         uint32_t requestID;
00358         uint32_t id;
00359     };
00360 
00361     struct SessionGetObjectPacket : public SessionPacket
00362     {
00363         SessionGetObjectPacket()
00364             {
00365                 command = CMD_SESSION_GET_OBJECT;
00366                 size    = sizeof( SessionGetObjectPacket ); 
00367             }
00368         
00369         uint32_t requestID;
00370     };
00371 
00372     struct SessionAttachObjectPacket : public SessionPacket
00373     {
00374         SessionAttachObjectPacket()
00375             {
00376                 command = CMD_SESSION_ATTACH_OBJECT;
00377                 size    = sizeof( SessionAttachObjectPacket ); 
00378             }
00379         
00380         uint32_t            requestID;
00381         uint32_t            objectID;
00382         uint32_t            objectInstanceID;
00383     };
00384 
00385     struct SessionMapObjectPacket : public SessionPacket
00386     {
00387         SessionMapObjectPacket()
00388             {
00389                 command = CMD_SESSION_MAP_OBJECT;
00390                 size    = sizeof( SessionMapObjectPacket ); 
00391             }
00392         
00393         NodeID   masterNodeID;
00394         uint32_t requestID;
00395         uint32_t objectID;
00396         uint32_t version;
00397     };
00398 
00399     struct SessionSubscribeObjectPacket : public SessionPacket
00400     {
00401         SessionSubscribeObjectPacket( const SessionMapObjectPacket* mapPacket )
00402             {
00403                 command = CMD_SESSION_SUBSCRIBE_OBJECT;
00404                 size    = sizeof( SessionSubscribeObjectPacket );
00405                 requestID  = mapPacket->requestID;
00406                 version    = mapPacket->version;
00407                 objectID   = mapPacket->objectID;
00408             }
00409         
00410         uint32_t requestID;
00411         uint32_t objectID;
00412         uint32_t version;
00413         uint32_t instanceID;
00414     };
00415 
00416     struct SessionSubscribeObjectSuccessPacket : public SessionPacket
00417     {
00418         SessionSubscribeObjectSuccessPacket( 
00419             const SessionSubscribeObjectPacket* request )
00420             {
00421                 command    = CMD_SESSION_SUBSCRIBE_OBJECT_SUCCESS;
00422                 size       = sizeof( SessionSubscribeObjectSuccessPacket ); 
00423                 requestID  = request->requestID;
00424                 objectID   = request->objectID;
00425                 instanceID = request->instanceID;
00426             }
00427         
00428         uint32_t requestID;
00429         uint32_t objectID;
00430         uint32_t instanceID;
00431         uint32_t changeType;
00432         uint32_t masterInstanceID;
00433     };
00434 
00435     struct SessionSubscribeObjectReplyPacket : public SessionPacket
00436     {
00437         SessionSubscribeObjectReplyPacket( 
00438             const SessionSubscribeObjectPacket* request )
00439             {
00440                 command   = CMD_SESSION_SUBSCRIBE_OBJECT_REPLY;
00441                 size      = sizeof( SessionSubscribeObjectReplyPacket ); 
00442                 requestID = request->requestID;
00443                 objectID  = request->objectID;
00444                 version   = request->version;
00445             }
00446         
00447         uint32_t requestID;
00448         uint32_t objectID;
00449         uint32_t version;
00450         bool     result;
00451     };
00452 
00453     struct SessionUnsubscribeObjectPacket : public SessionPacket
00454     {
00455         SessionUnsubscribeObjectPacket()
00456             {
00457                 command = CMD_SESSION_UNSUBSCRIBE_OBJECT;
00458                 size    = sizeof( SessionUnsubscribeObjectPacket ); 
00459             }
00460         
00461         uint32_t            requestID;
00462         uint32_t            objectID;
00463         uint32_t            masterInstanceID;
00464         uint32_t            slaveInstanceID;
00465     };
00466 
00467     struct SessionDetachObjectPacket : public SessionPacket
00468     {
00469         SessionDetachObjectPacket()
00470         {
00471             command   = CMD_SESSION_DETACH_OBJECT;
00472             size      = sizeof( SessionDetachObjectPacket ); 
00473             requestID = EQ_ID_INVALID;
00474         }
00475 
00476         SessionDetachObjectPacket(const SessionUnsubscribeObjectPacket* request)
00477         {
00478             command   = CMD_SESSION_DETACH_OBJECT;
00479             size      = sizeof( SessionDetachObjectPacket ); 
00480             requestID = request->requestID;
00481             objectID  = request->objectID;
00482             objectInstanceID = request->slaveInstanceID;
00483         }
00484 
00485         uint32_t            requestID;
00486         uint32_t            objectID;
00487         uint32_t            objectInstanceID;
00488     };
00491     //------------------------------------------------------------
00492     // Object
00493     //------------------------------------------------------------
00494     struct ObjectPacket : public SessionPacket
00495     {
00496         ObjectPacket()
00497             {
00498                 datatype   = DATATYPE_EQNET_OBJECT; 
00499                 instanceID = EQ_ID_ANY;
00500             }
00501         uint32_t objectID;
00502         uint32_t instanceID;
00503     };
00504 
00506     struct ObjectInstanceDataPacket : public ObjectPacket
00507     {
00508         ObjectInstanceDataPacket()
00509             {
00510                 command = CMD_OBJECT_INSTANCE_DATA;
00511                 size    = sizeof( ObjectInstanceDataPacket ); 
00512                 data[0] = '\0';
00513             }
00514 
00515         uint64_t dataSize;
00516         uint32_t sequence;
00517         EQ_ALIGN8( uint8_t data[8] );
00518     };
00519 
00520     struct ObjectInstancePacket : public ObjectPacket
00521     {
00522         ObjectInstancePacket()
00523             {
00524                 command = CMD_OBJECT_INSTANCE;
00525                 size    = sizeof( ObjectInstancePacket ); 
00526                 data[0] = '\0';
00527             }
00528 
00529         uint64_t dataSize;
00530         uint32_t version;
00531         uint32_t sequence;
00532         EQ_ALIGN8( uint8_t data[8] );
00533     };
00534 
00535     struct ObjectCommitPacket : public ObjectPacket
00536     {
00537         ObjectCommitPacket()
00538             {
00539                 command        = CMD_OBJECT_COMMIT;
00540                 size           = sizeof( ObjectCommitPacket ); 
00541             }
00542         
00543         uint32_t requestID;
00544     };
00545 
00546     struct ObjectDeltaDataPacket : public ObjectPacket
00547     {
00548         ObjectDeltaDataPacket()
00549             {
00550                 command        = CMD_OBJECT_DELTA_DATA;
00551                 size           = sizeof( ObjectDeltaDataPacket ); 
00552                 delta[0]       = '\0';
00553             }
00554         
00555         uint64_t deltaSize;
00556         EQ_ALIGN8( uint8_t     delta[8] );
00557     };
00558 
00559     struct ObjectDeltaPacket : public ObjectPacket
00560     {
00561         ObjectDeltaPacket()
00562             {
00563                 command        = CMD_OBJECT_DELTA;
00564                 size           = sizeof( ObjectDeltaPacket ); 
00565                 delta[0]       = '\0';
00566             }
00567         
00568         uint64_t deltaSize;
00569         uint32_t version;
00570         EQ_ALIGN8( uint8_t     delta[8] );
00571     };
00572 
00573     struct ObjectNewMasterPacket : public ObjectPacket
00574     {
00575         ObjectNewMasterPacket()
00576             {
00577                 command = CMD_OBJECT_NEW_MASTER;
00578                 size    = sizeof( ObjectNewMasterPacket );
00579             };
00580 
00581         uint32_t newMasterID;
00582         uint32_t newMasterInstanceID;
00583         uint32_t changeType;
00584     };
00585 
00586     struct ObjectVersionPacket : public ObjectPacket
00587     {
00588         ObjectVersionPacket()
00589             {
00590                 command = CMD_OBJECT_VERSION;
00591                 size    = sizeof( ObjectVersionPacket );
00592             };
00593 
00594         uint32_t version;
00595     };
00596 
00597     //------------------------------------------------------------
00598     // Barrier
00599     //------------------------------------------------------------
00600     struct BarrierEnterPacket : public ObjectPacket
00601     {
00602         BarrierEnterPacket()
00603             {
00604                 command = CMD_BARRIER_ENTER;
00605                 size    = sizeof( BarrierEnterPacket );
00606             }
00607         uint32_t version;
00608     };
00609 
00610     struct BarrierEnterReplyPacket : public ObjectPacket
00611     {
00612         BarrierEnterReplyPacket()
00613             {
00614                 command = CMD_BARRIER_ENTER_REPLY;
00615                 size    = sizeof( BarrierEnterReplyPacket );
00616             }
00617     };
00620     //------------------------------------------------------------
00621     // ostream operators
00622     //------------------------------------------------------------
00623     inline std::ostream& operator << ( std::ostream& os, 
00624                                        const Packet* packet )
00625     {
00626         os << "packet dt " << packet->datatype << " cmd "
00627            << packet->command;
00628         return os;
00629     }
00630     inline std::ostream& operator << ( std::ostream& os, 
00631                                        const NodePacket* packet )
00632     {
00633         os << (Packet*)packet;
00634         return os;
00635     }
00636     inline std::ostream& operator << ( std::ostream& os, 
00637                                        const NodeMapSessionPacket* packet )
00638     {
00639         os << (NodePacket*)packet << " req " << packet->requestID
00640            << " sessionID " << packet->sessionID;
00641         return os;
00642     }
00643     inline std::ostream& operator << ( std::ostream& os, 
00644                                        const NodeMapSessionReplyPacket* packet )
00645     {
00646         os << (NodePacket*)packet << " req " << packet->requestID
00647            << " sessionID " << packet->sessionID;
00648         return os;
00649     }
00650     inline std::ostream& operator << ( std::ostream& os, 
00651                                        const NodeConnectPacket* packet )
00652     {
00653         os << (NodePacket*)packet << " req " << packet->requestID << " type "
00654            << packet->type << " launchID " << packet->launchID << " data "
00655            << packet->nodeData;
00656         return os;
00657     }
00658     inline std::ostream& operator << ( std::ostream& os, 
00659                                        const NodeConnectReplyPacket* packet )
00660     {
00661         os << (NodePacket*)packet << " req " << packet->requestID << " type "
00662            << packet->type << " data " << packet->nodeData;
00663         return os;
00664     }
00665     inline std::ostream& operator << ( std::ostream& os, 
00666                               const NodeGetNodeDataPacket* packet )
00667     {
00668         os << (NodePacket*)packet << " req " << packet->requestID << " nodeID " 
00669            << packet->nodeID;
00670         return os;
00671     }
00672     inline std::ostream& operator << ( std::ostream& os, 
00673                                        const NodeGetNodeDataReplyPacket* packet)
00674     {
00675         os << (NodePacket*)packet << " req " << packet->requestID << " type "
00676            << packet->type << " data " << packet->nodeData;
00677         return os;
00678     }
00679 
00680     //------------------------------------------------------------
00681     inline std::ostream& operator << ( std::ostream& os, 
00682                                        const SessionPacket* packet )
00683     {
00684         os << (NodePacket*)packet << " session id " << packet->sessionID;
00685         return os;
00686     }
00687 
00688     inline std::ostream& operator << ( std::ostream& os, 
00689                                        const SessionGenIDsReplyPacket* packet )
00690     {
00691         os << (SessionPacket*)packet << " id start " << packet->id;
00692         return os;
00693     }
00694     inline std::ostream& operator << ( std::ostream& os, 
00695                                    const SessionGetIDMasterPacket* packet )
00696     {
00697         os << (SessionPacket*)packet << " id " << packet->id;
00698         return os;
00699     }
00700     inline std::ostream& operator << ( std::ostream& os, 
00701                                    const SessionGetIDMasterReplyPacket* packet )
00702     {
00703         os << (SessionPacket*)packet << " ID " << packet->id << " master "
00704            << packet->masterID;
00705         return os;
00706     }
00707     inline std::ostream& operator << ( std::ostream& os, 
00708                                  const SessionMapObjectPacket* packet )
00709     {
00710         os << (SessionPacket*)packet << " requestID " << packet->requestID;
00711         return os;
00712     }
00713 
00714     //------------------------------------------------------------
00715     inline std::ostream& operator << ( std::ostream& os, 
00716                                        const ObjectPacket* packet )
00717     {
00718         os << (SessionPacket*)packet << " objectID " << packet->objectID
00719            << "." << packet->instanceID;
00720         return os;
00721     }
00722 
00723     inline std::ostream& operator << ( std::ostream& os, 
00724                                        const ObjectInstanceDataPacket* packet )
00725     {
00726         os << (ObjectPacket*)packet << " size " << packet->dataSize;
00727         return os;
00728     }
00729 
00730     inline std::ostream& operator << ( std::ostream& os, 
00731                                        const ObjectInstancePacket* packet )
00732     {
00733         os << (ObjectPacket*)packet << " v" << packet->version
00734            << " size " << packet->dataSize;
00735         return os;
00736     }
00737 
00738     inline std::ostream& operator << ( std::ostream& os, 
00739                                        const ObjectDeltaDataPacket* packet )
00740     {
00741         os << (ObjectPacket*)packet << " size " << packet->deltaSize;
00742         return os;
00743     }
00744 
00745     inline std::ostream& operator << ( std::ostream& os, 
00746                                        const ObjectDeltaPacket* packet )
00747     {
00748         os << (ObjectPacket*)packet << " v" << packet->version
00749            << " size " << packet->deltaSize;
00750         return os;
00751     }
00752 
00753     inline std::ostream& operator << ( std::ostream& os, 
00754                                        const BarrierEnterPacket* packet )
00755     {
00756         os << (ObjectPacket*)packet << " v" << packet->version;
00757         return os;
00758     }
00759 }
00760 }
00761 
00762 #endif // EQNET_PACKETS_H
00763 
Generated on Mon Aug 10 18:58:40 2009 for Equalizer 0.9 by  doxygen 1.5.8