[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