├── sounds ├── dialpad │ ├── 0.ogg │ ├── 0.wav │ ├── 1.ogg │ ├── 1.wav │ ├── 2.ogg │ ├── 2.wav │ ├── 3.ogg │ ├── 3.wav │ ├── 4.ogg │ ├── 4.wav │ ├── 5.ogg │ ├── 5.wav │ ├── 6.ogg │ ├── 6.wav │ ├── 7.ogg │ ├── 7.wav │ ├── 8.ogg │ ├── 8.wav │ ├── 9.ogg │ ├── 9.wav │ ├── A.ogg │ ├── A.wav │ ├── B.ogg │ ├── B.wav │ ├── C.ogg │ ├── C.wav │ ├── D.ogg │ ├── D.wav │ ├── hash.ogg │ ├── hash.wav │ ├── asterisk.ogg │ └── asterisk.wav ├── new_message.ogg ├── new_message.wav ├── incoming-call.wav ├── incoming-call2.ogg ├── incoming-chat.ogg ├── outgoing-call.ogg ├── outgoing-call2.ogg ├── outgoing-call-rejected.ogg └── outgoing-call-rejected.wav ├── .gitignore ├── skin.css ├── deb-setup.sh ├── make-release ├── AUTHORS ├── available_languages.xml ├── init.js ├── code_grabber ├── parseuri.js ├── webrtc-check.js ├── style-horizontal.css ├── style-event-demo.css ├── phone.shtml ├── internationalization ├── Messages_he.properties ├── Messages_fr.properties ├── Messages.properties ├── Messages_en.properties ├── Messages_nb.properties ├── Messages_nn.properties ├── Messages_pl.properties ├── Messages_pt.properties ├── Messages_bg.properties ├── Messages_nl.properties ├── Messages_ru.properties ├── Messages_sk.properties ├── Messages_de.properties └── Messages_es.properties ├── phone-dev.shtml ├── event-demo.shtml ├── INTERNATIONALIZATION_README.txt ├── event-demo.js ├── jssip-helper.js ├── README.md ├── config-sample.js ├── style.css ├── INTEGRATION.md ├── jscommunicator.inc ├── i18n.js ├── JSCommManager.js ├── GPL-2.txt └── JSCommUI.js /sounds/dialpad/0.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/0.ogg -------------------------------------------------------------------------------- /sounds/dialpad/0.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/0.wav -------------------------------------------------------------------------------- /sounds/dialpad/1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/1.ogg -------------------------------------------------------------------------------- /sounds/dialpad/1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/1.wav -------------------------------------------------------------------------------- /sounds/dialpad/2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/2.ogg -------------------------------------------------------------------------------- /sounds/dialpad/2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/2.wav -------------------------------------------------------------------------------- /sounds/dialpad/3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/3.ogg -------------------------------------------------------------------------------- /sounds/dialpad/3.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/3.wav -------------------------------------------------------------------------------- /sounds/dialpad/4.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/4.ogg -------------------------------------------------------------------------------- /sounds/dialpad/4.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/4.wav -------------------------------------------------------------------------------- /sounds/dialpad/5.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/5.ogg -------------------------------------------------------------------------------- /sounds/dialpad/5.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/5.wav -------------------------------------------------------------------------------- /sounds/dialpad/6.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/6.ogg -------------------------------------------------------------------------------- /sounds/dialpad/6.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/6.wav -------------------------------------------------------------------------------- /sounds/dialpad/7.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/7.ogg -------------------------------------------------------------------------------- /sounds/dialpad/7.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/7.wav -------------------------------------------------------------------------------- /sounds/dialpad/8.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/8.ogg -------------------------------------------------------------------------------- /sounds/dialpad/8.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/8.wav -------------------------------------------------------------------------------- /sounds/dialpad/9.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/9.ogg -------------------------------------------------------------------------------- /sounds/dialpad/9.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/9.wav -------------------------------------------------------------------------------- /sounds/dialpad/A.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/A.ogg -------------------------------------------------------------------------------- /sounds/dialpad/A.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/A.wav -------------------------------------------------------------------------------- /sounds/dialpad/B.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/B.ogg -------------------------------------------------------------------------------- /sounds/dialpad/B.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/B.wav -------------------------------------------------------------------------------- /sounds/dialpad/C.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/C.ogg -------------------------------------------------------------------------------- /sounds/dialpad/C.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/C.wav -------------------------------------------------------------------------------- /sounds/dialpad/D.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/D.ogg -------------------------------------------------------------------------------- /sounds/dialpad/D.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/D.wav -------------------------------------------------------------------------------- /sounds/dialpad/hash.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/hash.ogg -------------------------------------------------------------------------------- /sounds/dialpad/hash.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/hash.wav -------------------------------------------------------------------------------- /sounds/new_message.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/new_message.ogg -------------------------------------------------------------------------------- /sounds/new_message.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/new_message.wav -------------------------------------------------------------------------------- /sounds/incoming-call.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/incoming-call.wav -------------------------------------------------------------------------------- /sounds/incoming-call2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/incoming-call2.ogg -------------------------------------------------------------------------------- /sounds/incoming-chat.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/incoming-chat.ogg -------------------------------------------------------------------------------- /sounds/outgoing-call.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/outgoing-call.ogg -------------------------------------------------------------------------------- /sounds/outgoing-call2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/outgoing-call2.ogg -------------------------------------------------------------------------------- /sounds/dialpad/asterisk.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/asterisk.ogg -------------------------------------------------------------------------------- /sounds/dialpad/asterisk.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/dialpad/asterisk.wav -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | jquery.i18n.properties.js 2 | Arbiter.js 3 | JsSIP.js 4 | config.js 5 | jquery-ui.css 6 | jquery-ui.js 7 | jquery.js 8 | -------------------------------------------------------------------------------- /sounds/outgoing-call-rejected.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/outgoing-call-rejected.ogg -------------------------------------------------------------------------------- /sounds/outgoing-call-rejected.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opentelecoms-org/jscommunicator/HEAD/sounds/outgoing-call-rejected.wav -------------------------------------------------------------------------------- /skin.css: -------------------------------------------------------------------------------- 1 | span { 2 | color:#FFF; 3 | } 4 | 5 | #peer { 6 | color:#FFF; 7 | } 8 | 9 | #lang_selection { 10 | background-color: #888; 11 | color:#FFF; 12 | } 13 | 14 | #communicator { 15 | border-radius: 6px; 16 | border-style: solid; 17 | border-color: #FFF; 18 | border-width: 1px; 19 | } 20 | 21 | #dtmf-pad { 22 | border: 1px solid #FFF; 23 | opacity: 0.8; 24 | } 25 | 26 | #encapsulate { 27 | background-color: #888; 28 | border-radius: 6px; 29 | } 30 | 31 | #error span, #ws span, #reg span { 32 | color: white; 33 | } 34 | 35 | #header h1 { 36 | color: white; 37 | } 38 | 39 | #jsc-logout-button { 40 | color: #FFF; 41 | } 42 | 43 | h3 { 44 | color: white; 45 | } -------------------------------------------------------------------------------- /deb-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Use apt-get to install all the dependency packages: 4 | 5 | # sudo apt-get install \ 6 | # libjs-jquery libjs-arbiter libjs-jquery-i18n-properties \ 7 | # libjs-jquery-ui libjs-jssip fonts-font-awesome 8 | 9 | # create symlinks to the artifacts provided by the packages: 10 | 11 | ln -s /usr/share/javascript/jquery/jquery.min.js jquery.js 12 | ln -s /usr/share/javascript/arbiter/Arbiter.js . 13 | ln -s /usr/share/javascript/jquery-i18n-properties/jquery.i18n.properties-min.js jquery.i18n.properties.js 14 | ln -s /usr/share/javascript/jquery-ui/jquery-ui.min.js jquery-ui.js 15 | ln -s /usr/share/javascript/jquery-ui/css/smoothness/jquery-ui.min.css jquery-ui.css 16 | ln -s /usr/share/javascript/jssip/jssip.min.js jssip.js 17 | ln -s /usr/share/fonts-font-awesome font-awesome 18 | 19 | 20 | -------------------------------------------------------------------------------- /make-release: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | RELEASE_FILES="i18n.js JSCommManager.js JSCommUI.js jssip-helper.js parseuri.js webrtc-check.js" 6 | RELEASE_JS="JSComm.js" 7 | 8 | MINIFY_GCC=closure-compiler 9 | # using a manually constructed JVM command line for 10 | # closure-compiler due to Debian bug 705565: 11 | #MINIFY_GCC="java -classpath /usr/share/java/closure-compiler.jar:/usr/share/java/args4j.jar:/usr/share/java/guava.jar:/usr/share/java/json.jar com.google.javascript.jscomp.CommandLineRunner" 12 | 13 | TMP_FILE=`mktemp --suffix=.js JSCommXXX` 14 | cat ${RELEASE_FILES} > ${TMP_FILE} 15 | TMP_RELEASE=`mktemp --suffix=.js JSCommRelXXX` 16 | ${MINIFY_GCC} --js ${TMP_FILE} --js_output_file ${TMP_RELEASE} 17 | head -20 JSCommManager.js | cat - ${TMP_RELEASE} > ${RELEASE_JS} 18 | rm ${TMP_FILE} ${TMP_RELEASE} 19 | 20 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Daniel Pocock 2 | Juliana Louback 3 | Christian Henz 4 | Jeroen Massar 5 | elprincipe 6 | Yehuda Korotkin 7 | Carla Araos 8 | aavia 9 | mirazusman 10 | tehilazi 11 | Matías A. Bellone 12 | tami4 13 | Christian Henz 14 | Dariusz Dwornikowski 15 | Ivan Masár 16 | Martin Hristov 17 | Matías A. Bellone 18 | Miguel Ángel Molina 19 | Thomas Vincent 20 | timothymctim 21 | Torstein Husebø 22 | -------------------------------------------------------------------------------- /available_languages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Български 5 | bg 6 | 7 | 8 | Deutsch 9 | de 10 | 11 | 12 | English 13 | en 14 | 15 | 16 | Español 17 | es 18 | 19 | 20 | Français 21 | fr 22 | 23 | 24 | עברית 25 | he 26 | 27 | 28 | Norwegian Bokmål 29 | nb 30 | 31 | 32 | Norwegian Nynorsk 33 | nn 34 | 35 | 36 | Polski 37 | pl 38 | 39 | 40 | Português 41 | pt 42 | 43 | 44 | slovenčina 45 | sk 46 | 47 | 48 | -------------------------------------------------------------------------------- /init.js: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2013-2015 Daniel Pocock http://danielpocock.com 6 | 7 | The JavaScript code in this page is free software: you can 8 | redistribute it and/or modify it under the terms of the GNU 9 | General Public License (GNU GPL) as published by the Free Software 10 | Foundation, either version 2 of the License, or (at your option) 11 | any later version. The code is distributed WITHOUT ANY WARRANTY; 12 | without even the implied warranty of MERCHANTABILITY or FITNESS 13 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 14 | 15 | You may distribute non-source (e.g., minimized or compacted) forms of 16 | that code without the full copy of the GNU GPL normally required 17 | provided you include this license notice and a URL 18 | through which recipients can access the Corresponding Source. 19 | ****************************************************************************/ 20 | 21 | $(document).ready(function() { 22 | 23 | JSCommManager.init(); 24 | 25 | }); 26 | 27 | -------------------------------------------------------------------------------- /code_grabber: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -x 4 | 5 | wget http://code.jquery.com/jquery-1.7.2.min.js -O jquery.js 6 | wget https://jssip.net/download/releases/jssip-3.3.11.js -O jssip.js 7 | wget https://raw.githubusercontent.com/taylor1791/promissory-arbiter/master/src/promissory-arbiter.js -O Arbiter.js 8 | wget https://raw.githubusercontent.com/jquery-i18n-properties/jquery-i18n-properties/cbb8300bef6e148753f147643ecc5f64f0e0b34e/jquery.i18n.properties.js -O jquery.i18n.properties.js 9 | 10 | mkdir -p font-awesome/css 11 | mkdir -p font-awesome/fonts 12 | 13 | mkdir -p temp 14 | wget -P temp http://jqueryui.com/resources/download/jquery-ui-1.10.4.zip 15 | unzip -d temp temp/jquery-ui-1.10.4.zip 16 | cp temp/jquery-ui-1.10.4/ui/minified/jquery-ui.min.js jquery-ui.js 17 | cp temp/jquery-ui-1.10.4/themes/base/minified/jquery-ui.min.css jquery-ui.css 18 | 19 | wget -P temp https://github.com/FortAwesome/Font-Awesome/archive/4.1.0.zip 20 | unzip -d temp temp/4.1.0.zip 21 | cp temp/Font-Awesome-4.1.0/css/font-awesome.min.css font-awesome/css/font-awesome.min.css 22 | cp -a temp/Font-Awesome-4.1.0/fonts/. font-awesome/fonts 23 | rm -r temp 24 | -------------------------------------------------------------------------------- /parseuri.js: -------------------------------------------------------------------------------- 1 | // parseUri 1.2.2 2 | // (c) Steven Levithan 3 | // MIT License 4 | 5 | function parseUri (str) { 6 | var o = parseUri.options, 7 | m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), 8 | uri = {}, 9 | i = 14; 10 | 11 | while (i--) uri[o.key[i]] = m[i] || ""; 12 | 13 | uri[o.q.name] = {}; 14 | uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { 15 | if ($1) uri[o.q.name][$1] = $2; 16 | }); 17 | 18 | return uri; 19 | }; 20 | 21 | parseUri.options = { 22 | strictMode: false, 23 | key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], 24 | q: { 25 | name: "queryKey", 26 | parser: /(?:^|&)([^&=]*)=?([^&]*)/g 27 | }, 28 | parser: { 29 | strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, 30 | loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /webrtc-check.js: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2013-2015 Daniel Pocock http://danielpocock.com 6 | 7 | The JavaScript code in this page is free software: you can 8 | redistribute it and/or modify it under the terms of the GNU 9 | General Public License (GNU GPL) as published by the Free Software 10 | Foundation, either version 2 of the License, or (at your option) 11 | any later version. The code is distributed WITHOUT ANY WARRANTY; 12 | without even the implied warranty of MERCHANTABILITY or FITNESS 13 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 14 | 15 | You may distribute non-source (e.g., minimized or compacted) forms of 16 | that code without the full copy of the GNU GPL normally required 17 | provided you include this license notice and a URL 18 | through which recipients can access the Corresponding Source. 19 | ****************************************************************************/ 20 | 21 | function WebRTCSupported() { 22 | 23 | if (window.RTCPeerConnection) { 24 | return true; 25 | } else { 26 | console.error("WebRTC support not found"); 27 | return false; 28 | } 29 | }; 30 | 31 | -------------------------------------------------------------------------------- /style-horizontal.css: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2013-2015 Daniel Pocock http://danielpocock.com 6 | 7 | The JavaScript code in this page is free software: you can 8 | redistribute it and/or modify it under the terms of the GNU 9 | General Public License (GNU GPL) as published by the Free Software 10 | Foundation, either version 2 of the License, or (at your option) 11 | any later version. The code is distributed WITHOUT ANY WARRANTY; 12 | without even the implied warranty of MERCHANTABILITY or FITNESS 13 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 14 | 15 | You may distribute non-source (e.g., minimized or compacted) forms of 16 | that code without the full copy of the GNU GPL normally required 17 | provided you include this license notice and a URL 18 | through which recipients can access the Corresponding Source. 19 | ****************************************************************************/ 20 | 21 | /* This CSS supplements the default style.css, moving the video 22 | panel from the position underneath the session controls 23 | to the right hand side of the browser window */ 24 | 25 | #video-session { 26 | position: absolute; 27 | top: 60px; 28 | left: auto; 29 | right: 100px; 30 | } 31 | 32 | 33 | -------------------------------------------------------------------------------- /style-event-demo.css: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2014-2015 Daniel Pocock http://danielpocock.com 6 | 7 | The JavaScript code in this page is free software: you can 8 | redistribute it and/or modify it under the terms of the GNU 9 | General Public License (GNU GPL) as published by the Free Software 10 | Foundation, either version 2 of the License, or (at your option) 11 | any later version. The code is distributed WITHOUT ANY WARRANTY; 12 | without even the implied warranty of MERCHANTABILITY or FITNESS 13 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 14 | 15 | You may distribute non-source (e.g., minimized or compacted) forms of 16 | that code without the full copy of the GNU GPL normally required 17 | provided you include this license notice and a URL 18 | through which recipients can access the Corresponding Source. 19 | ****************************************************************************/ 20 | 21 | /* This CSS supplements the default style.css, adding 22 | layout for the event log table */ 23 | 24 | table#event-demo-log { 25 | border-width: 0 0 1px 1px; 26 | border-spacing: 0; 27 | border-collapse: collapse; 28 | border-style: solid; 29 | } 30 | 31 | table#event-demo-log th, table#event-demo-log td { 32 | margin: 0; 33 | padding: 4px; 34 | border-width: 1px 1px 0 0; 35 | border-style: solid; 36 | } 37 | 38 | select#contact-directory { 39 | disabled: true; 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /phone.shtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Testing 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /internationalization/Messages_he.properties: -------------------------------------------------------------------------------- 1 | error_js =.בהגדרות הדפדפן שלך JavaScript נא אפשר .JavaScript שגיאה: השירות דורש 2 | error_webrtc =.שימוש במהדורה האחרונה מומלץ ,Google Chrome או Mozilla Firefox נסה .WebRTC שגיאה: השירות דורש 3 | error_no_config =.לא נמצאה JsCommunicator שגיאה: הקונפיגורציה של 4 | error_ua_init_failure = שגיאה: נכשל האתחול user agent. 5 | error_reg_fail = שגיאה: כישלון רישום SIP. 6 | error_call_attempt_failed = שגיאה: נכשל ניסיון להתחיל שיחה. לוודא שמיקרופון / מצלמת אינטרנט מחוברים. בדוק את הגדרות אבטחה של דפדפן, peer עשויים שלא לתמוך קודקים תואמים. 7 | error_dynamic = " " 8 | jsc_login_display_name = שם תצוגה (יכול להיות ריק) 9 | jsc_login_sip_uri = כתובת SIP 10 | jsc_login_password = סיסמה 11 | jsc_login_button = כניסה 12 | ws_link = קישור WebSocket: 13 | ws_state_connected = מחובר 14 | ws_state_disconnected = מנותק 15 | sip_reg = SIP registration: 16 | sip_reg_up = רשום 17 | sip_reg_down = לא רשום 18 | sip_dest_address = יעד 19 | session_state_outgoing = מחייג ... 20 | session_state_incoming = שיחה נכנסת 21 | session_state_accepted = עונה, בודק חיבור ... 22 | session_state_active = שיחה פעילה 23 | button_session_cancel = ביטול 24 | button_session_reject = דחייה 25 | button_session_answer = תשובה 26 | button_call_audio = (התקשרות (רק שמע 27 | button_reg = הרשמה 28 | button_dereg = בטל הרשמה 29 | button_call_audio_video = חייג (וידאו וקול) 30 | button_session_answer_video = (תשובה (עם וידאו 31 | button_session_answer_hold = השהה 32 | button_session_answer_hang_up = נתק 33 | button_video_control_self_view = תצוגה עצמית 34 | button_video_control_self_hide = הסתרה עצמית 35 | button_video_control_full_screen = מסך מלא 36 | welcome = ברוכים הבאים, 37 | call = שיחה 38 | chat = צ'ט 39 | enter_contact = הכנס איש קשר 40 | type_to_chat = הקלד לצ'ט... 41 | start_chat = התחל צ'ט 42 | me = אני: 43 | logout = התנתק 44 | no_contact = הזן איש קשר. 45 | remember_me = זכור אותי -------------------------------------------------------------------------------- /internationalization/Messages_fr.properties: -------------------------------------------------------------------------------- 1 | error_js = ERREUR : Ce service requiert l'activation de JavaScript. Veuillez l'activer dans les paramètres de votre navigateur. 2 | error_webrtc = ERREUR : Ce service requiert la technologie WebRTC. Veuillez utiliser les navigateurs Mozilla Firefox ou Google Chrome; l'utilisation des dernières versions est vivement recommandée. 3 | error_no_config = ERREUR : La configuration de JsCommunicator est introuvable. 4 | error_ua_init_failure = ERREUR : Échec d'initialisation de l'agent utilisateur SIP. 5 | error_reg_fail = ERREUR : Échec de l'enregistrement SIP. 6 | error_call_attempt_failed = Échec de lancement de l'appel, veuillez vous assurer que vos webcam et micro sont connectés, vérifiez également les options de sécurité de votre navigateur. Il se peut que votre interlocuteur ne possède pas les codecs compatibles. 7 | error_dynamic = " " 8 | jsc_login_display_name = Nom (peut être vide) 9 | jsc_login_sip_uri = Adresse SIP 10 | jsc_login_password = Mot de passe 11 | jsc_login_button = Login 12 | ws_link = Adresse Websocket : 13 | ws_state_connected = connecté 14 | ws_state_disconnected = déconnecté 15 | sip_reg = Enregistrement SIP : 16 | sip_reg_up = Enregistré 17 | sip_reg_down = Non enregistré 18 | sip_dest_address = Destination 19 | session_state_outgoing = Numérotation… 20 | session_state_incoming = Appel entrant 21 | session_state_accepted = Réponse en cours, test de la connectivité en cours… 22 | session_state_active = Appel établi 23 | button_session_cancel = Annuler 24 | button_session_reject = Rejeter 25 | button_session_answer = Répondre 26 | button_call_audio = Appel (audio seulement) 27 | button_reg = Enregistrer 28 | button_dereg = Désenregistrer 29 | button_call_audio_video = Appel (audio et vidéo) 30 | button_session_answer_video = Répondre (avec vidéo) 31 | button_session_answer_hold = Décrocher 32 | button_session_answer_hang_up = Raccrocher 33 | button_video_control_self_view = Vidéo locale 34 | button_video_control_self_hide = Cacher la vidéo locale 35 | button_video_control_full_screen = Plein écran 36 | -------------------------------------------------------------------------------- /internationalization/Messages.properties: -------------------------------------------------------------------------------- 1 | error_js = ERROR: This service requires JavaScript. Please enable JavaScript in your web browser settings. 2 | error_webrtc = ERROR: This service requires WebRTC. Please try Mozilla Firefox or Google Chrome, using the latest version is strongly recommended. 3 | error_no_config = ERROR: JsCommunicator configuration not found. 4 | error_ua_init_failure = ERROR: Failed to initialize user agent. 5 | error_reg_fail = ERROR: SIP Registration failure. 6 | error_call_attempt_failed = ERROR: Failed to start call, check that microphone/webcam are connected, check browser security settings, peer may not support compatible codecs. 7 | error_dynamic = " " 8 | jsc_login_display_name = Display name (may be empty) 9 | jsc_login_sip_uri = SIP address 10 | jsc_login_password = Password 11 | jsc_login_button = Login 12 | ws_link = WebSocket link: 13 | ws_state_connected = Connected 14 | ws_state_disconnected = Disconnected 15 | sip_reg = SIP registration: 16 | sip_reg_up = Registered 17 | sip_reg_down = Not Registered 18 | sip_dest_address = Destination 19 | session_state_outgoing = Dialing ... 20 | session_state_incoming = Incoming call 21 | session_state_accepted = Answering, connectivity checks in progress ... 22 | session_state_active = Call connected 23 | button_session_cancel = Cancel 24 | button_session_reject = Reject 25 | button_session_answer = Answer 26 | button_call_audio = Call (audio only) 27 | button_reg = Register 28 | button_dereg = De-Register 29 | button_call_audio_video = Call (audio and video) 30 | button_session_answer_video = Answer (with video) 31 | button_session_answer_hold = Hold 32 | button_session_answer_hang_up = Hang-up 33 | button_video_control_self_view = Self view 34 | button_video_control_self_hide = Self hide 35 | button_video_control_full_screen = Full screen 36 | welcome = Welcome, 37 | call = Call 38 | chat = Chat 39 | enter_contact = Enter contact 40 | type_to_chat = type to chat... 41 | start_chat = start chat 42 | me = me 43 | logout = Logout 44 | no_contact = Please enter a contact. 45 | remember_me = Remember me -------------------------------------------------------------------------------- /internationalization/Messages_en.properties: -------------------------------------------------------------------------------- 1 | error_js = ERROR: This service requires JavaScript. Please enable JavaScript in your web browser settings. 2 | error_webrtc = ERROR: This service requires WebRTC. Please try Mozilla Firefox or Google Chrome, using the latest version is strongly recommended. 3 | error_no_config = ERROR: JsCommunicator configuration not found. 4 | error_ua_init_failure = ERROR: Failed to initialize user agent. 5 | error_reg_fail = ERROR: SIP Registration failure. 6 | error_call_attempt_failed = ERROR: Failed to start call, check that microphone/webcam are connected, check browser security settings, peer may not support compatible codecs. 7 | error_dynamic = " " 8 | jsc_login_display_name = Display name (may be empty) 9 | jsc_login_sip_uri = SIP address 10 | jsc_login_password = Password 11 | jsc_login_button = Login 12 | ws_link = WebSocket link: 13 | ws_state_connected = Connected 14 | ws_state_disconnected = Disconnected 15 | sip_reg = SIP registration: 16 | sip_reg_up = Registered 17 | sip_reg_down = Not Registered 18 | sip_dest_address = Destination 19 | session_state_outgoing = Dialing ... 20 | session_state_incoming = Incoming call 21 | session_state_accepted = Answering, connectivity checks in progress ... 22 | session_state_active = Call connected 23 | button_session_cancel = Cancel 24 | button_session_reject = Reject 25 | button_session_answer = Answer 26 | button_call_audio = Call (audio only) 27 | button_reg = Register 28 | button_dereg = De-Register 29 | button_call_audio_video = Call (audio and video) 30 | button_session_answer_video = Answer (with video) 31 | button_session_answer_hold = Hold 32 | button_session_answer_hang_up = Hang-up 33 | button_video_control_self_view = Self view 34 | button_video_control_self_hide = Self hide 35 | button_video_control_full_screen = Full screen 36 | welcome = Welcome, 37 | call = Call 38 | chat = Chat 39 | enter_contact = Enter contact 40 | type_to_chat = type to chat... 41 | start_chat = start chat 42 | me = me: 43 | logout = Logout 44 | no_contact = Please enter a contact. 45 | remember_me = Remember me -------------------------------------------------------------------------------- /internationalization/Messages_nb.properties: -------------------------------------------------------------------------------- 1 | error_js = FEIL: Denne tjenesten krever JavaScript. Vennligst slå på JavaScript-støtte i nettleseren din. 2 | error_webrtc = FEIL: Denne tjenesten krever WebRTC. Vennlist prøv Mozilla Firefox eller Google Chrome, nytt nyaste tilgjengelige utgave. 3 | error_no_config = FEIL: oppsettet til JsCommunicator ble ikke funnet. 4 | error_ua_init_failure = FEIL: Klarte ikke å klargjøre brukeragenten. 5 | error_reg_fail = FEIL: SIP Registrering feilet. 6 | error_call_attempt_failed = FEIL: Klarte ikke å starte samtale, sjekk at mikrofon/nettkamera er tilkoblet, sjekk nettleserens sikkerhetsinnstillinger, tjeneren støtter kanskje ikke passende kodek. 7 | error_dynamic = " " 8 | jsc_login_display_name = Visningsnavn (kan være tomt) 9 | jsc_login_sip_uri = SIP adresse 10 | jsc_login_password = Passord 11 | jsc_login_button = Logg inn 12 | ws_link = WebSocket lenke: 13 | ws_state_connected = Tilkoblet 14 | ws_state_disconnected = Koblet fra 15 | sip_reg = SIP registrering: 16 | sip_reg_up = Registrert 17 | sip_reg_down = Ikke registrert 18 | sip_dest_address = Mål 19 | session_state_outgoing = Ringer ... 20 | session_state_incoming = Innkommende anrop 21 | session_state_accepted = Svarer, sjekker forbindelsen ... 22 | session_state_active = Samtale tilkoblet 23 | button_session_cancel = Avbryt 24 | button_session_reject = Avvis 25 | button_session_answer = Svar 26 | button_call_audio = Ring (kun lyd) 27 | button_reg = Register 28 | button_dereg = Avregister 29 | button_call_audio_video = Ring (lyd og bilde) 30 | button_session_answer_video = Svar (med video) 31 | button_session_answer_hold = Hold 32 | button_session_answer_hang_up = Legg på 33 | button_video_control_self_view = Vis selvbilde 34 | button_video_control_self_hide = Gjem selvbilde 35 | button_video_control_full_screen = Fullskjerm 36 | welcome = Velkommen, 37 | call = Ring 38 | chat = Prat 39 | enter_contact = Oppgi kontakt 40 | type_to_chat = skriv for å prate... 41 | start_chat = start prat 42 | me = meg 43 | logout = Logg av 44 | no_contact = Vennligst oppgi en kontakt. 45 | remember_me = Husk meg 46 | -------------------------------------------------------------------------------- /internationalization/Messages_nn.properties: -------------------------------------------------------------------------------- 1 | error_js = FEIL: Denne tenesta treng JavaScript. Prøv å slå på JavaScript i nettlesarinnstillingane dine. 2 | error_webrtc = FEIL: This tenesta treng WebRTC. Prøv å bytt til anten Mozilla Firefox eller Google Chrome, bruk av den nyaste versjonen er tilrådd. 3 | error_no_config = FEIL: oppsettet til JsCommunicator vart ikkje funnet. 4 | error_ua_init_failure = FEIL: Klarte ikkje å klargjøra brukaragenten. 5 | error_reg_fail = FEIL: SIP registeringa feila. 6 | error_call_attempt_failed = FEIL: Klarte ikkje å starta samtale, sjekk at mikrofonen/nettkameraet er tilkopla, sjekk nettlesaren sine sikkerhetsoppsett, tenaren søtter kanskje ikkje passande kodek. 7 | error_dynamic = " " 8 | jsc_login_display_name = Visningsnamn (kan vera tomt) 9 | jsc_login_sip_uri = SIP adresse 10 | jsc_login_password = Passord 11 | jsc_login_button = Logg inn 12 | ws_link = WebSocket lenkja: 13 | ws_state_connected = Tilkobla 14 | ws_state_disconnected = Kobla fra 15 | sip_reg = SIP registrering: 16 | sip_reg_up = Registrert 17 | sip_reg_down = Ikkje registrert 18 | sip_dest_address = Mål 19 | session_state_outgoing = Ringer ... 20 | session_state_incoming = Innkommande samtale 21 | session_state_accepted = Svarar, sjekkar sambandet ... 22 | session_state_active = Samtale tilkoplet 23 | button_session_cancel = Avbryt 24 | button_session_reject = Avvis 25 | button_session_answer = Svar 26 | button_call_audio = Ring (kun ljod) 27 | button_reg = Register 28 | button_dereg = De-Register 29 | button_call_audio_video = Ring (ljod og billete) 30 | button_session_answer_video = Svar (med video) 31 | button_session_answer_hold = Hold 32 | button_session_answer_hang_up = Legg på 33 | button_video_control_self_view = Vis sjølvbilde 34 | button_video_control_self_hide = Skjul sjølvbilde 35 | button_video_control_full_screen = Fullskjerm 36 | welcome = Velkomen, 37 | call = Ring 38 | chat = Prat 39 | enter_contact = Skriv inn kontakt 40 | type_to_chat = type to chat... 41 | start_chat = start prat 42 | me = meg 43 | logout = Logg av 44 | no_contact = Prøv å skriva inn ein kontakt.. 45 | remember_me = Hugs meg 46 | -------------------------------------------------------------------------------- /internationalization/Messages_pl.properties: -------------------------------------------------------------------------------- 1 | error_js = ERROR: Ta usługa wymaga JavaScript. Proszę włączyć JavaScript w ustawieniach przeglądarki WWW. 2 | error_webrtc = ERROR: Ta usługa wymaga WebRTC. Spróbuj użyć Mozilli Firefox lub Google Chrome, rekomendowane są najnowsze wersje. 3 | error_no_config = ERROR: Konfiguracja JsCommunicator nie znaleziona. 4 | error_ua_init_failure = ERROR: Nie udało się zainicjalizować klienta. 5 | error_reg_fail = ERROR: Błąd rejestracji SIP. 6 | error_call_attempt_failed = ERROR: Nie udało się nawiązać połączenia, sprawdź czy mikrofon/kamera są podłączone, sprawdź ustawienia bezpieczeństwa przeglądarki, druga strona może nie wspierać twoihc kodeków. 7 | error_dynamic = " " 8 | jsc_login_display_name = Wyświetlana nazwa (może być puste) 9 | jsc_login_sip_uri = Adres SIP 10 | jsc_login_password = Hasło 11 | jsc_login_button = Login 12 | ws_link = Połączenie WebSocket: 13 | ws_state_connected = Połączono 14 | ws_state_disconnected = Rozłączono 15 | sip_reg = Rejestracja SIP: 16 | sip_reg_up = Zarejestrowano 17 | sip_reg_down = Nie zarejestrowano 18 | sip_dest_address = Adres docelowy 19 | session_state_outgoing = Wybieram ... 20 | session_state_incoming = Rozmowa przychodząca 21 | session_state_accepted = Odbieranie, sprawdzanie połączenia ... 22 | session_state_active = Nazwiązano połączenie 23 | button_session_cancel = Anuluj 24 | button_session_reject = Odrzuć 25 | button_session_answer = Odbierz 26 | button_call_audio = Zadzwoń (tylko audio) 27 | button_reg = Rejestracja 28 | button_dereg = Wyrejestrowanie 29 | button_call_audio_video = Zadzwoń (audio i video) 30 | button_session_answer_video = Odbierz (z video) 31 | button_session_answer_hold = Oczekiwanie 32 | button_session_answer_hang_up = Rozłacz 33 | button_video_control_self_view = Pokaż siebie 34 | button_video_control_self_hide = Schowaj siebie 35 | button_video_control_full_screen = Pełny ekran 36 | welcome = Witaj, 37 | call = Zadzwoń 38 | chat = Czat 39 | enter_contact = Wpisz kontakt 40 | type_to_chat = pisz... 41 | start_chat = zacznij czat 42 | me = ja: 43 | logout = Wyloguj 44 | no_contact = Prosze wpisać kontakt. 45 | remember_me = Zapamiętaj mnie 46 | -------------------------------------------------------------------------------- /internationalization/Messages_pt.properties: -------------------------------------------------------------------------------- 1 | error_js = ERRO: Esse serviço requer JavaScript. Por favor habilite JavaScript no seu navegador. 2 | error_webrtc = ERRO: Esse serviço requer WebRTC. Experimente usar Mozilla Firefox ou Google Chrome, recomendamos utilizar a versão mais recente. 3 | error_no_config = ERRO: Configuração JsCommunicator não encontrada. 4 | error_ua_init_failure = ERRO: Falha na inicialização do agente do utilizador. 5 | error_reg_fail = ERRO: Falha no registro SIP. 6 | error_call_attempt_failed = ERRO: Falha ao começar a chamada, verifique que o microfone/webcam estão conectados, verifique as definições de segurança do navegador, pode ser que um participante não possui codecs compatíveis. 7 | error_dynamic = " " 8 | jsc_login_display_name = Nome exibido (opcional) 9 | jsc_login_sip_uri = Endereço SIP 10 | jsc_login_password = Senha 11 | jsc_login_button = Login 12 | ws_link = Link WebSocket: 13 | ws_state_connected = Conectado 14 | ws_state_disconnected = Disconectado 15 | sip_reg = Registro SIP: 16 | sip_reg_up = Registrado 17 | sip_reg_down = Não Registrado 18 | sip_dest_address = Destino 19 | session_state_outgoing = Discando ... 20 | session_state_incoming = Chamada recebida 21 | session_state_accepted = Atendendo, verificando a conectividade ... 22 | session_state_active = Chamada conectada 23 | button_session_cancel = Cancelar 24 | button_session_reject = Rejeitar 25 | button_session_answer = Atender 26 | button_call_audio = Ligar (apenas audio) 27 | button_reg = Registrar 28 | button_dereg = Desregistrar 29 | button_call_audio_video = Ligar (audio e video) 30 | button_session_answer_video = Atender (com video) 31 | button_session_answer_hold = Em espera 32 | button_session_answer_hang_up = Desligar 33 | button_video_control_self_view = Visualizar video 34 | button_video_control_self_hide = Fechar video 35 | button_video_control_full_screen = Tela cheia 36 | welcome = Bem-vindo, 37 | call = Ligar 38 | chat = Chat 39 | enter_contact = Digite um contato 40 | type_to_chat = digite para enviar uma mensagem... 41 | start_chat = Iniciar chat 42 | me = eu: 43 | logout = Logout 44 | no_contact = Por favor digite um contato. 45 | remember_me = Salvar dados 46 | -------------------------------------------------------------------------------- /internationalization/Messages_bg.properties: -------------------------------------------------------------------------------- 1 | error_js = ГРЕШКА: Тази услуга изисква JavaScript. Моля активирайте JavaScript в настройките на Вашия браузър. 2 | error_webrtc = ГРЕШКА: Тази услуга изисква WebRTC. Моля опитайте с Mozilla Firefox или Google Chrome, използването на последна версия на браузъра е препорачително. 3 | error_no_config = ГРЕШКА: JsCommunicator конфигурация не е намерена. 4 | error_ua_init_failure = ГРЕШКА: Неуспешно стартиране на телефона. 5 | error_reg_fail = ГРЕШКА: Неуспешна SIP регистрация. 6 | error_call_attempt_failed = ГРЕШКА: Неуспешно обаждане, проверете дали микрофона и камерата са свързани, проверете настройките за сигурност на браузъра. Възможно е също другата страна да не поддържа съвместими кодеци. 7 | error_dynamic = " " 8 | jsc_login_display_name = Публично име (може да бъде празно) 9 | jsc_login_sip_uri = SIP адрес 10 | jsc_login_password = Парола 11 | jsc_login_button = Вход 12 | ws_link = WebSocket връзка: 13 | ws_state_connected = Свързан 14 | ws_state_disconnected = Несвързан 15 | sip_reg = SIP регистрация: 16 | sip_reg_up = Регистриран 17 | sip_reg_down = Нерегистриран 18 | sip_dest_address = Адрес на получателя 19 | session_state_outgoing = Набиране ... 20 | session_state_incoming = Входящо обаждане 21 | session_state_accepted = Обаждане, проверка на връзката ... 22 | session_state_active = Осъществено обаждане 23 | button_session_cancel = Затвори 24 | button_session_reject = Затвори 25 | button_session_answer = Обаждане 26 | button_call_audio = Обаждане (само глас) 27 | button_reg = Регистрация 28 | button_dereg = Отписване 29 | button_call_audio_video = Обаждане (аудио и видео) 30 | button_session_answer_video = Вдигни (с видео) 31 | button_session_answer_hold = Задръж 32 | button_session_answer_hang_up = Затвори 33 | button_video_control_self_view = Покажи себе си 34 | button_video_control_self_hide = Скрий себе си 35 | button_video_control_full_screen = Цял екран 36 | welcome = Добре дошли, 37 | call = Обаждане 38 | chat = Чат 39 | enter_contact = Въведете контакт 40 | type_to_chat = Въведете за започване на чат... 41 | start_chat = започни чат 42 | me = аз: 43 | logout = Изход 44 | no_contact = Моля въведете контакт. 45 | remember_me = Запомни ме -------------------------------------------------------------------------------- /phone-dev.shtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Testing 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /internationalization/Messages_nl.properties: -------------------------------------------------------------------------------- 1 | error_js = FOUT: Deze dienst vereist JavaScript. Zet alstublieft JavaScript aan in uw web browser instellingen. 2 | error_webrtc = FOUT: Deze dienst vereist WebRTC. Probeer alstublieft Mozilla Firefox of Google Chrome, het gebruik van de laatste versie is sterk aanbevolen. 3 | error_no_config = FOUT: JsCommunicator configuratie niet gevonden. 4 | error_ua_init_failure = FOUT: Mislukt om de useragent te initialiseren. 5 | error_reg_fail = FOUT: SIP registratie mislukt. 6 | error_call_attempt_failed = FOUT: Mislukt om een gesprek te starten, controleer of de microfoon en webcam aangesloten zijn, controleer de browser veiligheidsinstellingen, deelnemer ondersteund misschient niet een compatibele codecs. 7 | error_dynamic = " " 8 | jsc_login_display_name = Weergave naam (mag leeg zijn) 9 | jsc_login_sip_uri = SIP-adres 10 | jsc_login_password = Wachtwoord 11 | jsc_login_button = Login 12 | ws_link = WebSocket link: 13 | ws_state_connected = Verbonden 14 | ws_state_disconnected = Niet verbonden 15 | sip_reg = SIP registratie: 16 | sip_reg_up = Registereerd 17 | sip_reg_down = Niet registereerd 18 | sip_dest_address = Bestemming 19 | session_state_outgoing = Bellen ... 20 | session_state_incoming = Inkomend gesprek 21 | session_state_accepted = Bezig met beantwoorden, connectiviteitstest is bezig ... 22 | session_state_active = Gesprek verbonden 23 | button_session_cancel = Annuleer 24 | button_session_reject = Weigeren 25 | button_session_answer = Aannemen 26 | button_call_audio = Bel (alleen geluid) 27 | button_reg = Registreer 28 | button_dereg = Afmelden 29 | button_call_audio_video = Bel (beeld en geluid) 30 | button_session_answer_video = Aannemen (met beeld) 31 | button_session_answer_hold = Wachtstand 32 | button_session_answer_hang_up = Ophangen 33 | button_video_control_self_view = Zelf tonen 34 | button_video_control_self_hide = Zelf verbergen 35 | button_video_control_full_screen = Volledig scherm 36 | welcome = Welkom, 37 | call = Bel 38 | chat = Chat 39 | enter_contact = Voer contactpersoon in 40 | type_to_chat = Type om te chatten... 41 | start_chat = start chat 42 | me = ik: 43 | logout = Uitloggen 44 | no_contact = Voer een contactpersoon in. 45 | remember_me = Herriner mij 46 | -------------------------------------------------------------------------------- /internationalization/Messages_ru.properties: -------------------------------------------------------------------------------- 1 | error_js = ОШИБКА: Для работы сервиса требуется JavaScript. Включите JavaScript в настройках вашего браузера. 2 | error_webrtc = ОШИБКА: Для работы сервиса требуется WebRTC. Попробуйте Mozilla Firefox или Google Chrome, настоятельно рекомендуется использовать самую последнюю версию. 3 | error_no_config = ОШИБКА: Настройки JsCommunicator не найдены. 4 | error_ua_init_failure = ОШИБКА: Не удалось инициализировать пользовательский агент. 5 | error_reg_fail = ОШИБКА: Проблема с регистрацией SIP. 6 | error_call_attempt_failed = ОШИБКА: Не удалось начать звонок, проверьте подключение микрофона/вебкамеры, проверьте настройки безопасности вашего браузера, возможно, второй узел не поддерживает совместимые кодеки. 7 | error_dynamic = " " 8 | jsc_login_display_name = Отображаемое имя (может быть пустым) 9 | jsc_login_sip_uri = SIP-адрес 10 | jsc_login_password = Пароль 11 | jsc_login_button = Логин 12 | ws_link = Ссылка на WebSocket: 13 | ws_state_connected = Подключён 14 | ws_state_disconnected = Отключён 15 | sip_reg = Регистрация SIP: 16 | sip_reg_up = Зарегистрирован 17 | sip_reg_down = Не зарегистрирован 18 | sip_dest_address = Абонентский номер 19 | session_state_outgoing = Звоним ... 20 | session_state_incoming = Входящий звонок 21 | session_state_accepted = Отвечаем, проводится проверка подключения ... 22 | session_state_active = Звонок подключён 23 | button_session_cancel = Отмена 24 | button_session_reject = Отклонить 25 | button_session_answer = Ответить 26 | button_call_audio = Вызов (только аудио) 27 | button_reg = Зарегистрироваться 28 | button_dereg = Отменить регистрацию 29 | button_call_audio_video = Вызов (аудио и видео) 30 | button_session_answer_video = Ответить (с видео) 31 | button_session_answer_hold = Пауза 32 | button_session_answer_hang_up = Повесить трубку 33 | button_video_control_self_view = Показать себя 34 | button_video_control_self_hide = Скрыть себя 35 | button_video_control_full_screen = Полный экран 36 | welcome = Добро пожаловать, 37 | call = Вызов 38 | chat = Чат 39 | enter_contact = Введите контактную информацию 40 | type_to_chat = введите сообщение... 41 | start_chat = начать чат 42 | me = я: 43 | logout = Выйти 44 | no_contact = Пожалуйста, введите контактную информацию. 45 | remember_me = Запомнить меня 46 | -------------------------------------------------------------------------------- /internationalization/Messages_sk.properties: -------------------------------------------------------------------------------- 1 | error_js = CHYBA: Táto služba vyžaduje JavaScript. Prosím, zapnite si JavaScript v nastaveniach svojho webového prehliadača. 2 | error_webrtc = CHYBA: Táto služba vyžaduje WebRTC. Prosím, skúste Mozilla Firefox alebo Google Chrome. Dôrazne odporúčame používať ich najnovšiu verziu. 3 | error_no_config = CHYBA: Konfiguácia JsCommunicator nebola nájdená. 4 | error_ua_init_failure = CHYBA: Nepodarilo sa inicializovať klienta. 5 | error_reg_fail = CHYBA: Chyba registrácie SIP. 6 | error_call_attempt_failed = CHYBA: Nepodarilo sa spustiť hovor. Skontrolujte, či je váš mikrofón alebo webová kamera zapojená. Skontrolujte nastavenia zabezpečenia v prehliadači. Je tiež možné, že účastník, s ktorým sa snažíte spojiť nepodporuje kompatibilné kodeky. 7 | error_dynamic = " " 8 | jsc_login_display_name = Zobrazené meno (môže byť prázdne) 9 | jsc_login_sip_uri = Adresa SIP 10 | jsc_login_password = Heslo 11 | jsc_login_button = Prihlasovacie meno 12 | ws_link = Odkaz WebSocket: 13 | ws_state_connected = Spojené 14 | ws_state_disconnected = Odpojené 15 | sip_reg = Registrácia SIP: 16 | sip_reg_up = Zaregistrované 17 | sip_reg_down = Nezaregistrované 18 | sip_dest_address = Cieľ 19 | session_state_outgoing = Prebieha vytáčanie ... 20 | session_state_incoming = Prichádzajúci hovor 21 | session_state_accepted = Prijíma sa hovor, prebieha kontrola spojenia ... 22 | session_state_active = Hovor spojený 23 | button_session_cancel = Zrušiť 24 | button_session_reject = Odmietnuť 25 | button_session_answer = Odpovedať 26 | button_call_audio = Volať (iba zvuk) 27 | button_reg = Zaregistrovať 28 | button_dereg = Odregistrovať 29 | button_call_audio_video = Volať (zvuk a video) 30 | button_session_answer_video = Odpovedať (s videom) 31 | button_session_answer_hold = Podržať 32 | button_session_answer_hang_up = Zavesiť 33 | button_video_control_self_view = Zobraziť seba 34 | button_video_control_self_hide = Skryť seba 35 | button_video_control_full_screen = Celoobrazovkový režim 36 | welcome = Vitajte, 37 | call = Volať 38 | chat = Četovať 39 | enter_contact = Zadajte kontakt 40 | type_to_chat = tu môžete četovať... 41 | start_chat = spustiť četovanie 42 | me = ja 43 | logout = Odhlásiť sa 44 | no_contact = prosím, zadajte kontakt. 45 | remember_me = Zapamätať si ma 46 | -------------------------------------------------------------------------------- /internationalization/Messages_de.properties: -------------------------------------------------------------------------------- 1 | error_js = FEHLER: Dieser Dienst erfordert JavaScript. Bitte aktivieren Sie JavaScript in Ihren Browsereinstellungen. 2 | error_webrtc = FEHLER: Dieser Dienst erfordert WebRTC. Bitte versuchen Sie es mit Mozilla Firefox oder Google Chrome. Es wird empfohlen, die jeweils neueste Version zu verwenden. 3 | error_no_config = FEHLER: JsCommunicator-Konfiguration wurde nicht gefunden. 4 | error_ua_init_failure = FEHLER: Der User-Agent konnte nicht initialisiert werden. 5 | error_reg_fail = FEHLER: SIP-Registrierung fehlgeschlagen. 6 | error_call_attempt_failed = FEHLER: Start des Anrufs fehlgeschlagen. Stellen Sie sicher, dass Mikrofon und Webcam verbunden sind und prüfen Sie die Browsereinstellungen. Eventuell unterstützt Ihr Gegenüber auch die erforderlichen Codecs nicht. 7 | error_dynamic = " " 8 | jsc_login_display_name = Angezeigter Name (kann leer sein) 9 | jsc_login_sip_uri = SIP-Adresse 10 | jsc_login_password = Passwort 11 | jsc_login_button = Login 12 | ws_link = WebSocket-Link: 13 | ws_state_connected = Verbunden 14 | ws_state_disconnected = Nicht verbunden 15 | sip_reg = SIP-Registrierung: 16 | sip_reg_up = Registriert 17 | sip_reg_down = Nicht registriert 18 | sip_dest_address = Ziel 19 | session_state_outgoing = Wähle ... 20 | session_state_incoming = Eingehender Anruf 21 | session_state_accepted = Antworte, prüfe Verbindung ... 22 | session_state_active = Anrufer verbunden 23 | button_session_cancel = Abbrechen 24 | button_session_reject = Abweisen 25 | button_session_answer = Antworten 26 | button_call_audio = Anrufen (nur Ton) 27 | button_reg = Registrieren 28 | button_dereg = Deregistrieren 29 | button_call_audio_video = Anrufen (Bild und Ton) 30 | button_session_answer_video = Antworten (mit Bild) 31 | button_session_answer_hold = Halten 32 | button_session_answer_hang_up = Auflegen 33 | button_video_control_self_view = Selbstansicht 34 | button_video_control_self_hide = Selbstansicht verstecken 35 | button_video_control_full_screen = Vollbild 36 | welcome = Willkommen, 37 | call = Anrufen 38 | chat = Chat 39 | enter_contact = Kontakt eingeben 40 | type_to_chat = tippen zum chatten... 41 | start_chat = Chat beginnen 42 | me = ich: 43 | logout = Ausloggen 44 | no_contact = Bitte einen Kontakt eingeben. 45 | remember_me = Angemeldet bleiben 46 | -------------------------------------------------------------------------------- /internationalization/Messages_es.properties: -------------------------------------------------------------------------------- 1 | error_js = ERROR: este servicio requiere JavaScript. Habilite JavaScript en las opciones de su navegador. 2 | error_webrtc = ERROR: Este servicio requiere WebRTC. Utilice el siguiente enlace, Mozilla Firefox o Google Chrome, es recomendable utilizar la versión más reciente. 3 | error_no_config = ERROR: No se encontró la configuración de JsCommunicator. 4 | error_ua_init_failure = ERROR: Fallo durante la inicialización del agente. 5 | error_reg_fail = ERROR: Fallo durante la registración SIP. 6 | error_call_attempt_failed = ERROR: No se pudo iniciar la llamada. Verifique si el micrófono y/o la cámara están conectados y verifique las opciones de seguridad de su navegador. Es posible que no compartan codecs con el otro usuario. 7 | error_dynamic = " " 8 | jsc_login_display_name = Nombre (opcional) 9 | jsc_login_sip_uri = Dirección SIP 10 | jsc_login_password = Contraseña 11 | jsc_login_button = Iniciar sesión 12 | ws_link = Enlace WebSocket: 13 | ws_state_connected = Conectado 14 | ws_state_disconnected = Desconectado 15 | sip_reg = Registro SIP: 16 | sip_reg_up = Registrado 17 | sip_reg_down = No Registrado 18 | sip_dest_address = Destino 19 | session_state_outgoing = Marcando ... 20 | session_state_incoming = Llamada entrante 21 | session_state_accepted = Conectando, verificaciones de conectividad en progreso ... 22 | session_state_active = Llamada conectada 23 | button_session_cancel = Cancelar 24 | button_session_reject = Rechazar 25 | button_session_answer = Contestar 26 | button_call_audio = Llamar (sólo audio) 27 | button_reg = Registrar 28 | button_dereg = Cancelar el registro 29 | button_call_audio_video = Llamar (audio y video) 30 | button_session_answer_video = Contestar (con video) 31 | button_session_answer_hold = Llamada en espera 32 | button_session_answer_hang_up = Terminar la llamada 33 | button_video_control_self_view = Vista (propia) 34 | button_video_control_self_hide = Ocultar (propia) 35 | button_video_control_full_screen = Pantalla completa 36 | welcome = Bienvenido, 37 | call = Llamada 38 | chat = Conversar 39 | enter_contact = Introduce el contacto 40 | type_to_chat = escribe para hablar... 41 | start_chat = empezar conversación 42 | me = yo: 43 | logout = Salir 44 | no_contact = Por favor, introduce un contacto. 45 | remember_me = Recuérdame 46 | -------------------------------------------------------------------------------- /event-demo.shtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Testing 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 46 | 47 | 48 | 53 | 54 |
55 | 56 | 57 |
TimeEventData
58 |
59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /INTERNATIONALIZATION_README.txt: -------------------------------------------------------------------------------- 1 | 2 | How to add internationalization options 3 | ------------------------------------------------ 4 | 5 | The jQuery i18n plugin is used to provide internationalization. 6 | see https://code.google.com/p/jquery-i18n-properties/ for more info. 7 | 8 | To add a language option, create a ‘.properties’ file in the internationalization directory in the following format: Messages_[language code of choice].properties 9 | Example: Messages_fr.properties for French. 10 | 11 | Copy the content of the default .properties file (Messages.properties) into your new .properties file. The file will have a series of key-value pairs; leave the left side as is and add your translation on the right side. 12 | Example: 13 | (in Messages.properties) jsc_login_display_name = Display name (may be empty) 14 | (in Messages_fr.properties) jsc_login_display_name = Nom (peut être vide) 15 | 16 | Add a language element to the available_languages.xml with the name to be displayed and language code. 17 | Example: 18 | 19 | French 20 | fr 21 | 22 | 23 | Voila! 24 | 25 | Behind the scenes 26 | ------------------------------------------------ 27 | 28 | jQUery i18n will automatically load the .properties file according to the language preference of your browser (if that file exists in the internationalization directory). If a .properties file for you preferred language doesn’t exist, it will default to Messages.properties which is in English. 29 | 30 | The available_languages.xml is used to load the language selection drop down menu. If you added a language to the .xml which does not exist in the .properties file, it will default to English. Same goes for any mistakes in the element. jQuery will look for a file Messages_[content of ].properties so make sure the name is correct. 31 | 32 | 33 | Dependencies 34 | ------------------------------------------------ 35 | 36 | jquery.i18n.properties-1.0.9.js (see https://code.google.com/p/jquery-i18n-properties/) 37 | 38 | 39 | Observed bugs 40 | ------------------------------------------------ 41 | 42 | It is recommended to consult the HTML language code (reference http://www.w3schools.com/tags/ref_language_codes.asp). Theoretically, you can invent your own code, and (provided the code in available_languages.xml corresponds to the name of the .properties file) the select language menu will work. However, the page will not load automatically with the browser language preference (as this uses the HTML language code. 43 | 44 | In addition, different browsers may use different variations of code. For example: ‘en’ and ‘en_US’. To work around this, feel free to make multiple versions of your translation (example: Messages_en.properties and Messages_en_US.properties). Of course, you only need to add one to the available_languages.xml. 45 | 46 | I think that’s it. -------------------------------------------------------------------------------- /event-demo.js: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2014-2015 Daniel Pocock http://danielpocock.com 6 | Copyright (C) 2014 Juliana Louback http://julianalouback.com 7 | 8 | The JavaScript code in this page is free software: you can 9 | redistribute it and/or modify it under the terms of the GNU 10 | General Public License (GNU GPL) as published by the Free Software 11 | Foundation, either version 2 of the License, or (at your option) 12 | any later version. The code is distributed WITHOUT ANY WARRANTY; 13 | without even the implied warranty of MERCHANTABILITY or FITNESS 14 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 15 | 16 | You may distribute non-source (e.g., minimized or compacted) forms of 17 | that code without the full copy of the GNU GPL normally required 18 | provided you include this license notice and a URL 19 | through which recipients can access the Corresponding Source. 20 | ****************************************************************************/ 21 | 22 | (function($) { 23 | 24 | $(document).ready(function() { 25 | 26 | $("#contact-directory").change(function() { 27 | // Get the selected value (SIP destination) 28 | var dest = $( this ).val(); 29 | Arbiter.publish("jsc/destination/set", dest); 30 | }); 31 | 32 | var logEvent = function(event_name, data) { 33 | var now = new Date().toLocaleTimeString(); 34 | if(data.length > 1) { 35 | data = "",data,""); 36 | } 37 | $("#event-demo-log").append("" + now + "" + event_name + "" + data + ""); 38 | }; 39 | 40 | Arbiter.subscribe( 41 | [ "jsc/*", "jsc/*/*" ], 42 | { async:true }, 43 | function(data, m) { 44 | console.log("Got a message: " + m); 45 | if(m == "jsc/call/incoming") { 46 | // Somebody is calling 47 | // This is where we may invoke some code to look up the 48 | // caller's full profile (e.g. name, department, company) 49 | // in an address book, a CRM system or some other database 50 | var caller_uri = data; 51 | console.log("Incoming call notification, caller = " + caller_uri); 52 | logEvent(m, caller_uri); 53 | } else if (data) { 54 | logEvent(m, data); 55 | } else { 56 | logEvent(m, "-"); 57 | } 58 | 59 | // Here we use the idle/incall events to make the pull-down menu 60 | // accessible only when we are not in a call 61 | if(m == "jsc/ua/idle") { 62 | $("#contact-directory").removeProp("disabled"); 63 | } else if(m == "jsc/ua/incall" || m == "jsc/ua/notready") { 64 | $("#contact-directory").prop("disabled", true); 65 | } 66 | } 67 | ); 68 | 69 | }); 70 | 71 | })(jQuery); 72 | 73 | -------------------------------------------------------------------------------- /jssip-helper.js: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | JSCommunicator 3 | http://jscommunicator.org 4 | 5 | Copyright (C) 2013-2015 Daniel Pocock http://danielpocock.com 6 | 7 | The JavaScript code in this page is free software: you can 8 | redistribute it and/or modify it under the terms of the GNU 9 | General Public License (GNU GPL) as published by the Free Software 10 | Foundation, either version 2 of the License, or (at your option) 11 | any later version. The code is distributed WITHOUT ANY WARRANTY; 12 | without even the implied warranty of MERCHANTABILITY or FITNESS 13 | FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 14 | 15 | You may distribute non-source (e.g., minimized or compacted) forms of 16 | that code without the full copy of the GNU GPL normally required 17 | provided you include this license notice and a URL 18 | through which recipients can access the Corresponding Source. 19 | ****************************************************************************/ 20 | 21 | // Reads JsCommunicator settings and creates JsSIP configuration object 22 | function getJsSIPSettings(settings) { 23 | 24 | // JsSIP currently expects usernames in the turn_servers array 25 | // to be URI encoded (e.g. the @ symbol replaced by %40) 26 | // so we do the encoding here 27 | // Eventually this might change in JsSIP and then this code can 28 | // be removed 29 | var turn_servers = settings.turn_servers; 30 | var encoded_turn_servers = []; 31 | if(Object.prototype.toString.call(turn_servers) === '[object Array]') { 32 | for(var i = 0; i < turn_servers.length; i++) { 33 | encoded_turn_servers[i] = {}; 34 | encoded_turn_servers[i].urls = turn_servers[i].server; 35 | encoded_turn_servers[i].username = turn_servers[i].username; 36 | encoded_turn_servers[i].password = turn_servers[i].password; 37 | } 38 | } else { 39 | encoded_turn_servers[0].urls = turn_servers.server; 40 | encoded_turn_servers[0].username = turn_servers.username; 41 | encoded_turn_servers[0].password = turn_servers.password; 42 | } 43 | 44 | var jssip_settings = { 45 | uri: settings.user.uri, 46 | password: settings.user.sip_auth_password, 47 | ws_servers: settings.websocket.servers, 48 | sockets: [ new JsSIP.WebSocketInterface(settings.websocket.servers) ], 49 | display_name: settings.user.display_name, 50 | authorization_user: settings.user.sip_auth_user, 51 | register: settings.registration.on_startup, 52 | register_expires: settings.registration.expiry, 53 | registrar_server: settings.registration.server, 54 | no_answer_timeout: settings.dialing.no_answer_timeout, 55 | trace_sip: true, 56 | stun_servers: settings.stun_servers, 57 | turn_servers: encoded_turn_servers, 58 | use_preloaded_route: false, 59 | connection_recovery_min_interval: settings.websocket.connection_recovery_min_interval, 60 | connection_recovery_max_interval: settings.websocket.connection_recovery_max_interval, 61 | hack_via_tcp: false, 62 | hack_ip_in_contact: false, 63 | log: { level: "debug" } 64 | }; 65 | 66 | return jssip_settings; 67 | 68 | }; 69 | 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Introduction 3 | ------------ 4 | 5 | JSCommunicator is a WebRTC communication tool developed in HTML, CSS 6 | and JavaScript. It supports voice, video and chat messaging using the 7 | SIP protocol over WebSockets. 8 | 9 | Please see http://jscommunicator.org for more details about features, 10 | examples, mailing lists and the latest source code. 11 | 12 | Server requirements 13 | ------------------- 14 | 15 | To use JSCommunicator, you require a SIP proxy that supports the 16 | SIP over WebSockets transport. 17 | 18 | Only recent versions of the SIP proxies support WebSockets. 19 | 20 | repro from reSIProcate 21 | http://www.resiprocate.org 22 | 23 | Kamailio 24 | http://www.kamailio.org 25 | 26 | See the [Real-Time Communication Quick Start Guide](http://rtcquickstart.org) 27 | for details about setting up a SIP and TURN server to support WebRTC 28 | calls. 29 | 30 | Dependencies 31 | ------------ 32 | 33 | You need to have the following JavaScript libraries available in your 34 | web server or CMS: 35 | 36 | JsSIP 37 | The latest code on the JSCommunicator master branch works with 38 | JsSIP version 0.6.x 39 | 40 | jQuery (v1.4 or greater has been tested) 41 | 42 | jQuery UI 43 | 44 | jQuery.i18n.properties 45 | 46 | ArbiterJS (v1.0 has been tested) 47 | 48 | Font Awesome (v4.1 or greater has been tested, earlier versions 49 | do not work) 50 | 51 | All dependencies can be easily fetched using either of the following 52 | methods: 53 | 54 | * on a Debian/Ubuntu system, use the "deb-setup.sh" script 55 | 56 | * on other systems, see the "code_grabber" script 57 | 58 | Getting started 59 | --------------- 60 | 61 | For integration in static or dynamically generated web sites, frameworks 62 | and Content Management Systems, please see INTEGRATION.md 63 | 64 | Use cases 65 | --------- 66 | 67 | * Standalone: 68 | - include the HTML fragment into a static HTML page, 69 | possibly using Server Side Includes (SSI). Make sure the 70 | page references all the required JavaScript source files. 71 | 72 | * In a CMS, wiki or other publishing platform: 73 | - include the HTML fragment into a block in a page 74 | managed by a CMS. Configure the CMS to send the JavaScript to 75 | the user or include