[ekg2-devel] chatstates i talk.google.com
Jakub Zawadzki
darkjames w darkjames.ath.cx
Sob, 19 Sty 2008, 16:31:41 CET
Czesc,
Wielkie dzieki za latke, ponizej kilka moich komentarzy.
On Sat, Jan 19, 2008 at 03:10:44PM +0100, Wiesław Ochmiński wrote:
> Nasz klient (jabbera), nasz pan. Dodałem pole xmlns i (nie wiem, po co) nsname.
Ja tez nie, czyli wywalamy :)
> Tymczasowo "xmlns" można też znaleźć w atrybutach, ale to do wyrzucenia.
W sumie zaczynam miec watpliwosci czy potrzebujemy tego (xmlnode_t).xmlns
W koncu mamy xmlns w atrybutach...
(Jak rozmawialem z peresem, i ogladalem dokumentacje do *_CreateNS () to
wydawalo mi sie ze to jest robione inaczej, i ze namespace bedziemy
dostawac w callbacku podanym przez XML_SetNamespaceDeclHandler (), i
dlatego potrzebne jest xmlns w xmlnode_t zeby to robic efektywnie.
a name, bedzie nadal takie samo. (no moze oprocz stream:features, itd..)
Troche sie rozczarowalem, no ale coz.
)
Jakby dodawac xmlns na samym poczatku tablicy (xmlnode_t).atts, to
obciazenie bedzie minimalne, a dzieki temu nie bedziemy musieli zmieniac
kodu :)
Ale jesli juz wprowadzamy (xmlnode_t).xmlns to _TRZEBA_ zmienic ten kod od razu wszedzie.
(i juz nie dodawac atrbuty xmlns to (xmlnode_t).atts)
Bo ja juz mam doswiadczenie ze jak sie tego nie zrobi od razu, to bedzie
tak lezalo przez nastepne kilka miesiecy.
> Uwaga: przy tym rozwiązaniu należy się wystrzegać wyszukiwania nazw typu jakas:nazwa,
> bo z przyczyn oczywistych nie zostanie to znalezione.
> Używać wtedy nsname albo name i xmlns.
Mysle ze nie warto, i nadal jestem za wywaleniem nsname.
(Mozna dodac komentarz jak to sie powinno robic w jakims komentarzu, bo
moze ktos bedzie potrzebowac. Aktualny kod tego nie potrzebuje)
(Btw. na przyszlosc jakbys mogl robic diffy z opcja -u
[najlatwiej dodac diff -u do $HOME/.cvsrc])
> 482c482,488
> < if (/* !j->node && */ !(s->connected) && ((j->istlen && !xstrcmp(name, "s")) || (!j->istlen && !xstrcmp(name, "stream:stream")))) {
> ---
> > /* (WO) Nie można, bo przetwarzanie rozpoczęoby się dopiero po skompletowaniu, czyli po otrzymaniu </stream:stream>
> > * Wątpię, by ktoś chciał czekać aż to nastąpi, ale ładniej byłoby gdyby cała ta część po if wylądowała
> > * w jakiejś jabber_just_like_starting_over()
> > */
Tak, chodzilo zeby bylo ladniej. Ale jednak jak dla mnie to jest
calkowicie wykonywalne, bo wszystko zalezy od warunku podanego w
xmlnode_handle_end()
Myslalem zeby:
- budowac drzewko tak jak jest w komentarzu
- w xmlnode_handle_start() przed:
j->node = newnode;
sprawdzac czy j->node == NULL, jesli tak to wtedy wykonywac jabber_handle(data, j->node)
[i w jabber_handle() wykonywac tam kod ktory jest teraz w tym if()]
- w xmlnode_handle_end()
wywalic to co teraz jest i robic:
j->node = n->parent;
if (!j->node->parent) {
jabber_handle(data, n);
xmlnode_free(n);
return;
} else { /* chyba tak */
debug("[jabber] end tag within <stream>, ignoring\n");
return;
}
to tylko koncepcja, moze nie dzialac, ale ilustruje przyklad;
Kiedys mi sie wydawalo ze jak wszystko bedzie w drzewku, bedzie prostszy kod.
> > // if (/* !j->node && */ !(s->connected) && ((j->istlen && !xstrcmp(name, "s")) || (!j->istlen && !xstrcmp(name, "stream:stream")))) {
Wywalic, podobnie jak wszystkie zakomentowane linijki starego kodu.
Pozdrawiam.
Więcej informacji o liście dyskusyjnej ekg2-devel