Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 30, 2006, 11:19:24 PM (18 years ago)
Author:
patrick
Message:

yet another weekend commit, quite much work done:

  • introduced a new PERMISSION layer: PERMISSION_SERVER: the nearest server hast authority
  • tightening up permissions: brand new implementation to prevent sending unused variables in the network (less smog in the net:D_
  • removed some compiler warnings from some central modules
  • networkmonitor interface changed to work with networknodes mainly
  • better debug output for the network monitor
  • networnode inteface standardisation
  • force reconnection commands integration
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/proxy/src/lib/network/synchronizeable.cc

    r9606 r9625  
    5555  /* make sure loadClassId is first synced var because this is read by networkStream */
    5656  assert( syncVarList.size() == 0 );
    57   mLeafClassId = this->registerVarId( new SynchronizeableInt( (int*)&this->getLeafClassID(), (int*)&this->getLeafClassID(), "leafClassId" ) );
    58 
    59   this->registerVar( new SynchronizeableInt( &this->owner, &this->owner, "owner" ) );
    60   this->registerVar( new SynchronizeableString( &this->objectName, &this->objectName, "objectName" ) );
     57  mLeafClassId = this->registerVarId( new SynchronizeableInt( (int*)&this->getLeafClassID(), (int*)&this->getLeafClassID(), "leafClassId", PERMISSION_MASTER_SERVER) );
     58
     59  this->registerVar( new SynchronizeableInt( &this->owner, &this->owner, "owner", PERMISSION_MASTER_SERVER ) );
     60  this->registerVar( new SynchronizeableString( &this->objectName, &this->objectName, "objectName", PERMISSION_MASTER_SERVER ) );
    6161}
    6262
     
    127127{
    128128  //make sure this user has his history
    129   if ( sentStates.size() <= userId )
     129  if ( (int)sentStates.size() <= userId )
    130130    sentStates.resize( userId+1 );
    131131
     
    207207  for ( SyncVarList::iterator it = syncVarList.begin(); it != syncVarList.end(); it++ )
    208208  {
     209
    209210    // DATA PERMISSIONS
    210211    // check if this synchronizeable has the permissions to write the data
    211212
     213#if 0
    212214    //  MASTER_SERVER |====> *
    213215    if( SharedNetworkData::getInstance()->isMasterServer() && (*it)->checkPermission( PERMISSION_MASTER_SERVER ))
     
    243245      hasPermission = true;
    244246
     247    else
     248      hasPermission = false;
     249#endif
     250
     251    ////////////////////////////////
     252    // Data SENDING Permissions
     253    ////////////////////////////////
     254
     255    // Permission   OWNER accept if:
     256    // I am the owner
     257    if(       (*it)->checkPermission( PERMISSION_OWNER ) && this->owner == SharedNetworkData::getInstance()->getHostID())
     258      hasPermission = true;
     259    // reciever != owner && owner is local
     260    else if(  (*it)->checkPermission( PERMISSION_OWNER ) && userId != this->owner &&
     261                (SharedNetworkData::getInstance()->isUserLocal(this->owner) || this->owner == SharedNetworkData::getInstance()->getHostID()))
     262      hasPermission = true;
     263
     264
     265    // Permission   MASTER_SERVER accept if:
     266    // im MASTER_SERVER
     267    else if( (*it)->checkPermission( PERMISSION_MASTER_SERVER ) && SharedNetworkData::getInstance()->isMasterServer())
     268      hasPermission = true;
     269    // im PROXY_SERVER && reciever == CLIENT
     270    else if( (*it)->checkPermission( PERMISSION_MASTER_SERVER ) && SharedNetworkData::getInstance()->isProxyServerActive() &&
     271               SharedNetworkData::getInstance()->isUserClient( userId))
     272      hasPermission = true;
     273
     274
     275    // Pemission    SERVER accept if:
     276    // i am server && reciever == CLIENT
     277    else if( (*it)->checkPermission( PERMISSION_SERVER ) && !SharedNetworkData::getInstance()->isClient() &&
     278               SharedNetworkData::getInstance()->isUserClient( userId))
     279      hasPermission = true;
     280    // i am SERVER && reciever == SERVER && reciever != owner && ( owner is local || i am owner)
     281    else if( (*it)->checkPermission( PERMISSION_SERVER ) && !SharedNetworkData::getInstance()->isClient() &&
     282               userId != this->owner &&
     283               ( SharedNetworkData::getInstance()->isUserLocal( userId) || this->owner ==  SharedNetworkData::getInstance()->getHostID()))
     284      hasPermission = true;
     285
     286
     287    // Permission   ALL accept if:
     288    else if( (*it)->checkPermission( PERMISSION_ALL ))
     289      hasPermission = true;
     290
     291
     292    // or else refuse sending data
    245293    else
    246294      hasPermission = false;
     
    308356{
    309357  //make sure this user has his history
    310   if ( recvStates.size() <= userId )
     358  if ( (int)recvStates.size() <= userId )
    311359    recvStates.resize( userId+1 );
    312360
     
    367415
    368416
    369     //  *              <====|  MASTER_SERVER
    370     if(  this->networkStream->isUserMasterServer( userId ) && (*it)->checkPermission( PERMISSION_MASTER_SERVER ))
    371       hasPermission = true;
    372     else if( this->networkStream->isUserMasterServer( userId ) &&
    373              this->owner != SharedNetworkData::getInstance()->getHostID() && (*it)->checkPermission( PERMISSION_OWNER ))
    374       hasPermission = true;
    375 
    376     //  *              <====|  PROXY_SERVER
    377     else if( this->networkStream->isUserProxyServerActive( userId ) &&
    378              this->owner != SharedNetworkData::getInstance()->getHostID() && (*it)->checkPermission( PERMISSION_OWNER ))
    379       hasPermission = true;
    380     //  CLIENT         <====|  PROXY_SERVER
    381     else if( this->networkStream->isUserProxyServerActive( userId )  && SharedNetworkData::getInstance()->isClient()
    382              && (*it)->checkPermission( PERMISSION_MASTER_SERVER ))
    383       hasPermission = true;
    384     // MASTER_SERVER   <====|  PROXY_SERVER
    385     else if( this->networkStream->isUserProxyServerActive( userId )  && SharedNetworkData::getInstance()->isMasterServer() &&
    386              !this->networkStream->isUserLocal( userId ))
    387       hasPermission = true;
    388 
    389     //  *              <====|  OWNER
    390     else if( this->owner == userId && (*it)->checkPermission( PERMISSION_OWNER ))
    391       hasPermission = true;
    392 
    393     //  *              <====|  ALL
    394     else if( (*it)->checkPermission( PERMISSION_ALL ))
    395       hasPermission = true;
    396 
     417    ////////////////////////////////
     418    // Data RECIEVING Permissions
     419    ////////////////////////////////
     420
     421    // i should never ever receive a state update from a synchronizeable, that belongs to me! If it does somethings wrong with the send rules
     422//     assert(   !((*it)->checkPermission( PERMISSION_OWNER ) && this->owner == SharedNetworkData::getInstance()->getHostID()));
     423
     424
     425    // Permission   OWNER accept if:
     426    // sender == owner
     427    if(      (*it)->checkPermission( PERMISSION_OWNER ) && this->owner == userId)
     428      hasPermission = true;
     429    // sender == MASTER_SERVER
     430    else if( (*it)->checkPermission( PERMISSION_OWNER ) && SharedNetworkData::getInstance()->isUserMasterServer( userId))
     431      hasPermission = true;
     432    // sender == PROXY_SERVER
     433    else if( (*it)->checkPermission( PERMISSION_OWNER ) && SharedNetworkData::getInstance()->isUserProxyServerActive( userId))
     434      hasPermission = true;
     435
     436    // Permission   MASTER_SERVER accept if:
     437    // sender == MASTER_SERVER
     438    else if( (*it)->checkPermission( PERMISSION_MASTER_SERVER) && SharedNetworkData::getInstance()->isUserMasterServer( userId))
     439      hasPermission = true;
     440    // sender == PROXY_SERVER && im not MASTER_SERVER && im not PROXY_SERVER
     441    else if( (*it)->checkPermission( PERMISSION_MASTER_SERVER) && SharedNetworkData::getInstance()->isClient() &&
     442               SharedNetworkData::getInstance()->isUserProxyServerActive( userId))
     443      hasPermission = true;
     444
     445    // Permission   SERVER accept if:
     446    // sender == SERVER
     447    else if( (*it)->checkPermission( PERMISSION_SERVER ) && !SharedNetworkData::getInstance()->isUserClient( userId) )
     448      hasPermission = true;
     449
     450    // Pemission    ALL accept if:
     451    else if(  (*it)->checkPermission( PERMISSION_ALL ))
     452      hasPermission = true;
     453
     454   // no rights to over-write local data
    397455    else
    398456      hasPermission = false;
     
    466524void Synchronizeable::cleanUpUser( int userId )
    467525{
    468   if ( recvStates.size() > userId )
     526  if ( (int)recvStates.size() > userId )
    469527  {
    470528    for ( std::list<StateHistoryEntry*>::iterator it = recvStates[userId].begin(); it != recvStates[userId].end(); it++ )
     
    481539  }
    482540
    483   if ( sentStates.size() > userId )
     541  if ( (int)sentStates.size() > userId )
    484542  {
    485543
     
    507565{
    508566   //make sure this user has his history
    509   if ( recvStates.size() <= userId )
     567  if ( (int)recvStates.size() <= userId )
    510568    recvStates.resize( userId+1 );
    511569
     
    597655{
    598656   //make sure this user has his history
    599   if ( sentStates.size() <= userId )
     657  if ( (int)sentStates.size() <= userId )
    600658    sentStates.resize( userId+1 );
    601659
Note: See TracChangeset for help on using the changeset viewer.