jdev - 2021-07-02

  1. emus has left

  2. pasdesushi has left

  3. gutuning has left

  4. gutuning has joined

  5. debacle has left

  6. dezant has left

  7. dezant has joined

  8. gutuning has left

  9. gutuning has joined

  10. lovetox has left

  11. dezant has left

  12. wurstsalat has left

  13. dezant has joined

  14. mac has joined

  15. lovetox has joined

  16. idk has left

  17. marc0s has left

  18. marc0s has joined

  19. dezant has left

  20. dezant has joined

  21. idk has joined

  22. idk has left

  23. hardweary has joined

  24. Burn has joined

  25. hardweary has left

  26. hardweary has joined

  27. idk has joined

  28. mac has left

  29. mac has joined

  30. Burn has left

  31. Yagizа has joined

  32. Burn has joined

  33. dezant has left

  34. dezant has joined

  35. Burn has left

  36. kikuchiyo has joined

  37. wurstsalat has joined

  38. şişio has joined

  39. idk has left

  40. hardweary has left

  41. idk has joined

  42. mikeye has joined

  43. şişio has left

  44. şişio has joined

  45. asterix has left

  46. asterix has joined

  47. Yagizа has left

  48. goffi has joined

  49. Burn has joined

  50. mikeye has left

  51. dezant has left

  52. idk has left

  53. emus has joined

  54. gutuning has left

  55. 512bit has joined

  56. 512bit

    What are the typical transfer speeds achieved during a jingle file transfer?

  57. jonas’

    512bit, whatever the link between the two clients can achieve

  58. jonas’

    there is no "typical" number there

  59. jonas’

    depends on the negotiated transfer method

  60. asterix has left

  61. asterix has joined

  62. mac has left

  63. marc has joined

  64. kikuchiyo has left

  65. marc has left

  66. marc has joined

  67. kikuchiyo has joined

  68. nixi has joined

  69. idk has joined

  70. gutuning has joined

  71. FireFly has joined

  72. Zash has left

  73. mac has joined

  74. debacle has joined

  75. nixi has left

  76. gutuning has left

  77. şişio has left

  78. gutuning has joined

  79. pasdesushi has joined

  80. gutuning has left

  81. kikuchiyo has left

  82. pasdesushi has left

  83. kikuchiyo has joined

  84. şişio has joined

  85. pasdesushi has joined

  86. mac has left

  87. pasdesushi has left

  88. marc has left

  89. gutuning has joined

  90. marc has joined

  91. pasdesushi has joined

  92. pep. has left

  93. pep. has joined

  94. pasdesushi has left

  95. pasdesushi has joined

  96. pasdesushi has left

  97. pasdesushi has joined

  98. pep. has left

  99. pep. has joined

  100. pasdesushi has left

  101. pasdesushi has joined

  102. Alex has left

  103. Alex has joined

  104. şişio has left

  105. pasdesushi has left

  106. Zash has joined

  107. edhelas has left

  108. edhelas has joined

  109. şişio has joined

  110. pep. has left

  111. pep. has joined

  112. x51 has joined

  113. emus has left

  114. gutuning has left

  115. gutuning has joined

  116. emus has joined

  117. moparisthebest has left

  118. moparisthebest has joined

  119. Alex has left

  120. nephele has joined

  121. Alex has joined

  122. Wojtek has joined

  123. gutuning has left

  124. mikeye has joined

  125. pasdesushi has joined

  126. Wojtek has left

  127. Wojtek has joined

  128. pasdesushi has left

  129. pasdesushi has joined

  130. kikuchiyo has left

  131. pasdesushi has left

  132. pasdesushi has joined

  133. pasdesushi has left

  134. pasdesushi has joined

  135. mikeye has left

  136. pasdesushi has left

  137. wellsfargo@exploit.im has joined

  138. wellsfargo@exploit.im has left

  139. pasdesushi has joined

  140. kikuchiyo has joined

  141. pasdesushi has left

  142. gutuning has joined

  143. Burn has left

  144. kikuchiyo has left

  145. şişio has left

  146. gutuning has left

  147. Alex has left

  148. Alex has joined

  149. Sam

    Okay, trying again to phrase a problem that's been bugging me, maybe someone here will have insights. I'm building a MUC library and it's showing me the weaknesses in my core XMPP library. One is that I have no way to track stanza errors (other than IQs). When I send a join presence for the MUC for instance, I always expect a response so I block until receivnig it, something like muc.Join(timeout, jid) roomOrError. This works for the self-presence because the MUC handler is tracking all presence payloads that have the <x xmlns="muc#user"/> or whatever in them so it can associate the response and hand it back. It can't hand back an error though because that is not a MUC specific payload and it doesn't know about it.

  150. Sam

    So instead I thought about having a general xmpp.SendPresence(timeout, presence) error that will block until it gets a presence error. I can call that from within muc.Join to send the presence, then if the success response happens I can cancel the timeout (don't worry about that, just realize that timeouts can be canceled early) and return it, otherwise we wait for the error until the timeout is hit and then return an error if no error or success was received.

  151. Sam

    However, this feels wrong. Using xmpp.SendPresence or whatever the *expected* behavior will be that it times out and returns that it timed out 90% of the time (since we hopefully don't get presence errors often). It works for the MUC case, but for genreally using it it feels weird.

  152. Sam

    Has anyone else run into something like this?

  153. kikuchiyo has joined

  154. larma has left

  155. larma has joined

  156. MattJ

    I think the summary of what you're trying to say is that in some cases in XMPP there is no explicit success response

  157. MattJ

    Which is indeed the case

  158. Kev

    I have generally found that I don’t need stateful errors for very much outside iqs.

  159. MattJ

    Yet any stanza can trigger an error, that you would want to handle

  160. Sam

    Heh, yes, I suppose that's all I was saying with all of that. It makes it hard to track errors because the timeout is indeterminant (sp?).

  161. Zash


  162. Sam

    Normally it's not a problem for that reason, but MUCs it can be since I want to block until the join was successful or an error is received (or the timeout is hit). It makes more sense to have the timeout only if there is an error and a success case

  163. Kev

    You can always* use ids for tracking errors to particular stanzas if you care.

  164. MattJ

    I think the answer is partly as Kev says - the stanzas without an explicit success /usually/ don't need one for practical use-cases

  165. Sam

    Kev: yah, that's what we're talking about

  166. Kev

    When you say block, I assume you mean that a MUC join is happening in its own coroutine that you’re blocking, not that you’re blocking the calling site?

  167. Zash

    I've thought about this too. Not sure I'd want anything blocking, but some way to race a timer came to mind.

  168. Sam

    Yes, sorry blocking a coroutine.

  169. Kev

    (Since MUC joins you generally want to be async and to continue processing other data while you wait for them)

  170. Sam

    Blocking is the normal and expected behavior for things like this; the user can always await it if they want it in the background (more or less)

  171. Kev


  172. Kev

    Blocking the join, not blocking the caller.

  173. Sam

    The issue is more or less that if I've registered a "muc" handler the success case gets picked up (it's a MUC specific payload), the error case doesn't (unless I want the MUC handler to handle *all* error presences)

  174. Kev

    I’m missing why it’s hard to timer this (probably my fault).

  175. Sam

    The timer isn't the issue, that part is fine

  176. Sam

    Sorry, I've been struggling to explain this; not your fault.

  177. Zash

    It's even more fun. The true completion signal is the subject message 🙂

  178. Zash

    For a MUC join at least.

  179. Kev

    What we do in Swift is we start a timer on join. If we succeed the timer’s cancelled. If it doesn’t succeed and the timer fires the user is warned that the join probably won’t complete - but you could easily hard fail instead.

  180. Sam

    hmm, good point, I was taking the completion message to be the self-presence.

  181. Zash

    A way to have composable completion events might be nice.

  182. Kev

    Zash: Ah. It’s the subject message…or the first non-history message because some servers don’t send a subject. Although that was an old ejabberd bug, and it’s probably been fixed for a decade.

  183. Sam

    Kev: that's what we do as well. I'd also like it to be able to return the presence error (if any) though.

  184. Zash

    Then you could take a message and a timer, or a message and a thing that watches for a message receipt, or a presence and a thing that watches for the subject.

  185. Kev

    Sam: But that’s easy enough, isn’t it? If you get a presence error reply to your join stanza, you have the error.

  186. Sam

    Kev: right, but this is a MUC handler that receivese MUC paylods. The presence error is a normal generic one, not a MUC specific thing. So I'd have to listen for *all* presences in the MMUC handler to do that. This isn't actually how my library works right now, and it seems like there is a better way.

  187. jonas’

    Sam, make a thing which allows you to listen to presences with a specific ID

  188. Kev

    I would personally just listen to all presences, and check the id. Or have a ‘tell me if this id comes in’ handler.

  189. Sam

    Right, so like I said in the orignial post if I do that it works okay for MUCs, but then if the user uses it the API feels weird:

  190. jonas’

    then it’s tied semantically to the MUC by the ID and it’s less ugly

  191. Kev

    But I would very very much not make sending presence into a thing with a reply handler, because 99% of the time that’s just pointless.

  192. Sam

    xmpp.SendPresence(timeout, presence) error or whatever. The expected case is that the timeout is triggered momst of the time. Feels weird.

  193. Kev

    Yes. That is what I would not do.

  194. Sam

    Right, what Kev said

  195. jonas’

    Sam, how about xmpp.WaitPresenceError(timeout, id)?

  196. Sam

    Works great for MUC, not great for 90% of other cases :)

  197. Sam

    jonas’: yah, that's what I was saying (more or less)

  198. jonas’

    and keep xmpp.SendPresence fire-and-forget naive

  199. Kev

    But why not make xmpp.SendPresence(presence, optionalHandler, optionalTimer)?

  200. Kev

    Off for lunch :)

  201. Zash

    Kev, it may have been Prosody (too) which didn't used to send a subject if the subject was empty/unset. Fixed now anyways.

  202. Sam

    That's what I've done right now (ish). There's Send for sending any general stanza in a fire-and-forget way, SendPresence for sending a presence specifically and waiting for an error (or timnig out).

  203. Sam

    And a bunch of other sort of related things that don't matter.

  204. kikuchiyo has left

  205. Sam

    Anyways, maybe this is the only way with how I have this structured (or give the MUC thing access to all presences and what not, but that feels wrong) and the answer is "Okay, SendPresence is weird, don't use it most of the time"

  206. Sam

    Thanks for the brainstorming.

  207. jonas’

    fwiw, it seems that aioxmpp does not track presence errors during muc join based on the ID but on the from

  208. Sam

    I thought about adding a way to track based on from so that any errors from a specific thing get forwarded to the MUC handler but that requires being able to modify the handler at runtime (eg. when we join a room, add "chat.myserver.com" to the valid from) which bothers me a bit, and also means that every separate plugin has to do its own id (or from) tracking internally to match responses with requests instead of the main XMPP handler thing just doing it for everything

  209. Sam

    But maybe that would be better than adding weird SendPresence functions that are expected to fail

  210. Sam

    (or timeout, rather)

  211. gutuning has joined

  212. Burn has joined

  213. Sam

    Hmm, now the subject thing is bothering me a bit. Does it matter if they can do things before the message history is sent, or should I block until the subject is set? I can't tell that it would matter, you might just send a message before getting context back, which feels weird but isn't the end of the world. Also I'm kind of assuming a MUC-MAM future anyways, so I dunno if I care about history/subject as much.

  214. gutuning has left

  215. Kev

    > fwiw, it seems that aioxmpp does not track presence errors during muc join based on the ID but on the from Pretty sure that’s what we did in Swiften, without checking.

  216. pasdesushi has joined

  217. jonas’

    Sam, aioxmpp doesn’t prevent you from doing things before the subject was received. It only uses it as a marker for when to start trusting nickname<->jid relationships because it has up-to-date presence or somesuch (I’d have to look it up).

  218. Sam

    Makes sense; for now I'll probably consider join successful on self-presence then. We'll see if I use subject for anything later (so far I haven't even looked at that and am not tracking the subject at all)

  219. Zash

    It would be weird for the join to fail between self-presence and subject.

  220. Sam

    As far as I can tell from the spec it can't, you're actually done once you get self-presence. Subject is just something that might or might not show up later.

  221. Kev

    Zash: What if the server has to hit storage to fetch the subject, but not the members? That *might* mean a noticable delay between them.

  222. Sam

    (it's a SHOULD, so it probably will, but I don't see anything that relies on it)

  223. Kev

    But ultimately a network can fail at any point.

  224. Zash

    True. The whole thing could crash at any moment!

  225. Kev

    Sam: What relies on it is it’s what implementations use for knowing the join’s complete :)

  226. Zash

    Sam, hm? I thought sending subject was mandatory

  227. Kev

    SHOULD doesn’t mean OPTIONAL, it means “Things might break if you don’t do this, so be sure you know what you’re doing” ;)

  228. Sam

    Kev: why rely on that instead of getting self-presence?

  229. Kev

    Sam: Because presence comes before history.

  230. Sam

    I mean, if it's what everything does I can do that too, the spec just makes it sound like self-presence is the thing that means you're joined. What does it matter if I've gotten history or not yet?

  231. Kev

    And you almost always want to know what’s live messages and what’s join context.

  232. pasdesushi has left

  233. Kev

    So you need the subject to know you’re done with the history and everything after will be live changes.

  234. Sam

    Oh yah, I guess I might want to draw a line after history or something to distinguish it for the user

  235. Kev

    Also, subject is a MUST.

  236. Kev

    Not SHOULd :)

  237. Kev

    Not SHOULD :)

  238. Sam

    oops, so it is. Weird, I swear I just read that and it said SHOULD.

  239. Zash

    SHALL == MUST?

  240. Sam


  241. Zash


  242. Sam

    Still, I'm joined after self-presence. When I get subject, I can draw the line and start live messages. Does it matter that I was already joined?

  243. Sam

    Anything I send I'll still get the reflection back after the history (I assume).

  244. Zash

    If you wanna have a "ready" signal, separate from "success", I suppose.

  245. Zash

    May matter for UI stuff.

  246. Sam

    What's the difference between "ready" and "success", I guess?

  247. Sam

    I just don't see how it would matter in the UI or anything

  248. pasdesushi has joined

  249. Zash

    If you wanna show a spinner or something while it's throwing history at you?

  250. Sam

    In that case it seems like I'd just do the Join, show the spinner, then when I get the history back I'd clear the spinner. I don't have to block the join call on it.

  251. Zash

    I think some clients don't let you start writing until then

  252. Sam

    The writing thing makes sense, but this is a library so the clients could always still do that.

  253. Sam

    Returning on self-presence seems more flexible in that way; clients can still do either. If I return on subject they are stuck with that.

  254. Sam

    But also I have a nagging suspicion that if everyone else does subject there's probably a good reason that actually will break later that I'm not thinking of.

  255. Kiwi has joined

  256. kikuchiyo has joined

  257. pasdesushi has left

  258. kikuchiyo has left

  259. pasdesushi has joined

  260. Yagizа has joined

  261. Sam

    > // SendPresence is like Send except that it returns an error if the first token > // read from the stream is not a Presence start token and blocks until an error > // response is received or the context times out. > // Presences are generally fire-and-forget meaning that the success behavior of > // SendPresence is to time out and that methods such as Send should normally be > // used instead. > // It is thus mainly for use by extensions that define an extension-namespaced > // success response to a presence being sent and need a mechanism to track > // general error responses without handling every single presence sent through > // the session to see if it has a matching ID. > // > // SendPresence is safe for concurrent use by multiple goroutines. Good enough (I hope).

  262. Sam

    Thanks again for all the help.

  263. Zash

    Sam, what's that about returning an error if not reading a presence from the stream?

  264. pasdesushi has left

  265. Sam

    Wrong type of stream, it's confusing out of context but it copies XML tokens so you'd do SendPresence(timeout, Presence{Type: whatever}.Wrap(somepayload)) which returns an XML token stream that gets copied to the XMPP stream.

  266. Sam

    See SendIQ (https://pkg.go.dev/mellium.im/xmpp#Session.SendIQ) for an already existing example.

  267. Sam

    I should probably not re-use "stream" in the docs, that's confusing.

  268. kikuchiyo has joined

  269. Zash

    Sounds a bit overloaded, yes.

  270. Sam

    "first token read from the reader" or something will fix that. Done.

  271. Sam

    Or "from the input".

  272. Sam

    There are now 16 basic sending methods that match (Send|Encode)(Message|Presence|IQ)?(Element)?

  273. Sam

    I don't love that, but it does work quite well in my experience so far even if it's a lot of options.

  274. emus has left

  275. emus has joined

  276. 512 has joined

  277. larma has left

  278. dezant has joined

  279. 512 has left

  280. 512bit has left

  281. pasdesushi has joined

  282. larma has joined

  283. pasdesushi has left

  284. pasdesushi has joined

  285. pasdesushi has left

  286. pasdesushi has joined

  287. gutuning has joined

  288. pasdesushi has left

  289. Yagizа has left

  290. FireFly has left

  291. Burn has left

  292. debacle has left

  293. Burn has joined

  294. FireFly has joined

  295. Yagizа has joined

  296. emus has left

  297. Burn has left

  298. paul has left

  299. paul has joined

  300. paul has left

  301. paul has joined

  302. gutuning has left

  303. gutuning has joined

  304. emus has joined

  305. FireFly has left

  306. marc has left

  307. marc0s has left

  308. marc0s has joined

  309. Burn has joined

  310. Alex has left

  311. Alex has joined

  312. is_bru has joined

  313. gutuning has left

  314. is_bru

    Does anyone still use talkonaut?

  315. is_bru has left

  316. FireFly has joined

  317. Kiwi has left

  318. Martin

    What is a talkonaut?

  319. Sam

    Looks like it's similar to jmp.chat? The website doesn't work for me, so I dunno if it still exists or not.

  320. marc has joined

  321. Martin

    Ah, so a telephone xmpp transport. Never used one of those.

  322. moparisthebest

    > Talkonaut by GTalk2VoIP, Inc.

  323. moparisthebest


  324. MattJ

    Wow, haven't heard of Talkonaut for a while

  325. sonny has left

  326. gutuning has joined

  327. sonny has joined

  328. Martin

    GTalk2VoIP sounds like it's long dead also.

  329. Martin

    When was gtalk switched off?

  330. MattJ

    Never, it's still going I think :)

  331. MattJ

    Still responding on 5222 anyway

  332. gutuning has left

  333. Burn has left

  334. Martin

    Oh, I thought it's dead for a long time already.

  335. Holger

    s2s is dead, c2s isn't.

  336. kikuchiyo has left

  337. MattJ

    Yeah, they announced it was. Then it continued to work for years. Then they eventually turned off s2s (which nobody used anyway because it didn't do TLS). Now they're shutting down Hangouts, which is likely tied up in the same infrastructure, so it possibly might actually disappear soon.

  338. Martin

    Is there even a client nowadays? Can't really follow googles pace of inventing and killing chat systems. 😁

  339. MattJ

    You can use any XMPP client, but it only really works with other XMPP clients. If people are using the Google Hangouts client they appear online but don't receive messages.

  340. kikuchiyo has joined

  341. MattJ

    All that based on old observations, I haven't poked around in the past year or so

  342. Martin

    Sounds like a long forgotten service running on a long forgotten machine in the basement. 😂

  343. MattJ

    Well, that Hangouts users appear online suggests it's all the same infrastructure, and the Hangouts conferences in the browser used XMPP for signalling even after they announced the end of GTalk, so it's very likely still all production.

  344. MattJ

    But now Hangouts is supposedly dead (EOL June), all that may change

  345. Link Mauve

    MattJ, s2s also didn’t let outsiders communicate with Hangouts users, fyi.

  346. MattJ

    or they may just keep it limping along for those few enterprise customers who insist they can't live without it

  347. Link Mauve

    With an extremely annoying failure model, where our messages would simply get redirected to /dev/null.

  348. MattJ


  349. emus has left

  350. Martin

    Just pretend it never existed and keep on working on xmpp world domination. 😃

  351. emus has joined

  352. Burn has joined

  353. Link Mauve

    Also Hangouts video calls from the Firefox plugin were printing MUC and Jingle debug stuff on stderr.

  354. marc has left

  355. marc has joined

  356. FireFly has left

  357. sonny has left

  358. Yagizа has left

  359. Wojtek has left

  360. Yagizа has joined

  361. Kiwi has joined

  362. sonny has joined

  363. gutuning has joined

  364. gutuning has left

  365. nephele has left

  366. FireFly has joined

  367. nephele has joined

  368. debacle has joined

  369. kikuchiyo has left

  370. kikuchiyo has joined

  371. kamui has joined

  372. kamui

    Is there a way I can upload files when using encryption?

  373. kamui

    Is there a way I can upload files?

  374. kamui

    everytime I try to do it, it just errors out with "File transfer failed"

  375. kamui


  376. Burn has left

  377. kamui has left

  378. mac has joined

  379. paul has left

  380. paul has joined

  381. kikuchiyo has left

  382. hardweary has joined

  383. nephele has left

  384. kamui has joined

  385. marc has left

  386. marc has joined

  387. nephele has joined

  388. kamui has left

  389. kikuchiyo has joined

  390. mac has left

  391. kamui has joined

  392. hardweary has left

  393. hardweary has joined

  394. gutuning has joined

  395. x51 has left

  396. Martin

    What server do you use?

  397. gutuning has left

  398. asterix has left

  399. asterix has joined

  400. mac has joined

  401. gutuning has joined

  402. kamui


  403. gutuning has left

  404. mac has left

  405. debacle has left

  406. 512 has joined

  407. idk has left

  408. selurvedu has joined

  409. idk has joined

  410. 512 has left

  411. Yagizа has left

  412. alacer has left

  413. dezant has left

  414. kikuchiyo has left

  415. gutuning has joined

  416. selurvedu has left

  417. selurvedu has joined

  418. FireFly has left

  419. kikuchiyo has joined

  420. FireFly has joined

  421. pasdesushi has joined

  422. kikuchiyo has left

  423. dezant has joined

  424. kikuchiyo has joined

  425. alacer has joined

  426. pasdesushi has left

  427. idk has left

  428. idk has joined

  429. alacer has left

  430. kikuchiyo has left

  431. goffi has left

  432. gutuning has left

  433. gutuning has joined

  434. FireFly has left

  435. debacle has joined

  436. pasdesushi has joined

  437. nephele has left

  438. debacle has left

  439. marc0s has left

  440. marc0s has joined

  441. asterix has left

  442. asterix has joined

  443. kikuchiyo has joined

  444. alacer has joined

  445. paul has left

  446. paul has joined

  447. paul has left

  448. paul has joined

  449. 512 has joined

  450. gutuning has left

  451. asterix has left

  452. asterix has joined

  453. paul has left

  454. paul has joined

  455. pasdesushi has left

  456. paul has left

  457. paul has joined

  458. pasdesushi has joined

  459. 512 has left

  460. gutuning has joined

  461. debacle has joined

  462. şişio has joined

  463. asterix has left

  464. asterix has joined

  465. idk has left

  466. asterix has left

  467. idk has joined

  468. asterix has joined

  469. şişio has left

  470. pasdesushi has left

  471. şişio has joined

  472. pasdesushi has joined

  473. wurstsalat has left

  474. pasdesushi has left

  475. pasdesushi has joined

  476. şişio has left

  477. pasdesushi has left

  478. pasdesushi has joined

  479. debacle has left

  480. hardweary has left

  481. dezant has left

  482. dezant has joined

  483. paul has left

  484. pasdesushi has left