public override void Connect(FrontendManager fm, ServerModel server) { Trace.Call(fm, server); if (fm == null) { throw new ArgumentNullException("fm"); } if (server == null) { throw new ArgumentNullException("server"); } if (server is XmppServerModel) { Server = (XmppServerModel) server; } else { Server = new XmppServerModel(); if (server.ServerID != null) { Server.Load(Session.UserConfig, server.ServerID); } // HACK: previous line overwrites any passed values with the values from config // thus we have to copy the original values: Server.Hostname = server.Hostname; Server.Network = server.Network; Server.OnConnectCommands = server.OnConnectCommands; Server.OnStartupConnect = server.OnStartupConnect; Server.Password = server.Password; Server.Port = server.Port; Server.Protocol = server.Protocol; Server.ServerID = server.ServerID; Server.UseEncryption = server.UseEncryption; Server.Username = server.Username; Server.ValidateServerCertificate = server.ValidateServerCertificate; } Host = server.Hostname; Port = server.Port; ApplyConfig(Session.UserConfig, Server); // TODO: use config for single network chat or once per network manager NetworkChat = Session.CreateChat<ProtocolChatModel>( NetworkID, "Jabber " + Host, this ); Session.AddChat(NetworkChat); Session.SyncChat(NetworkChat); OpenContactChat(); if (!String.IsNullOrEmpty(JabberClient.ProxyHost)) { var builder = CreateMessageBuilder(); builder.AppendEventPrefix(); builder.AppendText(_("Using proxy: {0}:{1}"), JabberClient.ProxyHost, JabberClient.ProxyPort); Session.AddMessageToChat(Chat, builder.ToMessage()); } JabberClient.Connect(); }
private void ApplyConfig(UserConfig config, XmppServerModel server) { if (server.Username.Contains("@")) { var jid_user = server.Username.Split('@')[0]; var jid_host = server.Username.Split('@')[1]; JabberClient.NetworkHost = server.Hostname; JabberClient.User = jid_user; JabberClient.Server = jid_host; } else { JabberClient.Server = server.Hostname; JabberClient.User = server.Username; } JabberClient.Port = server.Port; JabberClient.Password = server.Password; Me = CreatePerson( String.Format("{0}@{1}", JabberClient.User, JabberClient.Server ), JabberClient.User ); Me.IdentityNameColored.ForegroundColor = new TextColor(0, 0, 255); Me.IdentityNameColored.BackgroundColor = TextColor.None; Me.IdentityNameColored.Bold = true; // XMPP specific settings JabberClient.Resource = server.Resource; JabberClient.OnInvalidCertificate -= ValidateCertificate; JabberClient.AutoStartTLS = server.UseEncryption; if (!server.ValidateServerCertificate) { JabberClient.OnInvalidCertificate += ValidateCertificate; } var proxySettings = new ProxySettings(); proxySettings.ApplyConfig(Session.UserConfig); var protocol = server.UseEncryption ? "xmpps" : "xmpp"; var serverUri = String.Format("{0}://{1}:{2}", protocol, server.Hostname, server.Port); var proxy = proxySettings.GetWebProxy(serverUri); if (proxy == null) { JabberClient.Proxy = XmppProxyType.None; } else { var proxyScheme = proxy.Address.Scheme; var xmppProxyType = XmppProxyType.None; try { // HACK: map proxy scheme to SmartIrc4net's ProxyType xmppProxyType = (XmppProxyType) Enum.Parse( typeof(XmppProxyType), proxyScheme, true ); } catch (ArgumentException ex) { #if LOG4NET _Logger.Error("ApplyConfig(): Couldn't parse proxy type: " + proxyScheme, ex); #endif } JabberClient.Proxy = xmppProxyType; JabberClient.ProxyHost = proxy.Address.Host; JabberClient.ProxyPort = proxy.Address.Port; JabberClient.ProxyUsername = proxySettings.ProxyUsername; JabberClient.ProxyPassword = proxySettings.ProxyPassword; } }
public void CommandConnect(CommandModel cd) { FrontendManager fm = cd.FrontendManager; var server = new XmppServerModel(); if (cd.DataArray.Length >= 3) { server.Hostname = cd.DataArray[2]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 4) { try { server.Port = Int32.Parse(cd.DataArray[3]); } catch (FormatException) { var builder = CreateMessageBuilder(); builder.AppendText(_("Invalid port: {0}"), cd.DataArray[3]); fm.AddMessageToChat(cd.Chat, builder.ToMessage()); return; } } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 5) { server.Username = cd.DataArray[4]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 6) { server.Password = cd.DataArray[5]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 7) { server.Resource = cd.DataArray[6]; } Connect(fm, server); }
public override void Connect(FrontendManager fm, ServerModel server) { Trace.Call(fm, server); if (server == null) { throw new ArgumentNullException("server"); } if (server is XmppServerModel) { Server = (XmppServerModel) server; } else { Server = new XmppServerModel(); if (server.ServerID != null) { Server.Load(Session.UserConfig, Protocol, server.ServerID); } // HACK: previous line overwrites any passed values with the values from config // thus we have to copy the original values: Server.Hostname = server.Hostname; Server.Network = server.Network; Server.OnConnectCommands = server.OnConnectCommands; Server.OnStartupConnect = server.OnStartupConnect; Server.Password = server.Password; Server.Port = server.Port; Server.Protocol = server.Protocol; Server.ServerID = server.ServerID; Server.UseEncryption = server.UseEncryption; Server.Username = server.Username; Server.ValidateServerCertificate = server.ValidateServerCertificate; } Host = Server.Hostname; Port = Server.Port; // TODO: use config for single network chat or once per network manager NetworkChat = Session.CreateChat<ProtocolChatModel>( NetworkID, String.Format("{0} {1}", Protocol, Host), this ); Session.AddChat(NetworkChat); if (Host.EndsWith("facebook.com") && !(this is FacebookProtocolManager)) { var builder = CreateMessageBuilder(); builder.AppendEventPrefix(); builder.AppendMessage(_("This engine has native Facebook support, you should be using it instead of connecting to Facebook with XMPP")); // cannot use AddMessageToFrontend because NetworkChat is not yet synced, causing AddMessageToFrontend to drop it. // cannot sync NetworkChat before this, because then the sync would swallow the message Session.AddMessageToChat(NetworkChat, builder.ToMessage()); } Session.SyncChat(NetworkChat); Connect(); }
void ApplyConfig(UserConfig config, XmppServerModel server) { if (String.IsNullOrEmpty(server.Nickname)) { Nicknames = (string[]) config["Connection/Nicknames"]; } else { Nicknames = new string[] { server.Nickname }; } if (server.Username.Contains("@")) { var jid_user = server.Username.Split('@')[0]; var jid_host = server.Username.Split('@')[1]; JabberClient.ConnectServer = server.Hostname; JabberClient.AutoResolveConnectServer = false; JabberClient.Username = jid_user; JabberClient.Server = jid_host; } else { JabberClient.Server = server.Hostname; JabberClient.Username = server.Username; } JabberClient.Port = server.Port; JabberClient.Password = server.Password; var proxySettings = new ProxySettings(); proxySettings.ApplyConfig(config); var protocol = Server.UseEncryption ? "xmpps" : "xmpp"; var serverUri = String.Format("{0}://{1}:{2}", protocol, Server.Hostname, Server.Port); var proxy = proxySettings.GetWebProxy(serverUri); var socket = JabberClient.ClientSocket as ClientSocket; if (proxy == null) { socket.Proxy = null; } else { var builder = CreateMessageBuilder(); builder.AppendEventPrefix(); builder.AppendText(_("Using proxy: {0}:{1}"), proxy.Address.Host, proxy.Address.Port); Session.AddMessageToChat(Chat, builder.ToMessage()); var proxyScheme = proxy.Address.Scheme; var proxyType = Starksoft.Net.Proxy.ProxyType.None; try { proxyType = (Starksoft.Net.Proxy.ProxyType) Enum.Parse( typeof(Starksoft.Net.Proxy.ProxyType), proxy.Address.Scheme, true ); } catch (ArgumentException ex) { #if LOG4NET _Logger.Error("ApplyConfig(): Couldn't parse proxy type: " + proxyScheme, ex); #endif } var proxyFactory = new ProxyClientFactory(); if (String.IsNullOrEmpty(proxySettings.ProxyUsername) && String.IsNullOrEmpty(proxySettings.ProxyPassword)) { socket.Proxy = proxyFactory.CreateProxyClient( proxyType, proxy.Address.Host, proxy.Address.Port ); } else { socket.Proxy = proxyFactory.CreateProxyClient( proxyType, proxy.Address.Host, proxy.Address.Port, proxySettings.ProxyUsername, proxySettings.ProxyPassword ); } } Me = new PersonModel( JabberClient.MyJID.Bare, Nicknames[0], NetworkID, Protocol, this ); Me.IdentityNameColored.ForegroundColor = new TextColor(0, 0, 255); Me.IdentityNameColored.BackgroundColor = TextColor.None; Me.IdentityNameColored.Bold = true; // XMPP specific settings JabberClient.Resource = server.Resource; if (server.UseEncryption) { // HACK: Google Talk doesn't support StartTLS :( if (server.Hostname == "talk.google.com" && server.Port == 5223) { JabberClient.ForceStartTls = false; JabberClient.UseSSL = true; } else { JabberClient.ForceStartTls = true; } } else { JabberClient.ForceStartTls = false; JabberClient.UseStartTLS = true; } if (!server.ValidateServerCertificate) { JabberClient.ClientSocket.OnValidateCertificate += ValidateCertificate; } }
public void CommandConnect(CommandModel cd) { FrontendManager fm = cd.FrontendManager; var server = new XmppServerModel(); if (cd.DataArray.Length >= 3) { server.Hostname = cd.DataArray[2]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 4) { try { server.Port = Int32.Parse(cd.DataArray[3]); } catch (FormatException) { fm.AddTextToChat( cd.Chat, "-!- " + String.Format( _("Invalid port: {0}"), cd.DataArray[3])); return; } } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 5) { server.Username = cd.DataArray[4]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 6) { server.Password = cd.DataArray[5]; } else { NotEnoughParameters(cd); return; } if (cd.DataArray.Length >= 7) { server.Resource = cd.DataArray[6]; } Connect(fm, server); }
public override void Connect(FrontendManager fm, ServerModel server) { Trace.Call(fm, server); if (server == null) { throw new ArgumentNullException("server"); } if (server is XmppServerModel) { Server = (XmppServerModel) server; } else { Server = new XmppServerModel(); if (server.ServerID != null) { Server.Load(Session.UserConfig, server.ServerID); } // HACK: previous line overwrites any passed values with the values from config // thus we have to copy the original values: Server.Hostname = server.Hostname; Server.Network = server.Network; Server.OnConnectCommands = server.OnConnectCommands; Server.OnStartupConnect = server.OnStartupConnect; Server.Password = server.Password; Server.Port = server.Port; Server.Protocol = server.Protocol; Server.ServerID = server.ServerID; Server.UseEncryption = server.UseEncryption; Server.Username = server.Username; Server.ValidateServerCertificate = server.ValidateServerCertificate; } Host = Server.Hostname; Port = Server.Port; // TODO: use config for single network chat or once per network manager NetworkChat = Session.CreateChat<ProtocolChatModel>( NetworkID, String.Format("{0} {1}", Protocol, Host), this ); Session.AddChat(NetworkChat); Session.SyncChat(NetworkChat); Connect(); }