diff --git a/modules/RTC/LocalStream.js b/modules/RTC/LocalStream.js
index bc1a2438b..bf30305f1 100644
--- a/modules/RTC/LocalStream.js
+++ b/modules/RTC/LocalStream.js
@@ -1,7 +1,8 @@
/* global APP */
-var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
+var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
var RTCEvents = require("../../service/RTC/RTCEvents");
var RTCBrowserType = require("./RTCBrowserType");
+var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
/**
* This implements 'onended' callback normally fired by WebRTC after the stream
@@ -29,7 +30,7 @@ function LocalStream(stream, type, eventEmitter, videoType, isGUMStream) {
if(isGUMStream === false)
this.isGUMStream = isGUMStream;
var self = this;
- if(type == "audio") {
+ if (MediaStreamType.AUDIO_TYPE === type) {
this.getTracks = function () {
return self.stream.getAudioTracks();
};
@@ -60,7 +61,11 @@ LocalStream.prototype.getOriginalStream = function()
};
LocalStream.prototype.isAudioStream = function () {
- return this.type === "audio";
+ return MediaStreamType.AUDIO_TYPE === this.type;
+};
+
+LocalStream.prototype.isVideoStream = function () {
+ return MediaStreamType.VIDEO_TYPE === this.type;
};
LocalStream.prototype.setMute = function (mute)
diff --git a/modules/RTC/MediaStream.js b/modules/RTC/MediaStream.js
index c5e3ca7f1..fc500781e 100644
--- a/modules/RTC/MediaStream.js
+++ b/modules/RTC/MediaStream.js
@@ -11,7 +11,7 @@ var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
*
* @constructor
*/
-function MediaStream(data, ssrc, browser, eventEmitter, muted) {
+function MediaStream(data, ssrc, browser, eventEmitter, muted, type) {
// XXX(gp) to minimize headaches in the future, we should build our
// abstractions around tracks and not streams. ORTC is track based API.
@@ -23,18 +23,29 @@ function MediaStream(data, ssrc, browser, eventEmitter, muted) {
// Also, we should be able to associate multiple SSRCs with a MediaTrack as
// a track might have an associated RTX and FEC sources.
+ if (!type) {
+ console.log("Errrm...some code needs an update...");
+ }
+
this.stream = data.stream;
this.peerjid = data.peerjid;
this.videoType = data.videoType;
this.ssrc = ssrc;
- this.type = (this.stream.getVideoTracks().length > 0)?
- MediaStreamType.VIDEO_TYPE : MediaStreamType.AUDIO_TYPE;
+ this.type = type;
this.muted = muted;
this.eventEmitter = eventEmitter;
}
+// FIXME duplicated with LocalStream methods - extract base class
+MediaStream.prototype.isAudioStream = function () {
+ return MediaStreamType.AUDIO_TYPE === this.type;
+};
-MediaStream.prototype.getOriginalStream = function() {
+MediaStream.prototype.isVideoStream = function () {
+ return MediaStreamType.VIDEO_TYPE === this.type;
+};
+
+MediaStream.prototype.getOriginalStream = function () {
return this.stream;
};
diff --git a/modules/RTC/RTC.js b/modules/RTC/RTC.js
index 59e4e1e34..6274a6ed6 100644
--- a/modules/RTC/RTC.js
+++ b/modules/RTC/RTC.js
@@ -76,7 +76,7 @@ var RTC = {
if(isMuted === true)
localStream.setMute(true);
- if(type == "audio") {
+ if (MediaStreamType.AUDIO_TYPE === type) {
this.localAudio = localStream;
} else {
this.localVideo = localStream;
@@ -98,16 +98,27 @@ var RTC = {
muted = pres.videoMuted;
}
- var remoteStream = new MediaStream(data, ssrc,
- RTCBrowserType.getBrowserType(), eventEmitter, muted);
+ var self = this;
+ [MediaStreamType.AUDIO_TYPE, MediaStreamType.VIDEO_TYPE].forEach(
+ function (type) {
+ var tracks =
+ type == MediaStreamType.AUDIO_TYPE
+ ? data.stream.getAudioTracks() : data.stream.getVideoTracks();
+ if (!tracks || !Array.isArray(tracks) || !tracks.length) {
+ console.log("Not creating a(n) " + type + " stream: no tracks");
+ return;
+ }
- if(!this.remoteStreams[jid]) {
- this.remoteStreams[jid] = {};
- }
- this.remoteStreams[jid][remoteStream.type]= remoteStream;
- eventEmitter.emit(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED,
- remoteStream);
- return remoteStream;
+ var remoteStream = new MediaStream(data, ssrc,
+ RTCBrowserType.getBrowserType(), eventEmitter, muted, type);
+
+ if (!self.remoteStreams[jid]) {
+ self.remoteStreams[jid] = {};
+ }
+ self.remoteStreams[jid][type] = remoteStream;
+ eventEmitter.emit(StreamEventTypes.EVENT_TYPE_REMOTE_CREATED,
+ remoteStream);
+ });
},
getPCConstraints: function () {
return this.rtcUtils.pc_constraints;
@@ -218,7 +229,9 @@ var RTC = {
changeLocalAudio: function (stream, callback) {
var oldStream = this.localAudio.getOriginalStream();
var newStream = this.rtcUtils.createStream(stream);
- this.localAudio = this.createLocalStream(newStream, "audio", true);
+ this.localAudio
+ = this.createLocalStream(
+ newStream, MediaStreamType.AUDIO_TYPE, true);
// Stop the stream
this.stopMediaStream(oldStream);
APP.xmpp.switchStreams(newStream, oldStream, callback, true);
diff --git a/modules/RTC/RTCUtils.js b/modules/RTC/RTCUtils.js
index e8448ae7a..d316e3cb3 100644
--- a/modules/RTC/RTCUtils.js
+++ b/modules/RTC/RTCUtils.js
@@ -2,6 +2,7 @@
RTCPeerConnection, webkitMediaStream, webkitURL, webkitRTCPeerConnection,
mozRTCIceCandidate, mozRTCSessionDescription, mozRTCPeerConnection */
/* jshint -W101 */
+var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
var RTCBrowserType = require("./RTCBrowserType");
var Resolutions = require("../../service/RTC/Resolutions");
var AdapterJS = require("./adapter.screenshare");
@@ -523,10 +524,12 @@ RTCUtils.prototype.handleLocalStream = function(stream, usageOptions) {
videoGUM = (!usageOptions || usageOptions.video !== false);
- this.service.createLocalStream(audioStream, "audio", null, null,
+ this.service.createLocalStream(
+ audioStream, MediaStreamType.AUDIO_TYPE, null, null,
audioMuted, audioGUM);
- this.service.createLocalStream(videoStream, "video", null, 'camera',
+ this.service.createLocalStream(
+ videoStream, MediaStreamType.VIDEO_TYPE, null, 'camera',
videoMuted, videoGUM);
};
diff --git a/modules/UI/Feedback.js b/modules/UI/Feedback.js
index 152d6a652..670bb38ea 100644
--- a/modules/UI/Feedback.js
+++ b/modules/UI/Feedback.js
@@ -1,7 +1,8 @@
-/**
- * Created by ystamcheva on 2/10/15.
+/* global $, interfaceConfig */
+
+/*
+ * Created by Yana Stamcheva on 2/10/15.
*/
-/* jshint -W101 */
var messageHandler = require("./util/MessageHandler");
var callStats = require("../statistics/CallStats");
var APP = require("../../app");
@@ -106,7 +107,7 @@ var Feedback = {
feedbackDialog.goToState('detailed_feedback');
}
};
- // Initialise stars to correspond to previously entered feedback.
+ // Init stars to correspond to previously entered feedback.
if (Feedback.feedbackScore > 0
&& index < Feedback.feedbackScore) {
Feedback.hoverStars(index);
diff --git a/modules/UI/UI.js b/modules/UI/UI.js
index da5e5ab92..95e4870eb 100644
--- a/modules/UI/UI.js
+++ b/modules/UI/UI.js
@@ -16,7 +16,7 @@ var EventEmitter = require("events");
var SettingsMenu = require("./side_pannels/settings/SettingsMenu");
var Settings = require("./../settings/Settings");
var PanelToggler = require("./side_pannels/SidePanelToggler");
-var RoomNameGenerator = require("./welcome_page/RoomnameGenerator");
+var RoomnameGenerator = require("../util/RoomnameGenerator");
UI.messageHandler = require("./util/MessageHandler");
var messageHandler = UI.messageHandler;
var Authentication = require("./authentication/Authentication");
@@ -26,6 +26,7 @@ var JitsiPopover = require("./util/JitsiPopover");
var CQEvents = require("../../service/connectionquality/CQEvents");
var DesktopSharingEventTypes
= require("../../service/desktopsharing/DesktopSharingEventTypes");
+var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
var RTCEvents = require("../../service/RTC/RTCEvents");
var RTCBrowserType = require("../RTC/RTCBrowserType");
var StreamEventTypes = require("../../service/RTC/StreamEventTypes");
@@ -111,14 +112,14 @@ function setupToolbars() {
function streamHandler(stream, isMuted) {
switch (stream.type) {
- case "audio":
+ case MediaStreamType.AUDIO_TYPE:
VideoLayout.changeLocalAudio(stream, isMuted);
break;
- case "video":
+ case MediaStreamType.VIDEO_TYPE:
VideoLayout.changeLocalVideo(stream, isMuted);
break;
- case "stream":
- VideoLayout.changeLocalStream(stream, isMuted);
+ default:
+ console.error("Unknown stream type: " + stream.type);
break;
}
}
@@ -718,7 +719,7 @@ UI.getRoomNode = function () {
if (path.length > 1) {
roomNode = path.substr(1).toLowerCase();
} else {
- var word = RoomNameGenerator.generateRoomWithoutSeparator();
+ var word = RoomnameGenerator.generateRoomWithoutSeparator();
roomNode = word.toLowerCase();
window.history.pushState('VideoChat',
'Room: ' + word, window.location.pathname + word);
diff --git a/modules/UI/toolbars/Toolbar.js b/modules/UI/toolbars/Toolbar.js
index b452b2f2b..9f229ddfd 100644
--- a/modules/UI/toolbars/Toolbar.js
+++ b/modules/UI/toolbars/Toolbar.js
@@ -149,7 +149,7 @@ function hangup() {
window.location.pathname = "/";
}, 3000);
}
- }
+ };
if (Feedback.feedbackScore > 0) {
Feedback.openFeedbackWindow();
diff --git a/modules/UI/videolayout/LargeVideo.js b/modules/UI/videolayout/LargeVideo.js
index f3de0764a..20485c81a 100644
--- a/modules/UI/videolayout/LargeVideo.js
+++ b/modules/UI/videolayout/LargeVideo.js
@@ -302,7 +302,8 @@ function createLargeVideoHTML()
'' +
'' +
'
' +
- '' +
+ '' +
'
' +
'';
html += '';
diff --git a/modules/UI/videolayout/RemoteVideo.js b/modules/UI/videolayout/RemoteVideo.js
index 5dc5ffaff..4812bc720 100644
--- a/modules/UI/videolayout/RemoteVideo.js
+++ b/modules/UI/videolayout/RemoteVideo.js
@@ -2,6 +2,7 @@
var ConnectionIndicator = require("./ConnectionIndicator");
var SmallVideo = require("./SmallVideo");
var AudioLevels = require("../audio_levels/AudioLevels");
+var MediaStreamType = require("../../../service/RTC/MediaStreamTypes");
var RTCBrowserType = require("../../RTC/RTCBrowserType");
var UIUtils = require("../util/UIUtil");
var XMPPEvents = require("../../../service/xmpp/XMPPEvents");
@@ -178,8 +179,9 @@ RemoteVideo.prototype.remove = function () {
RemoteVideo.prototype.waitForPlayback = function (sel, stream) {
- var isVideo = stream.getVideoTracks().length > 0;
- if (!isVideo || stream.id === 'mixedmslabel') {
+ var webRtcStream = stream.getOriginalStream();
+ var isVideo = stream.isVideoStream();
+ if (!isVideo || webRtcStream.id === 'mixedmslabel') {
return;
}
@@ -191,7 +193,7 @@ RemoteVideo.prototype.waitForPlayback = function (sel, stream) {
var onPlayingHandler = function () {
// FIXME: why do i have to do this for FF?
if (RTCBrowserType.isFirefox()) {
- APP.RTC.attachMediaStream(sel, stream);
+ APP.RTC.attachMediaStream(sel, webRtcStream);
}
if (RTCBrowserType.isTemasysPluginUsed()) {
sel = self.selectVideoElement();
@@ -212,7 +214,8 @@ RemoteVideo.prototype.addRemoteStreamElement = function (stream) {
return;
var self = this;
- var isVideo = stream.getVideoTracks().length > 0;
+ var webRtcStream = stream.getOriginalStream();
+ var isVideo = stream.isVideoStream();
var streamElement = SmallVideo.createStreamElement(stream);
var newElementId = streamElement.id;
@@ -226,14 +229,14 @@ RemoteVideo.prototype.addRemoteStreamElement = function (stream) {
if (!isVideo || (this.container.offsetParent !== null && isVideo)) {
this.waitForPlayback(sel, stream);
- APP.RTC.attachMediaStream(sel, stream);
+ APP.RTC.attachMediaStream(sel, webRtcStream);
}
APP.RTC.addMediaStreamInactiveHandler(
- stream, function () {
+ webRtcStream, function () {
console.log('stream ended', this);
- self.removeRemoteStreamElement(stream, isVideo, newElementId);
+ self.removeRemoteStreamElement(webRtcStream, isVideo, newElementId);
});
// Add click handler.
diff --git a/modules/UI/videolayout/SmallVideo.js b/modules/UI/videolayout/SmallVideo.js
index 0bce83fc3..3d5e7acd2 100644
--- a/modules/UI/videolayout/SmallVideo.js
+++ b/modules/UI/videolayout/SmallVideo.js
@@ -4,6 +4,7 @@ var Avatar = require("../avatar/Avatar");
var UIUtil = require("../util/UIUtil");
var LargeVideo = require("./LargeVideo");
var RTCBrowserType = require("../../RTC/RTCBrowserType");
+var MediaStreamType = require("../../../service/RTC/MediaStreamTypes");
function SmallVideo() {
this.isMuted = false;
@@ -105,19 +106,22 @@ SmallVideo.prototype.setPresenceStatus = function (statusMsg) {
* Creates an audio or video element for a particular MediaStream.
*/
SmallVideo.createStreamElement = function (stream) {
- var isVideo = stream.getVideoTracks().length > 0;
+ var isVideo = stream.isVideoStream();
var element = isVideo ? document.createElement('video')
: document.createElement('audio');
+ if (isVideo) {
+ element.setAttribute("muted", "true");
+ }
if (!RTCBrowserType.isIExplorer()) {
element.autoplay = true;
}
element.id = (isVideo ? 'remoteVideo_' : 'remoteAudio_') +
- APP.RTC.getStreamID(stream);
+ APP.RTC.getStreamID(stream.getOriginalStream());
- element.onplay = function() {
+ element.onplay = function () {
console.log("(TIME) Render " + (isVideo ? 'video' : 'audio') + ":\t",
window.performance.now());
};
diff --git a/modules/UI/videolayout/VideoLayout.js b/modules/UI/videolayout/VideoLayout.js
index 1154bbd75..58c226b2c 100644
--- a/modules/UI/videolayout/VideoLayout.js
+++ b/modules/UI/videolayout/VideoLayout.js
@@ -55,10 +55,6 @@ var VideoLayout = (function (my) {
lastNEndpointsCache.indexOf(resource) !== -1);
};
- my.changeLocalStream = function (stream, isMuted) {
- VideoLayout.changeLocalVideo(stream, isMuted);
- };
-
my.changeLocalAudio = function(stream, isMuted) {
if (isMuted)
APP.UI.setAudioMuted(true, true);
@@ -187,8 +183,7 @@ var VideoLayout = (function (my) {
VideoLayout.ensurePeerContainerExists(stream.peerjid);
var resourceJid = Strophe.getResourceFromJid(stream.peerjid);
- remoteVideos[resourceJid].addRemoteStreamElement(
- stream.getOriginalStream());
+ remoteVideos[resourceJid].addRemoteStreamElement(stream);
}
};
diff --git a/modules/UI/welcome_page/RoomnameGenerator.js b/modules/UI/welcome_page/RoomnameGenerator.js
deleted file mode 100644
index 12462b346..000000000
--- a/modules/UI/welcome_page/RoomnameGenerator.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* jshint -W101 */
-//var nouns = [
-//];
-var pluralNouns = [
- "Aliens", "Animals", "Antelopes", "Ants", "Apes", "Apples", "Baboons", "Bacteria", "Badgers", "Bananas", "Bats",
- "Bears", "Birds", "Bonobos", "Brides", "Bugs", "Bulls", "Butterflies", "Cheetahs",
- "Cherries", "Chicken", "Children", "Chimps", "Clowns", "Cows", "Creatures", "Dinosaurs", "Dogs", "Dolphins",
- "Donkeys", "Dragons", "Ducks", "Dwarfs", "Eagles", "Elephants", "Elves", "Fathers",
- "Fish", "Flowers", "Frogs", "Fruit", "Fungi", "Galaxies", "Geese", "Goats",
- "Gorillas", "Hedgehogs", "Hippos", "Horses", "Hunters", "Insects", "Kids", "Knights",
- "Lemons", "Lemurs", "Leopards", "LifeForms", "Lions", "Lizards", "Mice", "Monkeys", "Monsters",
- "Mushrooms", "Octopodes", "Oranges", "Orangutans", "Organisms", "Pants", "Parrots", "Penguins",
- "People", "Pigeons", "Pigs", "Pineapples", "Plants", "Potatoes", "Priests", "Rats", "Reptiles", "Reptilians",
- "Rhinos", "Seagulls", "Sheep", "Siblings", "Snakes", "Spaghetti", "Spiders", "Squid", "Squirrels",
- "Stars", "Students", "Teachers", "Tigers", "Tomatoes", "Trees", "Vampires", "Vegetables", "Viruses", "Vulcans",
- "Warewolves", "Weasels", "Whales", "Witches", "Wizards", "Wolves", "Workers", "Worms", "Zebras"
-];
-//var places = [
-//"Pub", "University", "Airport", "Library", "Mall", "Theater", "Stadium", "Office", "Show", "Gallows", "Beach",
-// "Cemetery", "Hospital", "Reception", "Restaurant", "Bar", "Church", "House", "School", "Square", "Village",
-// "Cinema", "Movies", "Party", "Restroom", "End", "Jail", "PostOffice", "Station", "Circus", "Gates", "Entrance",
-// "Bridge"
-//];
-var verbs = [
- "Abandon", "Adapt", "Advertise", "Answer", "Anticipate", "Appreciate",
- "Approach", "Argue", "Ask", "Bite", "Blossom", "Blush", "Breathe", "Breed", "Bribe", "Burn", "Calculate",
- "Clean", "Code", "Communicate", "Compute", "Confess", "Confiscate", "Conjugate", "Conjure", "Consume",
- "Contemplate", "Crawl", "Dance", "Delegate", "Devour", "Develop", "Differ", "Discuss",
- "Dissolve", "Drink", "Eat", "Elaborate", "Emancipate", "Estimate", "Expire", "Extinguish",
- "Extract", "Facilitate", "Fall", "Feed", "Finish", "Floss", "Fly", "Follow", "Fragment", "Freeze",
- "Gather", "Glow", "Grow", "Hex", "Hide", "Hug", "Hurry", "Improve", "Intersect", "Investigate", "Jinx",
- "Joke", "Jubilate", "Kiss", "Laugh", "Manage", "Meet", "Merge", "Move", "Object", "Observe", "Offer",
- "Paint", "Participate", "Party", "Perform", "Plan", "Pursue", "Pierce", "Play", "Postpone", "Pray", "Proclaim",
- "Question", "Read", "Reckon", "Rejoice", "Represent", "Resize", "Rhyme", "Scream", "Search", "Select", "Share", "Shoot",
- "Shout", "Signal", "Sing", "Skate", "Sleep", "Smile", "Smoke", "Solve", "Spell", "Steer", "Stink",
- "Substitute", "Swim", "Taste", "Teach", "Terminate", "Think", "Type", "Unite", "Vanish", "Worship"
-];
-var adverbs = [
- "Absently", "Accurately", "Accusingly", "Adorably", "AllTheTime", "Alone", "Always", "Amazingly", "Angrily",
- "Anxiously", "Anywhere", "Appallingly", "Apparently", "Articulately", "Astonishingly", "Badly", "Barely",
- "Beautifully", "Blindly", "Bravely", "Brightly", "Briskly", "Brutally", "Calmly", "Carefully", "Casually",
- "Cautiously", "Cleverly", "Constantly", "Correctly", "Crazily", "Curiously", "Cynically", "Daily",
- "Dangerously", "Deliberately", "Delicately", "Desperately", "Discreetly", "Eagerly", "Easily", "Euphoricly",
- "Evenly", "Everywhere", "Exactly", "Expectantly", "Extensively", "Ferociously", "Fiercely", "Finely",
- "Flatly", "Frequently", "Frighteningly", "Gently", "Gloriously", "Grimly", "Guiltily", "Happily",
- "Hard", "Hastily", "Heroically", "High", "Highly", "Hourly", "Humbly", "Hysterically", "Immensely",
- "Impartially", "Impolitely", "Indifferently", "Intensely", "Jealously", "Jovially", "Kindly", "Lazily",
- "Lightly", "Loudly", "Lovingly", "Loyally", "Magnificently", "Malevolently", "Merrily", "Mightily", "Miserably",
- "Mysteriously", "NOT", "Nervously", "Nicely", "Nowhere", "Objectively", "Obnoxiously", "Obsessively",
- "Obviously", "Often", "Painfully", "Patiently", "Playfully", "Politely", "Poorly", "Precisely", "Promptly",
- "Quickly", "Quietly", "Randomly", "Rapidly", "Rarely", "Recklessly", "Regularly", "Remorsefully", "Responsibly",
- "Rudely", "Ruthlessly", "Sadly", "Scornfully", "Seamlessly", "Seldom", "Selfishly", "Seriously", "Shakily",
- "Sharply", "Sideways", "Silently", "Sleepily", "Slightly", "Slowly", "Slyly", "Smoothly", "Softly", "Solemnly",
- "Steadily", "Sternly", "Strangely", "Strongly", "Stunningly", "Surely", "Tenderly", "Thoughtfully",
- "Tightly", "Uneasily", "Vanishingly", "Violently", "Warmly", "Weakly", "Wearily", "Weekly", "Weirdly", "Well",
- "Well", "Wickedly", "Wildly", "Wisely", "Wonderfully", "Yearly"
-];
-var adjectives = [
- "Abominable", "Accurate", "Adorable", "All", "Alleged", "Ancient", "Angry", "Angry", "Anxious", "Appalling",
- "Apparent", "Astonishing", "Attractive", "Awesome", "Baby", "Bad", "Beautiful", "Benign", "Big", "Bitter",
- "Blind", "Blue", "Bold", "Brave", "Bright", "Brisk", "Calm", "Camouflaged", "Casual", "Cautious",
- "Choppy", "Chosen", "Clever", "Cold", "Cool", "Crawly", "Crazy", "Creepy", "Cruel", "Curious", "Cynical",
- "Dangerous", "Dark", "Delicate", "Desperate", "Difficult", "Discreet", "Disguised", "Dizzy",
- "Dumb", "Eager", "Easy", "Edgy", "Electric", "Elegant", "Emancipated", "Enormous", "Euphoric", "Evil",
- "Fast", "Ferocious", "Fierce", "Fine", "Flawed", "Flying", "Foolish", "Foxy",
- "Freezing", "Funny", "Furious", "Gentle", "Glorious", "Golden", "Good", "Green", "Green", "Guilty",
- "Hairy", "Happy", "Hard", "Hasty", "Hazy", "Heroic", "Hostile", "Hot", "Humble", "Humongous",
- "Humorous", "Hysterical", "Idealistic", "Ignorant", "Immense", "Impartial", "Impolite", "Indifferent",
- "Infuriated", "Insightful", "Intense", "Interesting", "Intimidated", "Intriguing", "Jealous", "Jolly", "Jovial",
- "Jumpy", "Kind", "Laughing", "Lazy", "Liquid", "Lonely", "Longing", "Loud", "Loving", "Loyal", "Macabre", "Mad",
- "Magical", "Magnificent", "Malevolent", "Medieval", "Memorable", "Mere", "Merry", "Mighty",
- "Mischievous", "Miserable", "Modified", "Moody", "Most", "Mysterious", "Mystical", "Needy",
- "Nervous", "Nice", "Objective", "Obnoxious", "Obsessive", "Obvious", "Opinionated", "Orange",
- "Painful", "Passionate", "Perfect", "Pink", "Playful", "Poisonous", "Polite", "Poor", "Popular", "Powerful",
- "Precise", "Preserved", "Pretty", "Purple", "Quick", "Quiet", "Random", "Rapid", "Rare", "Real",
- "Reassuring", "Reckless", "Red", "Regular", "Remorseful", "Responsible", "Rich", "Rude", "Ruthless",
- "Sad", "Scared", "Scary", "Scornful", "Screaming", "Selfish", "Serious", "Shady", "Shaky", "Sharp",
- "Shiny", "Shy", "Simple", "Sleepy", "Slow", "Sly", "Small", "Smart", "Smelly", "Smiling", "Smooth",
- "Smug", "Sober", "Soft", "Solemn", "Square", "Square", "Steady", "Strange", "Strong",
- "Stunning", "Subjective", "Successful", "Surly", "Sweet", "Tactful", "Tense",
- "Thoughtful", "Tight", "Tiny", "Tolerant", "Uneasy", "Unique", "Unseen", "Warm", "Weak",
- "Weird", "WellCooked", "Wild", "Wise", "Witty", "Wonderful", "Worried", "Yellow", "Young",
- "Zealous"
- ];
-//var pronouns = [
-//];
-//var conjunctions = [
-//"And", "Or", "For", "Above", "Before", "Against", "Between"
-//];
-
-/*
- * Maps a string (category name) to the array of words from that category.
- */
-var CATEGORIES =
-{
- //"_NOUN_": nouns,
- "_PLURALNOUN_": pluralNouns,
- //"_PLACE_": places,
- "_VERB_": verbs,
- "_ADVERB_": adverbs,
- "_ADJECTIVE_": adjectives
- //"_PRONOUN_": pronouns,
- //"_CONJUNCTION_": conjunctions,
-};
-
-var PATTERNS = [
- "_ADJECTIVE__PLURALNOUN__VERB__ADVERB_"
-
- // BeautifulFungiOrSpaghetti
- //"_ADJECTIVE__PLURALNOUN__CONJUNCTION__PLURALNOUN_",
-
- // AmazinglyScaryToy
- //"_ADVERB__ADJECTIVE__NOUN_",
-
- // NeitherTrashNorRifle
- //"Neither_NOUN_Nor_NOUN_",
- //"Either_NOUN_Or_NOUN_",
-
- // EitherCopulateOrInvestigate
- //"Either_VERB_Or_VERB_",
- //"Neither_VERB_Nor_VERB_",
-
- //"The_ADJECTIVE__ADJECTIVE__NOUN_",
- //"The_ADVERB__ADJECTIVE__NOUN_",
- //"The_ADVERB__ADJECTIVE__NOUN_s",
- //"The_ADVERB__ADJECTIVE__PLURALNOUN__VERB_",
-
- // WolvesComputeBadly
- //"_PLURALNOUN__VERB__ADVERB_",
-
- // UniteFacilitateAndMerge
- //"_VERB__VERB_And_VERB_",
-
- //NastyWitchesAtThePub
- //"_ADJECTIVE__PLURALNOUN_AtThe_PLACE_",
-];
-
-
-/*
- * Returns a random element from the array 'arr'
- */
-function randomElement(arr) {
- return arr[Math.floor(Math.random() * arr.length)];
-}
-
-/*
- * Returns true if the string 's' contains one of the
- * template strings.
- */
-function hasTemplate(s) {
- for (var template in CATEGORIES){
- if (s.indexOf(template) >= 0){
- return true;
- }
- }
-}
-
-/**
- * Generates new room name.
- */
-var RoomNameGenerator = {
- generateRoomWithoutSeparator: function() {
- // Note that if more than one pattern is available, the choice of
- // 'name' won't have a uniform distribution amongst all patterns (names
- // from patterns with fewer options will have higher probability of
- // being chosen that names from patterns with more options).
- var name = randomElement(PATTERNS);
- var word;
- while (hasTemplate(name)) {
- for (var template in CATEGORIES) {
- word = randomElement(CATEGORIES[template]);
- name = name.replace(template, word);
- }
- }
-
- return name;
- }
-};
-
-module.exports = RoomNameGenerator;
diff --git a/modules/UI/welcome_page/WelcomePage.js b/modules/UI/welcome_page/WelcomePage.js
index 3a7b9692d..8d2a05d15 100644
--- a/modules/UI/welcome_page/WelcomePage.js
+++ b/modules/UI/welcome_page/WelcomePage.js
@@ -1,7 +1,7 @@
/* global $, interfaceConfig */
var animateTimeout, updateTimeout;
-var RoomNameGenerator = require("./RoomnameGenerator");
+var RoomnameGenerator = require("../../util/RoomnameGenerator");
function enter_room() {
var val = $("#enter_room_field").val();
@@ -22,7 +22,7 @@ function animate(word) {
}
function update_roomname() {
- var word = RoomNameGenerator.generateRoomWithoutSeparator();
+ var word = RoomnameGenerator.generateRoomWithoutSeparator();
$("#enter_room_field").attr("room_name", word);
$("#enter_room_field").attr("placeholder", "");
clearTimeout(animateTimeout);
diff --git a/modules/settings/Settings.js b/modules/settings/Settings.js
index 2d322e22e..204dbbf34 100644
--- a/modules/settings/Settings.js
+++ b/modules/settings/Settings.js
@@ -1,7 +1,10 @@
+var UsernameGenerator = require('../util/UsernameGenerator');
+
var email = '';
var displayName = '';
var userId;
var language = null;
+var callStatsUserName;
function supportsLocalStorage() {
@@ -26,13 +29,23 @@ if (supportsLocalStorage()) {
window.localStorage.jitsiMeetId = generateUniqueId();
console.log("generated id", window.localStorage.jitsiMeetId);
}
+
+ if (!window.localStorage.callStatsUserName) {
+ window.localStorage.callStatsUserName
+ = UsernameGenerator.generateUsername();
+ console.log('generated callstats uid',
+ window.localStorage.callStatsUserName);
+
+ }
userId = window.localStorage.jitsiMeetId || '';
+ callStatsUserName = window.localStorage.callStatsUserName;
email = window.localStorage.email || '';
displayName = window.localStorage.displayname || '';
language = window.localStorage.language;
} else {
console.log("local storage is not supported");
userId = generateUniqueId();
+ callStatsUserName = UsernameGenerator.generateUsername();
}
var Settings = {
@@ -57,6 +70,14 @@ var Settings = {
return displayName;
},
+ /**
+ * Returns fake username for callstats
+ * @returns {string} fake username for callstats
+ */
+ getCallStatsUserName: function () {
+ return callStatsUserName;
+ },
+
setEmail: function (newEmail) {
email = newEmail;
window.localStorage.email = newEmail;
diff --git a/modules/statistics/CallStats.js b/modules/statistics/CallStats.js
index 957d3bd3f..0e2fe9608 100644
--- a/modules/statistics/CallStats.js
+++ b/modules/statistics/CallStats.js
@@ -20,11 +20,7 @@ var CallStats = {
this.session = jingleSession;
this.peerconnection = jingleSession.peerconnection.peerconnection;
- this.userID = APP.xmpp.myResource();
-
- //use whatever the user said to facilitate debugging
- if(Settings.getDisplayName())
- this.userID = Settings.getDisplayName();
+ this.userID = Settings.getCallStatsUserName();
var location = window.location;
this.confID = location.hostname + location.pathname;
@@ -94,7 +90,7 @@ var CallStats = {
', "comment": "' + detailedFeedback + '"}';
var feedbackJSON = JSON.parse(feedbackString);
-
+
callStats.sendUserFeedback(
this.confID, feedbackJSON);
}
diff --git a/modules/util/RandomUtil.js b/modules/util/RandomUtil.js
index 379480e8a..2b307db66 100644
--- a/modules/util/RandomUtil.js
+++ b/modules/util/RandomUtil.js
@@ -1,13 +1,46 @@
+/**
+ * @const
+ */
+var ALPHANUM = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
/**
- * Generates random hex number within the range [min, max]
- * @param max the maximum value for the generated number
- * @param min the minimum value for the generated number
- * @returns random hex number
+ * Hexadecimal digits.
+ * @const
*/
-function rangeRandomHex(min, max)
-{
- return Math.floor(Math.random() * (max - min) + min).toString(16);
+var HEX_DIGITS = '0123456789abcdef';
+
+/**
+ * Generates random int within the range [min, max]
+ * @param min the minimum value for the generated number
+ * @param max the maximum value for the generated number
+ * @returns random int number
+ */
+function randomInt(min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+/**
+ * Get random element from array or string.
+ * @param {Array|string} arr source
+ * @returns array element or string character
+ */
+function randomElement(arr) {
+ return arr[randomInt(0, arr.length -1)];
+}
+
+/**
+ * Generate random alphanumeric string.
+ * @param {number} length expected string length
+ * @returns {string} random string of specified length
+ */
+function randomAlphanumStr(length) {
+ var result = '';
+
+ for (var i = 0; i < length; i += 1) {
+ result += randomElement(ALPHANUM);
+ }
+
+ return result;
}
/**
@@ -15,23 +48,25 @@ function rangeRandomHex(min, max)
*/
var RandomUtil = {
/**
- * Generates hex number with length 4
+ * Returns a random hex digit.
+ * @returns {*}
*/
- random4digitsHex: function () {
- return rangeRandomHex(0x1000, 0xFFFF);
+ randomHexDigit: function() {
+ return randomElement(HEX_DIGITS);
},
/**
- * Generates hex number with length 8
+ * Returns a random string of hex digits with length 'len'.
+ * @param len the length.
*/
- random8digitsHex: function () {
- return rangeRandomHex(0x10000000, 0xFFFFFFFF);
+ randomHexString: function (len) {
+ var ret = '';
+ while (len--) {
+ ret += this.randomHexDigit();
+ }
+ return ret;
},
- /**
- * Generates hex number with length 12
- */
- random12digitsHex: function () {
- return rangeRandomHex(0x100000000000, 0xFFFFFFFFFFFF);
- }
+ randomElement: randomElement,
+ randomAlphanumStr: randomAlphanumStr
};
module.exports = RandomUtil;
diff --git a/modules/util/RoomnameGenerator.js b/modules/util/RoomnameGenerator.js
new file mode 100644
index 000000000..198838091
--- /dev/null
+++ b/modules/util/RoomnameGenerator.js
@@ -0,0 +1,198 @@
+var RandomUtil = require('./RandomUtil');
+//var nouns = [
+//];
+var pluralNouns = [
+ "Aliens", "Animals", "Antelopes", "Ants", "Apes", "Apples", "Baboons",
+ "Bacteria", "Badgers", "Bananas", "Bats", "Bears", "Birds", "Bonobos",
+ "Brides", "Bugs", "Bulls", "Butterflies", "Cheetahs", "Cherries", "Chicken",
+ "Children", "Chimps", "Clowns", "Cows", "Creatures", "Dinosaurs", "Dogs",
+ "Dolphins", "Donkeys", "Dragons", "Ducks", "Dwarfs", "Eagles", "Elephants",
+ "Elves", "Fathers", "Fish", "Flowers", "Frogs", "Fruit", "Fungi",
+ "Galaxies", "Geese", "Goats", "Gorillas", "Hedgehogs", "Hippos", "Horses",
+ "Hunters", "Insects", "Kids", "Knights", "Lemons", "Lemurs", "Leopards",
+ "LifeForms", "Lions", "Lizards", "Mice", "Monkeys", "Monsters", "Mushrooms",
+ "Octopodes", "Oranges", "Orangutans", "Organisms", "Pants", "Parrots",
+ "Penguins", "People", "Pigeons", "Pigs", "Pineapples", "Plants", "Potatoes",
+ "Priests", "Rats", "Reptiles", "Reptilians", "Rhinos", "Seagulls", "Sheep",
+ "Siblings", "Snakes", "Spaghetti", "Spiders", "Squid", "Squirrels",
+ "Stars", "Students", "Teachers", "Tigers", "Tomatoes", "Trees", "Vampires",
+ "Vegetables", "Viruses", "Vulcans", "Warewolves", "Weasels", "Whales",
+ "Witches", "Wizards", "Wolves", "Workers", "Worms", "Zebras"
+];
+//var places = [
+// "Pub", "University", "Airport", "Library", "Mall", "Theater", "Stadium",
+// "Office", "Show", "Gallows", "Beach", "Cemetery", "Hospital", "Reception",
+// "Restaurant", "Bar", "Church", "House", "School", "Square", "Village",
+// "Cinema", "Movies", "Party", "Restroom", "End", "Jail", "PostOffice",
+// "Station", "Circus", "Gates", "Entrance", "Bridge"
+//];
+var verbs = [
+ "Abandon", "Adapt", "Advertise", "Answer", "Anticipate", "Appreciate",
+ "Approach", "Argue", "Ask", "Bite", "Blossom", "Blush", "Breathe", "Breed",
+ "Bribe", "Burn", "Calculate", "Clean", "Code", "Communicate", "Compute",
+ "Confess", "Confiscate", "Conjugate", "Conjure", "Consume", "Contemplate",
+ "Crawl", "Dance", "Delegate", "Devour", "Develop", "Differ", "Discuss",
+ "Dissolve", "Drink", "Eat", "Elaborate", "Emancipate", "Estimate", "Expire",
+ "Extinguish", "Extract", "Facilitate", "Fall", "Feed", "Finish", "Floss",
+ "Fly", "Follow", "Fragment", "Freeze", "Gather", "Glow", "Grow", "Hex",
+ "Hide", "Hug", "Hurry", "Improve", "Intersect", "Investigate", "Jinx",
+ "Joke", "Jubilate", "Kiss", "Laugh", "Manage", "Meet", "Merge", "Move",
+ "Object", "Observe", "Offer", "Paint", "Participate", "Party", "Perform",
+ "Plan", "Pursue", "Pierce", "Play", "Postpone", "Pray", "Proclaim",
+ "Question", "Read", "Reckon", "Rejoice", "Represent", "Resize", "Rhyme",
+ "Scream", "Search", "Select", "Share", "Shoot", "Shout", "Signal", "Sing",
+ "Skate", "Sleep", "Smile", "Smoke", "Solve", "Spell", "Steer", "Stink",
+ "Substitute", "Swim", "Taste", "Teach", "Terminate", "Think", "Type",
+ "Unite", "Vanish", "Worship"
+];
+var adverbs = [
+ "Absently", "Accurately", "Accusingly", "Adorably", "AllTheTime", "Alone",
+ "Always", "Amazingly", "Angrily", "Anxiously", "Anywhere", "Appallingly",
+ "Apparently", "Articulately", "Astonishingly", "Badly", "Barely",
+ "Beautifully", "Blindly", "Bravely", "Brightly", "Briskly", "Brutally",
+ "Calmly", "Carefully", "Casually", "Cautiously", "Cleverly", "Constantly",
+ "Correctly", "Crazily", "Curiously", "Cynically", "Daily", "Dangerously",
+ "Deliberately", "Delicately", "Desperately", "Discreetly", "Eagerly",
+ "Easily", "Euphoricly", "Evenly", "Everywhere", "Exactly", "Expectantly",
+ "Extensively", "Ferociously", "Fiercely", "Finely", "Flatly", "Frequently",
+ "Frighteningly", "Gently", "Gloriously", "Grimly", "Guiltily", "Happily",
+ "Hard", "Hastily", "Heroically", "High", "Highly", "Hourly", "Humbly",
+ "Hysterically", "Immensely", "Impartially", "Impolitely", "Indifferently",
+ "Intensely", "Jealously", "Jovially", "Kindly", "Lazily", "Lightly",
+ "Loudly", "Lovingly", "Loyally", "Magnificently", "Malevolently", "Merrily",
+ "Mightily", "Miserably", "Mysteriously", "NOT", "Nervously", "Nicely",
+ "Nowhere", "Objectively", "Obnoxiously", "Obsessively", "Obviously",
+ "Often", "Painfully", "Patiently", "Playfully", "Politely", "Poorly",
+ "Precisely", "Promptly", "Quickly", "Quietly", "Randomly", "Rapidly",
+ "Rarely", "Recklessly", "Regularly", "Remorsefully", "Responsibly",
+ "Rudely", "Ruthlessly", "Sadly", "Scornfully", "Seamlessly", "Seldom",
+ "Selfishly", "Seriously", "Shakily", "Sharply", "Sideways", "Silently",
+ "Sleepily", "Slightly", "Slowly", "Slyly", "Smoothly", "Softly", "Solemnly",
+ "Steadily", "Sternly", "Strangely", "Strongly", "Stunningly", "Surely",
+ "Tenderly", "Thoughtfully", "Tightly", "Uneasily", "Vanishingly",
+ "Violently", "Warmly", "Weakly", "Wearily", "Weekly", "Weirdly", "Well",
+ "Well", "Wickedly", "Wildly", "Wisely", "Wonderfully", "Yearly"
+];
+var adjectives = [
+ "Abominable", "Accurate", "Adorable", "All", "Alleged", "Ancient", "Angry",
+ "Anxious", "Appalling", "Apparent", "Astonishing", "Attractive", "Awesome",
+ "Baby", "Bad", "Beautiful", "Benign", "Big", "Bitter", "Blind", "Blue",
+ "Bold", "Brave", "Bright", "Brisk", "Calm", "Camouflaged", "Casual",
+ "Cautious", "Choppy", "Chosen", "Clever", "Cold", "Cool", "Crawly",
+ "Crazy", "Creepy", "Cruel", "Curious", "Cynical", "Dangerous", "Dark",
+ "Delicate", "Desperate", "Difficult", "Discreet", "Disguised", "Dizzy",
+ "Dumb", "Eager", "Easy", "Edgy", "Electric", "Elegant", "Emancipated",
+ "Enormous", "Euphoric", "Evil", "Fast", "Ferocious", "Fierce", "Fine",
+ "Flawed", "Flying", "Foolish", "Foxy", "Freezing", "Funny", "Furious",
+ "Gentle", "Glorious", "Golden", "Good", "Green", "Green", "Guilty",
+ "Hairy", "Happy", "Hard", "Hasty", "Hazy", "Heroic", "Hostile", "Hot",
+ "Humble", "Humongous", "Humorous", "Hysterical", "Idealistic", "Ignorant",
+ "Immense", "Impartial", "Impolite", "Indifferent", "Infuriated",
+ "Insightful", "Intense", "Interesting", "Intimidated", "Intriguing",
+ "Jealous", "Jolly", "Jovial", "Jumpy", "Kind", "Laughing", "Lazy", "Liquid",
+ "Lonely", "Longing", "Loud", "Loving", "Loyal", "Macabre", "Mad", "Magical",
+ "Magnificent", "Malevolent", "Medieval", "Memorable", "Mere", "Merry",
+ "Mighty", "Mischievous", "Miserable", "Modified", "Moody", "Most",
+ "Mysterious", "Mystical", "Needy", "Nervous", "Nice", "Objective",
+ "Obnoxious", "Obsessive", "Obvious", "Opinionated", "Orange", "Painful",
+ "Passionate", "Perfect", "Pink", "Playful", "Poisonous", "Polite", "Poor",
+ "Popular", "Powerful", "Precise", "Preserved", "Pretty", "Purple", "Quick",
+ "Quiet", "Random", "Rapid", "Rare", "Real", "Reassuring", "Reckless", "Red",
+ "Regular", "Remorseful", "Responsible", "Rich", "Rude", "Ruthless", "Sad",
+ "Scared", "Scary", "Scornful", "Screaming", "Selfish", "Serious", "Shady",
+ "Shaky", "Sharp", "Shiny", "Shy", "Simple", "Sleepy", "Slow", "Sly",
+ "Small", "Smart", "Smelly", "Smiling", "Smooth", "Smug", "Sober", "Soft",
+ "Solemn", "Square", "Square", "Steady", "Strange", "Strong", "Stunning",
+ "Subjective", "Successful", "Surly", "Sweet", "Tactful", "Tense",
+ "Thoughtful", "Tight", "Tiny", "Tolerant", "Uneasy", "Unique", "Unseen",
+ "Warm", "Weak", "Weird", "WellCooked", "Wild", "Wise", "Witty", "Wonderful",
+ "Worried", "Yellow", "Young", "Zealous"
+ ];
+//var pronouns = [
+//];
+//var conjunctions = [
+//"And", "Or", "For", "Above", "Before", "Against", "Between"
+//];
+
+/*
+ * Maps a string (category name) to the array of words from that category.
+ */
+var CATEGORIES =
+{
+ //"_NOUN_": nouns,
+ "_PLURALNOUN_": pluralNouns,
+ //"_PLACE_": places,
+ "_VERB_": verbs,
+ "_ADVERB_": adverbs,
+ "_ADJECTIVE_": adjectives
+ //"_PRONOUN_": pronouns,
+ //"_CONJUNCTION_": conjunctions,
+};
+
+var PATTERNS = [
+ "_ADJECTIVE__PLURALNOUN__VERB__ADVERB_"
+
+ // BeautifulFungiOrSpaghetti
+ //"_ADJECTIVE__PLURALNOUN__CONJUNCTION__PLURALNOUN_",
+
+ // AmazinglyScaryToy
+ //"_ADVERB__ADJECTIVE__NOUN_",
+
+ // NeitherTrashNorRifle
+ //"Neither_NOUN_Nor_NOUN_",
+ //"Either_NOUN_Or_NOUN_",
+
+ // EitherCopulateOrInvestigate
+ //"Either_VERB_Or_VERB_",
+ //"Neither_VERB_Nor_VERB_",
+
+ //"The_ADJECTIVE__ADJECTIVE__NOUN_",
+ //"The_ADVERB__ADJECTIVE__NOUN_",
+ //"The_ADVERB__ADJECTIVE__NOUN_s",
+ //"The_ADVERB__ADJECTIVE__PLURALNOUN__VERB_",
+
+ // WolvesComputeBadly
+ //"_PLURALNOUN__VERB__ADVERB_",
+
+ // UniteFacilitateAndMerge
+ //"_VERB__VERB_And_VERB_",
+
+ //NastyWitchesAtThePub
+ //"_ADJECTIVE__PLURALNOUN_AtThe_PLACE_",
+];
+
+/*
+ * Returns true if the string 's' contains one of the
+ * template strings.
+ */
+function hasTemplate(s) {
+ for (var template in CATEGORIES){
+ if (s.indexOf(template) >= 0){
+ return true;
+ }
+ }
+}
+
+/**
+ * Generates new room name.
+ */
+var RoomnameGenerator = {
+ generateRoomWithoutSeparator: function() {
+ // Note that if more than one pattern is available, the choice of
+ // 'name' won't have a uniform distribution amongst all patterns (names
+ // from patterns with fewer options will have higher probability of
+ // being chosen that names from patterns with more options).
+ var name = RandomUtil.randomElement(PATTERNS);
+ var word;
+ while (hasTemplate(name)) {
+ for (var template in CATEGORIES) {
+ word = RandomUtil.randomElement(CATEGORIES[template]);
+ name = name.replace(template, word);
+ }
+ }
+
+ return name;
+ }
+};
+
+module.exports = RoomnameGenerator;
diff --git a/modules/util/UsernameGenerator.js b/modules/util/UsernameGenerator.js
new file mode 100644
index 000000000..06a09471d
--- /dev/null
+++ b/modules/util/UsernameGenerator.js
@@ -0,0 +1,429 @@
+var RandomUtil = require('./RandomUtil');
+
+/**
+ * from faker.js - Copyright (c) 2014-2015 Matthew Bergman & Marak Squires
+ * MIT License
+ * http://github.com/marak/faker.js/
+ *
+ * @const
+ */
+var names = [
+ "Aaliyah", "Aaron", "Abagail", "Abbey", "Abbie", "Abbigail",
+ "Abby", "Abdiel", "Abdul", "Abdullah", "Abe", "Abel", "Abelardo", "Abigail",
+ "Abigale", "Abigayle", "Abner", "Abraham", "Ada", "Adah", "Adalberto",
+ "Adaline", "Adam", "Adan", "Addie", "Addison", "Adela", "Adelbert", "Adele",
+ "Adelia", "Adeline", "Adell", "Adella", "Adelle", "Aditya", "Adolf", "Adolfo",
+ "Adolph", "Adolphus", "Adonis", "Adrain", "Adrian", "Adriana", "Adrianna",
+ "Adriel", "Adrien", "Adrienne", "Afton", "Aglae", "Agnes", "Agustin",
+ "Agustina", "Ahmad", "Ahmed", "Aida", "Aidan", "Aiden", "Aileen", "Aimee",
+ "Aisha", "Aiyana", "Akeem", "Al", "Alaina", "Alan", "Alana", "Alanis",
+ "Alanna", "Alayna", "Alba", "Albert", "Alberta", "Albertha", "Alberto",
+ "Albin", "Albina", "Alda", "Alden", "Alec", "Aleen", "Alejandra",
+ "Alejandrin", "Alek", "Alena", "Alene", "Alessandra", "Alessandro", "Alessia",
+ "Aletha", "Alex", "Alexa", "Alexander", "Alexandra", "Alexandre",
+ "Alexandrea", "Alexandria", "Alexandrine", "Alexandro", "Alexane", "Alexanne",
+ "Alexie", "Alexis", "Alexys", "Alexzander", "Alf", "Alfonso", "Alfonzo",
+ "Alford", "Alfred", "Alfreda", "Alfredo", "Ali", "Alia", "Alice", "Alicia",
+ "Alisa", "Alisha", "Alison", "Alivia", "Aliya", "Aliyah", "Aliza", "Alize",
+ "Allan", "Allen", "Allene", "Allie", "Allison", "Ally", "Alphonso", "Alta",
+ "Althea", "Alva", "Alvah", "Alvena", "Alvera", "Alverta", "Alvina", "Alvis",
+ "Alyce", "Alycia", "Alysa", "Alysha", "Alyson", "Alysson", "Amalia", "Amanda",
+ "Amani", "Amara", "Amari", "Amaya", "Amber", "Ambrose", "Amelia", "Amelie",
+ "Amely", "America", "Americo", "Amie", "Amina", "Amir", "Amira", "Amiya",
+ "Amos", "Amparo", "Amy", "Amya", "Ana", "Anabel", "Anabelle", "Anahi",
+ "Anais", "Anastacio", "Anastasia", "Anderson", "Andre", "Andreane",
+ "Andreanne", "Andres", "Andrew", "Andy", "Angel", "Angela", "Angelica",
+ "Angelina", "Angeline", "Angelita", "Angelo", "Angie", "Angus", "Anibal",
+ "Anika", "Anissa", "Anita", "Aniya", "Aniyah", "Anjali", "Anna", "Annabel",
+ "Annabell", "Annabelle", "Annalise", "Annamae", "Annamarie", "Anne",
+ "Annetta", "Annette", "Annie", "Ansel", "Ansley", "Anthony", "Antoinette",
+ "Antone", "Antonetta", "Antonette", "Antonia", "Antonietta", "Antonina",
+ "Antonio", "Antwan", "Antwon", "Anya", "April", "Ara", "Araceli", "Aracely",
+ "Arch", "Archibald", "Ardella", "Arden", "Ardith", "Arely", "Ari", "Ariane",
+ "Arianna", "Aric", "Ariel", "Arielle", "Arjun", "Arlene", "Arlie", "Arlo",
+ "Armand", "Armando", "Armani", "Arnaldo", "Arne", "Arno", "Arnold", "Arnoldo",
+ "Arnulfo", "Aron", "Art", "Arthur", "Arturo", "Arvel", "Arvid", "Arvilla",
+ "Aryanna", "Asa", "Asha", "Ashlee", "Ashleigh", "Ashley", "Ashly", "Ashlynn",
+ "Ashton", "Ashtyn", "Asia", "Assunta", "Astrid", "Athena", "Aubree", "Aubrey",
+ "Audie", "Audra", "Audreanne", "Audrey", "August", "Augusta", "Augustine",
+ "Augustus", "Aurelia", "Aurelie", "Aurelio", "Aurore", "Austen", "Austin",
+ "Austyn", "Autumn", "Ava", "Avery", "Avis", "Axel", "Ayana", "Ayden", "Ayla",
+ "Aylin", "Baby", "Bailee", "Bailey", "Barbara", "Barney", "Baron", "Barrett",
+ "Barry", "Bart", "Bartholome", "Barton", "Baylee", "Beatrice", "Beau",
+ "Beaulah", "Bell", "Bella", "Belle", "Ben", "Benedict", "Benjamin", "Bennett",
+ "Bennie", "Benny", "Benton", "Berenice", "Bernadette", "Bernadine", "Bernard",
+ "Bernardo", "Berneice", "Bernhard", "Bernice", "Bernie", "Berniece",
+ "Bernita", "Berry", "Bert", "Berta", "Bertha", "Bertram", "Bertrand", "Beryl",
+ "Bessie", "Beth", "Bethany", "Bethel", "Betsy", "Bette", "Bettie", "Betty",
+ "Bettye", "Beulah", "Beverly", "Bianka", "Bill", "Billie", "Billy", "Birdie",
+ "Blair", "Blaise", "Blake", "Blanca", "Blanche", "Blaze", "Bo", "Bobbie",
+ "Bobby", "Bonita", "Bonnie", "Boris", "Boyd", "Brad", "Braden", "Bradford",
+ "Bradley", "Bradly", "Brady", "Braeden", "Brain", "Brandi", "Brando",
+ "Brandon", "Brandt", "Brandy", "Brandyn", "Brannon", "Branson", "Brant",
+ "Braulio", "Braxton", "Brayan", "Breana", "Breanna", "Breanne", "Brenda",
+ "Brendan", "Brenden", "Brendon", "Brenna", "Brennan", "Brennon", "Brent",
+ "Bret", "Brett", "Bria", "Brian", "Briana", "Brianne", "Brice", "Bridget",
+ "Bridgette", "Bridie", "Brielle", "Brigitte", "Brionna", "Brisa", "Britney",
+ "Brittany", "Brock", "Broderick", "Brody", "Brook", "Brooke", "Brooklyn",
+ "Brooks", "Brown", "Bruce", "Bryana", "Bryce", "Brycen", "Bryon", "Buck",
+ "Bud", "Buddy", "Buford", "Bulah", "Burdette", "Burley", "Burnice", "Buster",
+ "Cade", "Caden", "Caesar", "Caitlyn", "Cale", "Caleb", "Caleigh", "Cali",
+ "Calista", "Callie", "Camden", "Cameron", "Camila", "Camilla", "Camille",
+ "Camren", "Camron", "Camryn", "Camylle", "Candace", "Candelario", "Candice",
+ "Candida", "Candido", "Cara", "Carey", "Carissa", "Carlee", "Carleton",
+ "Carley", "Carli", "Carlie", "Carlo", "Carlos", "Carlotta", "Carmel",
+ "Carmela", "Carmella", "Carmelo", "Carmen", "Carmine", "Carol", "Carolanne",
+ "Carole", "Carolina", "Caroline", "Carolyn", "Carolyne", "Carrie", "Carroll",
+ "Carson", "Carter", "Cary", "Casandra", "Casey", "Casimer", "Casimir",
+ "Casper", "Cassandra", "Cassandre", "Cassidy", "Cassie", "Catalina",
+ "Caterina", "Catharine", "Catherine", "Cathrine", "Cathryn", "Cathy", "Cayla",
+ "Ceasar", "Cecelia", "Cecil", "Cecile", "Cecilia", "Cedrick", "Celestine",
+ "Celestino", "Celia", "Celine", "Cesar", "Chad", "Chadd", "Chadrick", "Chaim",
+ "Chance", "Chandler", "Chanel", "Chanelle", "Charity", "Charlene", "Charles",
+ "Charley", "Charlie", "Charlotte", "Chase", "Chasity", "Chauncey", "Chaya",
+ "Chaz", "Chelsea", "Chelsey", "Chelsie", "Chesley", "Chester", "Chet",
+ "Cheyanne", "Cheyenne", "Chloe", "Chris", "Christ", "Christa", "Christelle",
+ "Christian", "Christiana", "Christina", "Christine", "Christop", "Christophe",
+ "Christopher", "Christy", "Chyna", "Ciara", "Cicero", "Cielo", "Cierra",
+ "Cindy", "Citlalli", "Clair", "Claire", "Clara", "Clarabelle", "Clare",
+ "Clarissa", "Clark", "Claud", "Claude", "Claudia", "Claudie", "Claudine",
+ "Clay", "Clemens", "Clement", "Clementina", "Clementine", "Clemmie", "Cleo",
+ "Cleora", "Cleta", "Cletus", "Cleve", "Cleveland", "Clifford", "Clifton",
+ "Clint", "Clinton", "Clotilde", "Clovis", "Cloyd", "Clyde", "Coby", "Cody",
+ "Colby", "Cole", "Coleman", "Colin", "Colleen", "Collin", "Colt", "Colten",
+ "Colton", "Columbus", "Concepcion", "Conner", "Connie", "Connor", "Conor",
+ "Conrad", "Constance", "Constantin", "Consuelo", "Cooper", "Cora", "Coralie",
+ "Corbin", "Cordelia", "Cordell", "Cordia", "Cordie", "Corene", "Corine",
+ "Cornelius", "Cornell", "Corrine", "Cortez", "Cortney", "Cory", "Coty",
+ "Courtney", "Coy", "Craig", "Crawford", "Creola", "Cristal", "Cristian",
+ "Cristina", "Cristobal", "Cristopher", "Cruz", "Crystal", "Crystel", "Cullen",
+ "Curt", "Curtis", "Cydney", "Cynthia", "Cyril", "Cyrus", "Dagmar", "Dahlia",
+ "Daija", "Daisha", "Daisy", "Dakota", "Dale", "Dallas", "Dallin", "Dalton",
+ "Damaris", "Dameon", "Damian", "Damien", "Damion", "Damon", "Dan", "Dana",
+ "Dandre", "Dane", "D'angelo", "Dangelo", "Danial", "Daniela", "Daniella",
+ "Danielle", "Danika", "Dannie", "Danny", "Dante", "Danyka", "Daphne",
+ "Daphnee", "Daphney", "Darby", "Daren", "Darian", "Dariana", "Darien",
+ "Dario", "Darion", "Darius", "Darlene", "Daron", "Darrel", "Darrell",
+ "Darren", "Darrick", "Darrin", "Darrion", "Darron", "Darryl", "Darwin",
+ "Daryl", "Dashawn", "Dasia", "Dave", "David", "Davin", "Davion", "Davon",
+ "Davonte", "Dawn", "Dawson", "Dax", "Dayana", "Dayna", "Dayne", "Dayton",
+ "Dean", "Deangelo", "Deanna", "Deborah", "Declan", "Dedric", "Dedrick", "Dee",
+ "Deion", "Deja", "Dejah", "Dejon", "Dejuan", "Delaney", "Delbert", "Delfina",
+ "Delia", "Delilah", "Dell", "Della", "Delmer", "Delores", "Delpha", "Delphia",
+ "Delphine", "Delta", "Demarco", "Demarcus", "Demario", "Demetris",
+ "Demetrius", "Demond", "Dena", "Denis", "Dennis", "Deon", "Deondre",
+ "Deontae", "Deonte", "Dereck", "Derek", "Derick", "Deron", "Derrick",
+ "Deshaun", "Deshawn", "Desiree", "Desmond", "Dessie", "Destany", "Destin",
+ "Destinee", "Destiney", "Destini", "Destiny", "Devan", "Devante", "Deven",
+ "Devin", "Devon", "Devonte", "Devyn", "Dewayne", "Dewitt", "Dexter",
+ "Diamond", "Diana", "Dianna", "Diego", "Dillan", "Dillon", "Dimitri", "Dina",
+ "Dino", "Dion", "Dixie", "Dock", "Dolly", "Dolores", "Domenic", "Domenica",
+ "Domenick", "Domenico", "Domingo", "Dominic", "Dominique", "Don", "Donald",
+ "Donato", "Donavon", "Donna", "Donnell", "Donnie", "Donny", "Dora", "Dorcas",
+ "Dorian", "Doris", "Dorothea", "Dorothy", "Dorris", "Dortha", "Dorthy",
+ "Doug", "Douglas", "Dovie", "Doyle", "Drake", "Drew", "Duane", "Dudley",
+ "Dulce", "Duncan", "Durward", "Dustin", "Dusty", "Dwight", "Dylan", "Earl",
+ "Earlene", "Earline", "Earnest", "Earnestine", "Easter", "Easton", "Ebba",
+ "Ebony", "Ed", "Eda", "Edd", "Eddie", "Eden", "Edgar", "Edgardo", "Edison",
+ "Edmond", "Edmund", "Edna", "Eduardo", "Edward", "Edwardo", "Edwin", "Edwina",
+ "Edyth", "Edythe", "Effie", "Efrain", "Efren", "Eileen", "Einar", "Eino",
+ "Eladio", "Elaina", "Elbert", "Elda", "Eldon", "Eldora", "Eldred", "Eldridge",
+ "Eleanora", "Eleanore", "Eleazar", "Electa", "Elena", "Elenor", "Elenora",
+ "Eleonore", "Elfrieda", "Eli", "Elian", "Eliane", "Elias", "Eliezer",
+ "Elijah", "Elinor", "Elinore", "Elisa", "Elisabeth", "Elise", "Eliseo",
+ "Elisha", "Elissa", "Eliza", "Elizabeth", "Ella", "Ellen", "Ellie", "Elliot",
+ "Elliott", "Ellis", "Ellsworth", "Elmer", "Elmira", "Elmo", "Elmore", "Elna",
+ "Elnora", "Elody", "Eloisa", "Eloise", "Elouise", "Eloy", "Elroy", "Elsa",
+ "Else", "Elsie", "Elta", "Elton", "Elva", "Elvera", "Elvie", "Elvis", "Elwin",
+ "Elwyn", "Elyse", "Elyssa", "Elza", "Emanuel", "Emelia", "Emelie", "Emely",
+ "Emerald", "Emerson", "Emery", "Emie", "Emil", "Emile", "Emilia", "Emiliano",
+ "Emilie", "Emilio", "Emily", "Emma", "Emmalee", "Emmanuel", "Emmanuelle",
+ "Emmet", "Emmett", "Emmie", "Emmitt", "Emmy", "Emory", "Ena", "Enid", "Enoch",
+ "Enola", "Enos", "Enrico", "Enrique", "Ephraim", "Era", "Eriberto", "Eric",
+ "Erica", "Erich", "Erick", "Ericka", "Erik", "Erika", "Erin", "Erling",
+ "Erna", "Ernest", "Ernestina", "Ernestine", "Ernesto", "Ernie", "Ervin",
+ "Erwin", "Eryn", "Esmeralda", "Esperanza", "Esta", "Esteban", "Estefania",
+ "Estel", "Estell", "Estella", "Estelle", "Estevan", "Esther", "Estrella",
+ "Etha", "Ethan", "Ethel", "Ethelyn", "Ethyl", "Ettie", "Eudora", "Eugene",
+ "Eugenia", "Eula", "Eulah", "Eulalia", "Euna", "Eunice", "Eusebio", "Eva",
+ "Evalyn", "Evan", "Evangeline", "Evans", "Eve", "Eveline", "Evelyn",
+ "Everardo", "Everett", "Everette", "Evert", "Evie", "Ewald", "Ewell",
+ "Ezekiel", "Ezequiel", "Ezra", "Fabian", "Fabiola", "Fae", "Fannie", "Fanny",
+ "Fatima", "Faustino", "Fausto", "Favian", "Fay", "Faye", "Federico",
+ "Felicia", "Felicita", "Felicity", "Felipa", "Felipe", "Felix", "Felton",
+ "Fermin", "Fern", "Fernando", "Ferne", "Fidel", "Filiberto", "Filomena",
+ "Finn", "Fiona", "Flavie", "Flavio", "Fleta", "Fletcher", "Flo", "Florence",
+ "Florencio", "Florian", "Florida", "Florine", "Flossie", "Floy", "Floyd",
+ "Ford", "Forest", "Forrest", "Foster", "Frances", "Francesca", "Francesco",
+ "Francis", "Francisca", "Francisco", "Franco", "Frank", "Frankie", "Franz",
+ "Fred", "Freda", "Freddie", "Freddy", "Frederic", "Frederick", "Frederik",
+ "Frederique", "Fredrick", "Fredy", "Freeda", "Freeman", "Freida", "Frida",
+ "Frieda", "Friedrich", "Fritz", "Furman", "Gabe", "Gabriel", "Gabriella",
+ "Gabrielle", "Gaetano", "Gage", "Gail", "Gardner", "Garett", "Garfield",
+ "Garland", "Garnet", "Garnett", "Garret", "Garrett", "Garrick", "Garrison",
+ "Garry", "Garth", "Gaston", "Gavin", "Gay", "Gayle", "Gaylord", "Gene",
+ "General", "Genesis", "Genevieve", "Gennaro", "Genoveva", "Geo", "Geoffrey",
+ "George", "Georgette", "Georgiana", "Georgianna", "Geovanni", "Geovanny",
+ "Geovany", "Gerald", "Geraldine", "Gerard", "Gerardo", "Gerda", "Gerhard",
+ "Germaine", "German", "Gerry", "Gerson", "Gertrude", "Gia", "Gianni",
+ "Gideon", "Gilbert", "Gilberto", "Gilda", "Giles", "Gillian", "Gina", "Gino",
+ "Giovani", "Giovanna", "Giovanni", "Giovanny", "Gisselle", "Giuseppe",
+ "Gladyce", "Gladys", "Glen", "Glenda", "Glenna", "Glennie", "Gloria",
+ "Godfrey", "Golda", "Golden", "Gonzalo", "Gordon", "Grace", "Gracie",
+ "Graciela", "Grady", "Graham", "Grant", "Granville", "Grayce", "Grayson",
+ "Green", "Greg", "Gregg", "Gregoria", "Gregorio", "Gregory", "Greta",
+ "Gretchen", "Greyson", "Griffin", "Grover", "Guadalupe", "Gudrun", "Guido",
+ "Guillermo", "Guiseppe", "Gunnar", "Gunner", "Gus", "Gussie", "Gust",
+ "Gustave", "Guy", "Gwen", "Gwendolyn", "Hadley", "Hailee", "Hailey", "Hailie",
+ "Hal", "Haleigh", "Haley", "Halie", "Halle", "Hallie", "Hank", "Hanna",
+ "Hannah", "Hans", "Hardy", "Harley", "Harmon", "Harmony", "Harold",
+ "Harrison", "Harry", "Harvey", "Haskell", "Hassan", "Hassie", "Hattie",
+ "Haven", "Hayden", "Haylee", "Hayley", "Haylie", "Hazel", "Hazle", "Heath",
+ "Heather", "Heaven", "Heber", "Hector", "Heidi", "Helen", "Helena", "Helene",
+ "Helga", "Hellen", "Helmer", "Heloise", "Henderson", "Henri", "Henriette",
+ "Henry", "Herbert", "Herman", "Hermann", "Hermina", "Herminia", "Herminio",
+ "Hershel", "Herta", "Hertha", "Hester", "Hettie", "Hilario", "Hilbert",
+ "Hilda", "Hildegard", "Hillard", "Hillary", "Hilma", "Hilton", "Hipolito",
+ "Hiram", "Hobart", "Holden", "Hollie", "Hollis", "Holly", "Hope", "Horace",
+ "Horacio", "Hortense", "Hosea", "Houston", "Howard", "Howell", "Hoyt",
+ "Hubert", "Hudson", "Hugh", "Hulda", "Humberto", "Hunter", "Hyman", "Ian",
+ "Ibrahim", "Icie", "Ida", "Idell", "Idella", "Ignacio", "Ignatius", "Ike",
+ "Ila", "Ilene", "Iliana", "Ima", "Imani", "Imelda", "Immanuel", "Imogene",
+ "Ines", "Irma", "Irving", "Irwin", "Isaac", "Isabel", "Isabell", "Isabella",
+ "Isabelle", "Isac", "Isadore", "Isai", "Isaiah", "Isaias", "Isidro", "Ismael",
+ "Isobel", "Isom", "Israel", "Issac", "Itzel", "Iva", "Ivah", "Ivory", "Ivy",
+ "Izabella", "Izaiah", "Jabari", "Jace", "Jacey", "Jacinthe", "Jacinto",
+ "Jack", "Jackeline", "Jackie", "Jacklyn", "Jackson", "Jacky", "Jaclyn",
+ "Jacquelyn", "Jacques", "Jacynthe", "Jada", "Jade", "Jaden", "Jadon", "Jadyn",
+ "Jaeden", "Jaida", "Jaiden", "Jailyn", "Jaime", "Jairo", "Jakayla", "Jake",
+ "Jakob", "Jaleel", "Jalen", "Jalon", "Jalyn", "Jamaal", "Jamal", "Jamar",
+ "Jamarcus", "Jamel", "Jameson", "Jamey", "Jamie", "Jamil", "Jamir", "Jamison",
+ "Jammie", "Jan", "Jana", "Janae", "Jane", "Janelle", "Janessa", "Janet",
+ "Janice", "Janick", "Janie", "Janis", "Janiya", "Jannie", "Jany", "Jaquan",
+ "Jaquelin", "Jaqueline", "Jared", "Jaren", "Jarod", "Jaron", "Jarred",
+ "Jarrell", "Jarret", "Jarrett", "Jarrod", "Jarvis", "Jasen", "Jasmin",
+ "Jason", "Jasper", "Jaunita", "Javier", "Javon", "Javonte", "Jay", "Jayce",
+ "Jaycee", "Jayda", "Jayde", "Jayden", "Jaydon", "Jaylan", "Jaylen", "Jaylin",
+ "Jaylon", "Jayme", "Jayne", "Jayson", "Jazlyn", "Jazmin", "Jazmyn", "Jazmyne",
+ "Jean", "Jeanette", "Jeanie", "Jeanne", "Jed", "Jedediah", "Jedidiah", "Jeff",
+ "Jefferey", "Jeffery", "Jeffrey", "Jeffry", "Jena", "Jenifer", "Jennie",
+ "Jennifer", "Jennings", "Jennyfer", "Jensen", "Jerad", "Jerald", "Jeramie",
+ "Jeramy", "Jerel", "Jeremie", "Jeremy", "Jermain", "Jermaine", "Jermey",
+ "Jerod", "Jerome", "Jeromy", "Jerrell", "Jerrod", "Jerrold", "Jerry", "Jess",
+ "Jesse", "Jessica", "Jessie", "Jessika", "Jessy", "Jessyca", "Jesus", "Jett",
+ "Jettie", "Jevon", "Jewel", "Jewell", "Jillian", "Jimmie", "Jimmy", "Jo",
+ "Joan", "Joana", "Joanie", "Joanne", "Joannie", "Joanny", "Joany", "Joaquin",
+ "Jocelyn", "Jodie", "Jody", "Joe", "Joel", "Joelle", "Joesph", "Joey",
+ "Johan", "Johann", "Johanna", "Johathan", "John", "Johnathan", "Johnathon",
+ "Johnnie", "Johnny", "Johnpaul", "Johnson", "Jolie", "Jon", "Jonas",
+ "Jonatan", "Jonathan", "Jonathon", "Jordan", "Jordane", "Jordi", "Jordon",
+ "Jordy", "Jordyn", "Jorge", "Jose", "Josefa", "Josefina", "Joseph",
+ "Josephine", "Josh", "Joshua", "Joshuah", "Josiah", "Josiane", "Josianne",
+ "Josie", "Josue", "Jovan", "Jovani", "Jovanny", "Jovany", "Joy", "Joyce",
+ "Juana", "Juanita", "Judah", "Judd", "Jude", "Judge", "Judson", "Judy",
+ "Jules", "Julia", "Julian", "Juliana", "Julianne", "Julie", "Julien",
+ "Juliet", "Julio", "Julius", "June", "Junior", "Junius", "Justen", "Justice",
+ "Justina", "Justine", "Juston", "Justus", "Justyn", "Juvenal", "Juwan",
+ "Kacey", "Kaci", "Kacie", "Kade", "Kaden", "Kadin", "Kaela", "Kaelyn", "Kaia",
+ "Kailee", "Kailey", "Kailyn", "Kaitlin", "Kaitlyn", "Kale", "Kaleb",
+ "Kaleigh", "Kaley", "Kali", "Kallie", "Kameron", "Kamille", "Kamren",
+ "Kamron", "Kamryn", "Kane", "Kara", "Kareem", "Karelle", "Karen", "Kari",
+ "Kariane", "Karianne", "Karina", "Karine", "Karl", "Karlee", "Karley",
+ "Karli", "Karlie", "Karolann", "Karson", "Kasandra", "Kasey", "Kassandra",
+ "Katarina", "Katelin", "Katelyn", "Katelynn", "Katharina", "Katherine",
+ "Katheryn", "Kathleen", "Kathlyn", "Kathryn", "Kathryne", "Katlyn", "Katlynn",
+ "Katrina", "Katrine", "Kattie", "Kavon", "Kay", "Kaya", "Kaycee", "Kayden",
+ "Kayla", "Kaylah", "Kaylee", "Kayleigh", "Kayley", "Kayli", "Kaylie",
+ "Kaylin", "Keagan", "Keanu", "Keara", "Keaton", "Keegan", "Keeley", "Keely",
+ "Keenan", "Keira", "Keith", "Kellen", "Kelley", "Kelli", "Kellie", "Kelly",
+ "Kelsi", "Kelsie", "Kelton", "Kelvin", "Ken", "Kendall", "Kendra", "Kendrick",
+ "Kenna", "Kennedi", "Kennedy", "Kenneth", "Kennith", "Kenny", "Kenton",
+ "Kenya", "Kenyatta", "Kenyon", "Keon", "Keshaun", "Keshawn", "Keven", "Kevin",
+ "Kevon", "Keyon", "Keyshawn", "Khalid", "Khalil", "Kian", "Kiana", "Kianna",
+ "Kiara", "Kiarra", "Kiel", "Kiera", "Kieran", "Kiley", "Kim", "Kimberly",
+ "King", "Kip", "Kira", "Kirk", "Kirsten", "Kirstin", "Kitty", "Kobe", "Koby",
+ "Kody", "Kolby", "Kole", "Korbin", "Korey", "Kory", "Kraig", "Kris", "Krista",
+ "Kristian", "Kristin", "Kristina", "Kristofer", "Kristoffer", "Kristopher",
+ "Kristy", "Krystal", "Krystel", "Krystina", "Kurt", "Kurtis", "Kyla", "Kyle",
+ "Kylee", "Kyleigh", "Kyler", "Kylie", "Kyra", "Lacey", "Lacy", "Ladarius",
+ "Lafayette", "Laila", "Laisha", "Lamar", "Lambert", "Lamont", "Lance",
+ "Landen", "Lane", "Laney", "Larissa", "Laron", "Larry", "Larue", "Laura",
+ "Laurel", "Lauren", "Laurence", "Lauretta", "Lauriane", "Laurianne", "Laurie",
+ "Laurine", "Laury", "Lauryn", "Lavada", "Lavern", "Laverna", "Laverne",
+ "Lavina", "Lavinia", "Lavon", "Lavonne", "Lawrence", "Lawson", "Layla",
+ "Layne", "Lazaro", "Lea", "Leann", "Leanna", "Leanne", "Leatha", "Leda",
+ "Lee", "Leif", "Leila", "Leilani", "Lela", "Lelah", "Leland", "Lelia",
+ "Lempi", "Lemuel", "Lenna", "Lennie", "Lenny", "Lenora", "Lenore", "Leo",
+ "Leola", "Leon", "Leonard", "Leonardo", "Leone", "Leonel", "Leonie", "Leonor",
+ "Leonora", "Leopold", "Leopoldo", "Leora", "Lera", "Lesley", "Leslie",
+ "Lesly", "Lessie", "Lester", "Leta", "Letha", "Letitia", "Levi", "Lew",
+ "Lewis", "Lexi", "Lexie", "Lexus", "Lia", "Liam", "Liana", "Libbie", "Libby",
+ "Lila", "Lilian", "Liliana", "Liliane", "Lilla", "Lillian", "Lilliana",
+ "Lillie", "Lilly", "Lily", "Lilyan", "Lina", "Lincoln", "Linda", "Lindsay",
+ "Lindsey", "Linnea", "Linnie", "Linwood", "Lionel", "Lisa", "Lisandro",
+ "Lisette", "Litzy", "Liza", "Lizeth", "Lizzie", "Llewellyn", "Lloyd", "Logan",
+ "Lois", "Lola", "Lolita", "Loma", "Lon", "London", "Lonie", "Lonnie", "Lonny",
+ "Lonzo", "Lora", "Loraine", "Loren", "Lorena", "Lorenz", "Lorenza", "Lorenzo",
+ "Lori", "Lorine", "Lorna", "Lottie", "Lou", "Louie", "Louisa", "Lourdes",
+ "Louvenia", "Lowell", "Loy", "Loyal", "Loyce", "Lucas", "Luciano", "Lucie",
+ "Lucienne", "Lucile", "Lucinda", "Lucio", "Lucious", "Lucius", "Lucy",
+ "Ludie", "Ludwig", "Lue", "Luella", "Luigi", "Luis", "Luisa", "Lukas", "Lula",
+ "Lulu", "Luna", "Lupe", "Lura", "Lurline", "Luther", "Luz", "Lyda", "Lydia",
+ "Lyla", "Lynn", "Lyric", "Lysanne", "Mabel", "Mabelle", "Mable", "Mac",
+ "Macey", "Maci", "Macie", "Mack", "Mackenzie", "Macy", "Madaline", "Madalyn",
+ "Maddison", "Madeline", "Madelyn", "Madelynn", "Madge", "Madie", "Madilyn",
+ "Madisen", "Madison", "Madisyn", "Madonna", "Madyson", "Mae", "Maegan",
+ "Maeve", "Mafalda", "Magali", "Magdalen", "Magdalena", "Maggie", "Magnolia",
+ "Magnus", "Maia", "Maida", "Maiya", "Major", "Makayla", "Makenna", "Makenzie",
+ "Malachi", "Malcolm", "Malika", "Malinda", "Mallie", "Mallory", "Malvina",
+ "Mandy", "Manley", "Manuel", "Manuela", "Mara", "Marc", "Marcel", "Marcelina",
+ "Marcelino", "Marcella", "Marcelle", "Marcellus", "Marcelo", "Marcia",
+ "Marco", "Marcos", "Marcus", "Margaret", "Margarete", "Margarett",
+ "Margaretta", "Margarette", "Margarita", "Marge", "Margie", "Margot",
+ "Margret", "Marguerite", "Maria", "Mariah", "Mariam", "Marian", "Mariana",
+ "Mariane", "Marianna", "Marianne", "Mariano", "Maribel", "Marie", "Mariela",
+ "Marielle", "Marietta", "Marilie", "Marilou", "Marilyne", "Marina", "Mario",
+ "Marion", "Marisa", "Marisol", "Maritza", "Marjolaine", "Marjorie", "Marjory",
+ "Mark", "Markus", "Marlee", "Marlen", "Marlene", "Marley", "Marlin", "Marlon",
+ "Marques", "Marquis", "Marquise", "Marshall", "Marta", "Martin", "Martina",
+ "Martine", "Marty", "Marvin", "Mary", "Maryam", "Maryjane", "Maryse", "Mason",
+ "Mateo", "Mathew", "Mathias", "Mathilde", "Matilda", "Matilde", "Matt",
+ "Matteo", "Mattie", "Maud", "Maude", "Maudie", "Maureen", "Maurice",
+ "Mauricio", "Maurine", "Maverick", "Mavis", "Max", "Maxie", "Maxime",
+ "Maximilian", "Maximillia", "Maximillian", "Maximo", "Maximus", "Maxine",
+ "Maxwell", "May", "Maya", "Maybell", "Maybelle", "Maye", "Maymie", "Maynard",
+ "Mayra", "Mazie", "Mckayla", "Mckenna", "Mckenzie", "Meagan", "Meaghan",
+ "Meda", "Megane", "Meggie", "Meghan", "Mekhi", "Melany", "Melba", "Melisa",
+ "Melissa", "Mellie", "Melody", "Melvin", "Melvina", "Melyna", "Melyssa",
+ "Mercedes", "Meredith", "Merl", "Merle", "Merlin", "Merritt", "Mertie",
+ "Mervin", "Meta", "Mia", "Micaela", "Micah", "Michael", "Michaela", "Michale",
+ "Micheal", "Michel", "Michele", "Michelle", "Miguel", "Mikayla", "Mike",
+ "Mikel", "Milan", "Miles", "Milford", "Miller", "Millie", "Milo", "Milton",
+ "Mina", "Minerva", "Minnie", "Miracle", "Mireille", "Mireya", "Misael",
+ "Missouri", "Misty", "Mitchel", "Mitchell", "Mittie", "Modesta", "Modesto",
+ "Mohamed", "Mohammad", "Mohammed", "Moises", "Mollie", "Molly", "Mona",
+ "Monica", "Monique", "Monroe", "Monserrat", "Monserrate", "Montana", "Monte",
+ "Monty", "Morgan", "Moriah", "Morris", "Mortimer", "Morton", "Mose", "Moses",
+ "Moshe", "Mossie", "Mozell", "Mozelle", "Muhammad", "Muriel", "Murl",
+ "Murphy", "Murray", "Mustafa", "Mya", "Myah", "Mylene", "Myles", "Myra",
+ "Myriam", "Myrl", "Myrna", "Myron", "Myrtice", "Myrtie", "Myrtis", "Myrtle",
+ "Nadia", "Nakia", "Name", "Nannie", "Naomi", "Naomie", "Napoleon", "Narciso",
+ "Nash", "Nasir", "Nat", "Natalia", "Natalie", "Natasha", "Nathan",
+ "Nathanael", "Nathanial", "Nathaniel", "Nathen", "Nayeli", "Neal", "Ned",
+ "Nedra", "Neha", "Neil", "Nelda", "Nella", "Nelle", "Nellie", "Nels",
+ "Nelson", "Neoma", "Nestor", "Nettie", "Neva", "Newell", "Newton", "Nia",
+ "Nicholas", "Nicholaus", "Nichole", "Nick", "Nicklaus", "Nickolas", "Nico",
+ "Nicola", "Nicolas", "Nicole", "Nicolette", "Nigel", "Nikita", "Nikki",
+ "Nikko", "Niko", "Nikolas", "Nils", "Nina", "Noah", "Noble", "Noe", "Noel",
+ "Noelia", "Noemi", "Noemie", "Noemy", "Nola", "Nolan", "Nona", "Nora",
+ "Norbert", "Norberto", "Norene", "Norma", "Norris", "Norval", "Norwood",
+ "Nova", "Novella", "Nya", "Nyah", "Nyasia", "Obie", "Oceane", "Ocie",
+ "Octavia", "Oda", "Odell", "Odessa", "Odie", "Ofelia", "Okey", "Ola", "Olaf",
+ "Ole", "Olen", "Oleta", "Olga", "Olin", "Oliver", "Ollie", "Oma", "Omari",
+ "Omer", "Ona", "Onie", "Opal", "Ophelia", "Ora", "Oral", "Oran", "Oren",
+ "Orie", "Orin", "Orion", "Orland", "Orlando", "Orlo", "Orpha", "Orrin",
+ "Orval", "Orville", "Osbaldo", "Osborne", "Oscar", "Osvaldo", "Oswald",
+ "Oswaldo", "Otha", "Otho", "Otilia", "Otis", "Ottilie", "Ottis", "Otto",
+ "Ova", "Owen", "Ozella", "Pablo", "Paige", "Palma", "Pamela", "Pansy",
+ "Paolo", "Paris", "Parker", "Pascale", "Pasquale", "Pat", "Patience",
+ "Patricia", "Patrick", "Patsy", "Pattie", "Paul", "Paula", "Pauline",
+ "Paxton", "Payton", "Pearl", "Pearlie", "Pearline", "Pedro", "Peggie",
+ "Penelope", "Percival", "Percy", "Perry", "Pete", "Peter", "Petra", "Peyton",
+ "Philip", "Phoebe", "Phyllis", "Pierce", "Pierre", "Pietro", "Pink", "Pinkie",
+ "Piper", "Polly", "Porter", "Precious", "Presley", "Preston", "Price",
+ "Prince", "Princess", "Priscilla", "Providenci", "Prudence", "Queen",
+ "Queenie", "Quentin", "Quincy", "Quinn", "Quinten", "Quinton", "Rachael",
+ "Rachel", "Rachelle", "Rae", "Raegan", "Rafael", "Rafaela", "Raheem",
+ "Rahsaan", "Rahul", "Raina", "Raleigh", "Ralph", "Ramiro", "Ramon", "Ramona",
+ "Randal", "Randall", "Randi", "Randy", "Ransom", "Raoul", "Raphael",
+ "Raphaelle", "Raquel", "Rashad", "Rashawn", "Rasheed", "Raul", "Raven", "Ray",
+ "Raymond", "Raymundo", "Reagan", "Reanna", "Reba", "Rebeca", "Rebecca",
+ "Rebeka", "Rebekah", "Reece", "Reed", "Reese", "Regan", "Reggie", "Reginald",
+ "Reid", "Reilly", "Reina", "Reinhold", "Remington", "Rene", "Renee", "Ressie",
+ "Reta", "Retha", "Retta", "Reuben", "Reva", "Rex", "Rey", "Reyes", "Reymundo",
+ "Reyna", "Reynold", "Rhea", "Rhett", "Rhianna", "Rhiannon", "Rhoda",
+ "Ricardo", "Richard", "Richie", "Richmond", "Rick", "Rickey", "Rickie",
+ "Ricky", "Rico", "Rigoberto", "Riley", "Rita", "River", "Robb", "Robbie",
+ "Robert", "Roberta", "Roberto", "Robin", "Robyn", "Rocio", "Rocky", "Rod",
+ "Roderick", "Rodger", "Rodolfo", "Rodrick", "Rodrigo", "Roel", "Rogelio",
+ "Roger", "Rogers", "Rolando", "Rollin", "Roma", "Romaine", "Roman", "Ron",
+ "Ronaldo", "Ronny", "Roosevelt", "Rory", "Rosa", "Rosalee", "Rosalia",
+ "Rosalind", "Rosalinda", "Rosalyn", "Rosamond", "Rosanna", "Rosario",
+ "Roscoe", "Rose", "Rosella", "Roselyn", "Rosemarie", "Rosemary", "Rosendo",
+ "Rosetta", "Rosie", "Rosina", "Roslyn", "Ross", "Rossie", "Rowan", "Rowena",
+ "Rowland", "Roxane", "Roxanne", "Roy", "Royal", "Royce", "Rozella", "Ruben",
+ "Rubie", "Ruby", "Rubye", "Rudolph", "Rudy", "Rupert", "Russ", "Russel",
+ "Russell", "Rusty", "Ruth", "Ruthe", "Ruthie", "Ryan", "Ryann", "Ryder",
+ "Rylan", "Rylee", "Ryleigh", "Ryley", "Sabina", "Sabrina", "Sabryna", "Sadie",
+ "Sadye", "Sage", "Saige", "Sallie", "Sally", "Salma", "Salvador", "Salvatore",
+ "Sam", "Samanta", "Samantha", "Samara", "Samir", "Sammie", "Sammy", "Samson",
+ "Sandra", "Sandrine", "Sandy", "Sanford", "Santa", "Santiago", "Santina",
+ "Santino", "Santos", "Sarah", "Sarai", "Sarina", "Sasha", "Saul", "Savanah",
+ "Savanna", "Savannah", "Savion", "Scarlett", "Schuyler", "Scot", "Scottie",
+ "Scotty", "Seamus", "Sean", "Sebastian", "Sedrick", "Selena", "Selina",
+ "Selmer", "Serena", "Serenity", "Seth", "Shad", "Shaina", "Shakira", "Shana",
+ "Shane", "Shanel", "Shanelle", "Shania", "Shanie", "Shaniya", "Shanna",
+ "Shannon", "Shanny", "Shanon", "Shany", "Sharon", "Shaun", "Shawn", "Shawna",
+ "Shaylee", "Shayna", "Shayne", "Shea", "Sheila", "Sheldon", "Shemar",
+ "Sheridan", "Sherman", "Sherwood", "Shirley", "Shyann", "Shyanne", "Sibyl",
+ "Sid", "Sidney", "Sienna", "Sierra", "Sigmund", "Sigrid", "Sigurd", "Silas",
+ "Sim", "Simeon", "Simone", "Sincere", "Sister", "Skye", "Skyla", "Skylar",
+ "Sofia", "Soledad", "Solon", "Sonia", "Sonny", "Sonya", "Sophia", "Sophie",
+ "Spencer", "Stacey", "Stacy", "Stan", "Stanford", "Stanley", "Stanton",
+ "Stefan", "Stefanie", "Stella", "Stephan", "Stephania", "Stephanie",
+ "Stephany", "Stephen", "Stephon", "Sterling", "Steve", "Stevie", "Stewart",
+ "Stone", "Stuart", "Summer", "Sunny", "Susan", "Susana", "Susanna", "Susie",
+ "Suzanne", "Sven", "Syble", "Sydnee", "Sydney", "Sydni", "Sydnie", "Sylvan",
+ "Sylvester", "Sylvia", "Tabitha", "Tad", "Talia", "Talon", "Tamara", "Tamia",
+ "Tania", "Tanner", "Tanya", "Tara", "Taryn", "Tate", "Tatum", "Tatyana",
+ "Taurean", "Tavares", "Taya", "Taylor", "Teagan", "Ted", "Telly", "Terence",
+ "Teresa", "Terrance", "Terrell", "Terrence", "Terrill", "Terry", "Tess",
+ "Tessie", "Tevin", "Thad", "Thaddeus", "Thalia", "Thea", "Thelma", "Theo",
+ "Theodora", "Theodore", "Theresa", "Therese", "Theresia", "Theron", "Thomas",
+ "Thora", "Thurman", "Tia", "Tiana", "Tianna", "Tiara", "Tierra", "Tiffany",
+ "Tillman", "Timmothy", "Timmy", "Timothy", "Tina", "Tito", "Titus", "Tobin",
+ "Toby", "Tod", "Tom", "Tomas", "Tomasa", "Tommie", "Toney", "Toni", "Tony",
+ "Torey", "Torrance", "Torrey", "Toy", "Trace", "Tracey", "Tracy", "Travis",
+ "Travon", "Tre", "Tremaine", "Tremayne", "Trent", "Trenton", "Tressa",
+ "Tressie", "Treva", "Trever", "Trevion", "Trevor", "Trey", "Trinity",
+ "Trisha", "Tristian", "Tristin", "Triston", "Troy", "Trudie", "Trycia",
+ "Trystan", "Turner", "Twila", "Tyler", "Tyra", "Tyree", "Tyreek", "Tyrel",
+ "Tyrell", "Tyrese", "Tyrique", "Tyshawn", "Tyson", "Ubaldo", "Ulices",
+ "Ulises", "Una", "Unique", "Urban", "Uriah", "Uriel", "Ursula", "Vada",
+ "Valentin", "Valentina", "Valentine", "Valerie", "Vallie", "Van", "Vance",
+ "Vanessa", "Vaughn", "Veda", "Velda", "Vella", "Velma", "Velva", "Vena",
+ "Verda", "Verdie", "Vergie", "Verla", "Verlie", "Vern", "Verna", "Verner",
+ "Vernice", "Vernie", "Vernon", "Verona", "Veronica", "Vesta", "Vicenta",
+ "Vicente", "Vickie", "Vicky", "Victor", "Victoria", "Vida", "Vidal", "Vilma",
+ "Vince", "Vincent", "Vincenza", "Vincenzo", "Vinnie", "Viola", "Violet",
+ "Violette", "Virgie", "Virgil", "Virginia", "Virginie", "Vita", "Vito",
+ "Viva", "Vivian", "Viviane", "Vivianne", "Vivien", "Vivienne", "Vladimir",
+ "Wade", "Waino", "Waldo", "Walker", "Wallace", "Walter", "Walton", "Wanda",
+ "Ward", "Warren", "Watson", "Wava", "Waylon", "Wayne", "Webster", "Weldon",
+ "Wellington", "Wendell", "Wendy", "Werner", "Westley", "Weston", "Whitney",
+ "Wilber", "Wilbert", "Wilburn", "Wiley", "Wilford", "Wilfred", "Wilfredo",
+ "Wilfrid", "Wilhelm", "Wilhelmine", "Will", "Willa", "Willard", "William",
+ "Willie", "Willis", "Willow", "Willy", "Wilma", "Wilmer", "Wilson", "Wilton",
+ "Winfield", "Winifred", "Winnifred", "Winona", "Winston", "Woodrow", "Wyatt",
+ "Wyman", "Xander", "Xavier", "Xzavier", "Yadira", "Yasmeen", "Yasmin",
+ "Yasmine", "Yazmin", "Yesenia", "Yessenia", "Yolanda", "Yoshiko", "Yvette",
+ "Yvonne", "Zachariah", "Zachary", "Zachery", "Zack", "Zackary", "Zackery",
+ "Zakary", "Zander", "Zane", "Zaria", "Zechariah", "Zelda", "Zella", "Zelma",
+ "Zena", "Zetta", "Zion", "Zita", "Zoe", "Zoey", "Zoie", "Zoila", "Zola",
+ "Zora", "Zula"
+];
+
+/**
+ * Generate random username.
+ * @returns {string} random username
+ */
+function generateUsername () {
+ var name = RandomUtil.randomElement(names);
+ var suffix = RandomUtil.randomAlphanumStr(3);
+
+ return name + '-' + suffix;
+}
+
+module.exports = {
+ generateUsername: generateUsername
+};
diff --git a/modules/xmpp/JingleSessionPC.js b/modules/xmpp/JingleSessionPC.js
index b5beaeefd..8b150cf07 100644
--- a/modules/xmpp/JingleSessionPC.js
+++ b/modules/xmpp/JingleSessionPC.js
@@ -562,7 +562,6 @@ JingleSessionPC.prototype.setRemoteDescription = function (elem, desctype) {
if (config.webrtcIceUdpDisable) {
this.remoteSDP.removeUdpCandidates = true;
}
-
this.remoteSDP.fromJingle(elem);
this.readSsrcInfo($(elem).find(">content"));
if (this.peerconnection.remoteDescription !== null) {
diff --git a/modules/xmpp/strophe.jingle.js b/modules/xmpp/strophe.jingle.js
index 42599caa8..7e4a581ef 100644
--- a/modules/xmpp/strophe.jingle.js
+++ b/modules/xmpp/strophe.jingle.js
@@ -96,7 +96,7 @@ module.exports = function(XMPP, eventEmitter) {
switch (action) {
case 'session-initiate':
console.log("(TIME) received session-initiate:\t",
- window.performance.now());
+ window.performance.now(), iq);
var startMuted = $(iq).find('jingle>startmuted');
if (startMuted && startMuted.length > 0) {
var audioMuted = startMuted.attr("audio");
@@ -176,10 +176,12 @@ module.exports = function(XMPP, eventEmitter) {
break;
case 'addsource': // FIXME: proprietary, un-jingleish
case 'source-add': // FIXME: proprietary
+ console.info("source-add", iq);
sess.addSource($(iq).find('>jingle>content'));
break;
case 'removesource': // FIXME: proprietary, un-jingleish
case 'source-remove': // FIXME: proprietary
+ console.info("source-remove", iq);
sess.removeSource($(iq).find('>jingle>content'));
break;
default:
diff --git a/modules/xmpp/xmpp.js b/modules/xmpp/xmpp.js
index 763e10027..9b28cb49f 100644
--- a/modules/xmpp/xmpp.js
+++ b/modules/xmpp/xmpp.js
@@ -23,8 +23,9 @@ var authenticatedUser = false;
* @returns {string}
*/
function generateUserName() {
- return RandomUtil.random8digitsHex() + "-" + RandomUtil.random4digitsHex() + "-" +
- RandomUtil.random4digitsHex() + "-" + RandomUtil.random8digitsHex();
+ return RandomUtil.randomHexString(8) + "-" + RandomUtil.randomHexString(4)
+ + "-" + RandomUtil.randomHexString(4) + "-"
+ + RandomUtil.randomHexString(8);
}
function connect(jid, password) {
diff --git a/service/RTC/MediaStreamTypes.js b/service/RTC/MediaStreamTypes.js
index 39af76288..3cd41d17c 100644
--- a/service/RTC/MediaStreamTypes.js
+++ b/service/RTC/MediaStreamTypes.js
@@ -1,6 +1,6 @@
var MediaStreamType = {
- VIDEO_TYPE: "Video",
+ VIDEO_TYPE: "video",
- AUDIO_TYPE: "Audio"
+ AUDIO_TYPE: "audio"
};
module.exports = MediaStreamType;
\ No newline at end of file