{"id":15050139,"url":"https://github.com/mozilla/ikran","last_synced_at":"2025-10-04T12:32:09.051Z","repository":{"id":65983942,"uuid":"2298370","full_name":"mozilla/ikran","owner":"mozilla","description":"INACTIVE - http://mzl.la/ghe-archive - Ikran, an addon for Mozilla for making audio/video call using SIP","archived":true,"fork":true,"pushed_at":"2012-03-15T21:47:54.000Z","size":126446,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-08-26T13:05:27.576Z","etag":null,"topics":["inactive","unmaintained"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ethanhugg/ikran","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mozilla.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-08-30T23:00:17.000Z","updated_at":"2023-01-28T04:03:37.000Z","dependencies_parsed_at":"2023-02-19T18:15:56.857Z","dependency_job_id":null,"html_url":"https://github.com/mozilla/ikran","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mozilla/ikran","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mozilla%2Fikran","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mozilla%2Fikran/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mozilla%2Fikran/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mozilla%2Fikran/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mozilla","download_url":"https://codeload.github.com/mozilla/ikran/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mozilla%2Fikran/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278314297,"owners_count":25966771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["inactive","unmaintained"],"created_at":"2024-09-24T21:24:44.996Z","updated_at":"2025-10-04T12:32:05.598Z","avatar_url":"https://github.com/mozilla.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"---------------\n0. Introduction\n---------------\n  Ikran is an experimental addon for Firefox that turns your browser into a SIP endpoint \n  for both audio and video.  It currently uses WebRTC for audio/video media support.\n\n  The ikran is a bird from the mythical world of Pandora (Avatar).  It is well known for\n  its birdcall which travels long distances using widely accepted standards for audio and video.\n\n  Ikran can operate in two modes. (1) Registration mode, where it is a SIP UA and registers with \n  a SIP server. (2) Peer to Peer Mode, where is can communicate directly with other ikran clients\n  in the same mode using SIP. \n\n-------------------\n1. Platform Support \n-------------------\nRequired for all platforms:\n  Python (www.python.org) -  known to work with 2.6 \u0026 2.7 \n  SCons (www.scons.org) - see section 13\n  \nLinux:\n  Should build on Ubuntu 11.04, 11.10 or Fedora15\n  Third-Party Libraries\n  +Glib    - sudo apt-get install libdbus-glib-1-dev\n  +asound  - sudo apt-get install libasound2-dev\n  +libgtk  - sudo apt-get install libgtk2.0-dev     \n  +libidn  - sudo apt-get install libidn11-dev\n\nMac OSX:\n  Built on OSX 10.7 with XCode 4.1 and OSX 10.6 with XCode 3.2.6\n  Links to Framework 10.6, minimum version 10.5\n  Requires libidl installed.  You can use MacPorts (\"sudo port install libidl\")\n\nWindows:\n  Built regularly on Windows XP \u0026 Windows 7.\n  Python path is in runSconsBuild.py and set to c:\\python27\n  Requires setting following environment variables\n  SCONS_LOCATION pointing to scons installation\n\te.g SCONS_LOCATION=c:\\Python26\\Scripts\n  ZIP_LOCATION pointing to 7z zip installation\n  MS_WINDOWS_SDK_PATH pointing to Windows SDK path ( v7.1)\n  MS_VC_PATH pointing to Visual Studio installation ( VS9.0)\n  DXSDK_DIR pointing to Micrsoft DirectX SDK installation\n  \n-----------\n2. Building \n-----------\n  - Get and build Mozilla Firefox, we link to some Firefox libraries\n      https://developer.mozilla.org/en/Build_Documentation\n      Set the MOZSRCPATH env variable to point to it - to the mozilla-central directory.\n  - Build WEBRTC for video and audio engine libraries \n      +  Follow the instructions @ http://www.webrtc.org/reference/getting-started\n      +  Set WEBRTCPATH to point to it : export WEBRTCPATH=/Users/XTM/HTML5/webrtc/trunk\n  \n  Set up these two Environment variables\n    MOZSRCPATH environment variable pointing to the a built source tree of Firefox (mozilla-central)\n    WEBRTCPATH environment variable pointing to a built webrtc source trunk\n\n  To Run the build\n    'python runSconsBuild.py debug' or\n    'python runSconsBuild.py clean'\n    Current command line options are 'debug', 'release', 'clean', 'noaddon' and 'x64'.\n\n-------------------\n4. Output from build\n-------------------\n  The build will create a test application and a Firefox addon for the nightly build.\n  Test App binary: TestApp_Softphone\n  Addon: ikran-0.2-dev.xpi\n\n----------------------------\n5. Testing the Firefox addon\n----------------------------\n  To test the addon follow these steps\n\n  - The addon executable will be generated under \u003cSOURCE\u003e/ikran\n \t called ikran-0.2-dev.xpi\n  - OSX \n\tStart Firefox in 32 bit as \n\t\tarch -i386 /Applications/Firefox.app/Contents/MacOS/firefox-bin \n  - Linux (32 bit and 64 bit)\n\tConnect your camera and make sure it works :)\n\tStart Firefox normally  \n  - Install the addon\n  - Test add-on with sample page at\n\t\t\u003cSOURCE\u003e/ikran/content/ikran.html\t\t\n\n  NOTES:\n  1. ikran.html should be served from a server due to permission issues.\n  2. If your cameras are working you should see a 2 way video call, ikran to ikran.\n  3. You should be able to call any softphone or hardphone connected to CUCM, Asterisk or Kamailio.\n\n-----------------------------\n6. Using the Test Application\n-----------------------------\n  Use the command line test application to exercise the SIP stack.\n  The test application can be used against Cisco Call Manager, Asterisk and Kamailio (OpenSER).\n  The test application requires the nspr4 library in your dynamic library path.  It is \n  easiest just to copy libnspr4.dylib/.so/.dll into the testapp directory from mozilla-central.\n\n  Run the Test Application from the command line with no parameters\n   ./tests/testapp_softphone/TestApp_SoftPhone\n\n   ********************************\n   Please Choose One :\n         0. Quit\n         1. Register User\n         2. Place Call\n         3. Answer Call\n         4. End Call\n\t 5. Start P2P mode\n\t 6. Place P2P Call\n   What Action do you want to perform Monsieur ??\n\n   Select 1 to register, enter the following details, inside square brackets are defaults.\n\n      Enter SIP Server IP Address [ 10.53.47.140 ]:\n      Enter SIP Server username (phone DN for CUCM) [ 9995 ]:\n      Enter Password (not required for CUCM [ Enter ]:\n      Enter device name (only required for CUCM) [ emannionsip01 ]:\n\n   Select 5 to start ikran in Peer to Peer mode.  This requires only the SIP username to start.\n\n      Enter local peer username (usually a phone DN) [ 9995 ]:\n\n   To make a P2P call select option 6, this will require remote SIP username and remote IP Address.\n\n When running the Test Application in Linux it operates slightly differently. To see the available\n list of commangs use the '?' key.\n \n------------\n7. Addon API\n------------\nThe JS API offers support for \n    SIP Registration, Place Call, HangUp Call, Answer Call, Send DTMF\n    HoldCall, ResumeCall, Mute, UnMute,\n    P2P Mode, Place P2P Call\n    SetProperty, GetProperty\n\nwindow.navigator.service.call obtains handle to session-control object.\n\n\u003csession-control\u003e.registerUser(user_device, user, credential, sip-proxy, sessObserver);\nregisters user to the sip-proxy. \n\n'sessObserver' is a JS function that will be called whenever there is \na change in the session state such as \"no-registrar\",\"registering\",\n\"registered\", \"incoming-call\" \u0026 \"registration-failed\".\n\nOn successful registration, one can place call with the below API\n\u003csession-control\u003e.placeCall(dial-number, canvas, mediaObserver);\nwhere dial-number is number to dial and mediaObserver reports \nsignificant media state changes such as \"call-connected\",\n\"call-terminated\" as of today.\n\nJS APIs unRegisterUser() and hangupCall() allows de-registration\n\u0026 end-call functionalities.\n\nSendDigits API\nTo Send DTMF digits use sendDigits, a call must be active to send DTMF digits.\nsendDigits('123#');\n\nSetProperty API\nAvailable properties are\nlocalvoipport -- used in P2P mode\nremotevoipport -- used in P2P mode\ne.g.  Me.setProperty({\"localvoipport\": 5061, \"remotevoipport\": 5061});\n\nGetProperty API\ne.g.  var version = Me.getProperty(\"version\");\n\nFew Points to Note\n1. One user is suported as registered by instance\n \nPlease see content/ikran.html for sample usage of the API.\n\n----------------------------------\n8. Configuring Asterisk SIP Server\n----------------------------------\n\n1. Create a SIP user in /etc/asterisk/sip.conf\n\n  [bob]\n  type=friend\n  defaultuser=bob\n  secret=1234\n  host=dynamic\n  context=ikran\n\n2. Create a phone extension in /etc/asterisk/extensions.conf\n\n  [ikran]\n  extn =\u003e 1234,1,Dial(SIP/bob)\n  \n3. From the Asterisk CLI\u003e sip reload  \n\n---------------------------------\n9. Configuring Kamailo SIP Server\n---------------------------------\nHere is a good reference: http://www.oldskoolphreak.com/tfiles/voip/beginners_openser.txt\n\n1. Create two users\n\n  kamctl add userbob bobpassword bob@localhost\n  kamctl add useralice alicepassword alice@localhost\n\n2. Start kamailio\n\n  /usr/local/sbin$ ./kamailio\n\n-----------------------------------\n10. Using Ikran with the ROAP Proxy\n-----------------------------------\n\n1. The ROAP proxy should be run on a machine with apache and php\n\n2. In /tests/roap you'll find roap.php which should be put on your apache server\n\n3. roap.php forwards the ROAP requests to localhost by default, so on the same\nmachine run ./test/roap/RoapProxy\n\n4. To follow the logs export these two environment variables:\nexport NSPR_LOG_FILE=/home/wherever/yourlogfile.log\nexport NSPR_LOG_MODULES=ikran:5\nYou can then tail -f the log file to watch the RoapProxy.  It should give a couple\n'bind succeeded' messages on startup.\n\n5. Put roap_client.html on your apache server and point your Nightly build with Ikran to it.\n\n6. On page load you should see the RoapProxy register and then it will do the SIP conversation\non behalf of your browser.  It currently only works for 1 call and needs to be reset between\neach call.\n\n----------------------------------------\n11. Using SoftphoneTestCases Application\n----------------------------------------\nUse the command line test application to verify the SIP stack and softphone APIs.\nThe test application can be used against Cisco Call Manager and Kamailio (OpenSER).\nThe test application requires the nspr4 library in your dynamic library path. It is easiest \njust to copy libnspr4.dylib/.so/.dll into the testapp directory from mozilla-central.\n\nBelow is the step-by-step for automatic test with the test application.\n\n(1) Prepare server configure file \"server.txt\" and client configure file \"client.txt\", \"valid.txt\" \nand \"invalid.txt\". You may find examples in ./tests/SoftphoneTestCases/.\n\nIn these configure files:\nIP_ADDRESS is IP address of SIP server.\n\nDEVICENAME, SIPUSER and CREDENTIALS are user settings provided by SIP server. \nIn invalid.txt, please set wrong DEVICENAME, SIPUSER and CREDENTIALS.\n\nLOCALIP is IP address of the test machine on which the test application runs.\n\nTESTSERVER is IP address of the server.\n\n(2) Place server.txt into the same directory with the test application. Run the test \napplication from the command line as below to start it as a server. \n    ./SoftphoneTestCases -s server.txt\n\n(3) Enter \"r\" and press \"enter\" to register to SIP server.\n\n(4) Place client.txt, valid.txt and invalid.txt into the same directory with the test \napplication. Run the test application from the command line as below to start is as a client.\n    ./SoftphoneTestCases -c client.txt\n\nNotes:\n(1) Server and client on the same machine may have some problems.\n\n--------------------\n12. Installing Scons\n--------------------\n\nMake sure pyhton is installed\n\nLinux\n'sudo apt-get install scons' or 'sudo yum install scons'\n\nMac\nFrom http://www.scons.org/  download the tarball, untar and do this\npython setup.py install\n\nWindows\nFrom http://www.scons.org/ download and install the scons windows installer \n \n ---------------------------------------------------\n13. Using Ikran with websocket-based ROAP Proxy\n---------------------------------------------------\n\n1. Start the roap proxy firstly.\n\n2. Start firefox with ikran add-on. Enter IP:7681 in address bar to load page. the IP is roap proxy ip.\n\n3. On page load you should see the RoapProxy register and then it will do the SIP conversation\non behalf of your browser.  It currently only works for 1 call and needs to be reset between\neach call.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmozilla%2Fikran","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmozilla%2Fikran","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmozilla%2Fikran/lists"}