61
61
private static readonly log4net.ILog _Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
63
private JabberClient _JabberClient;
64
private RosterManager _RosterManager;
65
private ConferenceManager _ConferenceManager;
66
private FrontendManager _FrontendManager;
67
private ChatModel _NetworkChat;
63
JabberClient JabberClient { get; set; }
64
RosterManager RosterManager { get; set; }
65
ConferenceManager ConferenceManager { get; set; }
66
PresenceManager PresenceManager { get; set; }
68
ChatModel NetworkChat { get; set; }
69
GroupChatModel ContactChat { get; set; }
71
XmppServerModel Server { get; set; }
73
// facebook messed up, this is part of a hack to fix that messup
74
string LastSentMessage { get; set; }
75
bool SupressLocalMessageEcho { get; set; }
69
77
public override string NetworkID {
71
if (!String.IsNullOrEmpty(_JabberClient.NetworkHost)) {
72
return _JabberClient.NetworkHost;
79
if (!String.IsNullOrEmpty(JabberClient.NetworkHost)) {
80
return JabberClient.NetworkHost;
74
if (!String.IsNullOrEmpty(_JabberClient.Server)) {
75
return _JabberClient.Server;
82
if (!String.IsNullOrEmpty(JabberClient.Server)) {
83
return JabberClient.Server;
95
103
Trace.Call(session);
97
_JabberClient = new JabberClient();
98
_JabberClient.Resource = "Smuxi";
99
_JabberClient.AutoLogin = true;
100
_JabberClient.AutoPresence = false;
101
_JabberClient.OnStreamInit += OnStreamInit;
102
_JabberClient.OnMessage += OnMessage;
103
_JabberClient.OnConnect += OnConnect;
104
_JabberClient.OnDisconnect += OnDisconnect;
105
_JabberClient.OnAuthenticate += OnAuthenticate;
106
_JabberClient.OnError += OnError;
107
_JabberClient.OnProtocol += OnProtocol;
108
_JabberClient.OnWriteText += OnWriteText;
109
_JabberClient.OnIQ += OnIQ;
111
_RosterManager = new RosterManager();
112
_RosterManager.Stream = _JabberClient;
114
_ConferenceManager = new ConferenceManager();
115
_ConferenceManager.Stream = _JabberClient;
116
_ConferenceManager.OnJoin += OnJoin;
117
_ConferenceManager.OnLeave += OnLeave;
118
_ConferenceManager.OnParticipantJoin += OnParticipantJoin;
119
_ConferenceManager.OnParticipantLeave += OnParticipantLeave;
105
JabberClient = new JabberClient();
106
JabberClient.Resource = "Smuxi";
107
JabberClient.AutoLogin = true;
108
JabberClient.AutoPresence = false;
109
JabberClient.OnStreamInit += OnStreamInit;
110
JabberClient.OnMessage += OnMessage;
111
JabberClient.OnConnect += OnConnect;
112
JabberClient.OnDisconnect += OnDisconnect;
113
JabberClient.OnAuthenticate += OnAuthenticate;
114
JabberClient.OnError += OnError;
115
JabberClient.OnProtocol += OnProtocol;
116
JabberClient.OnWriteText += OnWriteText;
117
JabberClient.OnIQ += OnIQ;
119
RosterManager = new RosterManager();
120
RosterManager.Stream = JabberClient;
121
RosterManager.OnRosterItem += OnRosterItem;
123
PresenceManager = new PresenceManager();
124
PresenceManager.Stream = JabberClient;
125
JabberClient.OnPresence += OnPresence;
127
ConferenceManager = new ConferenceManager();
128
ConferenceManager.Stream = JabberClient;
129
ConferenceManager.OnJoin += OnJoin;
130
ConferenceManager.OnLeave += OnLeave;
131
ConferenceManager.OnParticipantJoin += OnParticipantJoin;
132
ConferenceManager.OnParticipantLeave += OnParticipantLeave;
122
135
public override void Connect(FrontendManager fm, ServerModel server)
129
142
if (server == null) {
130
143
throw new ArgumentNullException("server");
133
_FrontendManager = fm;
146
if (server is XmppServerModel) {
147
Server = (XmppServerModel) server;
149
Server = new XmppServerModel();
150
if (server.ServerID != null) {
151
Server.Load(Session.UserConfig, server.ServerID);
153
// HACK: previous line overwrites any passed values with the values from config
154
// thus we have to copy the original values:
155
Server.Hostname = server.Hostname;
156
Server.Network = server.Network;
157
Server.OnConnectCommands = server.OnConnectCommands;
158
Server.OnStartupConnect = server.OnStartupConnect;
159
Server.Password = server.Password;
160
Server.Port = server.Port;
161
Server.Protocol = server.Protocol;
162
Server.ServerID = server.ServerID;
163
Server.UseEncryption = server.UseEncryption;
164
Server.Username = server.Username;
165
Server.ValidateServerCertificate = server.ValidateServerCertificate;
134
168
Host = server.Hostname;
135
169
Port = server.Port;
137
ApplyConfig(Session.UserConfig, server);
171
ApplyConfig(Session.UserConfig, Server);
139
173
// TODO: use config for single network chat or once per network manager
140
_NetworkChat = Session.CreateChat<ProtocolChatModel>(
174
NetworkChat = Session.CreateChat<ProtocolChatModel>(
141
175
NetworkID, "Jabber " + Host, this
143
Session.AddChat(_NetworkChat);
144
Session.SyncChat(_NetworkChat);
146
if (!String.IsNullOrEmpty(_JabberClient.ProxyHost)) {
177
Session.AddChat(NetworkChat);
178
Session.SyncChat(NetworkChat);
182
if (!String.IsNullOrEmpty(JabberClient.ProxyHost)) {
147
183
var builder = CreateMessageBuilder();
148
184
builder.AppendEventPrefix();
149
185
builder.AppendText(_("Using proxy: {0}:{1}"),
150
_JabberClient.ProxyHost,
151
_JabberClient.ProxyPort);
186
JabberClient.ProxyHost,
187
JabberClient.ProxyPort);
152
188
Session.AddMessageToChat(Chat, builder.ToMessage());
154
_JabberClient.Connect();
190
JabberClient.Connect();
157
193
public override void Reconnect(FrontendManager fm)
161
_JabberClient.Close();
162
_JabberClient.Connect();
197
JabberClient.Close();
198
JabberClient.Connect();
165
201
public override void Disconnect(FrontendManager fm)
169
_JabberClient.Close(false);
205
JabberClient.Close(false);
172
208
public override void Dispose()
196
232
Trace.Call(filter);
198
throw new NotImplementedException();
234
var list = new List<GroupChatModel>();
235
if (ContactChat == null) {
236
list.Add(new GroupChatModel("Contacts", "Contacts", this));
241
public void OpenContactChat ()
243
var chat = Session.GetChat("Contacts", ChatType.Group, this);
245
if (chat != null) return;
247
ContactChat = Session.CreateChat<GroupChatModel>(
248
"Contacts", "Contacts", this
250
Session.AddChat(ContactChat);
251
Session.SyncChat(ContactChat);
252
foreach(JID jid in PresenceManager) {
253
if (PresenceManager.IsAvailable(jid)) {
255
Session.AddPersonToGroupChat(ContactChat, CreatePerson(jid));
201
261
public override void OpenChat(FrontendManager fm, ChatModel chat)
203
263
Trace.Call(fm, chat);
205
throw new NotImplementedException();
264
if (chat.ID == "Contacts") {
268
CommandModel cmd = new CommandModel(fm, NetworkChat, chat.ID);
269
switch (chat.ChatType) {
270
case ChatType.Person:
271
CommandMessageQuery(cmd);
208
279
public override void CloseChat(FrontendManager fm, ChatModel chat)
210
281
Trace.Call(fm, chat);
212
if (chat.ChatType == ChatType.Group) {
213
_ConferenceManager.GetRoom(chat.ID+"/"+_JabberClient.User).Leave("Closed");
283
if (chat == ContactChat) {
284
Session.RemoveChat(chat);
286
} else if (chat.ChatType == ChatType.Group) {
287
ConferenceManager.GetRoom(chat.ID+"/"+JabberClient.User).Leave("Closed");
215
289
Session.RemoveChat(chat);
310
public void CommandHelp(CommandModel cd)
398
public void CommandContact (CommandModel cd)
312
MessageModel fmsg = new MessageModel();
313
TextMessagePartModel fmsgti;
400
FrontendManager fm = cd.FrontendManager;
401
// todo: allow length of 2 in private chat windows
402
if (cd.DataArray.Length < 3) {
403
NotEnoughParameters(cd);
406
JID jid = cd.DataArray[2];
407
string cmd = cd.DataArray[1];
411
// also use GetJidFromNickname(jid) here, so jid is checked for validity
412
RosterManager.Add(GetJidFromNickname(jid));
417
RosterManager.Remove(GetJidFromNickname(jid));
421
RosterManager.Allow(GetJidFromNickname(jid));
424
RosterManager.Deny(GetJidFromNickname(jid));
427
if (cd.DataArray.Length < 4) {
428
NotEnoughParameters(cd);
431
Item it = RosterManager[GetJidFromNickname(jid)];
432
it.Nickname = cd.DataArray[3];
433
RosterManager.Modify(it);
436
var builder = CreateMessageBuilder();
437
builder.AppendText(_("Invalid Contact command: {0}"), cmd);
438
fm.AddMessageToChat(cd.Chat, builder.ToMessage());
315
fmsgti = new TextMessagePartModel();
443
public void CommandHelp(CommandModel cmd)
445
var builder = CreateMessageBuilder();
316
446
// TRANSLATOR: this line is used as a label / category for a
317
447
// list of commands below
318
fmsgti.Text = "[" + _("XMPP Commands") + "]";
320
fmsg.MessageParts.Add(fmsgti);
322
Session.AddMessageToChat(cd.Chat, fmsg);
448
builder.AppendHeader(_("XMPP Commands"));
449
cmd.FrontendManager.AddMessageToChat(cmd.Chat, builder.ToMessage());
324
451
string[] help = {
326
453
"connect xmpp/jabber server port username password [resource]",
327
"msg/query jid message",
454
"msg/query jid/nick message",
456
"join muc-jid [custom-chat-nick]",
330
457
"part/leave [muc-jid]",
331
"away [away-message]"
458
"away [away-message]",
459
"contact add/remove/accept/deny jid/nick",
460
"contact rename jid/nick newnick"
461
,"priority away/online/temp priority-value"
334
foreach (string line in help) {
335
cd.FrontendManager.AddTextToChat(cd.Chat, "-!- " + line);
464
foreach (string line in help) {
465
builder = CreateMessageBuilder();
466
builder.AppendEventPrefix();
467
builder.AppendText(line);
468
cmd.FrontendManager.AddMessageToChat(cmd.Chat, builder.ToMessage());
385
516
Connect(fm, server);
519
public void CommandPriority(CommandModel command)
521
if (command.DataArray.Length < 3) {
522
var builder = CreateMessageBuilder();
523
builder.AppendText(_("Priority for Available is: {0}"), Server.Priorities[PresenceStatus.Online]);
524
command.FrontendManager.AddMessageToChat(command.Chat, builder.ToMessage());
525
builder = CreateMessageBuilder();
526
builder.AppendText(_("Priority for Away is: {0}"), Server.Priorities[PresenceStatus.Away]);
527
command.FrontendManager.AddMessageToChat(command.Chat, builder.ToMessage());
530
string subcmd = command.DataArray[1];
532
if (!int.TryParse(command.DataArray[2], out prio) || prio < -128 || prio > 127) {
533
var builder = CreateMessageBuilder();
534
builder.AppendText(_("Invalid Priority: {0} (valid priorities are between -128 and 127 inclusive)"), command.DataArray[2]);
535
command.FrontendManager.AddMessageToChat(command.Chat, builder.ToMessage());
538
var me = PresenceManager[JabberClient.JID];
539
JabberClient.Priority = prio;
540
bool change_current_prio = false;
544
change_current_prio = true;
548
Server.Priorities[PresenceStatus.Away] = prio;
550
change_current_prio = (me.Type == PresenceType.available) && (me.Show == "away");
555
Server.Priorities[PresenceStatus.Online] = prio;
557
change_current_prio = (me.Type == PresenceType.available) && string.IsNullOrEmpty(me.Show);
563
if (change_current_prio) {
564
// set priority and keep all other presence info
565
JabberClient.Presence(me.Type, me.Status, me.Show, prio);
569
private JID GetJidFromNickname(string nickname)
571
Item it = RosterManager[nickname];
576
// arg is not a jid in our rostermanager
577
// find a jid to which the nickname belongs
578
foreach (JID j in RosterManager) {
579
Item item = RosterManager[j];
580
if (item.Nickname != null &&
581
item.Nickname.Replace(" ", "_") == nickname) {
585
// not found in roster, message directly to jid
586
// TODO: check jid for validity
388
590
public void CommandMessageQuery(CommandModel cd)
390
592
ChatModel chat = null;
391
593
if (cd.DataArray.Length >= 2) {
392
string nickname = cd.DataArray[1];
394
foreach (JID j in _RosterManager) {
395
Item item = _RosterManager[j];
396
if (item.Nickname != null &&
397
item.Nickname.Replace(" ", "_") == nickname) {
403
jid = nickname; // TODO check validity
594
string arg = cd.DataArray[1];
595
JID jid = GetJidFromNickname(arg);
406
596
chat = GetChat(jid, ChatType.Person);
407
597
if (chat == null) {
408
PersonModel person = new PersonModel(jid, nickname,
411
chat = Session.CreatePersonChat(person, jid, nickname, this);
598
PersonModel person = CreatePerson(jid);
599
chat = Session.CreatePersonChat(person, jid, person.IdentityName, this);
412
600
Session.AddChat(chat);
413
601
Session.SyncChat(chat);
654
public void CommandRoster(CommandModel cd)
657
if (cd.Parameter == "full") {
661
MessageBuilder builder = CreateMessageBuilder();
662
builder.AppendHeader("Roster");
663
cd.FrontendManager.AddMessageToChat(cd.Chat, builder.ToMessage());
665
foreach (JID j in RosterManager) {
667
if (!PresenceManager.IsAvailable(j)) {
671
string nick = RosterManager[j].Nickname;
673
Presence item = PresenceManager[j];
675
if (item.Show != null && item.Show.Length != 0) {
680
builder = CreateMessageBuilder();
681
builder.AppendText("{0}\t{1}\t({2}): {3}", status, nick, j, mesg);
682
cd.FrontendManager.AddMessageToChat(cd.Chat, builder.ToMessage());
462
686
public void CommandSay(CommandModel cd)
464
688
_Say(cd.Chat, cd.Parameter);
474
698
if (!chat.IsEnabled) {
701
if (chat == ContactChat) {
479
706
string target = chat.ID;
480
707
if (chat.ChatType == ChatType.Person) {
481
_JabberClient.Message(target, text);
708
JabberClient.Message(target, text);
482
709
} else if (chat.ChatType == ChatType.Group) {
483
var room = _ConferenceManager.GetRoom(
710
var room = ConferenceManager.GetRoom(
486
target, _JabberClient.User
713
target, JabberClient.User
489
716
room.PublicMessage(text);
490
717
return; // don't show now. the message will be echoed back if it's sent successfully
719
if (SupressLocalMessageEcho) {
720
// don't show, facebook is bugging again
723
LastSentMessage = text;
494
MessageModel msg = new MessageModel();
495
TextMessagePartModel msgPart;
497
msgPart = new TextMessagePartModel();
499
msg.MessageParts.Add(msgPart);
501
msgPart = new TextMessagePartModel();
502
msgPart.Text = _JabberClient.User;
503
//msgPart.ForegroundColor = IrcTextColor.Blue;
504
msgPart.ForegroundColor = new TextColor(0x0000FF);
505
msg.MessageParts.Add(msgPart);
507
msgPart = new TextMessagePartModel();
509
msg.MessageParts.Add(msgPart);
511
msgPart = new TextMessagePartModel();
513
msg.MessageParts.Add(msgPart);
515
this.Session.AddMessageToChat(chat, msg);
726
var builder = CreateMessageBuilder();
727
builder.AppendSenderPrefix(Me);
728
builder.AppendMessage(text);
729
Session.AddMessageToChat(chat, builder.ToMessage());
518
732
void OnStreamInit(object sender, ElementStream stream)
796
public void OnRosterItem(object sender, Item ri)
798
string jid = ri.JID.Bare;
800
if (ContactChat == null) return;
802
PersonModel oldp = ContactChat.GetPerson(jid);
804
// doesn't exist, don't need to do anything
807
PersonModel newp = CreatePerson(jid);
808
Session.UpdatePersonInGroupChat(ContactChat, oldp, newp);
812
void OnPresence(object sender, Presence pres)
815
var groupChat = (XmppGroupChatModel) Session.GetChat(jid.Bare, ChatType.Group, this);
817
MessageBuilder builder = CreateMessageBuilder();
818
builder.AppendEventPrefix();
819
PersonModel person = null;
820
if (groupChat != null) {
821
string displayName = jid.Resource ?? jid.Bare;
822
person = new PersonModel("", displayName, "", "", this);
824
person = CreatePerson(jid.Bare);
826
builder.AppendIdendityName(person);
827
if (jid != person.IdentityName) {
828
builder.AppendText(" [{0}]", jid);
832
case PresenceType.available:
833
// groupchat is already managed
834
if (groupChat == null) {
835
if (ContactChat != null) {
836
// anyone who is online/away/dnd will be added to the list
838
PersonModel p = ContactChat.GetPerson(jid.Bare);
840
// p already exists, don't add a new person
841
Session.UpdatePersonInGroupChat(ContactChat, p, person);
843
Session.AddPersonToGroupChat(ContactChat, person);
848
if (pres.Show == null) {
849
builder.AppendText(_(" is now available"));
850
} else if (pres.Show == "away") {
851
builder.AppendText(_(" is now away"));
852
} else if (pres.Show == "dnd") {
853
builder.AppendText(_(" wishes not to be disturbed"));
855
builder.AppendText(_(" set status to {0}"), pres.Show);
857
if (pres.Status == null) break;
858
if (pres.Status.Length == 0) break;
859
builder.AppendText(": {0}", pres.Status);
861
case PresenceType.unavailable:
862
builder.AppendText(_(" is now offline"));
863
if(groupChat == null) {
864
if (ContactChat != null) {
866
PersonModel p = ContactChat.GetPerson(jid.Bare);
868
// doesn't exist, got an offline message w/o a preceding online message?
871
Session.RemovePersonFromGroupChat(ContactChat, p);
876
case PresenceType.subscribe:
877
builder.AppendText(_(" wishes to subscribe to you"));
879
case PresenceType.subscribed:
880
builder.AppendText(_(" allows you to subscribe"));
883
if (groupChat != null) {
884
Session.AddMessageToChat(groupChat, builder.ToMessage());
885
} else if (ContactChat != null) {
886
Session.AddMessageToChat(ContactChat, builder.ToMessage());
888
var personChat = Session.GetChat(jid.Bare, ChatType.Person, this);
889
if (personChat != null) {
890
Session.AddMessageToChat(personChat, builder.ToMessage());
581
894
private void OnMessage(object sender, Message msg)
583
896
if (msg.Body == null) {
594
907
ChatModel chat = null;
595
908
PersonModel person = null;
596
909
if (msg.Type != XmppMessageType.groupchat) {
597
string jid = msg.From.Bare;
598
var contact = _RosterManager[jid];
599
string nickname = null;
600
if (contact == null || String.IsNullOrEmpty(contact.Nickname)) {
603
nickname = contact.Nickname;
605
PersonChatModel personChat = (PersonChatModel) Session.GetChat(jid, ChatType.Person, this);
910
var sender_jid = msg.From.Bare;
911
var personChat = (PersonChatModel) Session.GetChat(
912
sender_jid, ChatType.Person, this
606
914
if (personChat == null) {
607
person = new PersonModel(jid, nickname, NetworkID,
915
person = CreatePerson(msg.From);
609
916
personChat = Session.CreatePersonChat(
610
person, jid, nickname, this
917
person, sender_jid, person.IdentityName, this
612
919
Session.AddChat(personChat);
613
920
Session.SyncChat(personChat);
619
926
string group_jid = msg.From.Bare;
620
927
string group_name = group_jid;
621
string sender_jid = msg.From.ToString();
622
928
XmppGroupChatModel groupChat = (XmppGroupChatModel) Session.GetChat(group_jid, ChatType.Group, this);
623
929
if (groupChat == null) {
624
// FIXME shouldn't happen?
625
930
groupChat = Session.CreateChat<XmppGroupChatModel>(
626
931
group_jid, group_name, this
628
933
Session.AddChat(groupChat);
629
Session.SyncChat(groupChat);
631
935
// resource can be empty for room messages
632
936
var sender_id = msg.From.Resource ?? msg.From.Bare;
660
964
var builder = CreateMessageBuilder();
661
965
if (msg.Type != XmppMessageType.error) {
662
builder.AppendMessage(person, msg.Body);
966
if (chat is PersonChatModel) {
968
builder.AppendSenderPrefix(person, true);
969
builder.AppendMessage(msg.Body);
970
builder.MarkHighlights();
971
} else if (chat is XmppGroupChatModel) {
973
builder.AppendMessage(person, msg.Body);
974
// mark highlights only for received messages
975
var muc = (XmppGroupChatModel) chat;
976
if (person.ID != muc.OwnNickname) {
977
builder.MarkHighlights();
664
981
// TODO: nicer formatting
665
982
builder.AppendMessage(msg.Error.ToString());
688
1005
// we send this message from Smuxi, nothing to do...
1009
if (!SupressLocalMessageEcho && (query.Body == LastSentMessage)) {
1010
SupressLocalMessageEcho = true;
692
1014
var target_jid = query.To.Bare;
693
var contact = _RosterManager[target_jid];
694
string nickname = null;
695
if (contact == null || String.IsNullOrEmpty(contact.Nickname)) {
696
nickname = target_jid;
698
nickname = contact.Nickname;
700
1015
var chat = (PersonChatModel) Session.GetChat(target_jid,
701
1016
ChatType.Person, this);
702
1017
if (chat == null) {
703
var person = new PersonModel(target_jid, nickname, NetworkID,
705
chat = Session.CreatePersonChat(
706
person, target_jid, nickname, this
1018
var person = CreatePerson(query.To);
1019
chat = Session.CreatePersonChat(person, this);
708
1020
Session.AddChat(chat);
709
1021
Session.SyncChat(chat);
732
1044
private void AddPersonToGroup(Room room, string nickname)
734
1046
string jid = room.JID.Bare;
735
var chat = (GroupChatModel) Session.GetChat(jid, ChatType.Group, this);
1047
var chat = (XmppGroupChatModel) Session.GetChat(jid, ChatType.Group, this);
736
1048
// first notice we're joining a group chat is the participant info:
737
1049
if (chat == null) {
738
1050
chat = Session.CreateChat<XmppGroupChatModel>(jid, jid, this);
1051
chat.OwnNickname = room.Nickname;
739
1052
Session.AddChat(chat);
1056
if (chat.UnsafePersons.ContainsKey(nickname)) {
1059
// manual construction is necessary for group chats
1060
var person = new PersonModel(nickname, nickname, NetworkID, Protocol, this);
1061
if (chat.IsSynced) {
1062
Session.AddPersonToGroupChat(chat, person);
1064
chat.UnsafePersons.Add(nickname, person);
1068
// did I join? then the chat roster is fully received
1069
if (!chat.IsSynced && nickname == room.Nickname) {
1070
chat.IsSynced = true;
740
1071
Session.SyncChat(chat);
744
lock(chat.UnsafePersons) {
745
person = chat.GetPerson(nickname);
746
if (person != null) {
750
person = new PersonModel(nickname, nickname,
751
NetworkID, Protocol, this);
752
chat.UnsafePersons.Add(nickname, person);
753
Session.AddPersonToGroupChat(chat, person);
757
1075
public void OnParticipantLeave(Room room, RoomParticipant roomParticipant)
796
1112
var builder = CreateMessageBuilder();
797
1113
builder.AppendEventPrefix();
798
builder.AppendText(_("Error: {0}"), String.Empty);
1114
builder.AppendErrorText(_("Error: {0}"), String.Empty);
799
1115
builder.AppendMessage(ex.Message);
800
Session.AddMessageToChat(_NetworkChat, builder.ToMessage());
1116
Session.AddMessageToChat(NetworkChat, builder.ToMessage());
803
1119
void OnAuthenticate(object sender)
814
1133
OnConnected(EventArgs.Empty);
817
private void ApplyConfig(UserConfig config, ServerModel server)
1136
private void ApplyConfig(UserConfig config, XmppServerModel server)
819
1138
if (server.Username.Contains("@")) {
820
1139
var jid_user = server.Username.Split('@')[0];
821
1140
var jid_host = server.Username.Split('@')[1];
822
_JabberClient.NetworkHost = server.Hostname;
823
_JabberClient.User = jid_user;
824
_JabberClient.Server = jid_host;
1141
JabberClient.NetworkHost = server.Hostname;
1142
JabberClient.User = jid_user;
1143
JabberClient.Server = jid_host;
826
_JabberClient.Server = server.Hostname;
827
_JabberClient.User = server.Username;
1145
JabberClient.Server = server.Hostname;
1146
JabberClient.User = server.Username;
829
_JabberClient.Port = server.Port;
830
_JabberClient.Password = server.Password;
1148
JabberClient.Port = server.Port;
1149
JabberClient.Password = server.Password;
1152
String.Format("{0}@{1}",
1158
Me.IdentityNameColored.ForegroundColor = new TextColor(0, 0, 255);
1159
Me.IdentityNameColored.BackgroundColor = TextColor.None;
1160
Me.IdentityNameColored.Bold = true;
832
1162
// XMPP specific settings
833
if (server is XmppServerModel) {
834
var xmppServer = (XmppServerModel) server;
835
_JabberClient.Resource = xmppServer.Resource;
839
if (String.IsNullOrEmpty(_JabberClient.Resource)) {
840
_JabberClient.Resource = "smuxi";
843
_JabberClient.OnInvalidCertificate -= ValidateCertificate;
845
_JabberClient.AutoStartTLS = server.UseEncryption;
1163
JabberClient.Resource = server.Resource;
1165
JabberClient.OnInvalidCertificate -= ValidateCertificate;
1167
JabberClient.AutoStartTLS = server.UseEncryption;
846
1168
if (!server.ValidateServerCertificate) {
847
_JabberClient.OnInvalidCertificate += ValidateCertificate;
1169
JabberClient.OnInvalidCertificate += ValidateCertificate;
850
1172
var proxySettings = new ProxySettings();
869
1191
proxyScheme, ex);
872
_JabberClient.Proxy = xmppProxyType;
873
_JabberClient.ProxyHost = proxy.Address.Host;
874
_JabberClient.ProxyPort = proxy.Address.Port;
875
_JabberClient.ProxyUsername = proxySettings.ProxyUsername;
876
_JabberClient.ProxyPassword = proxySettings.ProxyPassword;
1194
JabberClient.Proxy = xmppProxyType;
1195
JabberClient.ProxyHost = proxy.Address.Host;
1196
JabberClient.ProxyPort = proxy.Address.Port;
1197
JabberClient.ProxyUsername = proxySettings.ProxyUsername;
1198
JabberClient.ProxyPassword = proxySettings.ProxyPassword;
1210
PersonModel CreatePerson(JID jid)
1213
throw new ArgumentNullException("jid");
1215
var contact = RosterManager[jid.Bare];
1216
string nickname = null;
1217
if (contact == null || String.IsNullOrEmpty(contact.Nickname)) {
1218
nickname = jid.Bare;
1220
nickname = contact.Nickname;
1222
return CreatePerson(jid.Bare, nickname);
1225
PersonModel CreatePerson(string jid, string nickname)
1227
return new PersonModel(jid, nickname, NetworkID, Protocol, this);
888
1230
private static string _(string msg)
890
1232
return Mono.Unix.Catalog.GetString(msg);