Raportul blogului inginerului privind livrarea mesajelor către jabber (chitanțe de livrare a mesajelor xep-0184)

Raportați cu privire la livrarea mesajelor către jabber (XEP-0184: Încasări de mesaje)

Astăzi, un coleg sa plâns de o problemă cu pierderea mesajelor în jabber. Unii dintre utilizatorii noștri sunt conectați la rețeaua corporativă prin OpenVPN, care lucrează prin canale Internet de o calitate diferită. Dacă clientul a întrerupt funcționarea normală a conexiunii OpenVPN, atunci serverul jabber (utilizăm ejabberd) de ordinul a două minute poate trimite mesaje la "goliciune". Logica pierderii mesajului este incomprehensibilă pentru mine. TCP este utilizat pentru trecerea mesajului. În acest caz, serverul ar trebui să știe că mesajul nu este suficient, dar nu se potrivește în spațiul de stocare offline, ci este pur și simplu șters.







Când am întâlnit prima dată această problemă, primul impuls a fost de a răsuci setările OpenVPN și ejabberd, dar după câteva întrebări, Google a găsit un alt mod.

Aceasta constă în afișarea de notificări despre mesajele livrate în clientul jabber. Această caracteristică a fost implementată ca o extensie a protocolului XMPP XEP-0184. În prezent, XEP-0184 este declarat ca proiect de standard, dar sprijinul său este în multe clienți. Este trist că Psi. care este utilizat de majoritatea utilizatorilor, nu acceptă această extensie a protocolului.

Continuarea googlingului a condus la pagina proiectului Psi +. care este dezvoltat ca un set de patch-uri pentru Psi și conține deja suport pentru rapoartele de livrare a mesajelor (XEP-0184: Încasări de primire a mesajelor). Psi + acceptă importarea configurației de la Psi, astfel încât istoricul și lista de mesaje din Psi vor fi disponibile în noul client.

Spre deosebire de majoritatea colegilor săi, folosesc Pidgin ca Jabber client (în plus față de Jabber am să folosesc ICQ și Yahoo), în plus, îmi place Pidgin pentru stocarea istoria mesajelor în text simplu (creatori diaree fascicul de skype si Miranda), pe care am, de asemenea, Sincronizează pe toate computerele unde trebuie să lucrez.

În timp ce căutam un înlocuitor pentru Psi, navighez un bilet de pidgin în campionul de bug-uri. în care Ferdinand Stehle (noonien) a dat o legătură cu pluginul pidgin-xmpp-receipts. care implementează suport pentru XEP-0184 în pidgin. Perechile de minute au fost suficiente pentru a compila pluginul Debian Squeeze (pentru a compila suficient pentru a instala pachetul pidgin-dev) și a-l activa în mesager.







Pentru testarea notificări de sprijin am instalat cea mai recentă versiune disponibilă în Psi + Vin (Vin pentru cea mai recentă versiune de Debian Squeeze / Wheezy pot fi găsite în arhive mele) și a început pe server un anumit utilizator. Când trimiteți un mesaj de la pidgin la psi +, în fereastra de chat pidgin apare un marcaj de livrare # 10003 ;. dar dacă trimiteți un mesaj unui client fără suportul xep-0184, atunci semnul lipsește. Totul este minunat, dar există un avertisment - dacă pretind a „disfuncționalitate de rețea“ la psi + și trimite mai multe mesaje dintr-o dată, după restaurarea performanței rețelei în psi + în semne Pidgin apar, dar nu și în fața de posturi, și o mulțime după ultima linie.

Apoi a mers la trimiterea de mesaje de la psi + la pidgin și apoi am fost dezamăgit - din istoria mesajelor nu este clar unde mesajul este livrat, și unde nu. Ca ultima măsură, am otrăvit mesajul de la psi + la alt psi + și apoi a fost o diferență - dacă mesajul a fost livrat, atunci culoarea săgeții în psi + chat se schimbă de la roz la verde. Se pare că atunci când trimiteți mesaje de la psi + la pidgin, primul crede că toate mesajele au fost pierdute, iar în direcția opusă totul funcționează.

Se pare că a fost un bug, dar cine dintre ei este încă neclar. Pentru iluminarea capului m-am dus singur preparată o cafea, a deschis un document care descrie XEP-0184, pentru a activa consola de depanare în Pidgin și psi + și a început să se uite la diferența dintre trimiterea unui mesaj de psi + în Pidgin și în direcția opusă.

După câteva mesaje de testare, diferența în raportul de livrare, generată de psi + și pidgin, a devenit vizibilă. Psi + răspunde


Un pidgin răspunde


Se pare că aceștia indică id-ul corect, la care este trimisă confirmarea, dar îl indică în locuri diferite. Din nou deschid descrierea lui XEP-0184 și văd. că confirmarea corectă este generată de pidgin. În mod ciudat, în psi + sprijinul pentru această extensie a apărut relativ îndelungat, iar dacă este un bug, ar fi trebuit deja stabilit. reflecții suplimentare mă duc la acel moment sprijinit XEP-0184 a apărut în psi + mai devreme decât în ​​Pidgin, atunci poate își dau seama doar diferitele revizuiri ale standardului (de fapt, el este încă în stadiul de dezvoltare).

Mă voi uita la revizuirile anterioare ale descrierii de expansiune și voi vedea că am avut dreptate. Psi + răspunde conform reviziei v1.0. iar răspunsul pidgin corespunde ultimei revizuiri a v1.2. Și pidgin diger o confirmare mai devreme.

Mă înscriu în codul pluginului pidgin-xmpp-reciepts pentru a vedea dacă formatul său de confirmare poate fi modificat la unul care va fi de înțeles pentru psi +. Așa cum sa dovedit, acest lucru nu este dificil, doar schimba locul în aceeași linie, în cazul în care id este specificat.


După ce plugin-ul a fost compilat cu acest patch, notificările au început să funcționeze în ambele direcții. Atingerea finală a fost "hibridizarea" versiunilor standard - am modificat puțin patch-ul meu, astfel încât clienții care se pot baza pe noua versiune ar putea să o perceapă corect.


Cu acest patch nimic nu a căzut, deși plasturele este o cârjă. Pentru a finaliza soluția la problema cu suportul XEP-0184 în pidgin, am compilat un pachet pentru Debian. Poate fi instalat din depozitul meu.







Trimiteți-le prietenilor: