Programming Jabber by DJ Adams The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated December 20, 2002. UNCONFIRMED errors and comments from readers: {examples} An error in "newsagent.pl"; In subroutine "iq_version", the line $node->attr('code', IQ_RESULT); should be changed to: $node->attr('type', IQ_RESULT); Otherwise, it will NOT generate a valid result. While using Exodus, client would keep sending requests, that would be very bad. {19} Example 2-7, "The search request"; Should the iq type for the SEND: be a "get" rather than a "set" in the line SEND: normal but that is not in the example 4-9. (80) Last sentence in 3rd paragraph down in "Effect" column; Text should say "below" instead of "beyond": "the cache purge check mechanism runs only every 30 seconds, so any resolution *beyond* 30 is meaningless" (140) First paragraph of the "to" section; The > after the word "hostname" shouldn't be there. Either that or there should be a < before hostname. :) {155} Footnote at bottom of page; I don't know if this is an error, but in the paragraph above the heading "Availability Tracker", it says: All the members in that entity's roster who have a subscription to that entity's presence will receive a copy of that packet and thereby be informed.* The footnote then says: That is, where there's a value of to or both in the roster items' subscription attribute. However, two paragraphs earlier (starting "The only difference...") the final sentence seems to me to indicate that if you are subscribed to me, your subscription attribute in my roster would be 'from'. If this is true, the footnote should really read: That is, where there's a value of *from* or both in the roster items' subscription attribute. [164] The vCard line of the SEND: example; Does the correction made regarding the vCard version number on pages 206 - 209 also apply to page 164? (196) Paragraph just above the Owl.; Missing / in the tag, i.e. "The format of the and tags is not fixed." instead of "The format of the and tags is not fixed." Just for consistency. :) (201) Code in middle of page and bullet list below that.; Minor formatting suggestion. In the code example, you have: but then the bullets describing this are reversed in order: * If and when the message is stored offline... * When the message is eventuatlly displayed... and the text that follows is: The former event will be set by the server; that latter... I would just suggest that the code sync with the text. Not a big deal.. just a suggestion. {203} Bold line in example 6-7; Should the seconds='600' be seconds='1800' to match the value set in the SEND: on page 202? {206-209} Example 6-8, 6-9, and code on 209; The vCard element should have the attribute version='2.0', not version='3.0' (And it should be added to example 6-9. The "official" Jabber documents on this were unfortunately in error, so that error easily transferred to the book. However, being one of the peop le working on the vCard specification for Jabber, I can assure you it should be 2.0. Hopefully our documentation will be better in the future. (208) Duplicate 'owl' note on pages 208 and 206.; The 'owl' note ("Jabber uses the vCard format...") on page 208 is identical to the one on page 206. I assume you only want one of them to be there! :-) [223] Method subheading; The description of how to compute the digest for digest authentication is wrong when used against Jabbered 1.4.2 or as described in draft-miller-xmpp-im-00 (http://www.9780596002022.org/ietf/draft-miller-xmpp-im-00.htm). The book states that the digest is composed of the stream id concatenated to the password (the password followed by the stream id)then hashed using the SHA1 hashing algorithm. The book has it reversed. It is supposed to be the stream id conatenated by the password (the stream id followed by the password). [239] Need to register 'cvsmesg' user; I don't know that this is *serious*, but it would, I believe, prevent the script from running. In "The cvsmsg Script", there should be some mention that the user 'cvsmesg' needs to be *registered* before it could be used through a script like this. [257] Example 8-7. The cvsmsg-s script; It appears that the current version of 9780596002022.py (version 0.3 from January 2002) is not fully compatible with python 2.2. With python 2.2 the split method is inherent in a string and is implemented by calling the split() method on the string object. However, the JID class in 9780596002022.py does not implement a split method, and so the example does not work. The example in the function 'presenceCB' shows this: parts = split(prs.getFrom(), '/') who = parts[0] However, when the script receives its first presence packet, it will die with an error essentially saying there is no split method in the JID class. My first workaround was to do instead the following: fr = prs.getFrom() who = fr.getNode() + '@' + fr.getDomain() but then I noticed in the 9780596002022.py doc that the class has a 'getStripped' method that returns the JID without the Resource. So the line becomes the much simpler: who = prs.getFrom().getStripped() Works great, now. (260) 2ns paragraph of the Addressing Elements box; The paragraph talks about "we use" and "our conversation" but ends with "your presence". I'm not an English expert - should it be "our presence"? {281} Example 904; "Example 9-4. The keyassist Perl script" on pages 281 to 284 doesn't look cryptic enough to be Perl. I think it should be titled "Example 9-4. The keyassist Python script" {407} "Example 10-14"; In order to keep the consistency between Example 10-13 and Example 10-14, the value of "endpoint" in Example 10-14 should be: ... endpoint = 'server@gnu.mine.nu/jrpc-server', ... And, it would be nice if add a "print "\n";" at the end of Example 10-14.