Beispiel #1
0
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);
}
Beispiel #2
0
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);
	}