Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

strophe.rayo.js 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /* jshint -W117 */
  2. var logger = require("jitsi-meet-logger").getLogger(__filename);
  3. module.exports = function() {
  4. Strophe.addConnectionPlugin('rayo',
  5. {
  6. RAYO_XMLNS: 'urn:xmpp:rayo:1',
  7. connection: null,
  8. init: function (conn) {
  9. this.connection = conn;
  10. var disco = conn.disco;
  11. if (disco) {
  12. disco.addFeature('urn:xmpp:rayo:client:1');
  13. }
  14. this.connection.addHandler(
  15. this.onRayo.bind(this), this.RAYO_XMLNS, 'iq', 'set',
  16. null, null);
  17. },
  18. onRayo: function (iq) {
  19. logger.info("Rayo IQ", iq);
  20. },
  21. dial: function (to, from, roomName, roomPass, focusMucJid) {
  22. var self = this;
  23. return new Promise(function (resolve, reject) {
  24. if(!focusMucJid) {
  25. reject(new Error("Internal error!"));
  26. return;
  27. }
  28. var req = $iq(
  29. {
  30. type: 'set',
  31. to: focusMucJid
  32. }
  33. );
  34. req.c('dial',
  35. {
  36. xmlns: self.RAYO_XMLNS,
  37. to: to,
  38. from: from
  39. });
  40. req.c('header',
  41. {
  42. name: 'JvbRoomName',
  43. value: roomName
  44. }).up();
  45. if (roomPass !== null && roomPass.length) {
  46. req.c('header',
  47. {
  48. name: 'JvbRoomPassword',
  49. value: roomPass
  50. }).up();
  51. }
  52. self.connection.sendIQ(
  53. req,
  54. function (result) {
  55. logger.info('Dial result ', result);
  56. var resource = $(result).find('ref').attr('uri');
  57. self.call_resource =
  58. resource.substr('xmpp:'.length);
  59. logger.info(
  60. "Received call resource: " +
  61. self.call_resource);
  62. resolve();
  63. },
  64. function (error) {
  65. logger.info('Dial error ', error);
  66. reject(error);
  67. }
  68. );
  69. });
  70. },
  71. hangup: function () {
  72. var self = this;
  73. return new Promise(function (resolve, reject) {
  74. if (!self.call_resource) {
  75. reject(new Error("No call in progress"));
  76. logger.warn("No call in progress");
  77. return;
  78. }
  79. var req = $iq(
  80. {
  81. type: 'set',
  82. to: self.call_resource
  83. }
  84. );
  85. req.c('hangup',
  86. {
  87. xmlns: self.RAYO_XMLNS
  88. });
  89. self.connection.sendIQ(
  90. req,
  91. function (result) {
  92. logger.info('Hangup result ', result);
  93. self.call_resource = null;
  94. resolve();
  95. },
  96. function (error) {
  97. logger.info('Hangup error ', error);
  98. self.call_resource = null;
  99. reject(new Error('Hangup error '));
  100. }
  101. );
  102. });
  103. }
  104. }
  105. );
  106. };