{"id":16607461,"url":"https://github.com/mitchcapper/fsclient","last_synced_at":"2025-07-19T15:04:40.909Z","repository":{"id":146017888,"uuid":"47224253","full_name":"mitchcapper/FSClient","owner":"mitchcapper","description":"FSClient is a full Windows softphone based off FreeSWITCH","archived":false,"fork":false,"pushed_at":"2022-04-27T09:36:18.000Z","size":1698,"stargazers_count":58,"open_issues_count":5,"forks_count":18,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-03T21:42:45.564Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mitchcapper.png","metadata":{"files":{"readme":"README.md","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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-01T23:36:03.000Z","updated_at":"2025-02-25T22:35:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"44896c85-1e8f-426b-87bb-27a3b041fe0f","html_url":"https://github.com/mitchcapper/FSClient","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mitchcapper/FSClient","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcapper%2FFSClient","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcapper%2FFSClient/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcapper%2FFSClient/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcapper%2FFSClient/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitchcapper","download_url":"https://codeload.github.com/mitchcapper/FSClient/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcapper%2FFSClient/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265950485,"owners_count":23853760,"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","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":[],"created_at":"2024-10-12T01:13:43.902Z","updated_at":"2025-07-19T15:04:40.887Z","avatar_url":"https://github.com/mitchcapper.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"FSClient Windows Softphone based on FreeSWITCH\n=================================\nOVERVIEW\n-----\nFSClient is a full Windows sip client that uses Embedded FreeSWITCH and is written in WPF/.NET 4.5. It supports external/internal contact books and full headset features through a plugin system (Plantronics/ Jabra full features for example). FSClient is meant to be a full featured SIP client including standard enterprise class client functionality. It can run installed or run standalone, with the only requirement being .NET 4.5.2 support (vista or higher).  You can use the older FSClient 1.2 release if you need Windows XP/.net 4.0.\n\nTable of Contents\n=================\n\n   * [Description](#description)\n     * [Screenshot](#screenshot)\n     * [Features](#features)\n     * [Themes](#themes)\n     * [Layout](#layout)\n       * [Calls](#calls)\n       * [Current / Dialpad](#current--dialpad)\n       * [Accounts](#accounts)\n       * [Contact Search Box](#contact-search-box)\n       * [Conference Support (N-Way calling)](#conference-support-n-way-calling)\n   * [Version History](#version-history)\n   * [Installation](#installation)\n     * [Requirements](#requirements)\n   * [Accessibility](#accessibility)\n   * [Keyboard Shortcuts](#keyboard-shortcuts)\n   * [Compiling from Source](#compiling-from-source)\n   * [Troubleshooting](#troubleshooting)\n   * [Configuration](#configuration)\n     * [Standard Options](#standard-options)\n     * [Account Options](#account-options)\n     * [Sofia Options](#sofia-options)\n     * [Event Socket Options](#event-socket-options)\n     * [Plugin Options](#plugin-options)\n   * [TODO](#todo)\n   * [Plugins](#plugins)\n     * [Contact Plugins](#contact-plugins)\n       * [SimpleXMLContactPLugin](#simplexmlcontactplugin)\n     * [Headset Plugins](#headset-plugins)\n       * [JabraHeadsetPlugin](#jabraheadsetplugin)\n       * [PlantronicsHeadsetPlugin](#plantronicsheadsetplugin)\n   * [Develoment/Contributing](#develomentcontributing)\n     * [Plugin Development](#plugin-development)\n       * [Headset Plugins](#headset-plugins-1)\n       * [Contact Plugins](#contact-plugins-1)\n     * [General Class/File Layout](#general-classfile-layout)\n\n\n\nDescription\n------------\n\nFSClient is a full Windows sip client that uses [Embedded FreeSWITCH](https://wiki.freeswitch.org/wiki/Embedding_FreeSWITCH)\nand is written in WPF/.NET 4.5. It supports external/internal contact\nbooks and full headset features through a plugin system. FSClient is\nmeant to be a full featured SIP client including standard enterprise\nclass client functionality. It can run installed or run standalone, with\nthe only requirement being .NET 4.5 support.\n\n### Screenshot\n\n![FS Client Screenshot](https://raw.githubusercontent.com/mitchcapper/FSClient/master/screenshots/FSclient_screen.png \"FS Client Screenshot\")\n\n### Features\n\n-   Unlimited simultaneous call support\n-   Multiple simultaneous sip account support\n-   N-Way calling with conference support (mute/deaf/kick/split/energy \u0026\n    volume level control on a per caller basis)\n-   External / Internal contact book support (see Plugins)\n-   Incoming Call Notification Tray Alerts\n-   Speakerphone support and live call switching\n-   Advanced headset integration (caller ID, buttons, external displays\n    see Plugins)\n-   Call stats/history with option DTMF history\n-   Support for all freeswitch codecs OPUS, CELT, G711(ULAW/ALAW), GSM,\n    G722.1, SILK, Speex, BroadVoice, iLBC (minus G729 which is not yet\n    supported in Windows)\n-   DND (Do Not Disturb) Call Ignoring\n-   Call Hold / Call Transfer / Muting\n-   Event Socket for direct interaction with client\n-   Per call volume and mic gain adjustment\n-   Conference \u0026 Call recording\n-   TLS / SRTP Support with certificate/subject validation\n-   Direct SIP: dialing to a remote server\n\n### Themes\n![FS Client Theme Options](https://raw.githubusercontent.com/mitchcapper/FSClient/master/screenshots/FSClient_themes.png \"FS Client Theme Options\")\n\n\n### Layout\n\nThere are 3 main parts of the application. Calls, Current/Dialpad, and\nAccounts. There is also the options button in the lower right for\nconfiguration settings and optionally the Contact Search box under the\ndialpad if a contact plugin is loaded. The Calls and Accounts panes of\nthe application can be hidden or shown by clicking the vertical button\nin the center with each of their respective names on it. Multiway\ncalling is handled through the conference support. The application can\nbe navigated using tab and arrow keys along with each pane having a\nshort key to it.\n\n#### Calls\n\nThe calls pane shows current active calls and the call history. Active\ncalls are always shown at the top, with the call that is currently\nanswered at the very top. You can jump to the first call in the calls\nlist using the keyboard shortcut control+C. Hovering over a call will\nshow the call details. Double clicking an active call will switch to\nthat call. Double clicking an ended call will call that number back (on\nthe same account it came in on). There is an arrow next to each call, a\nleft arrow means outgoing call (away from softphone) a right arrow means\nincoming call (towards softphone). Calls also have an icon next to them\nto show call status. Call status colors are:\n\n-   Grey - Ended\n-   Black - Canceled\n-   Red - Missed\n-   Blue - Ringing\n-   Green - Answered\n-   Yellow - Hold\n\nRight clicking on a call will show current actions, for live calls this\nincludes things like Transfer, End Call, Add to Conference, Set your\nvolume (local microphone boost), Set other party volume (boost their\nvolume), it will also show any contact plugin actions.\n\n#### Current / Dialpad\n\nThe current pane is in the center it shows the current call and any dtmf\npresses so far, the dialpad and any current actions that can be taken.\nThe XFER button is to transfer, DND will reject any incoming calls,\nSpeaker will switch the audio device from the main devices to the\nspeakerphone devices (set in options). Yellow on a button means its\nenabled. You can dial using the mouse to click numbers or using a\nkeyboard. To dial out on a specific account prefix the dial string with\na '\\#' and the account number (for example \\#48001112222 will dial the\nnumber on account 4). You can jump to the number 1 key on the dialpad\nusing the keyboard shortcut control+D. If the contact plugin supports it\nyou can also have transfer aliases, right click on the XFER button to\nmanage them when not in a call and right click on the button to use them\nwhile in a call.\n\n#### Accounts\n\nAccounts pane shows your sip accounts, each account has a local name for\nreference and the current status of the account (normally accounts\nshould show REGED). Click the Add button to add a new account. Once an\naccount is added click the checkbox to enable it or disable it. Note\nthat there is also the 'default account' if you only have one this will\nbe it. The default account is what account is used to dial out by\ndefault. To jump to the first account in the list hit control + A. Right\nclick on an account to check voicemail, edit it, force it to reconnect,\ndelete it, or set it as the default account.\n\n#### Contact Search Box\n\nThe contact search box will show up in the bottom center IF a contact\nplugin is used and it supports it. The default contact plugin is a\nsimple name to number xml database. To access the contact search box\nclick it or hit Control + f. Search box implementation is handled by the\nplugin itself, but in general type part of the name to search for the\ncontact, up and down to scroll between results and enter to call (or\nright click for more options). Additional functionality are per plugin.\n\n#### Conference Support (N-Way calling)\n\nAny call can be moved into a conference at any time, simply right click\non the call and select conference. This will shunt the call into the\nlocal conference. If there is not already a conference one is created.\nTo see who is in the conference hover over the Conference button to the\nright of the Calls header in the upper left. To control the conference\nright click on the conference button. You can record the conference or\ncontrol each user individually. Use controls include: setting a user as\ndeaf makes it so they do not hear anyone, mute so no one else hears\nthem, and a users energy level controls how loud they must be to be\nrecognized as talking (higher the level the more background noise\ndiscarded). You can split a user out of the conference through the user\ncontrols too, returning them to a call with just you. If you leave the\nconference (ie to answer another call or by putting it on hold) it\ncontinues to run in the background, to rejoin simply double click the\nconference button.\n\nVersion History\n-------\nHistory tracking only goes back to version 1.4.8, not earlier.\n### 1.4.11 - 2019-12-25\n\u003e More Jabra headset troubleshooting for newer headsets (ie Evolve 75) with hardware state mute options.\n\u003e Base plugin has more functions virtual to allow overriding them in children\n\u003e Fixed Call Notification Bubble to show up on correct monitor for multi-monitor and at right position with alternate DPI's\n\u003e Send to voicemail in transfer right click menu for calls.\n### 1.4.10 - 2019-09-06\n\u003e Added global hot keys for mute, answer, and end call as well.\n### 1.4.9 - 2019-08-02\n\u003e Added global hot key option (ie control+shift+p) to bring FSClient window to the foreground from anywhere in windows (set in options).\n\u003e Allow setting Always On Top During Call to keep FSClient on top of other windows during an active call\n### 1.4.8 - 2019-06-18\n\u003e Added transfer menu for calls (in contact plugins that support the transfer menu).  Added option for contact plugins to provide a default string (ie @yourdomain.com) to transfer numbers if no \"@\" is found in the transfer url.  These changes to the contact plugin system are breaking, and require some functions to be renamed.  You can just rename the old functions to the new names but it is best to return the MenuItems directly now rather than adding them to the context menu itself.\n\u003e Number stripping options for plugins to be able to strip numbers off the call log.\n\u003e Better handling for Jabra headsets as sometimes they change names and lose their reference.\n\n\nInstallation\n------------\n\n### Requirements\n\n-   .NET 4.5.2 (installer will install this if not found)\n-   Windows Vista or Later\n-   Note: You can use the older FSClient 1.2 release if you need Windows XP/.net 4.0.\nTo install FSClient use the installer found under releases \u003chttps://github.com/mitchcapper/FSClient/releases\u003e.\nYou can copy the installation folder to a USB drive for a portable version, just\nmake sure .NET 4.5.2 is installed where you want to use it. Note config is\nnot stored in the installation folder however if you copy your\nuser.config into the app.config file it will read this locally and use\nthis by default.\n\nAccessibility\n-------------\n\nFSClient should be fairly screen reader and keyboard friendly. It does\nrely on UIA(User Interface Automation) support so any accessibility\ntools will need to support UIA. All controls should be labeled\ncorrectly. There are shortcut keys to move around between the 3 panes\nalong with proper tab and arrow key support. Actions that require right\nclicking support shift + F10, single clicking is done through spacebar,\nand actions that require double clicking respond to the Enter key. If\nyou find something not properly accessible feel free to let me know.\nToggle buttons that use visual indicators will update their names to\nreflect their active state. Items that have a hover tooltip (Calls and\nthe Conference only right now) you can force the tooltip to show by\nhitting control + H when keyboard focused on the item. The tooltip will\ngo away if the keyboard focus changes, 20 seconds pass, or you hit\nControl + H again. Note most screen readers may not read tooltips, you\ncan hit control + ? to show a popup message box with similar\ninformation. The incoming call bubble can be answered by clicking the\nanswer button or hitting enter to accept the call.\n\nKeyboard Shortcuts\n------------------\n\n-   Toggle Mute - Control + M (Control + Shift + M always will ONLY mute not unmute)\n-   End Call - Control + E or Escape\n-   Focus On Call List / Last Selected Call - Control + L\n-   Focus on a specific call - Control + 1-\u0026gt;9\n-   Focus On Keypad Digit 1 - Control + D\n-   Focus on Accounts - Control + A\n-   Show Tooltip (Only on focused calls/conference) - Control + H\n-   Show Messagebox with tooltip information - Control + ?\n-   Focus on Contact Search Box - Control + F (If already focused\n    Control + F again will select all)\n-   Single Click - Space\n-   Double Click - Enter\n-   Right Click - Shift + F10\n-   You can get a global hot key in options to bring FSClient to the front, mute, answer, and end calls as well\n\nCompiling from Source\n---------------------\n\nThe source code for FSClient can be found at \u003chttps://github.com/mitchcapper/FSClient\u003e under.\nVS2010/VS2012-VS2015 project files and a solution are\nprovided.\n\nFirst get FreeSWITCH compiling properly on windows see\n[Installation\\_for\\_Windows](https://wiki.freeswitch.org/wiki/Installation_for_Windows) for details, the directory you compile it\ninto does not matter and FSClient supports both x86 and x64 versions of\nFreeSWITCH. Make sure you use a copy of trunk for 2011-02-05 or later to\nhave it work properly (at a minimum grab the latest mod\\_portaudio.c\nfrom after that date). You then can set the environmental variable\nFREESWITCH\\_SRC\\_LOCATION to the freeswitch build directory (Hint after\ncompiling FREESWITCH\\_SRC\\_LOCATION\\\\Win32 or\nFREESWITCH\\_SRC\\_LOCATION\\\\x64 should exist). This can be set under\nAdvanced on the System properties control panel or in VS.\n\nThere are 4 optional projects that are loaded by the solution by default\nbut are not needed they can be unloaded to avoid building and any\nloading errors ignored, they are: JabraHeadset, Plantronics Headset,\nSimpleXMLContactPlugin, Setup. If FREESWITCH\\_SRC\\_LOCATION is set then\nwhen building the required files from the freeswitch build will\nautomatically be copied into the FSClient working directory, there is\nalso the link.pl script in the External Items that can be used to copy\nthe files manually.\n\nIf you want to build the installer (Setup) you will also need the\nWindows Installer XML Toolset (http://wix.sourceforge.net/) or the setup\nproject will not load properly.\n\nIf you are impatient and want to compile FSClient quickly without\ncompiling Freeswitch first, simply install FSClient from the zip file,\nbrowse to C:\\\\Program Files\\\\FSClient folder and copy all the dlls, the\nconf folder, mod folder to your bin folder and build FSClient. Note: You\nrisk not having the latest FS build, which might be a dependency in the\ncurrent FSClient source.\n\nTroubleshooting\n-------------\n-\tFirst if compiling from source try the FSClient binary to make sure its not something build or version related\n-\tIf FSClient crashes on startup or you get an XML error most likely you do not have an active speaker and microphone, this is required (note having a jack but not being plugged into it will not work, as FreeSWITCH (portaudio) will not see it as an active device)\n-\tIf FSClient crashes randomly when in use after extended periods of time, 99% of the time this is due to an audio device malfunctioning.  We have seen USB speakers that have stopped working, when a call comes in and FreeSWITCH (portaudio) tries to ring the device it cannot properly open the speaker and then crashes.   The USB speaker itself doesn't work unless unplugged and plugged back in.  So if this is happening make sure all your audio devices are working correctly at the time.\n-\tFSClient uses freeswitch at the core, and that means you have the full logging and debugging features of FreeSWITCH.  In options you can configure the event socket settings, but by default it listens with the default password (ClueCon) and port of 8022.   Attach fs_cli to FSClient and set the loglevel to debug.  This can often help diagnose connection errors.  Tools like fs_logger.pl (https://github.com/mitchcapper/FSMisc) will also work.  You can also edit the freeswitch.xml its a very simple FS config.\n-\tIf a module or mod_managed itself will not load it could be due to a new DLL introduced as required and not automatically copied over.  Use \"dumpbin /dependents freeswitch.dll\" to inspect what dlls should be copied into place.\n\nConfiguration\n-------------\n\n  \n### Standard Options\n\n-   Headset Device: This will always be set to None unless you have one\n    of the headsets that there is a headset plugin for (Jabra and\n    Plantronics by default). If you do have one of these headsets select\n    it here and this will enable any advanced functionality your\n    headset supports. NOTE: you do not need to have your headset show up\n    here to use it, this just enables functionality like button presses,\n    caller ID, etc. You can still use a headset not listed here like any\n    other standard audio device.\n-   Main Input / Main Output: These are the sound devices that are used\n    by default during a phone call\n-   Speakerphone Input / Speakerphone Output: These are the sound\n    devices used when the speakerphone button is pressed\n-   Ring Device - This is the sound device that an incoming call will\n    ring on\n-   Bring to Front on Incoming Calls - This will try and bring the\n    FSClient window to the front when a call is incoming\n-   Show Incoming Call Notification Balloons - Shows a systray like\n    popup for each incoming call (shows caller ID and available actions)\n-   Clear Key Presses In Call Stats on Disconnect - Will clear the DTMF\n    history for all calls that are ended (rather than saving it\n    by default)\n-   Startup Layout - Choose which panels will be displayed or collapsed\n    by default\n-   Theme - Choose from the variety of themes for the dialer\n-   Recording Path - Where call recordings should be stored (to record a\n    call you must right click on it and click record)\n-   Global Hotkeys - allows setting a global hot key (like control+shift+p)\n    to bring FSClient to the foreground and have keyboard focus along\n    with options for muting, answering, and ending calls\n-   Only Allow Numeric Input When Dialing - When enabled you can only\n    dial numbers, \\# and \\*'s. This will automatically convert any\n    letters typed to the proper key press per a normal keypad. If you\n    want to be able to have dial strings with letters in them disable\n    this feature.\n-   Direct DIP: Dialing - Allows you to have FSClient directly connect\n    to another SIP endpoint without going through a sip server. To do so\n    use the sip: format for dialing (requires Only Allow Numeric Input\n    to be off).\n-   Window Always On Top During Call - Keep the main call window topmost\n    during a call, can still be minimized\n-   UPNP Nat Check - This enables FS to do its UPNP check on startup in\n    most cases its not needed (costs 5-10 seconds extra startup time) is\n    the equiv of -nonat to freeswitch\n-   Check for Updates on Startup - Will hit a remote server and let you\n    know if there is a new version of FSClient out\n-   Reload Devices - Will do a hardware scan for any sound device\n    changes (note cannot be used during a call), useful if things are\n    plugged in or unplugged\n-   Sofia Settings - Takes you to the sofia options.\n-   Event Socket Settings - Takes you to the event socket options.\n-   Plugin Settings - Takes you to the plugin options\n\n### Account Options\n\nWhen creating or editing an account there are several options. Name /\nAccount Number are FSClient only settings just for display purposes (or\nfor the account shortcut number to use during dialing). To specify the\nport for an account in the server box put ip:port or host:port like:\n123.123.123.123:4550.\n\n### Sofia Options\n\nConfigure various sofia settings, codec selection(right click on a codec\nto re-order it), nat config, tls options, and local bind ports. Values\nare the same as the normal freeswitch sofia config.\n\n### Event Socket Options\n\nAllows you to set the ip, port, password, and optional ACL rule for the\nevent socket.\n\n### Plugin Options\n\nThis will allow you to control which plugins are enabled or disabled and\nthen configure any plugin options that they may have. Note that when you\nenable or disable a plugin you must restart FSClient for the change to\ntake effect. You can have multiple headset plugins enabled at once, but\nonly one contact plugin. Any plugins that are enabled but have an error\noccur will show a warning sign, hover over the warning sign to see the\nerror.\n\nTODO\n----\n\n-   Outlook Contact Plugin\n-   Better configuration storage (option for in local folder for\n    portable), maybe separate file for each configuration section\n-   Freeswitch working dir not app folder (so no writing is required to\n    local folder for proper vista+ apps)\n-   Export call history on exit, and reload on startup\n-   An option for a portable version (an option in the program to store\n    the configuration in the working directory rather than User data\n    dir, most likely checking for a local config before looking for the\n    normal one is the easy way to solve this issue)\n-   Remote Control plugin support (plugin able to make and accept calls,\n    close FSClient, DND or Mute FSClient, also gets caller ID) would\n    allow for external applications to better control FSClient or from a\n    remote location\n-   ZRTP support\n\nPlugins\n-------\n\nMany plugin errors are caught and silently logged to the plugin.log file\nlocated in the app settings folder (generally\nc:\\\\users\\\\Username\\\\AppData\\\\Local\\\\Mitch\\_Capper\\\\\\*\\\\plugins.log, see\nthis file for any issues. You can also see the last error a plugin had\nby hovering over the warning icon on the plugin options page.\n\n### Contact Plugins\n\n#### SimpleXMLContactPlugin\n\nThis is basically an internal contact book plugin. It is very simple\nallows you to associate a name with a number. The database is stored in\nthe AppData folder for the application in an XML file. Right clicking on\na call or contact will allow you to edit the alias. You can right click\non a contact to call them (from the contact search box), double click to\ncall them or hit return to call them.\n\n### Headset Plugins\n\nHeadset plugins enable advanced headset functionality. This generally\nincludes opening/closing audio links, caller ID displays, button\nhandling, touch screen interfacing, etc.\n\n#### JabraHeadsetPlugin\n\nNote the Jabra PC Suite must be installed. The headsets are a bit ANAL\nand so try to be kind. Answering exactly as a call rings, muting\ninstantly on a call, mashing on the buttons rapidly can cause the\nheadsets to go into a state where events are not properly generated. Use\nthem with a slight bit of TLC and they will work very well and without\nmuch thinking.\n\n-   Button press support\n-   Open/close audio link (make sure to set “PC Audio Control” to manual\n    under the Jabra Control Center)\n-   Caller ID Support\n-   Touch screen support\n-   Requires To Function: Download and install the Jabra PC Suite:\n    \u003chttp://www.jabra.com/Support/jabra-PC-suite\u003e (you do not need to\n    have it run at startup however)\n\n#### PlantronicsHeadsetPlugin\n\n-   Button press support\n-   Open/Close audio link\n-   Requires To Function: Download the plantronics enterpise SDK from:\n    \u003chttp://www.plantronics.com/us/support/software-downloads/enterprise-sdk.jsp\u003e\n    you need just give them a name and email. Then run\n    PlantronicsURE-SDK.msi and install.\n\nDeveloment/Contributing\n-----------------------\n\nIf you want to work on FSClient please do! Pull requests and bugs through GitHub are always welcome. \nYou can work on the code base itself or plugins, if you would like to work with us please feel free to\ncontact us on IRC we are generally in the main channel (Try for MitchCapper if he is there). \n\n### Plugin Development\n\nThere are two types of plugins, contact plugins and headset plugins. It\nis important to note that FSClient tries to catch and hide most errors\nplugins generate and send them to a log file. For writing plugins this\ncan be annoying if you are not catching your own exceptions and so you\nmay want to disable this code in FSClient. There are a few plugins\nincluded in the FSClient code base take a look at these for examples.\nNote since version 1.2 plugin file names MUST match the file naming\nconvention or FSClient will not try to load them. Headset plugins must\nend in HeadsetPlugin.dll and contact plugins must end in\nContactPlugin.dll. An example of a valid contact plugin filename is:\nSimpleXMLContactPlugin.dll.\n\n#### Headset Plugins\n\nAll headset plugins must inherit from IHeadsetPlugin and each actual\nheadset must be an instance of IHeadsetDevice. Your headset plugin\nshould be able to handle if the user does not have the runtime/headset\ninstalled on the machine without throwing any errors, and certainly\nwithout popping up any message boxes. The headset manager will try to\ncatch and hide any exceptions from the user, but these should not occur\ntoo often. There are some flags each headset device can specify, so the\nheadset manager knows a bit about handling them. ANAL had the goal to\nonly send plugins actual changes and avoid any duplicate events going to\nthe headset (for example telling it to enable the audio link if already\nenabled), it is currently has no effect however and the headset manager\ntries to be anal with all. Aside from consuming events it is expected\nthat headsets generate events for things like button pushes, etc if they\nsupport this.\n\n#### Contact Plugins\n\nContact plugins can inherit either from IContactPlugin or the helper\nclass SimpleContactPluginBase (ignore the Sync functions). SimpleContactPluginBase is the easiest to\nimplement, and if you like the functionality of the built in\nSimpleXMLContactPlugin but just want a different datastore (either local\nor remote) it can be the way to go. SimpleContactPlugin has very low\nrequirements, implement UpdateDatabase, SaveDatabase, LoadDatabase, and\nProviderName and you are done. You want to store the database in\nnumber\\_to\\_alias\\_db which is a dictionary of string to string's of the\nphone number to the alias it goes with. There are additional functions\nyou can implement to add additional functionality. IContactPlugin is a\nbit more complex to implement but gives more flexibility, The contact\nsearch box does next to nothing for you out of the box, so you must\nimplement whatever functionality you want (if you want to support the\ncontact find box). See SimpleContactBase for how it behaves and if you\ncan emulate its functions to give a consistent user experience.  There is\nalso a newer SimpleContactPluginBaseAsync.  It has Task based functions\nfor those that may be async.\n\n### General Class/File Layout\n\nNote plugins should only interact with utility classes (including\ngeneric editor/input box if desired) and broker. Plugins should\ngenerally avoid talking to other classes if possible.\n\n-   Account - Handles account settings, generating the account config,\n    and handle account changes.\n-   Broker - This is the central manager class, for the most part other\n    classes are generally meant to not talk to either other directly,\n    but instead interact through the broker. This gives a consistant\n    interface for activity. Broker is in charge of spinning up almost\n    all other classes, initializing the freeswitch core, disperses\n    events, and generates events for most common changes that occur.\n-   Call - Handles call information, interpreting call events and\n    call actions.\n-   Conference - Tracks the conference for multi-party calling and\n    people in the conference\n-   Converters - GUI xaml converters for converting data to nice display\n    formats\n-   DelayedFunction - Allows for other classes to schedule tasks to\n    occur in the future. Has one primary function, DelayedCall that\n    takes a key, a function, and how many ms from now to cause it\n    to happen. It checks for due functions every 200ms. If a key is past\n    in then it will remove any other functions of the same key from the\n    queue prior to adding the new one. This is useful for status changes\n    to avoid firing stale changes.\n-   EventSocket - Handles event socket preferences\n-   Field - This class handles configuration data. It is how any dynamic\n    configuration data should be stored. It makes it very easy to add or\n    remove, settings, serialize them to XML and works with GenericEditor\n    to give a GUI for them also. If you want to save more than a few\n    settings (for example a bunch of settings for config generation) you\n    want to use these.\n-   FSEvent - Wrapper around the freeswitch core events providing some\n    helper functions and general parameters.\n-   GenericEditor - A multi-tab/categorized gui editor that works with\n    the Field's classes to give an instant gui configuration for any\n    Field settings with 0 gui coding.\n-   IContactPlugin - Has the base class for any contact plugins(other\n    than SimpleContactPluginBase) along with the Contact Plugin Manager\n    that handles contact plugins.\n-   IHeadsetPlugin - Has the base class for any headset plugins along\n    with the Headset Plugin Manager that handles headset plugins.\n-   IncomingCallNotification - Systray / balloon popup window for\n    incoming calls\n-   InputBox - Generic popup input box class for collecting input from a\n    user\n-   IPlugin - Base class for all plugins with abstract structure\n-   MainWindow - The main window\n-   Options - The main options GUI\n-   PluginOptionsWindow - GUI for the plugin options\n-   PluginManagerBase - This is a base class for any plugin manager.\n    Handles some common tasks like loading plugins, saving/loading\n    enabled plugins preferences.\n-   PortAudio - The wrapper around all portaudio related items.\n-   SimpleContactPluginBase - A base class that implements\n    IContactPlugin partially to allow for simpler Contact Plugins\n-   Sofia - Handles sofia settings, generating sofia config, and sofia\n    changes\n-   Utils - Basic FSClient utilities, debug logging, general paths,\n    along with the BGAPI class. BGAPI executes freeswitch core API calls\n    in the background in the order received. This is useful if you want\n    to execute something but do not care about the result and do not\n    want to tie the GUI up. Simply calling api\\_exec with the cmd and\n    args is all it takes and it will return instantly.\n-   Windows - Windows specific code, originally separated out when cross\n    platform was a goal. Currently only manages the systray icon.\n-   XmlUtils - XML helper functions\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcapper%2Ffsclient","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitchcapper%2Ffsclient","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcapper%2Ffsclient/lists"}