drucall/ 0000755 0014122 0014122 00000000000 12516723313 011761 5 ustar bender bender drucall/COPYING 0000644 0014122 0014122 00000001423 12460266406 013017 0 ustar bender bender DruCall - WebRTC module for Drupal Copyright (C) 2013 Daniel Pocock http://danielpocock.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. (gpl-2.txt) You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. drucall/drucall.module 0000644 0014122 0014122 00000013407 12460266406 014626 0 ustar bender bender 'DruCall', 'page callback' => 'drucall_call', 'access callback' => TRUE, 'expanded' => TRUE, ); $items['admin/config/drucall'] = array( 'title' => 'DruCall WebRTC', 'description' => 'Configure DruCall.', 'position' => 'right', 'weight' => -15, 'page callback' => 'system_admin_menu_block_page', 'access arguments' => array('administer drucall'), 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), ); $items['admin/config/drucall/settings'] = array( 'title' => 'Settings', 'description' => 'Administer DruCall server settings.', 'weight' => 0, 'page callback' => 'drupal_get_form', 'page arguments' => array('drucall_admin'), 'access arguments' => array('administer drucall'), 'type' => MENU_LOCAL_TASK | MENU_NORMAL_ITEM, 'file' => 'drucall.admin.inc', ); return $items; } function drucall_theme() { return array( 'drucall_phone' => array( 'render element' => 'element', 'template' => 'drucall-phone', ), ); } function drucall_call() { global $language; global $user; // Make sure the necessary jQuery UI components are available on // the page, Drupal loads core jQuery automatically but not jQuery UI drupal_add_library('system', 'ui.draggable'); drupal_add_library('system', 'ui.resizable'); // We use the `libraries' module to load javascript dependencies: foreach ([ "jssip", "jscommunicator", "arbiterjs", "jqueryi18nproperties", "fontawesome" ] as $libname) { if (!($library = libraries_detect($libname))) { $error = "failed to load an essential component"; $error_msg = "failed to load $libname - please install it (check the DruCall instructions)"; } if($library && empty($library['installed'])) { $error = $library['error']; $error_msg = $library['error message']; } if(isset($error)) { drupal_set_message($error_msg, $error, FALSE); return $error; } libraries_load($libname); } $caller_domain = variable_get('sip_domain'); $display_name = ''; $caller_uri = ''; $caller_auth_user = ''; $caller_password = ''; $sip_register = FALSE; if($user->uid != 0 && !empty($caller_domain)) { // A user is logged in $display_name = $user->name; // FIXME: should check that Drupal username is valid for SIP $caller_uri = 'sip:' . $user->name . '@' . $caller_domain; $sip_register = TRUE; } else { // Guest user $display_name = variable_get('display_name'); $caller_uri = variable_get('from_uri'); $caller_auth_user = variable_get('auth_user'); $caller_password = variable_get('auth_password'); } $ws_cookie_secret = variable_get('ws_cookie_secret'); $websocket_server_url = variable_get('websocket_server_url'); $ws_cookies_in_url = variable_get('ws_cookies_in_url'); if(!empty($ws_cookie_secret)) { $ws_cookie_timeout = variable_get('ws_cookie_timeout'); // seconds $sip_from = explode(':', $caller_uri)[1]; $sip_to = '*@*'; $ws_cookie_domain = variable_get('ws_cookie_domain'); $ws_url = parse_url($websocket_server_url); if(empty($ws_cookie_domain)) { $ws_cookie_domain = $ws_url['host']; } $time_limit = REQUEST_TIME + $ws_cookie_timeout; // seconds $cookie_value = '1:' . REQUEST_TIME . ':' . $time_limit . ':' . $sip_from . ':' . $sip_to; $cookie_value_encoded = urlencode($cookie_value); $extra_value = ''; // TODO - a shopping cart ID, // order ID, customer ID or some other value // Example sending the Drupal session ID through SIP if(!empty($user->ssid)) $extra_value = 'drupal:ssid:' . $user->ssid; else $extra_value = 'drupal:sid:' . $user->sid; $extra_value_encoded = urlencode($extra_value); $digest_input = $cookie_value . ':' . $extra_value; $cookie_mac = hash_hmac ('sha1', $digest_input, $ws_cookie_secret); setrawcookie("WSSessionInfo", $cookie_value_encoded, $time_limit, '/', $ws_cookie_domain); setrawcookie("WSSessionExtra", $extra_value_encoded, $time_limit, '/', $ws_cookie_domain); setrawcookie("WSSessionMAC", $cookie_mac, $time_limit, '/', $ws_cookie_domain); if($ws_cookies_in_url) { if(empty($ws_url['path'])) $websocket_server_url = $websocket_server_url . '/'; $websocket_server_url = $websocket_server_url . ';WSSessionInfo=' . $cookie_value_encoded . ';WSSessionExtra=' . $extra_value_encoded . ';WSSessionMAC=' . $cookie_mac; } } $my_settings = array( 'mod_path' => drupal_get_path('module', 'drucall'), 'phone_number' => variable_get('default_destination'), 'enable_audio' => variable_get('enable_audio'), 'enable_video' => variable_get('enable_video'), 'enable_chat' => variable_get('enable_chat'), 'enable_dtmf_pad' => variable_get('enable_dtmf_pad'), 'display_name' => $display_name, 'impi' => $caller_auth_user, 'impu' => $caller_uri, 'password' => $caller_password, 'realm' => variable_get('auth_realm'), 'websocket_server_url' => $websocket_server_url, 'sip_outboundproxy_url' => variable_get('sip_outboundproxy_url'), 'turn_server_url' => variable_get('turn_server_url'), 'turn_username' => variable_get('turn_username'), 'turn_password' => variable_get('turn_password'), 'language_code' => $language->language, 'sip_register' => $sip_register, 'extra_header_value' => $extra_value, ); drupal_add_js( array('drucall' => $my_settings), 'setting'); drupal_add_js(drupal_get_path('module', 'drucall') . '/js/drucall.js'); drupal_add_css(drupal_get_path('module', 'drucall') . '/css/jscommunicator.css', array('group' => CSS_DEFAULT, 'type' => 'file')); return theme('drucall_phone'); } drucall/internationalization/ 0000755 0014122 0014122 00000000000 12460266406 016231 5 ustar bender bender drucall/internationalization/Messages_fr.properties 0000644 0014122 0014122 00000003736 12460266406 022616 0 ustar bender bender error_js = ERREUR : Ce service requiert l'activation de JavaScript. Veuillez l'activer dans les paramètres de votre navigateur. 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. error_no_config = ERREUR : La configuration de JsCommunicator est introuvable. error_ua_init_failure = ERREUR : Échec d'initialisation de l'agent utilisateur SIP. error_reg_fail = ERREUR : Échec de l'enregistrement SIP. 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. error_dynamic = " " jsc_login_display_name = Nom (peut être vide) jsc_login_sip_uri = Adresse SIP jsc_login_password = Mot de passe jsc_login_button = Login ws_link = Adresse Websocket : ws_state_connected = connecté ws_state_disconnected = déconnecté sip_reg = Enregistrement SIP : sip_reg_up = Enregistré sip_reg_down = Non enregistré sip_dest_address = Destination session_state_outgoing = Numérotation… session_state_incoming = Appel entrant session_state_accepted = Réponse en cours, test de la connectivité en cours… session_state_active = Appel établi button_session_cancel = Annuler button_session_reject = Rejeter button_session_answer = Répondre button_call_audio = Appel (audio seulement) button_reg = Enregistrer button_dereg = Désenregistrer button_call_audio_video = Appel (audio et vidéo) button_session_answer_video = Répondre (avec vidéo) button_session_answer_hold = Décrocher button_session_answer_hang_up = Raccrocher button_video_control_self_view = Vidéo locale button_video_control_self_hide = Cacher la vidéo locale button_video_control_full_screen = Plein écran drucall/internationalization/Messages_pt.properties 0000644 0014122 0014122 00000004015 12460266406 022621 0 ustar bender bender error_js = ERRO: Esse serviço requer JavaScript. Por favor habilite JavaScript no seu navegador. error_webrtc = ERRO: Esse serviço requer WebRTC. Experimente usar Mozilla Firefox ou Google Chrome, recomendamos utilizar a versão mais recente. error_no_config = ERRO: Configuração JsCommunicator não encontrada. error_ua_init_failure = ERRO: Falha na inicialização do agente do utilizador. error_reg_fail = ERRO: Falha no registro SIP. 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. error_dynamic = " " jsc_login_display_name = Nome exibido (opcional) jsc_login_sip_uri = Endereço SIP jsc_login_password = Senha jsc_login_button = Login ws_link = Link WebSocket: ws_state_connected = Conectado ws_state_disconnected = Disconectado sip_reg = Registro SIP: sip_reg_up = Registrado sip_reg_down = Não Registrado sip_dest_address = Destino session_state_outgoing = Discando ... session_state_incoming = Chamada recebida session_state_accepted = Atendendo, verificando a conectividade ... session_state_active = Chamada conectada button_session_cancel = Cancelar button_session_reject = Rejeitar button_session_answer = Atender button_call_audio = Ligar (apenas audio) button_reg = Registrar button_dereg = Desregistrar button_call_audio_video = Ligar (audio e video) button_session_answer_video = Atender (com video) button_session_answer_hold = Em espera button_session_answer_hang_up = Desligar button_video_control_self_view = Visualizar video button_video_control_self_hide = Fechar video button_video_control_full_screen = Tela cheia welcome = Bem-vindo, call = Ligar chat = Chat enter_contact = Digite um contato type_to_chat = digite para enviar uma mensagem... start_chat = Iniciar chat me = eu: logout = Logout no_contact = Por favor digite um contato. remember_me = Salvar dados drucall/internationalization/Messages_pl.properties 0000644 0014122 0014122 00000004030 12460266406 022606 0 ustar bender bender error_js = ERROR: Ta usługa wymaga JavaScript. Proszę włączyć JavaScript w ustawieniach przeglądarki WWW. error_webrtc = ERROR: Ta usługa wymaga WebRTC. Spróbuj użyć Mozilli Firefox lub Google Chrome, rekomendowane są najnowsze wersje. error_no_config = ERROR: Konfiguracja JsCommunicator nie znaleziona. error_ua_init_failure = ERROR: Nie udało się zainicjalizować klienta. error_reg_fail = ERROR: Błąd rejestracji SIP. 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. error_dynamic = " " jsc_login_display_name = Wyświetlana nazwa (może być puste) jsc_login_sip_uri = Adres SIP jsc_login_password = Hasło jsc_login_button = Login ws_link = Połączenie WebSocket: ws_state_connected = Połączono ws_state_disconnected = Rozłączono sip_reg = Rejestracja SIP: sip_reg_up = Zarejestrowano sip_reg_down = Nie zarejestrowano sip_dest_address = Adres docelowy session_state_outgoing = Wybieram ... session_state_incoming = Rozmowa przychodząca session_state_accepted = Odbieranie, sprawdzanie połączenia ... session_state_active = Nazwiązano połączenie button_session_cancel = Anuluj button_session_reject = Odrzuć button_session_answer = Odbierz button_call_audio = Zadzwoń (tylko audio) button_reg = Rejestracja button_dereg = Wyrejestrowanie button_call_audio_video = Zadzwoń (audio i video) button_session_answer_video = Odbierz (z video) button_session_answer_hold = Oczekiwanie button_session_answer_hang_up = Rozłacz button_video_control_self_view = Pokaż siebie button_video_control_self_hide = Schowaj siebie button_video_control_full_screen = Pełny ekran welcome = Witaj, call = Zadzwoń chat = Czat enter_contact = Wpisz kontakt type_to_chat = pisz... start_chat = zacznij czat me = ja: logout = Wyloguj no_contact = Prosze wpisać kontakt. remember_me = Zapamiętaj mnie drucall/internationalization/Messages_de.properties 0000644 0014122 0014122 00000004320 12460266406 022565 0 ustar bender bender error_js = FEHLER: Dieser Dienst erfordert JavaScript. Bitte aktivieren Sie JavaScript in Ihren Browsereinstellungen. error_webrtc = FEHLER: Dieser Dienst erfordert WebRTC. Bitte versuchen Sie es mit Mozilla Firefox oder Google Chrome. Es ist empfohlen, die jeweils neueste Version zu verwenden. error_no_config = FEHLER: JsCommunicator-Konfiguration wurde nicht gefunden. error_ua_init_failure = FEHLER: Der User-Agent konnte nicht initialisiert werden. error_reg_fail = FEHLER: SIP-Registrierung fehlgeschlagen. 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. error_dynamic = " " jsc_login_display_name = Angezeigter Name (kann leer sein) jsc_login_sip_uri = SIP-Adresse jsc_login_password = Passwort jsc_login_button = Login ws_link = WebSocket-Link: ws_state_connected = Verbunden ws_state_disconnected = Nicht verbunden sip_reg = SIP-Registrierung: sip_reg_up = Registriert sip_reg_down = Nicht registriert sip_dest_address = Ziel session_state_outgoing = Wähle ... session_state_incoming = Eingehender Anruf session_state_accepted = Antworte, prüfe Verbindung ... session_state_active = Anrufer verbunden button_session_cancel = Abbrechen button_session_reject = Abweisen button_session_answer = Antworten button_call_audio = Anrufen (nur Ton) button_reg = Registrieren button_dereg = Deregistrieren button_call_audio_video = Anrufen (Bild und Ton) button_session_answer_video = Antworten (mit Bild) button_session_answer_hold = Halten button_session_answer_hang_up = Auflegen button_video_control_self_view = Selbstansicht button_video_control_self_hide = Selbstansicht verstecken button_video_control_full_screen = Vollbild welcome = Wilkommen, call = Anrufen chat = Chat enter_contact = Kontakt eingeben type_to_chat = tippen zum chatten... start_chat = Chat anfangen me = ich: logout = Ausloggen no_contact = Bitte ein Kontakt eingeben. remember_me = Erinnere mich 45,1 Bot drucall/internationalization/Messages.properties 0000644 0014122 0014122 00000003630 12460266406 022120 0 ustar bender bender error_js = ERROR: This service requires JavaScript. Please enable JavaScript in your web browser settings. error_webrtc = ERROR: This service requires WebRTC. Please try Mozilla Firefox or Google Chrome, using the latest version is strongly recommended. error_no_config = ERROR: JsCommunicator configuration not found. error_ua_init_failure = ERROR: Failed to initialize user agent. error_reg_fail = ERROR: SIP Registration failure. 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. error_dynamic = " " jsc_login_display_name = Display name (may be empty) jsc_login_sip_uri = SIP address jsc_login_password = Password jsc_login_button = Login ws_link = WebSocket link: ws_state_connected = Connected ws_state_disconnected = Disconnected sip_reg = SIP registration: sip_reg_up = Registered sip_reg_down = Not Registered sip_dest_address = Destination session_state_outgoing = Dialing ... session_state_incoming = Incoming call session_state_accepted = Answering, connectivity checks in progress ... session_state_active = Call connected button_session_cancel = Cancel button_session_reject = Reject button_session_answer = Answer button_call_audio = Call (audio only) button_reg = Register button_dereg = De-Register button_call_audio_video = Call (audio and video) button_session_answer_video = Answer (with video) button_session_answer_hold = Hold button_session_answer_hang_up = Hang-up button_video_control_self_view = Self view button_video_control_self_hide = Self hide button_video_control_full_screen = Full screen welcome = Welcome, call = Call chat = Chat enter_contact = Enter contact type_to_chat = type to chat... start_chat = start chat me = me logout = Logout no_contact = Please enter a contact. remember_me = Remember me drucall/internationalization/Messages_es.properties 0000644 0014122 0014122 00000004216 12460266406 022610 0 ustar bender bender error_js = ERROR: este servicio requiere JavaScript. Habilite JavaScript en las opciones de su navegador. 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. error_no_config = ERROR: No se encontró la configuración de JsCommunicator. error_ua_init_failure = ERROR: Fallo durante la inicialización del agente. error_reg_fail = ERROR: Fallo durante la registración SIP. 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. error_dynamic = " " jsc_login_display_name = Nombre (opcional) jsc_login_sip_uri = Dirección SIP jsc_login_password = Contraseña jsc_login_button = Iniciar sesión ws_link = Enlace WebSocket: ws_state_connected = Conectado ws_state_disconnected = Desconectado sip_reg = Registro SIP: sip_reg_up = Registrado sip_reg_down = No Registrado sip_dest_address = Destino session_state_outgoing = Marcando ... session_state_incoming = Llamada entrante session_state_accepted = Conectando, verificaciones de conectividad en progreso ... session_state_active = Llamada conectada button_session_cancel = Cancelar button_session_reject = Rechazar button_session_answer = Contestar button_call_audio = Llamar (sólo audio) button_reg = Registrar button_dereg = Cancelar el registro button_call_audio_video = Llamar (audio y video) button_session_answer_video = Contestar (con video) button_session_answer_hold = Llamada en espera button_session_answer_hang_up = Terminar la llamada button_video_control_self_view = Vista (propia) button_video_control_self_hide = Ocultar (propia) button_video_control_full_screen = Pantalla completa welcome = Bienvenido, call = Llamada chat = Conversar enter_contact = Introduce el contacto type_to_chat = escribe para hablar... start_chat = empezar conversación me = yo: logout = Salir no_contact = Por favor, introduce un contacto. remember_me = Recuérdame drucall/internationalization/Messages_en.properties 0000644 0014122 0014122 00000003631 12460266406 022603 0 ustar bender bender error_js = ERROR: This service requires JavaScript. Please enable JavaScript in your web browser settings. error_webrtc = ERROR: This service requires WebRTC. Please try Mozilla Firefox or Google Chrome, using the latest version is strongly recommended. error_no_config = ERROR: JsCommunicator configuration not found. error_ua_init_failure = ERROR: Failed to initialize user agent. error_reg_fail = ERROR: SIP Registration failure. 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. error_dynamic = " " jsc_login_display_name = Display name (may be empty) jsc_login_sip_uri = SIP address jsc_login_password = Password jsc_login_button = Login ws_link = WebSocket link: ws_state_connected = Connected ws_state_disconnected = Disconnected sip_reg = SIP registration: sip_reg_up = Registered sip_reg_down = Not Registered sip_dest_address = Destination session_state_outgoing = Dialing ... session_state_incoming = Incoming call session_state_accepted = Answering, connectivity checks in progress ... session_state_active = Call connected button_session_cancel = Cancel button_session_reject = Reject button_session_answer = Answer button_call_audio = Call (audio only) button_reg = Register button_dereg = De-Register button_call_audio_video = Call (audio and video) button_session_answer_video = Answer (with video) button_session_answer_hold = Hold button_session_answer_hang_up = Hang-up button_video_control_self_view = Self view button_video_control_self_hide = Self hide button_video_control_full_screen = Full screen welcome = Welcome, call = Call chat = Chat enter_contact = Enter contact type_to_chat = type to chat... start_chat = start chat me = me: logout = Logout no_contact = Please enter a contact. remember_me = Remember me drucall/internationalization/Messages_sk.properties 0000644 0014122 0014122 00000004275 12460266406 022623 0 ustar bender bender error_js = CHYBA: Táto služba vyžaduje JavaScript. Prosím, zapnite si JavaScript v nastaveniach svojho webového prehliadača. 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. error_no_config = CHYBA: Konfiguácia JsCommunicator nebola nájdená. error_ua_init_failure = CHYBA: Nepodarilo sa inicializovať klienta. error_reg_fail = CHYBA: Chyba registrácie SIP. 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. error_dynamic = " " jsc_login_display_name = Zobrazené meno (môže byť prázdne) jsc_login_sip_uri = Adresa SIP jsc_login_password = Heslo jsc_login_button = Prihlasovacie meno ws_link = Odkaz WebSocket: ws_state_connected = Spojené ws_state_disconnected = Odpojené sip_reg = Registrácia SIP: sip_reg_up = Zaregistrované sip_reg_down = Nezaregistrované sip_dest_address = Cieľ session_state_outgoing = Prebieha vytáčanie ... session_state_incoming = Prichádzajúci hovor session_state_accepted = Prijíma sa hovor, prebieha kontrola spojenia ... session_state_active = Hovor spojený button_session_cancel = Zrušiť button_session_reject = Odmietnuť button_session_answer = Odpovedať button_call_audio = Volať (iba zvuk) button_reg = Zaregistrovať button_dereg = Odregistrovať button_call_audio_video = Volať (zvuk a video) button_session_answer_video = Odpovedať (s videom) button_session_answer_hold = Podržať button_session_answer_hang_up = Zavesiť button_video_control_self_view = Zobraziť seba button_video_control_self_hide = Skryť seba button_video_control_full_screen = Celoobrazovkový režim welcome = Vitajte, call = Volať chat = Četovať enter_contact = Zadajte kontakt type_to_chat = tu môžete četovať... start_chat = spustiť četovanie me = ja logout = Odhlásiť sa no_contact = prosím, zadajte kontakt. remember_me = Zapamätať si ma drucall/internationalization/Messages_he.properties 0000644 0014122 0014122 00000004320 12460266406 022571 0 ustar bender bender error_js =.בהגדרות הדפדפן שלך JavaScript נא אפשר .JavaScript שגיאה: השירות דורש error_webrtc =.שימוש במהדורה האחרונה מומלץ ,Google Chrome או Mozilla Firefox נסה .WebRTC שגיאה: השירות דורש error_no_config =.לא נמצאה JsCommunicator שגיאה: הקונפיגורציה של error_ua_init_failure = שגיאה: נכשל האתחול user agent. error_reg_fail = שגיאה: כישלון רישום SIP. error_call_attempt_failed = שגיאה: נכשל ניסיון להתחיל שיחה. לוודא שמיקרופון / מצלמת אינטרנט מחוברים. בדוק את הגדרות אבטחה של דפדפן, peer עשויים שלא לתמוך קודקים תואמים. error_dynamic = " " jsc_login_display_name = שם תצוגה (יכול להיות ריק) jsc_login_sip_uri = כתובת SIP jsc_login_password = סיסמה jsc_login_button = כניסה ws_link = קישור WebSocket: ws_state_connected = מחובר ws_state_disconnected = מנותק sip_reg = SIP registration: sip_reg_up = רשום sip_reg_down = לא רשום sip_dest_address = יעד session_state_outgoing = מחייג ... session_state_incoming = שיחה נכנסת session_state_accepted = עונה, בודק חיבור ... session_state_active = שיחה פעילה button_session_cancel = ביטול button_session_reject = דחייה button_session_answer = תשובה button_call_audio = (התקשרות (רק שמע button_reg = הרשמה button_dereg = בטל הרשמה button_call_audio_video = חייג (וידאו וקול) button_session_answer_video = (תשובה (עם וידאו button_session_answer_hold = השהה button_session_answer_hang_up = נתק button_video_control_self_view = תצוגה עצמית button_video_control_self_hide = הסתרה עצמית button_video_control_full_screen = מסך מלא welcome = ברוכים הבאים, call = שיחה chat = צ'ט enter_contact = הכנס איש קשר type_to_chat = הקלד לצ'ט... start_chat = התחל צ'ט me = אני: logout = התנתק no_contact = הזן איש קשר. remember_me = זכור אותי drucall/internationalization/Messages_nl.properties 0000644 0014122 0014122 00000004057 12460266406 022615 0 ustar bender bender error_js = FOUT: Deze dienst vereist JavaScript. Zet alstublieft JavaScript aan in uw web browser instellingen. error_webrtc = FOUT: Deze dienst vereist WebRTC. Probeer alstublieft Mozilla Firefox of Google Chrome, het gebruik van de laatste versie is sterk aanbevolen. error_no_config = FOUT: JsCommunicator configuratie niet gevonden. error_ua_init_failure = FOUT: Mislukt om de useragent te initialiseren. error_reg_fail = FOUT: SIP registratie mislukt. 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. error_dynamic = " " jsc_login_display_name = Weergave naam (mag leeg zijn) jsc_login_sip_uri = SIP-adres jsc_login_password = Wachtwoord jsc_login_button = Login ws_link = WebSocket link: ws_state_connected = Verbonden ws_state_disconnected = Niet verbonden sip_reg = SIP registratie: sip_reg_up = Registereerd sip_reg_down = Niet registereerd sip_dest_address = Bestemming session_state_outgoing = Bellen ... session_state_incoming = Inkomend gesprek session_state_accepted = Bezig met beantwoorden, connectiviteitstest is bezig ... session_state_active = Gesprek verbonden button_session_cancel = Annuleer button_session_reject = Weigeren button_session_answer = Aannemen button_call_audio = Bel (alleen geluid) button_reg = Registreer button_dereg = Afmelden button_call_audio_video = Bel (beeld en geluid) button_session_answer_video = Aannemen (met beeld) button_session_answer_hold = Wachtstand button_session_answer_hang_up = Ophangen button_video_control_self_view = Zelf tonen button_video_control_self_hide = Zelf verbergen button_video_control_full_screen = Volledig scherm welcome = Welkom, call = Bel chat = Chat enter_contact = Voer contactpersoon in type_to_chat = Type om te chatten... start_chat = start chat me = ik: logout = Uitloggen no_contact = Voer een contactpersoon in. remember_me = Herriner mij drucall/internationalization/Messages_bg.properties 0000644 0014122 0014122 00000005513 12460266406 022572 0 ustar bender bender error_js = ГРЕШКА: Тази услуга изисква JavaScript. Моля активирайте JavaScript в настройките на Вашия браузър. error_webrtc = ГРЕШКА: Тази услуга изисква WebRTC. Моля опитайте с Mozilla Firefox или Google Chrome, използването на последна версия на браузъра е препорачително. error_no_config = ГРЕШКА: JsCommunicator конфигурация не е намерена. error_ua_init_failure = ГРЕШКА: Неуспешно стартиране на телефона. error_reg_fail = ГРЕШКА: Неуспешна SIP регистрация. error_call_attempt_failed = ГРЕШКА: Неуспешно обаждане, проверете дали микрофона и камерата са свързани, проверете настройките за сигурност на браузъра. Възможно е също другата страна да не поддържа съвместими кодеци. error_dynamic = " " jsc_login_display_name = Публично име (може да бъде празно) jsc_login_sip_uri = SIP адрес jsc_login_password = Парола jsc_login_button = Вход ws_link = WebSocket връзка: ws_state_connected = Свързан ws_state_disconnected = Несвързан sip_reg = SIP регистрация: sip_reg_up = Регистриран sip_reg_down = Нерегистриран sip_dest_address = Адрес на получателя session_state_outgoing = Набиране ... session_state_incoming = Входящо обаждане session_state_accepted = Обаждане, проверка на връзката ... session_state_active = Осъществено обаждане button_session_cancel = Затвори button_session_reject = Затвори button_session_answer = Обаждане button_call_audio = Обаждане (само глас) button_reg = Регистрация button_dereg = Отписване button_call_audio_video = Обаждане (аудио и видео) button_session_answer_video = Вдигни (с видео) button_session_answer_hold = Задръж button_session_answer_hang_up = Затвори button_video_control_self_view = Покажи себе си button_video_control_self_hide = Скрий себе си button_video_control_full_screen = Цял екран welcome = Добре дошли, call = Обаждане chat = Чат enter_contact = Въведете контакт type_to_chat = Въведете за започване на чат... start_chat = започни чат me = аз: logout = Изход no_contact = Моля въведете контакт. remember_me = Запомни ме drucall/README.txt 0000644 0014122 0014122 00000004352 12460266406 013466 0 ustar bender bender Background ---------- You need a modern web browser. Recent versions of Firefox and Chrome are popular choices. Mobile versions of Firefox and Chrome also work well. Ericsson Bowser for Android is another possible browser. Sample site ----------- You can see a sample site running DruCall at http://www.drucall.org/drucall How to install DruCall ---------------------- a) set up a TURN server, e.g. use the one of these packages on Debian or Ubuntu: resiprocate-turn-server http://packages.debian.org/wheezy/resiprocate-turn-server rfc5766-turn-server http://packages.debian.org/sid/rfc5766-turn-server turnserver http://packages.debian.org/sid/turnserver b) set up a SIP Proxy or PBX supporting SIP over WebSockets / WebRTC, for example: http://www.resiprocate.org/WebRTC_and_SIP_Over_WebSockets http://sip-router.org/docbook/sip-router/branch/master/modules/websocket/websocket.html c) set up a user to receive calls, for example, using one of the online configurable SIP WebRTC demo apps: http://tryit.jssip.net/ or install one of these apps to your own server (e.g. the Debian package jscommunicator-web-phone), and then go to http://your-server/jscommunicator-web-phone and log in to your SIP proxy. d) unpack the modules: DruCall module into your Drupal 7 modules directory libraries API into your Drupal 7 modules directory Install the JsSIP and JSCommunicator modules from these two sites: https://github.com/opentelecoms-org/drupal-mod-jscommunicator/releases https://github.com/opentelecoms-org/drupal-mod-jssip and follow their instructions to install the JavaScript files themselves. To save time, you can do all of the above using the Debian packages: apt-get install drupal7-mod-jscommunicator For details, see: http://danielpocock.com/debian-solving-drupal-third-party-library-distribution e) go to the Administration / Configuration / DruCall / Settings panel, http://your-drupal-site/admin/config/drucall/settings f) set up all the necessary settings for your SIP Proxy/server and user g) now go to http://your-drupal-site/drucall Click one of the buttons and make a call - easy drucall/skin.css 0000644 0014122 0014122 00000000751 12460266406 013445 0 ustar bender bender span { color:#FFF; } #peer { color:#FFF; } #lang_selection { background-color: #888; color:#FFF; } #communicator { border-radius: 6px; border-style: solid; border-color: #FFF; border-width: 1px; } #dtmf-pad { border: 1px solid #FFF; opacity: 0.8; } #encapsulate { background-color: #888; border-radius: 6px; } #error span, #ws span, #reg span { color: white; } #header h1 { color: white; } #jsc-logout-button { color: #FFF; } h3 { color: white; } drucall/js/ 0000755 0014122 0014122 00000000000 12460266406 012400 5 ustar bender bender drucall/js/drucall.js 0000644 0014122 0014122 00000006475 12460266406 014400 0 ustar bender bender (function ($) { Drupal.behaviors.drucall = { attach: function(context, settings) { var dcsettings = settings.drucall; window.JSCommSettings = { // Web server environment webserver: { url_prefix: '/' + dcsettings.mod_path + '/' // If set, prefix used to construct sound/ URLs }, // STUN/TURN media relays stun_servers: [], turn_servers: [ { server: dcsettings.turn_server_url, username:dcsettings.turn_username, password:dcsettings.turn_password } ], // WebSocket connection websocket: { servers: dcsettings.websocket_server_url, connection_recovery_min_interval: 2, connection_recovery_max_interval: 30, }, // User identity user: { display_name: dcsettings.display_name, uri: dcsettings.impu, sip_auth_user: dcsettings.impi, sip_auth_password: dcsettings.password, sip_auth_user_full_uri: false, }, // User SIP registration registration : { on_startup: dcsettings.sip_register, // Register when websocket link starts? expiry: 3600, // Registration expiry (seconds) user_control: false, // Show button for user to (de)register server: null, // Registration server }, dialing : { auto_dial : { default_destination : dcsettings.phone_number, // A name or full URI on_startup: false, // Whether to wait for user to click dial use_video: false, // Whether to auto-dial with video }, edit_destination: true, // Whether the user may edit the destination show_destination: true, // Whether the user can see the destination audio_dialing: dcsettings.enable_audio, // Whether to offer an audio call button video_dialing: dcsettings.enable_video, // Whether to offer a video call button prefer_video: false, // If user presses Enter to dial, use video? no_answer_timeout: 60, // How long to wait for answer (seconds) clear_dialbox: false // Whether to clear dialbox after call/attempted call }, chat : { enable: dcsettings.enable_chat // Whether to show chat functions }, session : { show_dtmf_pad : dcsettings.enable_dtmf_pad, // Whether to show a DTMF dialpad during calls dtmf_duration : 160, // Duration (ms) to signal a DTMF press dialpad_tone: true, // Whether to play sound after pressing dialpad button message_tone: true, // Whether to alert (sound) when new IM is received require_relay_candidate: false // Whether to abort calls if no // relay candidate found in the SDP // generated by the browser. // If a TURN server had been configured, // the lack of a relay candidate is // likely to be a sign that UDP is blocked }, i18n : { translate: true, // enables the call to i18n init function from JSCommManager.init() show_menu: false, // show the language chooser menu default_lang: dcsettings.language_code // default language to use }, extra_headers : [ 'X-WS-Session-Extra: ' + dcsettings.extra_header_value ] }; JSCommManager.init(); } }; })(jQuery, Drupal); drucall/drucall.admin.inc 0000644 0014122 0014122 00000021644 12460266406 015203 0 ustar bender bender 'textfield', '#title' => t('Default destination'), '#default_value' => variable_get('default_destination', 'operator'), '#cols' => 40, '#rows' => 1, '#description' => t('The default destination that should be dialed when a visitor makes a DruCall call. Can be the user part of a URI, or a full sip: URI.'), ); $form['enable_audio'] = array( '#type' => 'checkbox', '#title' => t('Allow audio call'), '#default_value' => variable_get('enable_audio', true), '#description' => t('Whether or not to show a button allowing an audio call.'), ); $form['enable_video'] = array( '#type' => 'checkbox', '#title' => t('Allow video call'), '#default_value' => variable_get('enable_video', true), '#description' => t('Whether or not to show a button allowing a video call.'), ); $form['enable_chat'] = array( '#type' => 'checkbox', '#title' => t('Show chat panel'), '#default_value' => variable_get('enable_chat', true), '#description' => t('Whether or not to show the chat messaging facility.'), ); $form['enable_dtmf_pad'] = array( '#type' => 'checkbox', '#title' => t('Show DTMF panel in-call'), '#default_value' => variable_get('enable_dtmf_pad', true), '#description' => t('Whether or not to show a DTMF dialing pad during calls.'), ); $form['sip_domain'] = array( '#type' => 'textfield', '#title' => t('SIP domain'), '#default_value' => variable_get('sip_domain', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The SIP domain to be used to construct the From: header for calls made by logged-in Drupal users.'), ); $form['ws_cookie_secret'] = array( '#type' => 'textfield', '#title' => t('WebSocket Cookie Shared Secret'), '#default_value' => variable_get('ws_cookie_secret', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The shared secret used to authenticate WebSocket cookies. Must match the WSCookieAuthSharedSecret in the repro SIP proxy.'), ); $form['ws_cookie_domain'] = array( '#type' => 'textfield', '#title' => t('WebSocket Cookie Domain'), '#default_value' => variable_get('ws_cookie_domain', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The domain to set in cookies if using SIP over WebSocket cookie authentication. This may just be part of the domain and it must match both the Drupal web server domain and the WebSocket URL (below). E.g. if the web site is www.example.org and WebSocket server is wss://sip-ws.example.org then you must put example.org in this field.'), ); $form['ws_cookie_timeout'] = array( '#type' => 'textfield', '#title' => t('WebSocket Cookie Timeout'), '#default_value' => variable_get('ws_cookie_timeout', '900'), '#cols' => 40, '#rows' => 1, '#description' => t('Specify the duration, in seconds, that the authentication code is valid. This also sets the expiration time of the cookies.'), ); $form['ws_cookies_in_url'] = array( '#type' => 'checkbox', '#title' => t('Send WebSocket authentication as URL parameters'), '#default_value' => variable_get('ws_cookies_in_url', true), '#description' => t('If the WebSocket server doesn\'t have the same domain name or domain suffix as the Drupal web site, the browser will not send the cookies. Select this option to append the cookie values to the WebSocket URL so authentication will work across domains.'), ); $form['display_name'] = array( '#type' => 'textfield', '#title' => t('Display name for caller'), '#default_value' => variable_get('display_name', 'DruCall user'), '#cols' => 40, '#rows' => 1, '#description' => t('The display name to be inserted in the From: header of a call made by a guest user.'), ); $form['from_uri'] = array( '#type' => 'textfield', '#title' => t('SIP User ID (For From: header)'), '#default_value' => variable_get('from_uri', 'sip:user@example.org'), '#cols' => 40, '#rows' => 1, '#description' => t('The SIP URI, including the sip: scheme prefix, for a guest user.'), ); $form['auth_user'] = array( '#type' => 'textfield', '#title' => t('Authentication username'), '#default_value' => variable_get('auth_user', 'username'), '#cols' => 40, '#rows' => 1, '#description' => t('The guest account username for authenticating to the SIP proxy.'), ); $form['auth_password'] = array( '#type' => 'textfield', '#title' => t('Authentication password'), '#default_value' => variable_get('auth_password', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The guest account password for authenticating to the SIP proxy. WARNING: not intended as a security mechanism, the password will be visible in the client-side JavaScript.'), ); $form['auth_realm'] = array( '#type' => 'textfield', '#title' => t('Authentication realm'), '#default_value' => variable_get('auth_realm', 'realm'), '#cols' => 40, '#rows' => 1, '#description' => t('The realm for authenticating the guest account to the SIP proxy.'), ); $form['websocket_server_url'] = array( '#type' => 'textfield', '#title' => t('WebSocket Server URL'), '#default_value' => variable_get('websocket_server_url', 'ws://sip-proxy.example.org:80'), '#cols' => 40, '#rows' => 1, '#description' => t('The WebSocket URL of the SIP proxy, typically with the ws: or wss: prefix.'), ); $form['sip_outboundproxy_url'] = array( '#type' => 'textfield', '#title' => t('SIP Outbound Proxy URL'), '#default_value' => variable_get('sip_outboundproxy_url', 'tcp://sip-proxy.example.org:5060'), '#cols' => 40, '#rows' => 1, '#description' => t('SIP Outbound Proxy URL. Only specify this if required.'), ); $form['turn_server_url'] = array( '#type' => 'textfield', '#title' => t('STUN/TURN server URL'), '#default_value' => variable_get('turn_server_url', 'turn:turn-server.example.org'), '#cols' => 40, '#rows' => 1, '#description' => t('The URL of the TURN server, for example, turn:turn-server.example.org'), ); $form['turn_username'] = array( '#type' => 'textfield', '#title' => t('TURN server username'), '#default_value' => variable_get('turn_username', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The username (long-term credential) for authenticating to the TURN server.'), ); $form['turn_password'] = array( '#type' => 'textfield', '#title' => t('TURN server password'), '#default_value' => variable_get('turn_password', ''), '#cols' => 40, '#rows' => 1, '#description' => t('The password (long-term credential) for authenticating to the TURN server. WARNING: not intended as a security mechanism, the password will be visible in the client-side JavaScript.'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Save Settings'), ); return $form; } /** * Submit hook for drucall_admin. */ function drucall_admin_submit($form, &$form_state) { variable_set('default_destination', $form_state['values']['default_destination']); variable_set('enable_audio', $form_state['values']['enable_audio']); variable_set('enable_video', $form_state['values']['enable_video']); variable_set('enable_chat', $form_state['values']['enable_chat']); variable_set('enable_dtmf_pad', $form_state['values']['enable_dtmf_pad']); variable_set('sip_domain', $form_state['values']['sip_domain']); variable_set('ws_cookie_secret', $form_state['values']['ws_cookie_secret']); variable_set('ws_cookie_domain', $form_state['values']['ws_cookie_domain']); variable_set('ws_cookie_timeout', $form_state['values']['ws_cookie_timeout']); variable_set('ws_cookies_in_url', $form_state['values']['ws_cookies_in_url']); variable_set('display_name', $form_state['values']['display_name']); variable_set('from_uri', $form_state['values']['from_uri']); variable_set('auth_user', $form_state['values']['auth_user']); variable_set('auth_password', $form_state['values']['auth_password']); variable_set('auth_realm', $form_state['values']['auth_realm']); variable_set('websocket_server_url', $form_state['values']['websocket_server_url']); variable_set('sip_outboundproxy_url', $form_state['values']['sip_outboundproxy_url']); variable_set('turn_server_url', $form_state['values']['turn_server_url']); variable_set('turn_username', $form_state['values']['turn_username']); variable_set('turn_password', $form_state['values']['turn_password']); drupal_set_message(t('Your settings have been saved.')); } drucall/drucall-phone.tpl.php 0000644 0014122 0014122 00000021041 12460266406 016026 0 ustar bender bender