UNPKG

rcs-sdk

Version:

封装客户端与平台间的相互调用功能。

103 lines 4.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendMessage = exports.register = void 0; const constants_1 = require("../constants"); const util_1 = require("../util"); const rcs_data_1 = require("rcs-data"); const debug = require('debug')('rcssdk:srvapi:sip'); function register(userid, sipuri, token) { if ((0, util_1.runAsMock)('sip')) { let result = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPREGISTER, {}); return Promise.resolve(result); } else { return new Promise((resolve, reject) => { const { JsSIP } = this; let { config } = this; let { sipServer } = config; debug(`准备连接SIP服务器:${sipServer}`); let socket = new JsSIP.WebSocketInterface(sipServer); let configuration = { sockets: [socket], uri: sipuri, ha1: token, }; let ua = new JsSIP.UA(configuration); ua.on('connecting', () => { debug('ua.connecting', socket.url); }); ua.on('connected', () => { debug('ua.connected'); }); ua.on('disconnected', () => { debug('ua.disconnected'); }); ua.on('registered', () => { debug('ua.registered'); let result = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPREGISTER, { sipua: ua }); resolve(result); }); ua.on('unregistered', () => { debug('ua.unregistered'); }); ua.on('registrationFailed', ({ cause }) => { debug('ua.registrationFailed', cause); let result = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPREGISTER, null, constants_1.ErrCode.SIPREGISTER_FAILED, '注册失败'); reject(result); }); ua.on('newMessage', ({ originator, message, request }) => { if (originator === 'remote') { message.accept(); let { body, from, to } = request; let contentType = request.getHeader('Content-Type'); let conversationId = request.getHeader('Conversation-ID'); let contributionId = request.getHeader('Contribution-ID'); debug(`收到SIP消息:\n${from}\n\n${contentType}\n\n${body}\n`); let sdkrst = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPNEWMESSAGE, { contentType, body, headers: { from, to, conversationId, contributionId }, }); this.emit(constants_1.CbEvents.ONRECVNEWSIPMESSAGE, sdkrst); } }); let extraHeaders = []; if (this.config.skipAuth === true) extraHeaders.push('X-SKIP-AUTH: 1'); extraHeaders.push(`Authorization: Digest algorithm=MD5, username= "${userid}", response="${token}"`); ua.registrator().setExtraHeaders(extraHeaders); ua.start(); }); } } exports.register = register; function sendMessage(recipient, contentType, body, extraHeaders) { return new Promise((resolve, reject) => { let target; if (typeof recipient === 'string') target = rcs_data_1.NameAddrHeader.parse(recipient).uri.toString(); else target = recipient.uri.toString(); let eventHandlers = { succeeded: () => { debug(`JsSIP.UA.sendMessage(${target})发送成功`); let sdkrst = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPSENDMESSAGE); resolve(sdkrst); }, failed: (e) => { debug(`JsSIP.UA.sendMessage(${target})发送失败: ${e.cause}`, e); let sdkrst = (0, util_1.newSdkResult)(constants_1.RequestFunc.SIPSENDMESSAGE, null, constants_1.ErrCode.SIPREGISTER_FAILED, e.cause); reject(sdkrst); }, }; let options = { contentType, eventHandlers, extraHeaders, }; debug(`调用JsSIP.UA.sendMessage(${target})方法发送消息`); this.sipua.sendMessage(target, body, options); }); } exports.sendMessage = sendMessage; //# sourceMappingURL=sip.js.map