jdev - 2020-01-25

  1. Neustradamus has joined

  2. pulkomandy has left

  3. pulkomandy has joined

  4. kikuchiyo has left

  5. kikuchiyo has joined

  6. goffi has left

  7. kikuchiyo has left

  8. paul has left

  9. kikuchiyo has joined

  10. kikuchiyo has left

  11. sonny has joined

  12. asterix has left

  13. asterix has joined

  14. sonny has left

  15. kikuchiyo has joined

  16. debacle has left

  17. asterix has left

  18. kikuchiyo has left

  19. sonny has joined

  20. Neustradamus has left

  21. sonny has left

  22. Neustradamus has joined

  23. kikuchiyo has joined

  24. sonny has joined

  25. kikuchiyo has left

  26. kikuchiyo has joined

  27. sonny has left

  28. sonny has joined

  29. kikuchiyo has left

  30. kikuchiyo has joined

  31. kikuchiyo has left

  32. strar has left

  33. strar has joined

  34. strar has left

  35. strar has joined

  36. sonny has left

  37. sonny has joined

  38. sonny has left

  39. kikuchiyo has joined

  40. kikuchiyo has left

  41. kikuchiyo has joined

  42. sonny has joined

  43. kikuchiyo has left

  44. kikuchiyo has joined

  45. paul has joined

  46. kikuchiyo has left

  47. kikuchiyo has joined

  48. kikuchiyo has left

  49. sonny has left

  50. sonny has joined

  51. lovetox has joined

  52. sonny has left

  53. sonny has joined

  54. lovetox has left

  55. lovetox has joined

  56. paul has left

  57. sonny has left

  58. sonny has joined

  59. kikuchiyo has joined

  60. kikuchiyo has left

  61. sonny has left

  62. sonny has joined

  63. Guus

    I've never touched the functionality. It was put in by Jive, at the time. I think we used it with Nimbuzz, at the time. Must've been 2006 or something. I never get questions around it though.

  64. lovetox has left

  65. lovetox has joined

  66. paul has joined

  67. kikuchiyo has joined

  68. lovetox has left

  69. sonny has left

  70. kikuchiyo has left

  71. lovetox has joined

  72. lovetox has left

  73. sonny has joined

  74. lovetox has joined

  75. Jannie has joined

  76. Jannie


  77. Jannie has left

  78. lovetox has left

  79. kikuchiyo has joined

  80. kikuchiyo has left

  81. asterix has joined

  82. pulkomandy has left

  83. kikuchiyo has joined

  84. pulkomandy has joined

  85. asterix has left

  86. asterix has joined

  87. kikuchiyo has left

  88. sonny has left

  89. pulkomandy has left

  90. flow

    IIRC ejabberd also supports extended stanza addressing and MAXS makes use of it

  91. pulkomandy has joined

  92. sonny has joined

  93. defanor-tmp has joined

  94. defanor-tmp

    Hello. Slightly off-topic, but I'm failing to join this room using my regular client (currently using the web interface on xmpp.org), apparently my server fails to connect to muc.xmpp.org (; is it just me, or a common issue? And I've only tried that after failing to subscribe to the jdev mailing list (HTTP 403 there), is it also a common issue?

  95. sonny has left

  96. pulkomandy has left

  97. MattJ

    defanor-tmp: hi

  98. MattJ

    Not a common issue, pretty much everyone here is joined from their own server

  99. defanor-tmp

    Is the correct address? I failed to connect there directly from my computer (different network/ISP/country) too.

  100. MattJ

    I can check jdev subscription is working later

  101. MattJ

    Not sure of the IP (I'm currently on my phone so can't easily check DNS)

  102. defanor-tmp

    And netcat from the server also says that connection times out.

  103. MattJ

    Oh, 5269? Pretty sure that's the wrong port at least

  104. defanor-tmp

    Thanks, I'll try to investigate why that happens then. It's Prosody that picks it.

  105. defanor-tmp

    "dig srv _xmpp-server._tcp.muc.xmpp.org" says "_xmpp-server._tcp.muc.xmpp.org. 900 IN SRV 1 1 9269 xmpp.xmpp.org."

  106. MattJ

    Prosody would always look up the SRV first, and would only use 5269 by default if that fails to resolve

  107. MattJ

    Debug logs from Prosody would help

  108. defanor-tmp

    Hrm, though not from the server. Apparently an issue with DNS there, Prosody is what I'm using.

  109. defanor has joined

  110. asterix has left

  111. asterix has joined

  112. defanor

    It was a DNS issue indeed, the server tried to use ISP's DNS instead of a local one. Which for some reason didn't serve SRV records, and somehow Prosody didn't pick it up from alternative DNS servers (which do serve those).

  113. defanor-tmp has left

  114. lovetox has joined

  115. defanor

    And the on-topic question I had is about reusable XMPP client implementations. I keep looking for relatively complete (in the "advanced client" compliance suite sense) libraries providing C API, implementing XMPP correctly, and embeddable into a program's main loop (instead of using their own or, say, glib's), but not finding much. I also keep wondering whether it's viable to implement it in a way that would allow to define the core and

  116. defanor

    each XEP separately (in the hope to achieve a relatively clean/maintainable implementation): apparently it can be (and sometimes is) mostly achieved using some kinds of hooks on stanza (and other depth-1 element) sending and retrieval, but it still wouldn't suffice for the "direct TLS" XEP (and possibly some others). Are there known attempts to do that, and/or is it known to be futile?

  117. lovetox

    i would not do that

  118. lovetox

    there are XEPs that make sense as its own module pluginable etc

  119. lovetox

    but others absolutely not

  120. lovetox

    like 0368

  121. lovetox

    nobody will want to disable that

  122. defanor

    Indeed, that's the "direct TLS" one I've mentioned. It made me to think of hooks on all the I/O actions instead of just XML element sending/retrieval, but then it'd probably be a mess of its own.

  123. paul has left

  124. lovetox

    i just rewritten a library

  125. lovetox

    and most clients would want the library to pass the domain, and the library should connect and do everything on its own

  126. lovetox

    there are still many things to consider

  127. MattJ

    I also agree with that (having worked on a number of libraries)

  128. MattJ

    The way XEPs are split does not necessarily match the ideal split in a library

  129. jonas’

    as a library author: don’t make the low level stuff plugins

  130. jonas’

    it’s a terrible choice which only leads to heartache. instead, make your core modular so that people who want to experiment with low-level stuff (like '386 or compression or something) can easily do so in their own fork

  131. jonas’

    99% of users won’t want to do this

  132. jonas’

    they just need additional payloads for standard elements -> make *that* easy

  133. lovetox

    - DNS resolution and connection priority (suprisingly complicated) - Happy eyeballs - Proxy Support - Other connection method support (e.g. Websocket) - DIRECT TLS, START TLS, Unencrypted - Support for Client certificates - Support for functioning with non- valid server certificates and thats just out of my head, and thats all *before* you send a single stanza

  134. defanor

    I see, thanks. I'm not writing a library though, since it seems rather wrong to add yet another one, given that there's quite a few already. Yet finding it puzzling that there's nothing in sight that could be reusable from arbitrary languages via C FFI, complete, and hookable to an external main loop (say, glib's/GTK's, libev's, or whatever the program using that library would want to use). Am I missing something, and/or does such

  135. defanor

    flexibility seem like a bad idea?

  136. jonas’

    defanor, I guess the C libraries could be made to be usable that way

  137. jonas’

    I forgot the name of the library used by profanity, but it’s in C

  138. jonas’

    howevre, working with XML and text in C is a PITA, so nobody wants to do that

  139. jonas’

    and people prefer to write an idiomatic library in whatever more high-level language

  140. defanor

    libstrophe, but IIRC profanity struggles to introduce even XEP-0198 for years with it

  141. jonas’

    which makes sense to me -- a native library is more likely to be idiomatic and useful for the language ecosystem either way

  142. pulkomandy has joined

  143. jonas’

    oh and yeah, libraries created before the widespread use of '198 are likely to be in pain (looking at you, libpurple)

  144. jonas’

    '198 is one of the things you absolutely don’t want in a plugin

  145. MattJ

    Yeah, I used to use (and contribute to) libstrophe

  146. defanor

    i've added 0198 into libpurple more than an year ago, but it's still not released

  147. jonas’

    it’s hard enough to get right even when having full access to the stack’s internals

  148. MattJ

    jonas’: FWIW I've implemented it in a plugin on the client and server side, I don't think it's that bad

  149. paul has joined

  150. lovetox

    defanor, 0198 its not "hard" or "complicated"

  151. jonas’

    MattJ, mod_smacks isn’t that bad? ;)

  152. lovetox

    but a library should have that in mind when written

  153. lovetox

    otherwise it gets almost impossible if you have bad luck

  154. sonny has joined

  155. flow

    > lovetox> defanor, 0198 its not "hard" or "complicated" I am not sure i'd put it that way given that most implementations of xep198 ran into the same set of issues at first

  156. defanor

    Yes, that's what also seems awkward about relying on core modifications to implement XEPs.

  157. MattJ

    jonas’: mod_smacks has issues (but it works), I don't think they necessarily stem from it being a plugin

  158. Holger

    The hard thing about 0198 is counting!

  159. jonas’

    counting the right things

  160. MattJ

    I disagree, we haven't had a counting bug for a very long time

  161. Holger

    "1 stanza", "2 stanzas", "3 stanzas", "oh wait let's do something else" ... "2-and-a-half stanzas" ... "damn how many stanzas have I seen again I'm lost!"

  162. MattJ

    The XEP says what to count and (now) when counters get reset

  163. flow

    yep, the xep198 clarifications that where added likely helped to improve the situation

  164. MattJ

    How do you get distracted during stanzas_received++? :)

  165. Holger

    Threads and stuff.

  166. Holger

    No idea actually :-)

  167. Holger

    I'm just not sure I've ever seen an implementation that got it right from start. And I think at least ChatSecure is still borked.

  168. sonny has left

  169. MattJ

    We did have bugs in the early days, but again I don't see that they were caused by it being a plugin

  170. flow

    I am not sure if what holger described actually borks the implementations, but it sure was/is identifying the point where to reset the counter and start counting

  171. flow

    MattJ, same

  172. MattJ

    I think the main reason it shouldn't be a plugin is for the library maintainer's sanity

  173. Holger

    flow: That was one multiple problems I've seem implementations running into, and it's good this one has been clarified in the XEP, yes.

  174. Holger

    *one of

  175. MattJ

    It's hard to ensure you have the right plugin API and all the plugins interact correctly

  176. Holger

    But e.g. both ejabberd and Conversations were running into threading foo that was unrelated to "when to start counting", initially.

  177. MattJ

    Threads are the root of all evil

  178. jonas’

    MattJ, one thing which went "wrong" in aioxmpp was that a stanza which caused an exception during processing would not be counted

  179. jonas’

    MattJ, one thing which went "wrong" in aioxmpp was that a stanza which caused an exception which terminated the stream (really bad) during processing would not be counted

  180. jonas’

    this would cause the stream to reconnect and resume

  181. jonas’

    causing a fun tight reconnect loop

  182. Holger

    MattJ: Yeah.

  183. jonas’

    admittedly, many problems at play here, but still.

  184. Holger

    jonas': Exactly, stuff like that.

  185. asterix has left

  186. jonas’

    (reconnect loop because the stanza would be re-received during resumption)

  187. MattJ

    jonas’: I'd argue that not counting a stanza you haven't processed is sensible from a data loss perspective

  188. rion has left

  189. rion has joined

  190. jonas’

    MattJ, define "have not processed" please

  191. asterix has joined

  192. MattJ

    In Prosody we are moving 198 to core, it's my ideal that we wouldn't back until the stanza is committed to storage or delivered, for example

  193. MattJ

    Not sure we'll achieve that, it's Hard

  194. jonas’

    if I auto reply with <service-unavailable/>, is that "processed"?

  195. MattJ


  196. jonas’

    if I reply with (I don’t recall what we do) because of a deserialiser error, is that "processed"?

  197. jonas’

    because that’s exactly what (should’ve) happened in the above example (that the deserialiser error broke the XMLStream instead of properly being handled was a different issue)

  198. MattJ

    If you reply of course it's processed

  199. jonas’

    (scrolling through `git log aioxmpp/stream.py`)

  200. jonas’

    MattJ, I mean, what you say makes sense, but it’s hard to get that into code right from the beginning

  201. jonas’

    there are dragons and nasal demons very close due to fun race conditions (even without threads)

  202. jonas’

    maybe race condition isn’t the right term, but edge case is.

  203. paul has left

  204. jonas’

    https://github.com/horazont/aioxmpp/commit/f9af3cb485e9b6d7bc0d76d10e919aa76e822872 that’s the one

  205. jonas’

    oh, no, that’s a different one

  206. jonas’

    that was when parsing errors didn’t even propagate to the SM implementation

  207. jonas’

    finding the right place to count "stanzas" wasn’t easy, and it took more than one iteration

  208. pulkomandy has left

  209. lovetox has left

  210. pulkomandy has joined

  211. lovetox has joined

  212. lovetox

    what impl get wrong mostly is not how to count

  213. lovetox

    is when to start

  214. lovetox

    and its not when you receive the first stanza

  215. asterix has left

  216. asterix has joined

  217. lovetox

    its also not after the server sent you <enabled>

  218. lovetox

    which probably is the most common pitfall

  219. jonas’


  220. jonas’

    I’m pretty sure it is

  221. jonas’

    I’m pretty sure you start to count inbound after you received <enabled/>, and outbound after you sent <enable/>

  222. jonas’

    which is the only way to make this reliable

  223. Alex has left

  224. Alex has joined

  225. pulkomandy has left

  226. larma has left

  227. pulkomandy has joined

  228. asterix has left

  229. asterix has joined

  230. larma has joined

  231. paul has joined

  232. lovetox has left

  233. kikuchiyo has joined

  234. larma has left

  235. larma has joined

  236. kikuchiyo has left

  237. flow

    jonas’, probably lovetax was talking about counting outbound stanzas

  238. flow

    jonas’, probably lovetox was talking about counting outbound stanzas

  239. jonas’

    flow, I got confused by "its not when you receive the first stanza", sounds like inbound to me

  240. asterix has left

  241. asterix has joined

  242. sonny has joined

  243. pulkomandy has left

  244. pulkomandy has joined

  245. sonny has left

  246. sonny has joined

  247. asterix has left

  248. asterix has joined

  249. sonny has left

  250. asterix has left

  251. asterix has joined

  252. pulkomandy has left

  253. pulkomandy has joined

  254. goffi has joined

  255. asterix has left

  256. asterix has joined

  257. debacle has joined

  258. neroam728 has joined

  259. neroam728 has left

  260. paul has left

  261. paul has joined

  262. strar has left

  263. strar has joined

  264. futuresky202 has joined

  265. futuresky202 has left

  266. sonny has joined

  267. kikuchiyo has joined

  268. asterix has left

  269. asterix has joined

  270. sonny has left

  271. pulkomandy has left

  272. pulkomandy has joined

  273. asterix has left

  274. asterix has joined

  275. sonny has joined

  276. asterix has left

  277. asterix has joined

  278. goffi has left

  279. goffi has joined

  280. goffi has left

  281. goffi has joined

  282. pulkomandy has left

  283. asterix has left

  284. asterix has joined

  285. asterix has left

  286. asterix has joined

  287. pulkomandy has joined

  288. debacle has left

  289. Zash has left

  290. Zash has joined

  291. sonny has left

  292. pulkomandy has left

  293. pulkomandy has joined

  294. sonny has joined

  295. kikuchiyo has left

  296. Neustradamus has left

  297. Neustradamus has joined

  298. Neustradamus has left

  299. Neustradamus has joined

  300. Hrithik has joined

  301. Hrithik has left

  302. hrithik has joined

  303. hrithik

    Guys i need your help

  304. hrithik

    .setXmppDomain("admin@") .setPort(5280) .setHost("") .setResource("Rooster")

  305. hrithik

    when connecting with client it showing error as (client not connected to server message not sent ) how to resolve it?

  306. jonas’

    what library is that even?

  307. hrithik

    smack library

  308. jonas’


  309. hrithik


  310. jonas’

    flow, ^

  311. jonas’

    though one thing which stands out right away is that using bare IP addresses is asking for trouble.

  312. Zash

    and a nodepart passed to something called set domain

  313. Zash

    and the standard bosh port

  314. jonas’

    that’s probably not good either

  315. Zash

    and also everything

  316. hrithik

    DomainBareJid domainname = JidCreate.domainBareFrom(""); XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder() .setXmppDomain("admin@") .setPort(5280) .setHost("") .setResource("Rooster")

  317. hrithik

    i have my server in another system

  318. hrithik

    how to set connection with server and client(mobile)

  319. pulkomandy has left

  320. pulkomandy has joined

  321. hrithik has left

  322. Neustradamus has left

  323. Neustradamus has joined

  324. asterix has left

  325. asterix has joined

  326. sonny has left

  327. asterix has left

  328. asterix has joined

  329. hrithik has joined

  330. hrithik has left

  331. Neustradamus has left

  332. sonny has joined

  333. Neustradamus has joined

  334. bhaveshsgupta has joined

  335. sonny has left

  336. pulkomandy has left

  337. bhaveshsgupta has left

  338. bhaveshsgupta has joined

  339. pulkomandy has joined

  340. pulkomandy has left

  341. bhaveshsgupta has left

  342. pulkomandy has joined

  343. sonny has joined

  344. bhaveshsgupta has joined

  345. sonny has left

  346. pulkomandy has left

  347. pulkomandy has joined

  348. bhaveshsgupta has left

  349. bhaveshsgupta has joined

  350. Neustradamus has left

  351. pulkomandy has left

  352. pulkomandy has joined

  353. sonny has joined

  354. bhaveshsgupta has left

  355. Neustradamus has joined

  356. bhaveshsgupta has joined

  357. lovetox has joined

  358. larma has left

  359. larma has joined

  360. kikuchiyo has joined

  361. lovetox has left

  362. lovetox has joined

  363. lovetox

    yeah jonas’ but thats counter to most of other XMPP flows

  364. lovetox

    normally you send a IQ get, receive a set, then something happens

  365. lovetox

    or you negotiate something with, <xxx> and get back <succeeded>

  366. lovetox


  367. lovetox

    and thats probably the first intention when implementing smacks

  368. lovetox

    we enable, wait for response <enabled> then we start doing our thing

  369. sonny has left

  370. asterix has left

  371. asterix has joined

  372. bhaveshsgupta has left

  373. bhaveshsgupta has joined

  374. asterix has left

  375. asterix has joined

  376. sonny has joined

  377. asterix has left

  378. asterix has joined

  379. asterix has left

  380. debacle has joined

  381. asterix has joined

  382. Neustradamus has left

  383. pulkomandy has left

  384. pulkomandy has joined

  385. Neustradamus has joined

  386. Neustradamus has left

  387. Neustradamus has joined

  388. asterix has left

  389. asterix has joined

  390. pulkomandy has left

  391. sonny has left

  392. pulkomandy has joined

  393. bhaveshsgupta has left

  394. bhaveshsgupta has joined

  395. asterix has left

  396. asterix has joined

  397. strar has left

  398. strar has joined

  399. bhaveshsgupta has left

  400. bhaveshsgupta has joined

  401. Zash has left

  402. Zash has joined

  403. sonny has joined

  404. bhaveshsgupta has left

  405. bhaveshsgupta has joined

  406. sonny has left

  407. bhaveshsgupta has left

  408. bhaveshsgupta has joined

  409. paul has left

  410. pulkomandy has left

  411. pulkomandy has joined

  412. bhaveshsgupta has left

  413. bhaveshsgupta has joined

  414. goffi has left

  415. pulkomandy has left

  416. bhaveshsgupta has left

  417. bhaveshsgupta has joined

  418. pulkomandy has joined

  419. xmppnoob has joined

  420. xmppnoob

    hi everyone. not sure if this is the right place for the questions i have, but maybe you can give me some pointers. i'm trying to build an xmpp client for my organization (web and mobile), on mobile i'm using smack for android which is great (haven't started ios yet...). on web, my search has led me to strophe library, which sadly i coudn't even compile (dirs and files unexistent) and xmpp.js, (node-xmpp rewrite) which i'm currently testing, the basic demo covers connection, send and receive messages, pretty useful, but i'm struggling on finding documentation on some other topics (roster management, file transfer, etc.), do you know and recommend some other library?

  421. pulkomandy has left

  422. pulkomandy has joined

  423. actupper has left

  424. MattJ

    Hi xmppnoob

  425. MattJ

    Take a look at converse.js <https://conversejs.org>

  426. MattJ

    strophe.js is generally a low-level library, so there is a lot of DIY involved, though it does have a bunch of plugins that handle some tasks for you

  427. MattJ

    converse.js is a more featured client on top of it, which handles lots more stuff, and is easily customizable/embeddable

  428. bhaveshsgupta has left

  429. MattJ

    Also if you're working on clients, take a look at https://docs.modernxmpp.org/client/protocol/ which has a bunch of relevant notes

  430. sonny has joined

  431. bhaveshsgupta has joined

  432. xmppnoob

    thanks MattJ, i'm a little confused about conversejs, it is a client or a library?

  433. MattJ

    It's primarily a client, but it has an API that you can use to control/customize it with your own code

  434. pulkomandy has left

  435. pulkomandy has joined

  436. actupper has joined

  437. xmppnoob

    great! i'll give it a try

  438. sonny has left

  439. lovetox has left

  440. paul has joined

  441. bhaveshsgupta has left

  442. bhaveshsgupta has joined

  443. asterix has left

  444. bhaveshsgupta has left

  445. bhaveshsgupta has joined

  446. bhaveshsgupta has left

  447. bhaveshsgupta has joined