·
Cursos Gerais ·
Rede de Computadores
Send your question to AI and receive an answer instantly
Recommended for you
15
Artigo Cientifico Edge Computing - Análise Comparativa de Protocolos de Segurança na Camada Física
Rede de Computadores
UFABC
3
Artigo Cientifico Edge Computing - Comparativo de Protocolos de Segurança de Dados
Rede de Computadores
UFABC
3
Projeto Napster P2P em Python com RMI para Transferência de Arquivos
Rede de Computadores
UFABC
7
Projeto Napster P2P - Sistemas Distribuidos com TCP e UDP
Rede de Computadores
UFABC
1
Simular Dois Protocolos da Camada de Enlace fisíca em Cloud Computing
Rede de Computadores
UFABC
1
Lista de Exercícios Resolvida: Comunicação e Redes - Modelos OSI TCPIP e Roteamento
Rede de Computadores
UFABC
1
Lista de Exercicios Resolvida - Comunicacao e Redes BCM0506 UFABC
Rede de Computadores
UFABC
9
Tabela de Hash Distribuída dht
Rede de Computadores
UFABC
1
Lista de Exercicios Resolvida Comunicacao e Redes UFABC
Rede de Computadores
UFABC
1
Calculo VLSM - Planejamento de Enderecamento IP para Redes
Rede de Computadores
UNICSUL
Preview text
Atividade 1 1 Definição do Sistema Crie um sistema P2P EM PYTHON que permita a transferência de arquivos de vídeo gigantes mais de 1 GB entre peers intermediados por um servidor centralizado utilizando RMI e TCP como protocolo de comunicação O sistema funcionará de forma similar porém muito reduzida ao sistema Napster um dos primeiros sistemas P2P criado por Shawn Fanning aos 18 anos 2 Visão geral do sistema O sistema será composto por1 servidor com IP e porta conhecidas e muitos peers O peer atua tanto como provedor de informação neste caso de arquivos quanto como receptor deles Inicialmente o servidor estará disponível para receber requisições dos peers Quando um PeerXentra no sistema deve comunicar ao servidor suas informações O servidor receberá as informações e as armazenará para futuras consultas Quando um PeerY quiserbaixar um vídeo deverá enviar para o servidor uma requisição com o nome do arquivo O servidor procurará pelo nome e responderá ao PeerY com uma lista de peers que o contém O PeerY receberá a lista do servidor e escolherá um dos peers da lista vamos supor que o escolhido é o PeerZ A seguir o PeerY requisitará o arquivo para o PeerZ quem poderá aceitar o pedido enviando o arquivo ou rejeitar o pedido Finalmente quando o PeerY baixar o arquivo em uma pasta a pessoa poderá ir na pasta e visualizálo usando um software externo de reprodução como VLC 3 Funcionalidades do Servidor a Recebe e responde requisições dos peersobrigatório com RMI b Requisição JOIN vinda de um peer que quer entrar na rede A requisição deve conter as informações mínimas do peer eg nome dos arquivos que possui as quais devem ser armazenadas em alguma estrutura de dados no servidor A resposta do servidor enviada ao peerconterá astring JOINOK c Requisição SEARCH vinda de um peer que procura um determinado arquivo A requisição deve conter somente o nome do arquivo com sua extensão eg o string Aulamp4 A resposta do servidor enviada ao peerconterá uma lista vazia ou com as informações dos peers que possuem o arquivo d Requisição UPDATE vinda de um peer que baixou um arquivo A requisição deve conter o nome do arquivo baixado o qual será inserido na estrutura de dados que mantém as informações dos peers A resposta do servidor enviada ao peerconterá a string UPDATEOK e Inicialização do servidor o servidor deve capturar inicialmente o IP e a porta do registry O endereço IP a ser inserido será o 127001se estiver realizando o projeto na mesma máquina Assuma esse IP quando o Peer quiser comunicarse com o servidor A porta default que permitirá aos peers conectarse com o registry será a 1099 Sobre a captura ela se dará pelo teclado 4 Funcionalidades do Peer assuma o ponto de vista de um PeerX a Recebe e responde opcional usar threadsrequisições do servidor e de outros peers b Envia por RMIuma requisição de JOIN ao servidor Deve esperar o JOINOK c Envia por RMIuma requisição de UPDATE ao servidor Deve esperar o UPDATEOK d Envia por RMIuma requisição de SEARCH ao servidor Voltará uma lista como resposta vazia ou com informações e Para os envios por RMI acima considere que não há perdas nem duplicações f Envia por TCPum requisição de DOWNLOAD a outro peer Ver abaixo as possíveis respostas obtidas g Requisição DOWNLOAD vinda de outro peerPeerY pedindo por um determinado arquivo O PeerX deve verificar se possui o arquivo e enviálopor TCPao PeerY h Recebimento do arquivo o arquivo deverá ser armazenado em uma pasta específica do peer i Inicialização do peer o peer deve capturar inicialmente o IP porta e a pasta onde estão e serão armazenados seus arquivosSobre a captura ela se dará pelo teclado Sobre as pastas cada peer terá sua própria Por exemplo se houverem 3 peers haverá 3 pastas diferentesse estiver realizando o projeto na mesma máquina Ver o JOIN no item Menu interativo na seção 6 5 Mensagens prints apresentadas na console Na console do peer deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quando receber o JOINOK print Sou peer IPporta com arquivos só nomes dos arquivos Substitua a informação entre os parênteses com as reais Por exemplo Sou peer 1270018776 com arquivos aula1mp4 aula2mp4 Quando receber a resposta do SEARCH print peers com arquivo solicitado IPporta de cada peer da lista Quando receber o arquivo print Arquivo só nome do arquivo baixado com sucesso na pasta nome da pasta Menu interativo por console que permita realizar a escolha somente das funções JOIN SEARCH DOWNLOAD o No caso do JOIN deve capturar só o IP porta e a pasta onde se encontram os arquivos eg c emppeer1 c emppeer2 etc A partir da pasta seu código procurará nela o nome dos arquivos a serem enviados ao servidor o No caso do SEARCH deve capturar sóo nome do arquivo com sua extensão eg aulamp4 A busca por ele será exatamente por esse nome Note que não deve capturar a pasta o No caso do DOWNLOAD deve capturar só o IP e porta do peer onde se encontra o arquivo a ser baixado Note que não deve capturar a pasta Na console do servidor deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quando receber o JOIN print Peer IPporta adicionado com arquivos só nomes dos arquivos Quando receber o SEARCH print Peer IPporta solicitou arquivo só nome do arquivo 6 Teste realizado pelo professor Após a compilação o professor abrirá 4 consoles no Windows seria o CMDEXE também conhecido como prompt Um deles será o servidor com o registry e os outros 3 os peers A partir das consoles o professor realizará os testes do funcionamento do sistema Cabe destacar que Seu código não deve estar limitado a 3 peers suportando mais do que 3 Inicialmente o professor levantará executará o servidor A seguir levantará os peers Você não precisará de 4 computadores para realizar a atividade Basta abrir as 4 consoles ATIVIDADE 2 1 Definição do Sistema Crie um sistema distribuído com três servidores que permita armazenar pares chavevalor também denominado Sistema KV ou KeyValueStore de forma replicada e consistente utilizando TCP como protocolo da camada de transporte O sistema funcionará de forma similar porém muito simplificada ao sistema Zookepeer um sistema distribuídoque permite a coordenação de servidores 2 Visão geral do sistema O sistema será composto por3 servidores com IPs e portas conhecidas e muitos clientes Os clientes poderão realizar requisições em qualquer servidor tanto para inserir informaçõeskeyvalue no sistema ie PUT quanto para obtêlas ie GET Os servidores por sua vez deverão atender as requisições dos clientes Dentre os três servidores escolhese inicialmente um deles como líder o qual será o único que poderá realizar um PUT Por outro lado qualquer servidor poderá responder o GET 3 Funcionalidades do Cliente considere o ponto de vista de um ClienteX j Inicialização o cliente deve capturar do teclado os IP e portas dos três servidores As portas default dos servidores como mencionado na Seção 5 são 10097 10098 e 10099Cabe destacar que o cliente não conhece e não deve conhecer quem é o líder k Envio do PUT o cliente deve capturar do teclado a key e value a ser inserida A seguir envia uma requisição PUT a um servidor escolhido de forma aleatória Deve receber a mensagem PUTOK com um timestamp1 Para detalhes do timestamp ver Seção 5 Na requisição do PUT envie a key e a value l Envio do GET o cliente deve capturar do teclado a key a ser procurada A seguir envia uma requisição GET a um servidor escolhido de forma aleatória Deve receber uma resposta do servidor escolhido Para detalhes da resposta ver Seção 5 Na requisição do GET envie a key e o último timestamp que o cliente tem associado a essa key Note que o timestamp não deve ser capturado do teclado Observações Cada cliente possui seus própriostimestamps inicializados em zero Toda comunicação entre cliente servidorserá por TCP e deverá obrigatoriamente transferir a classe Mensagem criada por você Considere que o cliente não vai sair do sistema nem morrer 1 4 Funcionalidades do Servidor considere o ponto de vista de um Servidor S f Inicialização o servidor deve capturar do teclado o IP e a porta dele e o IP e a porta do líder O endereço IP a ser inserido será o 127001 se estiver realizando o projeto na mesma máquina As portas default que permitirão aos clientes conectarse com algum servidor serão as 10097 10098 e 10099 g Recebe e respondesimultaneamente obrigatório com threadsrequisições dos clientes Por simultaneamente entendase que o servidor deverá poder realizar outras funcionalidades enquanto está fazendo requisições ou esperando por elas h Recebe Requisição PUT Caso o servidor não seja o líder deverá encaminhar a requisição para o líder Caso o servidor seja o líder 1 Insere a informação em uma tabela de hash local associando um timestamp para essa key Se a key já existir atualize tanto o valuequanto o timestamp associado 2 Replique a informação key value timestampnos outros servidores enviando ana mensagem REPLICATION 3 Envie para o cliente a mensagem PUTOK junto com o timestamp associado à key ver regra de envio no item Requisição REPLICATIONOK i Recebe Requisição REPLICATION Insira na sua tabela de hash local as informações e responda para o líder a mensagem REPLICATIONOK j Recebe Requisição REPLICATIONOK Assim que o líder receber essa mensagem de todos os servidores envie para o cliente a mensagem PUTOK junto com o timestamp associado à key k Recebe Requisição GET Considere o cliente Cx com seu timestampTx requisitando pela keyKx ao servidor S Caso a chave não exista o value devolvido será NULL Caso exista ovalue a ser devolvido para Cxserá aquele cujo timestamp associado aKx no Servidor S seja igual ou maior ao Tx Se o timestamp da keyem S for menor que Tx devolva para Cx a mensagemTRYOTHERSERVERORLATER Em outras palavras o cliente NUNCAdeverá obter um value anterior ao que já viu Além do value devolva para o cliente o timestamp do servidor S associado aKx Observações Toda comunicação entre servidores será por TCP e deverá obrigatoriamente transferiruma classe Mensagem criada por você Considere que os servidores não vão sair do sistema não vão morrer e não haverá troca de líder Considere que o líder somente executará um PUT por vez ou seja não há requisições PUT concorrentes 5 Mensagens prints apresentadas na console Na console de cadacliente deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Menu interativo por console que permita realizar a escolha somente das funções INIT PUT e GET o No caso do INIT realize a inicialização do cliente o Envio da requisição PUT capturando do teclado as informações necessárias o Envio da requisição GET capturando do teclado as informações necessárias Quando receber o PUTOK print PUTOK key key value value timestamp timestamp realizada no servidor IPporta Substitua a informação entre os parênteses com as reais Quando receber a resposta do GET print GET key key value valor devolvido pelo servidor obtido do servidor IPporta meu timestamp timestampdocliente e do servidor timestampdoservidor Na console de cadaservidor deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quandoreceber o PUT o Se for o líder print Cliente IPporta PUT keykey valuevalue o Se não for o líder print Encaminhando PUT keykey valuevalue Quandoreceber o REPLICATION print REPLICATION keykey valuevalue ts timestamp Quando o líder receber o REPLICATIONOK de todos print Enviando PUTOK ao Cliente IPporta da keykeytstimestampdoservidor Quando receber o GET print Cliente IPporta GET keykey tstimestamp Meu ts é timestampdakey portanto devolvendo valor ou erro
Send your question to AI and receive an answer instantly
Recommended for you
15
Artigo Cientifico Edge Computing - Análise Comparativa de Protocolos de Segurança na Camada Física
Rede de Computadores
UFABC
3
Artigo Cientifico Edge Computing - Comparativo de Protocolos de Segurança de Dados
Rede de Computadores
UFABC
3
Projeto Napster P2P em Python com RMI para Transferência de Arquivos
Rede de Computadores
UFABC
7
Projeto Napster P2P - Sistemas Distribuidos com TCP e UDP
Rede de Computadores
UFABC
1
Simular Dois Protocolos da Camada de Enlace fisíca em Cloud Computing
Rede de Computadores
UFABC
1
Lista de Exercícios Resolvida: Comunicação e Redes - Modelos OSI TCPIP e Roteamento
Rede de Computadores
UFABC
1
Lista de Exercicios Resolvida - Comunicacao e Redes BCM0506 UFABC
Rede de Computadores
UFABC
9
Tabela de Hash Distribuída dht
Rede de Computadores
UFABC
1
Lista de Exercicios Resolvida Comunicacao e Redes UFABC
Rede de Computadores
UFABC
1
Calculo VLSM - Planejamento de Enderecamento IP para Redes
Rede de Computadores
UNICSUL
Preview text
Atividade 1 1 Definição do Sistema Crie um sistema P2P EM PYTHON que permita a transferência de arquivos de vídeo gigantes mais de 1 GB entre peers intermediados por um servidor centralizado utilizando RMI e TCP como protocolo de comunicação O sistema funcionará de forma similar porém muito reduzida ao sistema Napster um dos primeiros sistemas P2P criado por Shawn Fanning aos 18 anos 2 Visão geral do sistema O sistema será composto por1 servidor com IP e porta conhecidas e muitos peers O peer atua tanto como provedor de informação neste caso de arquivos quanto como receptor deles Inicialmente o servidor estará disponível para receber requisições dos peers Quando um PeerXentra no sistema deve comunicar ao servidor suas informações O servidor receberá as informações e as armazenará para futuras consultas Quando um PeerY quiserbaixar um vídeo deverá enviar para o servidor uma requisição com o nome do arquivo O servidor procurará pelo nome e responderá ao PeerY com uma lista de peers que o contém O PeerY receberá a lista do servidor e escolherá um dos peers da lista vamos supor que o escolhido é o PeerZ A seguir o PeerY requisitará o arquivo para o PeerZ quem poderá aceitar o pedido enviando o arquivo ou rejeitar o pedido Finalmente quando o PeerY baixar o arquivo em uma pasta a pessoa poderá ir na pasta e visualizálo usando um software externo de reprodução como VLC 3 Funcionalidades do Servidor a Recebe e responde requisições dos peersobrigatório com RMI b Requisição JOIN vinda de um peer que quer entrar na rede A requisição deve conter as informações mínimas do peer eg nome dos arquivos que possui as quais devem ser armazenadas em alguma estrutura de dados no servidor A resposta do servidor enviada ao peerconterá astring JOINOK c Requisição SEARCH vinda de um peer que procura um determinado arquivo A requisição deve conter somente o nome do arquivo com sua extensão eg o string Aulamp4 A resposta do servidor enviada ao peerconterá uma lista vazia ou com as informações dos peers que possuem o arquivo d Requisição UPDATE vinda de um peer que baixou um arquivo A requisição deve conter o nome do arquivo baixado o qual será inserido na estrutura de dados que mantém as informações dos peers A resposta do servidor enviada ao peerconterá a string UPDATEOK e Inicialização do servidor o servidor deve capturar inicialmente o IP e a porta do registry O endereço IP a ser inserido será o 127001se estiver realizando o projeto na mesma máquina Assuma esse IP quando o Peer quiser comunicarse com o servidor A porta default que permitirá aos peers conectarse com o registry será a 1099 Sobre a captura ela se dará pelo teclado 4 Funcionalidades do Peer assuma o ponto de vista de um PeerX a Recebe e responde opcional usar threadsrequisições do servidor e de outros peers b Envia por RMIuma requisição de JOIN ao servidor Deve esperar o JOINOK c Envia por RMIuma requisição de UPDATE ao servidor Deve esperar o UPDATEOK d Envia por RMIuma requisição de SEARCH ao servidor Voltará uma lista como resposta vazia ou com informações e Para os envios por RMI acima considere que não há perdas nem duplicações f Envia por TCPum requisição de DOWNLOAD a outro peer Ver abaixo as possíveis respostas obtidas g Requisição DOWNLOAD vinda de outro peerPeerY pedindo por um determinado arquivo O PeerX deve verificar se possui o arquivo e enviálopor TCPao PeerY h Recebimento do arquivo o arquivo deverá ser armazenado em uma pasta específica do peer i Inicialização do peer o peer deve capturar inicialmente o IP porta e a pasta onde estão e serão armazenados seus arquivosSobre a captura ela se dará pelo teclado Sobre as pastas cada peer terá sua própria Por exemplo se houverem 3 peers haverá 3 pastas diferentesse estiver realizando o projeto na mesma máquina Ver o JOIN no item Menu interativo na seção 6 5 Mensagens prints apresentadas na console Na console do peer deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quando receber o JOINOK print Sou peer IPporta com arquivos só nomes dos arquivos Substitua a informação entre os parênteses com as reais Por exemplo Sou peer 1270018776 com arquivos aula1mp4 aula2mp4 Quando receber a resposta do SEARCH print peers com arquivo solicitado IPporta de cada peer da lista Quando receber o arquivo print Arquivo só nome do arquivo baixado com sucesso na pasta nome da pasta Menu interativo por console que permita realizar a escolha somente das funções JOIN SEARCH DOWNLOAD o No caso do JOIN deve capturar só o IP porta e a pasta onde se encontram os arquivos eg c emppeer1 c emppeer2 etc A partir da pasta seu código procurará nela o nome dos arquivos a serem enviados ao servidor o No caso do SEARCH deve capturar sóo nome do arquivo com sua extensão eg aulamp4 A busca por ele será exatamente por esse nome Note que não deve capturar a pasta o No caso do DOWNLOAD deve capturar só o IP e porta do peer onde se encontra o arquivo a ser baixado Note que não deve capturar a pasta Na console do servidor deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quando receber o JOIN print Peer IPporta adicionado com arquivos só nomes dos arquivos Quando receber o SEARCH print Peer IPporta solicitou arquivo só nome do arquivo 6 Teste realizado pelo professor Após a compilação o professor abrirá 4 consoles no Windows seria o CMDEXE também conhecido como prompt Um deles será o servidor com o registry e os outros 3 os peers A partir das consoles o professor realizará os testes do funcionamento do sistema Cabe destacar que Seu código não deve estar limitado a 3 peers suportando mais do que 3 Inicialmente o professor levantará executará o servidor A seguir levantará os peers Você não precisará de 4 computadores para realizar a atividade Basta abrir as 4 consoles ATIVIDADE 2 1 Definição do Sistema Crie um sistema distribuído com três servidores que permita armazenar pares chavevalor também denominado Sistema KV ou KeyValueStore de forma replicada e consistente utilizando TCP como protocolo da camada de transporte O sistema funcionará de forma similar porém muito simplificada ao sistema Zookepeer um sistema distribuídoque permite a coordenação de servidores 2 Visão geral do sistema O sistema será composto por3 servidores com IPs e portas conhecidas e muitos clientes Os clientes poderão realizar requisições em qualquer servidor tanto para inserir informaçõeskeyvalue no sistema ie PUT quanto para obtêlas ie GET Os servidores por sua vez deverão atender as requisições dos clientes Dentre os três servidores escolhese inicialmente um deles como líder o qual será o único que poderá realizar um PUT Por outro lado qualquer servidor poderá responder o GET 3 Funcionalidades do Cliente considere o ponto de vista de um ClienteX j Inicialização o cliente deve capturar do teclado os IP e portas dos três servidores As portas default dos servidores como mencionado na Seção 5 são 10097 10098 e 10099Cabe destacar que o cliente não conhece e não deve conhecer quem é o líder k Envio do PUT o cliente deve capturar do teclado a key e value a ser inserida A seguir envia uma requisição PUT a um servidor escolhido de forma aleatória Deve receber a mensagem PUTOK com um timestamp1 Para detalhes do timestamp ver Seção 5 Na requisição do PUT envie a key e a value l Envio do GET o cliente deve capturar do teclado a key a ser procurada A seguir envia uma requisição GET a um servidor escolhido de forma aleatória Deve receber uma resposta do servidor escolhido Para detalhes da resposta ver Seção 5 Na requisição do GET envie a key e o último timestamp que o cliente tem associado a essa key Note que o timestamp não deve ser capturado do teclado Observações Cada cliente possui seus própriostimestamps inicializados em zero Toda comunicação entre cliente servidorserá por TCP e deverá obrigatoriamente transferir a classe Mensagem criada por você Considere que o cliente não vai sair do sistema nem morrer 1 4 Funcionalidades do Servidor considere o ponto de vista de um Servidor S f Inicialização o servidor deve capturar do teclado o IP e a porta dele e o IP e a porta do líder O endereço IP a ser inserido será o 127001 se estiver realizando o projeto na mesma máquina As portas default que permitirão aos clientes conectarse com algum servidor serão as 10097 10098 e 10099 g Recebe e respondesimultaneamente obrigatório com threadsrequisições dos clientes Por simultaneamente entendase que o servidor deverá poder realizar outras funcionalidades enquanto está fazendo requisições ou esperando por elas h Recebe Requisição PUT Caso o servidor não seja o líder deverá encaminhar a requisição para o líder Caso o servidor seja o líder 1 Insere a informação em uma tabela de hash local associando um timestamp para essa key Se a key já existir atualize tanto o valuequanto o timestamp associado 2 Replique a informação key value timestampnos outros servidores enviando ana mensagem REPLICATION 3 Envie para o cliente a mensagem PUTOK junto com o timestamp associado à key ver regra de envio no item Requisição REPLICATIONOK i Recebe Requisição REPLICATION Insira na sua tabela de hash local as informações e responda para o líder a mensagem REPLICATIONOK j Recebe Requisição REPLICATIONOK Assim que o líder receber essa mensagem de todos os servidores envie para o cliente a mensagem PUTOK junto com o timestamp associado à key k Recebe Requisição GET Considere o cliente Cx com seu timestampTx requisitando pela keyKx ao servidor S Caso a chave não exista o value devolvido será NULL Caso exista ovalue a ser devolvido para Cxserá aquele cujo timestamp associado aKx no Servidor S seja igual ou maior ao Tx Se o timestamp da keyem S for menor que Tx devolva para Cx a mensagemTRYOTHERSERVERORLATER Em outras palavras o cliente NUNCAdeverá obter um value anterior ao que já viu Além do value devolva para o cliente o timestamp do servidor S associado aKx Observações Toda comunicação entre servidores será por TCP e deverá obrigatoriamente transferiruma classe Mensagem criada por você Considere que os servidores não vão sair do sistema não vão morrer e não haverá troca de líder Considere que o líder somente executará um PUT por vez ou seja não há requisições PUT concorrentes 5 Mensagens prints apresentadas na console Na console de cadacliente deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Menu interativo por console que permita realizar a escolha somente das funções INIT PUT e GET o No caso do INIT realize a inicialização do cliente o Envio da requisição PUT capturando do teclado as informações necessárias o Envio da requisição GET capturando do teclado as informações necessárias Quando receber o PUTOK print PUTOK key key value value timestamp timestamp realizada no servidor IPporta Substitua a informação entre os parênteses com as reais Quando receber a resposta do GET print GET key key value valor devolvido pelo servidor obtido do servidor IPporta meu timestamp timestampdocliente e do servidor timestampdoservidor Na console de cadaservidor deverão ser apresentadas exatamente nem mais nem menos as seguintes informações Quandoreceber o PUT o Se for o líder print Cliente IPporta PUT keykey valuevalue o Se não for o líder print Encaminhando PUT keykey valuevalue Quandoreceber o REPLICATION print REPLICATION keykey valuevalue ts timestamp Quando o líder receber o REPLICATIONOK de todos print Enviando PUTOK ao Cliente IPporta da keykeytstimestampdoservidor Quando receber o GET print Cliente IPporta GET keykey tstimestamp Meu ts é timestampdakey portanto devolvendo valor ou erro