jssip
Version:
the Javascript SIP library
86 lines (75 loc) • 1.87 kB
JavaScript
const Logger = require('./Logger');
const Utils = require('./Utils');
const Grammar = require('./Grammar');
const logger = new Logger('Socket');
/**
* Interface documentation: https://jssip.net/documentation/$last_version/api/socket/
*
* interface Socket {
* attribute String via_transport
* attribute String url
* attribute String sip_uri
*
* method connect();
* method disconnect();
* method send(data);
*
* attribute EventHandler onconnect
* attribute EventHandler ondisconnect
* attribute EventHandler ondata
* }
*
*/
exports.isSocket = (socket) =>
{
// Ignore if an array is given.
if (Array.isArray(socket))
{
return false;
}
if (typeof socket === 'undefined')
{
logger.warn('undefined JsSIP.Socket instance');
return false;
}
// Check Properties.
try
{
if (!Utils.isString(socket.url))
{
logger.warn('missing or invalid JsSIP.Socket url property');
throw new Error('Missing or invalid JsSIP.Socket url property');
}
if (!Utils.isString(socket.via_transport))
{
logger.warn('missing or invalid JsSIP.Socket via_transport property');
throw new Error('Missing or invalid JsSIP.Socket via_transport property');
}
if (Grammar.parse(socket.sip_uri, 'SIP_URI') === -1)
{
logger.warn('missing or invalid JsSIP.Socket sip_uri property');
throw new Error('missing or invalid JsSIP.Socket sip_uri property');
}
}
catch (e)
{
return false;
}
// Check Methods.
try
{
[ 'connect', 'disconnect', 'send' ].forEach((method) =>
{
if (!Utils.isFunction(socket[method]))
{
logger.warn(`missing or invalid JsSIP.Socket method: ${method}`);
throw new Error(`Missing or invalid JsSIP.Socket method: ${method}`);
}
});
}
catch (e)
{
return false;
}
return true;
};