Bonne bibliothèque XMPP C # prenant en charge la discussion de groupe et le cryptage TLS ou SSL

J’ai donc eu du mal à trouver une bibliothèque C # décente à utiliser avec XMPP, qui prend en charge le cryptage SSL ou TSL entre les clients et le serveur. J’espère que quelqu’un pourra me recommander une bibliothèque qui répond à certains de mes besoins et qui est assez bien supscope / documentée. Aussi, peut-être que quelqu’un peut confirmer mes soupçons concernant certaines des bibliothèques que j’ai déjà essayées.

Ma première tentative utilisait le SDK de Soapbox Studio. Trouvé ici par Conversant , mais d’après ce que je peux dire, ils ne prennent en charge que l’authentification SASL. J’ai essayé de les contacter mais je n’ai pas reçu de réponse et leur forum ne semblait pas fonctionner car je ne pouvais pas poster ma question sur leur forum. Je me trompe peut-être sur mon hypothèse SSL avec la bibliothèque de Soapbox, ce qui serait formidable si quelqu’un pouvait me corriger, car c’est la bibliothèque que je préférerais utiliser.

Je suis ensuite passé à Masortingx, qui succède à agXmpp. Après plusieurs jours passés à parcourir leurs babillards électroniques et leurs exemples d’applications, je ne peux même pas créer un groupe de discussion sur mon serveur openfire. Presque toutes les questions connexes publiées dans le formulaire ag Software invitent les utilisateurs à utiliser leurs exemples d’applications pour répondre à leurs questions. Cependant, à moins que je ne comprenne mal quelque chose, beaucoup de leurs exemples d’applications semblent être obsolètes ou ne conviennent pas à mes besoins. Le code suivant est un exemple de ma tentative d’utiliser leurs bibliothèques pour créer une discussion de groupe. Si quelqu’un a utilisé sa bibliothèque, il peut peut-être indiquer ce que je fais de travers.

Ce sont mes directives d’utilisation

using System; using Masortingx.Xmpp.Disco; using Masortingx.Xmpp.Client; using Masortingx.Xmpp.Session; using Masortingx.Xmpp; using Masortingx; 

Voici le code qui se connecte au client Xmpp

 readonly XmppClient _xmppClient = new XmppClient(); public ssortingng Connect() { try { _xmppClient.SetUsername(OPENFIRE_USER_NAME); _xmppClient.Password = OPENFIRE_PASSWORD; _xmppClient.SetXmppDomain(OPENFIRE_SERVER); _xmppClient.Show = Masortingx.Xmpp.Show.chat; _xmppClient.AutoRoster = true; _xmppClient.Open(); return "Connection Succesful"; } catch (Exception ex) { _logger.LogError("SessionManager", "Connect", "Could not connect to Openfire Server", ex.ToSsortingng()); return "Could not Connect to Openfire Server"; } } 

et c’est le code qui est supposé créer un nouveau chatroom

 public ssortingng CreateRoom(ssortingng roomName, ssortingng serverName, ssortingng userName) { Jid groupJid = new Jid(userName, serverName, "gec2o"); using (MucManager mucManager = new MucManager(_xmppClient)) { mucManager.EnterRoom(groupJid, roomName, true); mucManager.RequestInstantRoom(groupJid); } return ""; } 

Cependant, aucune salle de discussion n’est créée sur le serveur et aucune exception n’est levée. De plus, je sais que je peux utiliser leur bibliothèque pour me connecter à mon serveur car je peux voir le nom de mon nom de connexion apparaître dans la liste des utilisateurs d’openfire. Bien qu’elles aient toutes leurs classes documentées dans un fichier, la bibliothèque n’apporte que peu ou pas de commentaires sur ce que fait réellement chaque classe / méthode et comment l’utiliser. Là encore, le forum demande généralement aux utilisateurs de consulter un exemple de code qui est en grande partie inutile et, comme la version de soapbox, cette bibliothèque ne semble pas très bien prise en charge (cela ressemble à un développeur qui répond à une seule question).

J’ai brièvement examiné d’autres bibliothèques telles que jabber-net, mais cela semblait être la même histoire que Soapbox et Masortingx en termes de support et de documentation.

J’ai également découvert IP * Works Internet Toolkit, mais cette bibliothèque semble coûter un peu cher.

Je me rends compte que j’ai posé pas mal de suppositions tout au long de cette question, mais cela fait plusieurs jours que je fais des recherches et c’est la meilleure conclusion à laquelle je puisse aboutir. J’espère que quelqu’un pourra soit corriger mes hypothèses, soit recommander une bibliothèque qui ne présente pas le problème que j’ai rencontré.

La plupart des XmppClient fonctionnent de manière asynchrone. Lorsque vous appelez quelque chose comme client.Open (), il retourne immédiatement, mais vous devez attendre qu’il déclenche l’événement OnBind () avant de faire quoi que ce soit avec mucManager. Par exemple:

  public class ChatRoom { private readonly ILogger _logger; private XmppClient _client; private MucManager _mucManager; public ChatRoom(ILogger logger) { _logger = logger; } public ssortingng UserName { get; set; } public ssortingng Password { get; set; } public ssortingng XmppDomain { get; set; } public System.Uri BoshUri { get; set; } public ssortingng RoomJid { get; set; } public ssortingng RoomNick { get; set; } public void Start() { _client = new XmppClient(UserName, XmppDomain, Password); _client.OnBind += (o, e) => _CreateChatRoom(_client, RoomJid, RoomNick); _client.OnSendXml += (o, e) => Trace(ConsoleColor.DarkGreen, "Sending:\n {0}", e.Text); _client.OnReceiveXml += (o, e) => Trace(ConsoleColor.DarkMagenta, "Receiving:\n {0}", e.Text); _client.OnError += (o, e) => Trace(ConsoleColor.Red, "Error: {0}", e.Exception); _client.Open(); _client.Close(); } private void Trace(ConsoleColor color, ssortingng msg, params object[] args) { var oldColor = _logger.Color; _logger.Color = color; _logger.Log(msg, args); _logger.Color = oldColor; Debug.WriteLine(msg, args); } private void _CreateChatRoom(XmppClient client, ssortingng chatRoomName, ssortingng roomNick) { _mucManager = new MucManager(client); _mucManager.EnterRoom(chatRoomName, roomNick); } public void SendMessage(ssortingng text) { _client.Send(new Message("[email protected]", MessageType.groupchat, text)); } public void End() { _client.Close(); } public void Invite(Jid[] user) { _mucManager.Invite(user, RoomJid, "Come chat"); } } 

Il semble donc depuis toujours que la réponse à cette question est que ma bibliothèque préférée initiale (Soapbox Studio SDK) prend en charge le cryptage TLS et était donc toujours le meilleur choix. Il semble que TLS n’est tout simplement pas bien documenté et / ou j’ai raté cette fonctionnalité.

Selon la configuration de votre serveur (j’utilise un serveur Openfire), vous devriez pouvoir configurer votre serveur pour n’accepter que les connexions chiffrées. Plutôt que d’utiliser le protocole SSL (dont Openfire est le processus de désapprobation de son serveur) et de tenter de se connecter via le port SSL 5223, le simple fait de se connecter via le port par défaut (5222) et d’exiger une connexion cryptée oblige le client à envoyer les données via TLS et négociez automatiquement la poignée de main. Le serveur peut également être configuré pour empêcher les clients de créer des utilisateurs supplémentaires. En contrôlant quels clients sont capables de créer des utilisateurs XMPP sur votre serveur plutôt que d’émettre des certificates SSL, vous garantissez donc essentiellement une communication sécurisée.