private static void InvalidLogin(Connection conn, LoginInfo login) { bool failed = true; do { try { // Faz o login conn.LoginByPassword(_entity, _password, _domain); failed = false; } // Login catch (AlreadyLoggedInException) { // Ignora o erro failed = false; } catch (AccessDenied) { Console.WriteLine(Resources.ServerAccessDenied); } catch (MissingCertificate) { Console.WriteLine(Resources.MissingCertificateForEntity + _entity); } // Barramento catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } } while (failed); _finder.Activate(); }
/// <inheritdoc /> public void send_exception(ServerRequestInfo ri) { // esse tratamento precisa ser feito aqui (não é possível na receive_request) por causa de bugs do IIOP.net, descritos em OPENBUS-1677. String interceptedOperation = ri.operation; Logger.Info(String.Format( "O lançamento de uma exceção para a operação '{0}' foi interceptado no servidor.", interceptedOperation), (Exception)ri.sending_exception); NO_PERMISSION ex = ri.sending_exception as NO_PERMISSION; if (ex == null) { return; } if (ex.Minor == InvalidCredentialCode.ConstVal) { try { // pela implementação do IIOP.Net, o ServerRequestInfo da send_exception é // diferente do existente na receive_request. Assim, não podemos passar a // credencial por um slot e então precisamos fazer o unmarshal novamente. ConnectionImpl conn = ri.get_slot(ReceivingConnectionSlotId) as ConnectionImpl; if (conn == null) { Logger.Error( "Sem conexão ao barramento, impossível enviar exceção à chamada remota."); throw new NO_PERMISSION(UnverifiedLoginCode.ConstVal, CompletionStatus.Completed_No); } bool legacyContext; ServiceContext serviceContext = GetContextFromRequestInfo(ri, conn.Legacy, out legacyContext); // credencial é inválida AnyCredential anyCredential = new AnyCredential(serviceContext, legacyContext); Logger.Debug(String.Format( "A operação '{0}' para a qual será lançada a exceção possui credencial. Legada? {1}.", interceptedOperation, anyCredential.Legacy)); conn.SendException(ri, anyCredential); } catch (InvalidSlot e) { Logger.Fatal( "Falha ao acessar o slot da conexão de recebimento para enviar uma exceção.", e); throw; } } }
private static Connection NewLogin() { Connection conn = ORBInitializer.Context.ConnectByAddress(_host, _port); try { // Faz o login conn.LoginByPassword(_entity, _password, _domain); } catch (AccessDenied) { Console.WriteLine(Resources.ClientAccessDenied + _entity + "."); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } return(conn); }
private static void RemoveOfferAndLogout() { if (Offers.Count > 0) { foreach (KeyValuePair <Connection, ServiceOffer> pair in Offers) { try { Console.WriteLine(Resources.RemovingOffer); pair.Value.remove(); Console.WriteLine(Resources.RemovedOffer); } catch (UnauthorizedOperation) { Console.WriteLine(Resources.UnauthorizedRemoveOffer); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } Connection conn = pair.Key; if (conn.Login.HasValue) { try { conn.Logout(); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } } } } }
private static void Main(String[] args) { // Registra handler para o caso do processo ser finalizado AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit; // Obtém dados através dos argumentos string host = args[0]; ushort port = Convert.ToUInt16(args[1]); string entity = args[2]; AsymmetricCipherKeyPair privateKey = Crypto.ReadKeyFile(args[3]); // Cria o componente que conterá as facetas do servidor ORBInitializer.InitORB(); ComponentContext component = new DefaultComponentContext(new ComponentId("messenger", 1, 0, 0, ".net")); // Cria a faceta Messenger para o componente component.AddFacet("Messenger", Repository.GetRepositoryID(typeof(Messenger)), new MessengerImpl(entity)); // Define propriedades para a oferta de serviço a ser registrada no barramento IComponent ic = component.GetIComponent(); ServiceProperty[] properties = { new ServiceProperty("offer.domain", "Demo CallChain"), new ServiceProperty("offer.role", "mensageiro real") }; // Cria conexão e a define como conexão padrão tanto para entrada como saída. // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos. OpenBusContext context = ORBInitializer.Context; _conn = context.ConnectByAddress(host, port); context.SetDefaultConnection(_conn); bool failed = true; try { // Faz o login _conn.LoginByCertificate(entity, privateKey); // Registra a oferta no barramento _offer = context.OfferRegistry.registerService(ic, properties); failed = false; } // Login catch (AccessDenied) { Console.WriteLine(Resources.ServerAccessDenied); } catch (MissingCertificate) { Console.WriteLine(Resources.MissingCertificateForEntity + entity); } // Registro catch (UnauthorizedFacets) { Console.WriteLine(Resources.UnauthorizedFacets); } // Barramento catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } finally { if (failed) { Exit(1); } } // Mantém a thread ativa para aguardar requisições Console.WriteLine(Resources.ServerOK); Thread.Sleep(Timeout.Infinite); }
internal void Activate() { bool register = false; lock (_lock) { if (!_active) { register = _active = true; } } if (register) { bool succeeded = false; while (!succeeded) { try { // Registra a oferta no barramento IndependentClockServer.Offer = ORBInitializer.Context.OfferRegistry.registerService(_ic, _props); lock (_lock) { // libera o registerer para novo uso _active = false; } succeeded = true; } // Registro catch (UnauthorizedFacets) { Console.WriteLine(Resources.UnauthorizedFacets); } // Barramento catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } finally { if (!succeeded) { Thread.Sleep(_waitTime); } } } } }
private static void InvalidLogin(Connection conn, LoginInfo login) { bool succeeded = false; while (!succeeded) { try { // Faz o login conn.LoginByCertificate(_entity, _privateKey); succeeded = true; } // Login catch (AlreadyLoggedInException) { // Ignora o erro e retorna, pois já está reautenticado e portanto já há uma thread tentando registrar return; } catch (AccessDenied) { Console.WriteLine(Resources.ServerAccessDenied); } catch (MissingCertificate) { Console.WriteLine(Resources.MissingCertificateForEntity + _entity); } // Barramento catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } if (succeeded) { // Inicia o processo de re-registro da oferta _registerer.Activate(); } else { Thread.Sleep(_interval); } } }
private static void Main(String[] args) { // Obtém dados através dos argumentos string host = args[0]; ushort port = Convert.ToUInt16(args[1]); string domain = args[2]; string entity = args[3]; byte[] password = new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : entity); // Cria conexão e a define como conexão padrão tanto para entrada como saída. // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos. ORBInitializer.InitORB(); OpenBusContext context = ORBInitializer.Context; Connection conn = context.ConnectByAddress(host, port); context.SetDefaultConnection(conn); // Pergunta ao usuário qual língua deseja utilizar Console.WriteLine(Resources.GreetingsWhichLanguage); string language = Console.ReadLine(); if (language == null) { Console.WriteLine(Resources.GreetingsLanguageReadErrorMsg); Environment.Exit(1); } string greetingsIDLType = Repository.GetRepositoryID(typeof(Greetings)); ServiceOfferDesc[] offers = null; try { // Faz o login conn.LoginByPassword(entity, password, domain); // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico // propriedade gerada automaticamente ServiceProperty autoProp1 = new ServiceProperty("openbus.component.interface", greetingsIDLType); // propriedade definida pelo serviço greetings ServiceProperty prop = new ServiceProperty("offer.domain", "Demo Greetings"); ServiceProperty[] properties; if (!language.Equals("")) { ServiceProperty autoProp2 = new ServiceProperty( "openbus.component.name", language.ToLower()); properties = new[] { prop, autoProp1, autoProp2 }; } else { Console.WriteLine(Resources.GreetingsNoLanguageSpecified); properties = new[] { prop, autoProp1 }; } offers = context.OfferRegistry.findServices(properties); } catch (AccessDenied) { Console.WriteLine(Resources.ClientAccessDenied + entity + "."); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } // analiza as ofertas encontradas if (offers != null) { if (offers.Length < 1) { Console.WriteLine(Resources.ServiceNotFound); } else { if (offers.Length > 1) { Console.WriteLine(Resources.ServiceFoundMoreThanExpected); } foreach (ServiceOfferDesc serviceOfferDesc in offers) { Console.WriteLine(Resources.ServiceFoundTesting); try { int hours = DateTime.Now.TimeOfDay.Hours; MarshalByRefObject greetObj = hours < 12 ? serviceOfferDesc.service_ref. getFacetByName("GoodMorning") : serviceOfferDesc.service_ref. getFacetByName(hours >= 18 ? "GoodNight" : "GoodAfternoon"); if (greetObj == null) { Console.WriteLine(Resources.FacetNotFoundInOffer); continue; } Greetings greetings = greetObj as Greetings; if (greetings == null) { Console.WriteLine(Resources.FacetFoundWrongType); continue; } Console.WriteLine(Resources.OfferFound); // utiliza o serviço Console.WriteLine((string)greetings.sayGreetings()); } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } } } } try { conn.Logout(); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } Console.WriteLine(Resources.ClientOK); Console.ReadKey(); }
private void Find() { try { // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico ServiceOfferDesc[] offers = null; while (true) { try { offers = ORBInitializer.Context.OfferRegistry.findServices(_properties); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } // analiza as ofertas encontradas bool foundClock = false; if (offers != null) { if (offers.Length < 1) { Console.WriteLine(Resources.ServiceNotFound); } else { if (offers.Length > 1) { Console.WriteLine(Resources.ServiceFoundMoreThanExpected); } foreach (ServiceOfferDesc serviceOfferDesc in offers) { Console.WriteLine(Resources.ServiceFoundTesting); try { MarshalByRefObject clockObj = serviceOfferDesc.service_ref.getFacet( Repository.GetRepositoryID(typeof(Clock))); if (clockObj == null) { Console.WriteLine(Resources.FacetNotFoundInOffer); continue; } Clock clock = clockObj as Clock; if (clock == null) { Console.WriteLine(Resources.FacetFoundWrongType); continue; } Console.WriteLine(Resources.OfferFound); // achou o serviço lock (_lock) { _clock = clock; _active = false; foundClock = true; } break; } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } } if (foundClock) { break; } Console.WriteLine(Resources.OfferFunctionalNotFound); } } Thread.Sleep(_interval); } } catch (ThreadInterruptedException) { // não faz nada, thread principal abortou essa thread } }
private static void Main() { string hostName = DemoConfig.Default.busHostName; ushort hostPort = DemoConfig.Default.busHostPort; bool useSSL = DemoConfig.Default.useSSL; string clientUser = DemoConfig.Default.clientUser; string clientThumbprint = DemoConfig.Default.clientThumbprint; string serverUser = DemoConfig.Default.serverUser; string serverThumbprint = DemoConfig.Default.serverThumbprint; ushort serverSSLPort = DemoConfig.Default.serverSSLPort; ushort serverOpenPort = DemoConfig.Default.serverOpenPort; string busIORFile = DemoConfig.Default.busIORFile; if (useSSL) { Utils.InitSSLORB(clientUser, clientThumbprint, serverUser, serverThumbprint, serverSSLPort, serverOpenPort, true, true, "required", false, false); } else { ORBInitializer.InitORB(); } //FileInfo logFileInfo = new FileInfo(DemoConfig.Default.openbusLogFile); //XmlConfigurator.ConfigureAndWatch(logFileInfo); /* * ConsoleAppender appender = new ConsoleAppender { * Threshold = Level.Fatal, * Layout = * new SimpleLayout(), * }; * BasicConfigurator.Configure(appender); */ // credential reset tests CredentialResetTest[] resetCases = new CredentialResetTest[1]; CredentialReset tempReset = new CredentialReset { session = 2 ^ 32 - 1, challenge = CreateSecret(EncryptedBlockSize.ConstVal) }; resetCases[0] = new CredentialResetTest { Reset = tempReset, Expected = InvalidRemoteCode.ConstVal }; // no permission tests NoPermissionTest[] noPermissionCases = new NoPermissionTest[12]; noPermissionCases[0] = new NoPermissionTest { Raised = 0, Expected = 0 }; noPermissionCases[1] = new NoPermissionTest { Raised = InvalidCredentialCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; noPermissionCases[2] = new NoPermissionTest { Raised = InvalidChainCode.ConstVal, Expected = InvalidChainCode.ConstVal }; noPermissionCases[3] = new NoPermissionTest { Raised = UnverifiedLoginCode.ConstVal, Expected = UnverifiedLoginCode.ConstVal }; noPermissionCases[4] = new NoPermissionTest { Raised = UnknownBusCode.ConstVal, Expected = UnknownBusCode.ConstVal }; noPermissionCases[5] = new NoPermissionTest { Raised = InvalidPublicKeyCode.ConstVal, Expected = InvalidPublicKeyCode.ConstVal }; noPermissionCases[6] = new NoPermissionTest { Raised = NoCredentialCode.ConstVal, Expected = NoCredentialCode.ConstVal }; noPermissionCases[7] = new NoPermissionTest { Raised = NoLoginCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; noPermissionCases[8] = new NoPermissionTest { Raised = InvalidRemoteCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; noPermissionCases[9] = new NoPermissionTest { Raised = UnavailableBusCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; noPermissionCases[10] = new NoPermissionTest { Raised = InvalidTargetCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; noPermissionCases[11] = new NoPermissionTest { Raised = InvalidLoginCode.ConstVal, Expected = InvalidRemoteCode.ConstVal }; ORBInitializer.InitORB(); OpenBusContext context = ORBInitializer.Context; ConnectionProperties props = new ConnectionPropertiesImpl(); Connection conn; if (useSSL) { string ior = File.ReadAllText(busIORFile); conn = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), ior), props); } else { conn = context.ConnectByAddress(hostName, hostPort, props); } context.SetDefaultConnection(conn); const string userLogin = "******"; byte[] userPassword = new ASCIIEncoding().GetBytes(userLogin); conn.LoginByPassword(userLogin, userPassword, "testing"); // propriedades geradas automaticamente ServiceProperty prop1 = new ServiceProperty("openbus.component.interface", Repository.GetRepositoryID(typeof(Server))); // propriedade definida pelo servidor protocol ServiceProperty prop2 = new ServiceProperty("offer.domain", "Interoperability Tests"); ServiceProperty[] properties = { prop1, prop2 }; List <ServiceOfferDesc> offers = Utils.FindOffer(ORBInitializer.Context.OfferRegistry, properties, 1, 10, 1); bool foundOne = false; foreach (ServiceOfferDesc serviceOfferDesc in offers) { try { string found = Utils.GetProperty(serviceOfferDesc.properties, "openbus.offer.entity"); Logger.Info("Entidade encontrada: " + found); MarshalByRefObject serverProxyObj = serviceOfferDesc.service_ref.getFacet( Repository.GetRepositoryID(typeof(Server))); if (serverProxyObj == null) { Logger.Info( "Não foi possível encontrar uma faceta com esse nome."); continue; } Server serverProxy = serverProxyObj as Server; if (serverProxy == null) { Logger.Info("Faceta encontrada não implementa Server."); continue; } foundOne = true; // inicio dos testes serverProxy.NonBusCall(); foreach (CredentialResetTest test in resetCases) { bool error = false; try { serverProxy.ResetCredentialWithChallenge(test.Reset.session, test.Reset.challenge); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { throw; } npe = npe ?? (NO_PERMISSION)e; error = true; Assert.AreEqual(test.Expected, npe.Minor); Assert.AreEqual(CompletionStatus.Completed_No, npe.Status); } Assert.IsTrue(error); } foreach (NoPermissionTest test in noPermissionCases) { bool error = false; try { serverProxy.RaiseNoPermission(test.Raised); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { throw; } npe = npe ?? (NO_PERMISSION)e; error = true; Assert.AreEqual(test.Expected, npe.Minor); Assert.AreEqual(CompletionStatus.Completed_No, npe.Status); } Assert.IsTrue(error); } } catch (TRANSIENT) { Logger.Info( "Uma das ofertas obtidas é de um cliente inativo. Tentando a próxima."); } } conn.Logout(); Assert.IsTrue(foundOne); Logger.Info("Fim."); }
private CollaborationRegistry GetCollabs() { bool find = _collabs == null; if (!find) { try { find = !_context.ORB.non_existent(_collabs); } catch (Exception) { find = true; } } if (find) { ServiceProperty[] serviceProperties = new ServiceProperty[1]; string collabsRegType = Repository.GetRepositoryID(typeof(CollaborationRegistry)); serviceProperties[0] = new ServiceProperty("openbus.component.interface", collabsRegType); ServiceOfferDesc[] services = _context.OfferRegistry.findServices(serviceProperties); foreach (ServiceOfferDesc offerDesc in services) { try { MarshalByRefObject obj = offerDesc.service_ref.getFacet(collabsRegType); if (obj == null) { continue; } _collabs = obj as CollaborationRegistry; if (_collabs != null) { break; // found one } } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { npe = e.InnerException as NO_PERMISSION; } // caso não seja uma NO_PERMISSION{NoLogin} descarta essa oferta. if ((npe == null) && (!(e is NO_PERMISSION))) { continue; } npe = npe ?? e as NO_PERMISSION; switch (npe.Minor) { case NoLoginCode.ConstVal: throw; } } } } return(_collabs); }
private static void Main(String[] args) { // Obtém dados através dos argumentos _host = args[0]; _port = Convert.ToUInt16(args[1]); _domain = args[2]; _entity = args[3]; _password = new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : _entity); // Cria conexão e a define como conexão padrão tanto para entrada como saída. ORBInitializer.InitORB(); OpenBusContext context = ORBInitializer.Context; context.SetDefaultConnection(NewLogin()); ServiceOfferDesc[] offers = null; try { // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico // propriedade gerada automaticamente ServiceProperty autoProp = new ServiceProperty("openbus.component.interface", TimerIDLType); // propriedade definida pelo serviço timer ServiceProperty prop = new ServiceProperty("offer.domain", "Demo Multiplexing"); ServiceProperty[] properties = { prop, autoProp }; offers = context.OfferRegistry.findServices(properties); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } if (offers != null) { for (int i = 0; i < offers.Length; i++) { // garante espera de no mínimo 5s para que dê tempo do cliente executar // todas as chamadas e aumentar o número de notificações esperadas StartTheThread(i + 5, offers[i], Thread.CurrentThread); } } // Mantém a thread ativa para aguardar requisições try { Thread.Sleep(Timeout.Infinite); } catch (ThreadInterruptedException) { // Se a thread for acordada, é porque não há mais requisições pendentes Console.WriteLine(Resources.ClientOK); } // Faz logout da conexão usada nessa thread try { context.GetDefaultConnection().Logout(); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } Console.ReadKey(); }
private static void UseOffer(double timeout, ServiceOfferDesc desc, Thread wThread) { Connection conn = NewLogin(); if (!conn.Login.HasValue) { return; } OpenBusContext context = ORBInitializer.Context; context.SetCurrentConnection(conn); bool failed = true; try { MarshalByRefObject timerObj = desc.service_ref.getFacet(TimerIDLType); if (timerObj == null) { Console.WriteLine(Resources.FacetNotFoundInOffer); return; } Timer timer = timerObj as Timer; if (timer == null) { Console.WriteLine(Resources.FacetFoundWrongType); return; } Console.WriteLine(Resources.OfferFound); // utiliza o serviço timer.newTrigger(timeout, new CallbackImpl(conn.Login.Value.id, desc, wThread)); failed = false; } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } finally { try { context.SetCurrentConnection(null); conn.Logout(); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } if (!failed) { Pending++; } } }
public void showMessage(string message) { CallerChain chain = ORBInitializer.Context.CallerChain; Console.WriteLine(Resources.CallChainProxyForwardingMessage + ChainToString.ToString(chain)); OpenBusContext context = ORBInitializer.Context; context.JoinChain(chain); foreach (ServiceOfferDesc offer in Proxy.Offers) { try { MarshalByRefObject messengerObj = offer.service_ref.getFacet(_messengerType); if (messengerObj == null) { Console.WriteLine(Resources.FacetNotFoundInOffer); continue; } Messenger messenger = messengerObj as Messenger; if (messenger == null) { Console.WriteLine(Resources.FacetFoundWrongType); continue; } Console.WriteLine(Resources.OfferFound); // utiliza o serviço messenger.showMessage(message); return; } catch (Unauthorized) { } catch (Unavailable) { } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? e as NO_PERMISSION; bool found = false; string msg = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: msg = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: msg = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: msg = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: msg = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(msg); } else { throw; } } } Console.WriteLine(Resources.CallChainProxyUnavailableMessage); throw new Unavailable(); }
private static void PrintTime() { while (true) { bool failed = true; Clock clock = _finder.Clock; if (clock != null) { try { // utiliza o serviço long ticks = clock.getTimeInTicks(); Console.WriteLine("Hora do servidor: {0:HH:mm:ss}", new DateTime(ticks)); failed = false; } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } if (failed) { // descarta o clock atual e busca um novo _finder.Clock = null; } } if (failed) { _finder.Activate(); Console.WriteLine("Hora local: {0:HH:mm:ss}", DateTime.Now); } Thread.Sleep(_interval); } }
private static void Main(String[] args) { // Registra handler para o caso do processo ser finalizado AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit; // Obtém dados através dos argumentos string host = args[0]; ushort port = Convert.ToUInt16(args[1]); string entity = args[2]; AsymmetricCipherKeyPair privateKey = Crypto.ReadKeyFile(args[3]); // Associa uma callback de escolha de conexão de despacho ORBInitializer.InitORB(); OpenBusContext context = ORBInitializer.Context; context.OnCallDispatch = Dispatch; // Cria 3 conexões com o mesmo barramento, uma para cada componente. for (int i = 0; i < 3; i++) { ComponentContext component = new DefaultComponentContext(new ComponentId("Timer", 1, 0, 0, ".net")); // Cria a faceta Timer para o componente TimerImpl timer = new TimerImpl(); component.AddFacet("Timer", Repository.GetRepositoryID(typeof(Timer)), timer); // Define propriedades para a oferta de serviço a ser registrada no barramento IComponent ic = component.GetIComponent(); ServiceProperty[] properties = { new ServiceProperty( "offer.domain", "Demo Multiplexing") }; // Cria a conexão e a define como conexão corrente Connection conn = context.ConnectByAddress(host, port); context.SetCurrentConnection(conn); // Associa a conexão à URI do servant para que a callback possa escolher lock (Connections){ Connections.Add(RemotingServices.GetObjectUri(timer), conn); } bool failed = true; try { // Faz o login conn.LoginByCertificate(entity, privateKey); // Registra a oferta no barramento Offers.Add(conn, context.OfferRegistry.registerService(ic, properties)); failed = false; } // Login catch (AccessDenied) { Console.WriteLine(Resources.ServerAccessDenied); } catch (MissingCertificate) { Console.WriteLine(Resources.MissingCertificateForEntity + entity); } // Registro catch (UnauthorizedFacets) { Console.WriteLine(Resources.UnauthorizedFacets); } // Barramento catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } finally { if (failed) { Exit(1); } } } // Mantém a thread ativa para aguardar requisições Console.WriteLine(Resources.ServerOK); Thread.Sleep(Timeout.Infinite); }
private static void Main(String[] args) { // Obtém dados através dos argumentos string host = args[0]; ushort port = Convert.ToUInt16(args[1]); string domain = args[2]; string entity = args[3]; byte[] password = new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : entity); // Cria conexão e a define como conexão padrão tanto para entrada como saída. // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos. ORBInitializer.InitORB(); OpenBusContext context = ORBInitializer.Context; Connection conn = context.ConnectByAddress(host, port); context.SetDefaultConnection(conn); string helloIDLType = Repository.GetRepositoryID(typeof(Hello)); ServiceOfferDesc[] offers = null; try { // Faz o login conn.LoginByPassword(entity, password, domain); // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico // propriedade gerada automaticamente ServiceProperty autoProp = new ServiceProperty("openbus.component.interface", helloIDLType); // propriedade definida pelo serviço hello ServiceProperty prop = new ServiceProperty("offer.domain", "Demo Hello"); ServiceProperty[] properties = { prop, autoProp }; offers = context.OfferRegistry.findServices(properties); } catch (AccessDenied) { Console.WriteLine(Resources.ClientAccessDenied + entity + "."); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; if (npe.Minor == NoLoginCode.ConstVal) { Console.WriteLine(Resources.NoLoginCodeErrorMsg); } else { throw; } } // analiza as ofertas encontradas bool failed = true; if (offers != null) { if (offers.Length < 1) { Console.WriteLine(Resources.ServiceNotFound); } else { if (offers.Length > 1) { Console.WriteLine(Resources.ServiceFoundMoreThanExpected); } foreach (ServiceOfferDesc serviceOfferDesc in offers) { Console.WriteLine(Resources.ServiceFoundTesting); try { MarshalByRefObject helloObj = serviceOfferDesc.service_ref.getFacet(helloIDLType); if (helloObj == null) { Console.WriteLine(Resources.FacetNotFoundInOffer); continue; } Hello hello = helloObj as Hello; if (hello == null) { Console.WriteLine(Resources.FacetFoundWrongType); continue; } Console.WriteLine(Resources.OfferFound); // utiliza o serviço hello.sayHello(); failed = false; break; } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? (NO_PERMISSION)e; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } } if (failed) { Console.WriteLine(Resources.OfferFunctionalNotFound); } } } try { conn.Logout(); } catch (ServiceFailure e) { Console.WriteLine(Resources.BusServiceFailureErrorMsg); Console.WriteLine(e); } catch (TRANSIENT) { Console.WriteLine(Resources.BusTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.BusCommFailureErrorMsg); } if (!failed) { Console.WriteLine(Resources.ClientOK); } Console.ReadKey(); }
private static void NotifyTrigger(Connection current, CallerChain chain, double timeout, Callback cb) { Thread.Sleep(Convert.ToInt32(timeout * 1000)); OpenBusContext context = ORBInitializer.Context; context.SetCurrentConnection(current); context.JoinChain(chain); try { // utiliza o serviço cb.notifyTrigger(); } catch (TRANSIENT) { Console.WriteLine(Resources.ServiceTransientErrorMsg); } catch (COMM_FAILURE) { Console.WriteLine(Resources.ServiceCommFailureErrorMsg); } catch (Exception e) { NO_PERMISSION npe = null; if (e is TargetInvocationException) { // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION npe = e.InnerException as NO_PERMISSION; } if ((npe == null) && (!(e is NO_PERMISSION))) { // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar. throw; } npe = npe ?? e as NO_PERMISSION; bool found = false; string message = String.Empty; switch (npe.Minor) { case NoLoginCode.ConstVal: message = Resources.NoLoginCodeErrorMsg; found = true; break; case UnknownBusCode.ConstVal: message = Resources.UnknownBusCodeErrorMsg; found = true; break; case UnverifiedLoginCode.ConstVal: message = Resources.UnverifiedLoginCodeErrorMsg; found = true; break; case InvalidRemoteCode.ConstVal: message = Resources.InvalidRemoteCodeErrorMsg; found = true; break; } if (found) { Console.WriteLine(message); } else { throw; } } }