rcs-sdk
Version:
封装客户端与平台间的相互调用功能。
103 lines • 4.49 kB
JavaScript
;
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