private bool ProcessRequest() { CultureInfo locale; try { locale = (CultureInfo)_connection.ReadObject(); } catch (EndOfStreamException) { return(false); } //We can't set this because C# does not like language-neutral //cultures for CurrentCulture - this tends to blow up //TODO: think more about this... //Thread.CurrentThread.CurrentCulture = locale; Thread.CurrentThread.CurrentUICulture = locale; GuardedString key = (GuardedString)_connection.ReadObject(); bool authorized; try { authorized = key.VerifyBase64SHA1Hash(_server.KeyHash); } finally { key.Dispose(); } Org.IdentityConnectors.Framework.Common.Exceptions.InvalidCredentialException authException = null; if (!authorized) { authException = new Org.IdentityConnectors.Framework.Common.Exceptions.InvalidCredentialException("Remote framework key is invalid"); } Object requestObject = _connection.ReadObject(); if (requestObject is HelloRequest) { if (authException != null) { HelloResponse response = new HelloResponse(authException, null, null, null); _connection.WriteObject(response); } else { HelloResponse response = ProcessHelloRequest((HelloRequest)requestObject); _connection.WriteObject(response); } } else if (requestObject is OperationRequest) { if (authException != null) { OperationResponsePart part = new OperationResponsePart(authException, null); _connection.WriteObject(part); } else { OperationRequest opRequest = (OperationRequest)requestObject; OperationResponsePart part = ProcessOperationRequest(opRequest); _connection.WriteObject(part); } } else if (requestObject is EchoMessage) { if (authException != null) { //echo message probably doesn't need auth, but //it couldn't hurt - actually it does for test connection EchoMessage part = new EchoMessage(authException, null); _connection.WriteObject(part); } else { EchoMessage message = (EchoMessage)requestObject; Object obj = message.Object; String xml = message.ObjectXml; if (xml != null) { Console.WriteLine("xml: \n" + xml); Object xmlClone = SerializerUtil.DeserializeXmlObject(xml, true); xml = SerializerUtil.SerializeXmlObject(xmlClone, true); } EchoMessage message2 = new EchoMessage(obj, xml); _connection.WriteObject(message2); } } else { throw new Exception("Unexpected request: " + requestObject); } return(true); }
public void TestExceptions() { { AlreadyExistsException v1 = new AlreadyExistsException("ex"); AlreadyExistsException v2 = (AlreadyExistsException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConfigurationException v1 = new ConfigurationException("ex"); ConfigurationException v2 = (ConfigurationException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConnectionBrokenException v1 = new ConnectionBrokenException("ex"); ConnectionBrokenException v2 = (ConnectionBrokenException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConnectionFailedException v1 = new ConnectionFailedException("ex"); ConnectionFailedException v2 = (ConnectionFailedException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConnectorException v1 = new ConnectorException("ex"); ConnectorException v2 = (ConnectorException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConnectorIOException v1 = new ConnectorIOException("ex"); ConnectorIOException v2 = (ConnectorIOException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ConnectorSecurityException v1 = new ConnectorSecurityException("ex"); ConnectorSecurityException v2 = (ConnectorSecurityException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { InvalidCredentialException v1 = new InvalidCredentialException("ex"); InvalidCredentialException v2 = (InvalidCredentialException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { InvalidPasswordException v1 = new InvalidPasswordException("ex"); InvalidPasswordException v2 = (InvalidPasswordException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { PasswordExpiredException v1 = new PasswordExpiredException("ex"); v1.Uid = (new Uid("myuid")); PasswordExpiredException v2 = (PasswordExpiredException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); Assert.AreEqual("myuid", v2.Uid.GetUidValue()); } { OperationTimeoutException v1 = new OperationTimeoutException("ex"); OperationTimeoutException v2 = (OperationTimeoutException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { PermissionDeniedException v1 = new PermissionDeniedException("ex"); PermissionDeniedException v2 = (PermissionDeniedException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { UnknownUidException v1 = new UnknownUidException("ex"); UnknownUidException v2 = (UnknownUidException)CloneObject(v1); Assert.AreEqual("ex", v2.Message); } { ArgumentException v1 = new ArgumentException("my msg"); ArgumentException v2 = (ArgumentException)CloneObject(v1); Assert.AreEqual("my msg", v2.Message); } { ArgumentNullException v1 = new ArgumentNullException(null, "my msg 1"); ArgumentException v2 = (ArgumentException)CloneObject(v1); Assert.AreEqual("my msg 1", v2.Message); } { Exception v1 = new Exception("my msg2"); Exception v2 = (Exception)CloneObject(v1); Assert.AreEqual("my msg2", v2.Message); } }