void OnDiscoInfo(IQEventArgs e, string hash)
{
if (e.IQ.Error != null) {
#if LOG4NET
_Logger.DebugFormat("An error happened during service discovery: {0}", e.IQ);
#endif
// clear item from cache so the request is done again some time
DiscoCache.Remove(hash);
e.Handled = true;
return;
}
if (e.IQ.Type != IqType.result) {
#if LOG4NET
_Logger.Debug("OnDiscoInfo(): iq is not a result");
#endif
return;
}
if (!(e.IQ.Query is DiscoInfo)) {
#if LOG4NET
_Logger.Debug("OnDiscoInfo(): query is not a DiscoInfo");
#endif
return;
}
var info = (DiscoInfo)e.IQ.Query;
DiscoCache[hash] = info;
e.Handled = true;
if (String.IsNullOrEmpty(e.IQ.From.User)) {
// server capabilities
var builder = CreateMessageBuilder();
builder.AppendText("The Server supports the following features: ");
Session.AddMessageToChat(NetworkChat, builder.ToMessage());
foreach (var feature in info.GetFeatures()) {
builder = CreateMessageBuilder();
builder.AppendText(feature.Var);
Session.AddMessageToChat(NetworkChat, builder.ToMessage());
}
} else {
AddCapabilityToResource(e.IQ.From, info);
}
}