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;
}
}