static void node_opened(struct vnode *vnode, int32 fdType, dev_t device, ino_t parent, ino_t node, const char *name, off_t size) { if (device < gBootDevice) { // we ignore any access to rootfs, pipefs, and devfs // ToDo: if we can ever move the boot device on the fly, this will break return; } Session *session; SessionGetter getter(team_get_current_team_id(), &session); if (session == NULL) { char buffer[B_FILE_NAME_LENGTH]; if (name == NULL && vfs_get_vnode_name(vnode, buffer, sizeof(buffer)) == B_OK) name = buffer; // create new session for this team getter.New(name, device, node, &session); } if (session == NULL || !session->IsActive()) { if (sMainSession != NULL) { // ToDo: this opens a race condition with the "stop session" syscall getter.Stop(); } return; } session->AddNode(device, node); }
void GameServer::OnAcquireTableAccess(AcquireTableAccessPacket* p, void* pParam){ if( p->m_nSessionId != 0 || p->m_nSessionIdAcquire == 0 || p->m_nTableId <= 0 || p->m_nTournamentId < 0 ) return; ClientConnection* pConn = (ClientConnection*)pParam; Session* pSess = Session::GetSessionById(p->m_nSessionIdAcquire, true); bool bSuccess = false; if( pConn->IsTableConnection() ) return; if( pSess && pSess->IsActive() ){ int nUserId = pSess->GetUserId(); pSess->SetTableConnection(p->m_nTableId, p->m_nTournamentId, pConn, true); pConn->SetTableConnection(p->m_nTableId, p->m_nTournamentId); if( nUserId > 0 ) pConn->SetAuthorized(true); p->m_bAvatarIsBlocked = pSess->IsAvatarBlocked(); p->m_bChatIsBlocked = pSess->IsChatBlocked(); p->m_nUserId = nUserId; bSuccess = true; SafePointer::Release(pSess); } // Send reply. if( bSuccess ){ //pConn->SetAuthorized( pConn->SetSession(pSess); p->m_nErrorCode = ES_ERROR_SUCCESS; } else{ p->m_nUserId = 0; p->m_nErrorCode = ES_ERROR_UNKNOWN; } SendPacket(pConn, p, true); }