mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
The url parser was ignoring port hints from window.location when the uri string was undefined. This commit changes the parser to use window.location.host (not hostname) so that the port is preserved.
74 lines
1.5 KiB
JavaScript
74 lines
1.5 KiB
JavaScript
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var parseuri = require('parseuri');
|
|
var debug = require('debug')('socket.io-client:url');
|
|
|
|
/**
|
|
* Module exports.
|
|
*/
|
|
|
|
module.exports = url;
|
|
|
|
/**
|
|
* URL parser.
|
|
*
|
|
* @param {String} url
|
|
* @param {Object} An object meant to mimic window.location.
|
|
* Defaults to window.location.
|
|
* @api public
|
|
*/
|
|
|
|
function url(uri, loc){
|
|
var obj = uri;
|
|
|
|
// default to window.location
|
|
var loc = loc || global.location;
|
|
if (null == uri) uri = loc.protocol + '//' + loc.host;
|
|
|
|
// relative path support
|
|
if ('string' == typeof uri) {
|
|
if ('/' == uri.charAt(0)) {
|
|
if ('/' == uri.charAt(1)) {
|
|
uri = loc.protocol + uri;
|
|
} else {
|
|
uri = loc.hostname + uri;
|
|
}
|
|
}
|
|
|
|
if (!/^(https?|wss?):\/\//.test(uri)) {
|
|
debug('protocol-less url %s', uri);
|
|
if ('undefined' != typeof loc) {
|
|
uri = loc.protocol + '//' + uri;
|
|
} else {
|
|
uri = 'https://' + uri;
|
|
}
|
|
}
|
|
|
|
// parse
|
|
debug('parse %s', uri);
|
|
obj = parseuri(uri);
|
|
}
|
|
|
|
// make sure we treat `localhost:80` and `localhost` equally
|
|
if (!obj.port) {
|
|
if (/^(http|ws)$/.test(obj.protocol)) {
|
|
obj.port = '80';
|
|
}
|
|
else if (/^(http|ws)s$/.test(obj.protocol)) {
|
|
obj.port = '443';
|
|
}
|
|
}
|
|
|
|
obj.path = obj.path || '/';
|
|
|
|
// define unique id
|
|
obj.id = obj.protocol + '://' + obj.host + ':' + obj.port;
|
|
// define href
|
|
obj.href = obj.protocol + '://' + obj.host + (loc && loc.port == obj.port ? '' : (':' + obj.port));
|
|
|
|
return obj;
|
|
}
|