2012-12-25 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.34 * AUTHORS: Add a new bug finger Thomas Mangin #19 #17 * README.md: Haxogreen 2012 presentation added * bin/forban_announce.py: Fix #19 The forban bundle directory is a special directory in the share folder used for two purposes: - Storing static pages used by the HTTP interface of Forban. (only useful if people are directly browsing the Forban) - Storing the current index of the Forban itself. (quite important as this used by other Forban to download the index) By default the directory exists in the forban directory, if the Forban owner decided to move it somewhere else. The directory Forban should exist so this patch creates it by default if not existing. * README.md: Clarification regarding issue #19 and custome share directory * lib/announce.py: Singleton comparaison must always be done with 'is' (PEP 8) * lib/tools.py: Singleton comparaison must always be done with 'is' (PEP 8) 2012-11-23 Alexandre Dulaunoy * bin/forban_discover.py: missed exception - fixed issue #17 2012-11-01 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.33 + config notes updated * lib/fetch.py: Set default url of User-Agent string * bin/forban_discover.py, bin/forban_share.py, lib/announce.py, lib/discover.py: Cleanup pull #15 - white-spaces/smarttab * bin/forban_announce.py: Updated the pull request #15 from MaStr. setDestination method is called as a last resort to avoid issue older configuration and be sure that the default broadcast addresses are used. 2012-10-30 Matthias Strubel * bin/forban_announce.py, cfg/forban.cfg-sample, lib/announce.py: Enabling custom broadcast destinations Logging Debug&Errors of announcent in more detail to python_announce.log Can be used for fixing #13 Fixes #8 * bin/forban_announce.py, bin/forban_discover.py, bin/forban_share.py, lib/announce.py, lib/discover.py: Some fixes for disabling IPv6 2012-10-28 Matthias Strubel * cfg/forban.cfg-sample: raized version to make the new option clear * .gitignore: First try disabling IPv6 stuff (testing stage) 2012-04-09 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.32 * bin/forbanctl: Fixed #12 test if loot directory exists * bin/forbanctl: Fixed #9 lootcleanup added lootcleanup is removing all the Forban loots discovered (including self) Useful for devices having not real clock references. This can be called at boot, before starting the Forban processes. * bin/forban_share.py: Fixed #10 The browsing is now naturally sorted. 2012-04-08 Alexandre Dulaunoy * bin/forbanctl: Fixed #7 cleanup mode added This modes check for existing PID (based on forban_*.pid), if they exist kill the PID and remove the PID files. If the processes are not existing, the PID files are removed too. Try to keep the portability by using the POSIX standard "Signal 0" * bin/forbanctl: Removed unused function * AUTHORS: added Matthias Strubel 2012-04-07 Alexandre Dulaunoy * cfg/forban.cfg-sample: Fixed #7 - remove blank space in front of indexrebuild * bin/forban_announce.py, cfg/forban.cfg-sample: fixed #6 index rebuild factor added The index rebuild made the index factor independant from the Forban announce interval. The factor is used to limit the number of index rebuild to avoid accessing filesystem too much on low-end hardware. * lib/index.py: fixed #6 (symbolic links followed for index building) Index building is now following symbolic links. As this was requested for low-end hardware where the shared files are shared among flash, ram-based fs... There are security risks to include symbolic links that should be considered when adding links in the shared directory. CherryPy is already supporting symbolic links for the HTTP server. 2012-03-27 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.31 2012-03-18 Alexandre Dulaunoy * README.md: Added a link to the presentation given at FOSDEM 2011 * AUTHORS: resuscv added as CONTRIBUTOR 2012-03-10 Alexandre Dulaunoy * lib/ext/cherrypy/test/__init__.py, lib/ext/cherrypy/test/_test_decorators.py, lib/ext/cherrypy/test/_test_states_demo.py, lib/ext/cherrypy/test/benchmark.py, lib/ext/cherrypy/test/checkerdemo.py, lib/ext/cherrypy/test/fastcgi.conf, lib/ext/cherrypy/test/fcgi.conf, lib/ext/cherrypy/test/helper.py, lib/ext/cherrypy/test/logtest.py, lib/ext/cherrypy/test/modfastcgi.py, lib/ext/cherrypy/test/modfcgid.py, lib/ext/cherrypy/test/modpy.py, lib/ext/cherrypy/test/modwsgi.py, lib/ext/cherrypy/test/sessiondemo.py, lib/ext/cherrypy/test/static/dirback.jpg, lib/ext/cherrypy/test/static/index.html, lib/ext/cherrypy/test/style.css, lib/ext/cherrypy/test/test.pem, lib/ext/cherrypy/test/test_auth_basic.py, lib/ext/cherrypy/test/test_auth_digest.py, lib/ext/cherrypy/test/test_bus.py, lib/ext/cherrypy/test/test_caching.py, lib/ext/cherrypy/test/test_config.py, lib/ext/cherrypy/test/test_config_server.py, lib/ext/cherrypy/test/test_conn.py, lib/ext/cherrypy/test/test_core.py, lib/ext/cherrypy/test/test_dynamicobjectmapping.py, lib/ext/cherrypy/test/test_encoding.py, lib/ext/cherrypy/test/test_etags.py, lib/ext/cherrypy/test/test_http.py, lib/ext/cherrypy/test/test_httpauth.py, lib/ext/cherrypy/test/test_httplib.py, lib/ext/cherrypy/test/test_json.py, lib/ext/cherrypy/test/test_logging.py, lib/ext/cherrypy/test/test_mime.py, lib/ext/cherrypy/test/test_misc_tools.py, lib/ext/cherrypy/test/test_objectmapping.py, lib/ext/cherrypy/test/test_proxy.py, lib/ext/cherrypy/test/test_refleaks.py, lib/ext/cherrypy/test/test_request_obj.py, lib/ext/cherrypy/test/test_routes.py, lib/ext/cherrypy/test/test_session.py, lib/ext/cherrypy/test/test_sessionauthenticate.py, lib/ext/cherrypy/test/test_states.py, lib/ext/cherrypy/test/test_static.py, lib/ext/cherrypy/test/test_tools.py, lib/ext/cherrypy/test/test_tutorials.py, lib/ext/cherrypy/test/test_virtualhost.py, lib/ext/cherrypy/test/test_wsgi_ns.py, lib/ext/cherrypy/test/test_wsgi_vhost.py, lib/ext/cherrypy/test/test_wsgiapps.py, lib/ext/cherrypy/test/test_xmlrpc.py, lib/ext/cherrypy/test/webtest.py, lib/ext/cherrypy/tutorial/README.txt, lib/ext/cherrypy/tutorial/__init__.py, lib/ext/cherrypy/tutorial/bonus-sqlobject.py, lib/ext/cherrypy/tutorial/custom_error.html, lib/ext/cherrypy/tutorial/pdf_file.pdf, lib/ext/cherrypy/tutorial/tut01_helloworld.py, lib/ext/cherrypy/tutorial/tut02_expose_methods.py, lib/ext/cherrypy/tutorial/tut03_get_and_post.py, lib/ext/cherrypy/tutorial/tut04_complex_site.py, lib/ext/cherrypy/tutorial/tut05_derived_objects.py, lib/ext/cherrypy/tutorial/tut06_default_method.py, lib/ext/cherrypy/tutorial/tut07_sessions.py, .../tutorial/tut08_generators_and_yield.py, lib/ext/cherrypy/tutorial/tut09_files.py, lib/ext/cherrypy/tutorial/tut10_http_errors.py, lib/ext/cherrypy/tutorial/tutorial.conf: CherryPy test and tutorial removed 2012-01-22 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.30 * lib/ext/cherrypy/LICENSE.txt, lib/ext/cherrypy/__init__.py, lib/ext/cherrypy/_cpchecker.py, lib/ext/cherrypy/_cpconfig.py, lib/ext/cherrypy/_cpdispatch.py, lib/ext/cherrypy/_cperror.py, lib/ext/cherrypy/_cplogging.py, lib/ext/cherrypy/_cpmodpy.py, lib/ext/cherrypy/_cprequest.py, lib/ext/cherrypy/_cpserver.py, lib/ext/cherrypy/_cptools.py, lib/ext/cherrypy/_cptree.py, lib/ext/cherrypy/_cpwsgi.py, lib/ext/cherrypy/_cpwsgi_server.py, lib/ext/cherrypy/cherryd, lib/ext/cherrypy/favicon.ico, lib/ext/cherrypy/lib/__init__.py, lib/ext/cherrypy/lib/auth.py, lib/ext/cherrypy/lib/caching.py, lib/ext/cherrypy/lib/covercp.py, lib/ext/cherrypy/lib/cptools.py, lib/ext/cherrypy/lib/encoding.py, lib/ext/cherrypy/lib/http.py, lib/ext/cherrypy/lib/httpauth.py, lib/ext/cherrypy/lib/profiler.py, lib/ext/cherrypy/lib/sessions.py, lib/ext/cherrypy/lib/static.py, lib/ext/cherrypy/process/plugins.py, lib/ext/cherrypy/process/servers.py, lib/ext/cherrypy/process/win32.py, lib/ext/cherrypy/process/wspbus.py, lib/ext/cherrypy/scaffold/__init__.py, lib/ext/cherrypy/scaffold/site.conf, lib/ext/cherrypy/test/__init__.py, lib/ext/cherrypy/test/benchmark.py, lib/ext/cherrypy/test/checkerdemo.py, lib/ext/cherrypy/test/helper.py, lib/ext/cherrypy/test/logtest.py, lib/ext/cherrypy/test/modfcgid.py, lib/ext/cherrypy/test/modpy.py, lib/ext/cherrypy/test/modwsgi.py, lib/ext/cherrypy/test/test_caching.py, lib/ext/cherrypy/test/test_config.py, lib/ext/cherrypy/test/test_conn.py, lib/ext/cherrypy/test/test_core.py, lib/ext/cherrypy/test/test_encoding.py, lib/ext/cherrypy/test/test_etags.py, lib/ext/cherrypy/test/test_http.py, lib/ext/cherrypy/test/test_httpauth.py, lib/ext/cherrypy/test/test_httplib.py, lib/ext/cherrypy/test/test_logging.py, lib/ext/cherrypy/test/test_misc_tools.py, lib/ext/cherrypy/test/test_objectmapping.py, lib/ext/cherrypy/test/test_proxy.py, lib/ext/cherrypy/test/test_refleaks.py, lib/ext/cherrypy/test/test_routes.py, lib/ext/cherrypy/test/test_session.py, lib/ext/cherrypy/test/test_sessionauthenticate.py, lib/ext/cherrypy/test/test_states.py, lib/ext/cherrypy/test/test_static.py, lib/ext/cherrypy/test/test_tools.py, lib/ext/cherrypy/test/test_tutorials.py, lib/ext/cherrypy/test/test_virtualhost.py, lib/ext/cherrypy/test/test_wsgi_ns.py, lib/ext/cherrypy/test/test_wsgi_vhost.py, lib/ext/cherrypy/test/test_wsgiapps.py, lib/ext/cherrypy/test/test_xmlrpc.py, lib/ext/cherrypy/test/webtest.py, lib/ext/cherrypy/tutorial/bonus-sqlobject.py, lib/ext/cherrypy/tutorial/custom_error.html, lib/ext/cherrypy/tutorial/tut02_expose_methods.py, lib/ext/cherrypy/tutorial/tut03_get_and_post.py, lib/ext/cherrypy/tutorial/tut04_complex_site.py, lib/ext/cherrypy/tutorial/tut05_derived_objects.py, lib/ext/cherrypy/tutorial/tut06_default_method.py, lib/ext/cherrypy/tutorial/tut07_sessions.py, .../tutorial/tut08_generators_and_yield.py, lib/ext/cherrypy/tutorial/tut09_files.py, lib/ext/cherrypy/tutorial/tut10_http_errors.py, lib/ext/cherrypy/wsgiserver/__init__.py: bundled CherryPy updated to 3.2.2 * lib/base64e.py: b64decode assumes bytes stream by default We encode the string as UTF-8 (ASCII) as the input is the Base64 ASCII charmap. 2011-06-21 Alexandre Dulaunoy * doc/NOTES: added dynamic DNS idea + other 2011-04-24 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.29 2011-04-10 Alexandre Dulaunoy * cfg/forban.cfg-sample: Sample config for opportunistic_fs 2011-02-22 Alexandre Dulaunoy * AUTHORS: AUTHORS document updated * AUTHORS: AUTHORS page added + thanks page * lib/loot.py: Remove IPv4 only for index fetching. Reported by rafiot on system with IPv6 only * lib/tools.py: tools: finddir() added finddir() function is finding directories recursively following a specific pattern. To be used in the opportunistic_fs mode to discover Forban directory on removable media. * lib/tools.py: tools: dirtree() function added dirtree() is a function to walk in a directory to get each filename, size and last modification time. * bin/forban_opportunistic_fs.py: opportunistic_fs: skeleton code added The idea is to have an additional Forban services to exchange files in opportunistic or shared mode using removal media. This based on a discussion with various users like Doegox and Creighton. * cfg/forban.cfg-sample: opportunistic_fs: check forban directory presence * cfg/forban.cfg-sample: opportunistic_fs: sample configuration added 2011-02-18 Philippe Teuwen * bin/forban_share.py: forban_share: avoid cherrypy showing tracebacks in case of err E.g. avoid leaking info on internal paths * bin/forban_share.py, var/share/forban/img/forban-favicon.png: forban_share: new favicon * bin/forban_share.py: forban_share: avoid cherrypy showing tracebacks in case of err E.g. avoid leaking info on internal paths 2011-02-13 Alexandre Dulaunoy * bin/forban_share.py: forban_share: removed v4/v6 links Links are now relative to get the file. Useful if you browse the Forban services via Tor .onion or a proxy services. * bin/forban_share.py: forban_share: make link relative for own Forban 2011-02-12 Alexandre Dulaunoy * doc/NOTES: added Forban on removal devices idea 2011-02-06 Alexandre Dulaunoy * bin/bash-forban/bforban.sh: Removed -iany from tcpdump (Linux specific) * doc/NOTES: added comments/ideas gathered at FOSDEM 2011 2011-01-28 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.28 * bin/forban_announce.py: added dynpath missing for announce 2011-01-23 Alexandre Dulaunoy * bin/bash-forban/bforban.sh: Forban bash client: listen on any network device * cfg/forban.cfg-sample: Forban 0.0.27 * bin/bash-forban/bforban.sh: bash client: bmonitor mode added The Forban bash "client" got a functionnality to automatically open a web browser when a new Forban is discovered. bmonitor works on MacOS and Unix with Firefox installed. * lib/fetch.py: don't continue to handle socket when timed out we don't need to continue handling the handle while the socket already timeout. Instead of stopping on file handle timeout, we return a False. * bin/forban_share.py: forban/index always as a text/plain mime type 2011-01-21 Alexandre Dulaunoy * lib/index.py: be liberal even if the underlying fs is changed * bin/forban_opportunistic.py: less verbose logging * cfg/forban.cfg-sample: Don't exclude everything by default in sample conf 2011-01-17 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.26 2011-01-16 Alexandre Dulaunoy * lib/announce.py, lib/fid.py, lib/loot.py: forban.fid path lookup fixed 2011-01-06 Alexandre Dulaunoy * bin/forban_opportunistic.py, bin/forban_share.py: Path creation cleanup * bin/forban_opportunistic.py, bin/forban_share.py, lib/loot.py: path creation cleanup * bin/forbanctl: forbanctl: delay of 0.15sec added 2010-12-31 Alexandre Dulaunoy * README.md: Protocol information more readable * cfg/forban.cfg-sample: Forban 0.0.25 * README.md, bin/forban_share.py: Missing links added * README.md: README in markdown format + quick install guide * bin/bash-forban/bforban.sh: Typo fixed * bin/bash-forban/bforban.sh: Forban bash client: search function added Now you can use the forban bash client to search for all the indexes dicovered. The script requires only Bash, curl and tcpdump. The script is used to show how easy is to build a software using the Forban protocol. A sample output: sudo bash bforban.sh search unix Found Forban elliptic (5f916370-083f-4603-98ce-8051b70e71cb) http://192.168.1.5:12555/ -> Unix/Albing - Bash Cookbook [unix shell programming] (O'Reilly, 2007).pdf,1999734 -> Unix/Learning The vi And Vim Editors 7th Ed.pdf,7261405 -> Unix/awk.txt,29190 -> Unix/ProBash.pdf,1505268 -> Unix/Effective-AWK-Programming.pdf,3488653 -> Unix/OReilly Version Control with GIT.pdf,1901067 -> Unix/LinuxJournal/Linux Journal 183 - July 2009.pdf,20481947 -> Unix/LinuxJournal/Linux Journal 185 - September 2009.pdf,17966468 -> Unix/LinuxJournal/Linux Journal 182 - June 2009.pdf,22835700 -> Unix/LinuxJournal/Linux Journal 181 - May 2009.pdf,22174869 -> Unix/LinuxJournal/Linux Journal 174 - October 2008.pdf,14520275 -> Python/Gift - Python for Unix and Linux System Administration (O'Reilly, 2008).pdf,3585227 -> Python/Python for Unix and Linux System Administration; Jason Brittain, Ian F. Darwin (O'Reilly, 2008).pdf,3204317 2010-12-30 Alexandre Dulaunoy * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py: Config file exception handling simplified As we want to have Forban running without configuration files, we catch globally all the errors generated by the ConfigParser. 2010-12-27 Alexandre Dulaunoy * cfg/forban.cfg-sample: name and path are no more mandatory * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: guesspath now works for Win32 platforms * bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: in default, there is no opportunistic global var * bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: fallback to opportunistic mode in any case Even if the configuration file is missing or the configuration is incorrect, the default mode of operation is opportunistic. Useful for dedicated forban USB stick. * bin/forbanctl: Even if the config file is missing, try to start 2010-12-26 Alexandre Dulaunoy * bin/bash-forban/bforban.sh: Forban standalone client in bash script The current version of the script is able to discover forban (using tcpdump) and display the URLs for each discovered forban (monitor mode). 2010-12-25 Alexandre Dulaunoy * bin/forban_announce.py, bin/forban_share.py, lib/tools.py: Guess Forban name if not set in config The Forban name is not linked to the UUID and is there to help users to name/search for a device. So you can change the forban name when the user wants. This is also useful for self-deployable Forban where there is no name set by default and guessing Forban name is usually enough to get a proper name. This should work on Windows and Unix-like platform. 2010-12-22 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.24 * bin/forbanctl: restart function added * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: Guess a Forban root path even if not set For the upcoming version self-deployable version, the root path is guessed if not set by the config file. 2010-12-21 Alexandre Dulaunoy * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: Guessing realpath of Forban installation added As the Forban processes can be started from anywhere, we guess the installation path. This allows to have an absolute path to read the configuration without additional ENV variables. * lib/index.py: Recursive caching directory creation This is fixing a bug when you are cleaning all the loot cache and restart Forban services. 2010-12-09 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.23 * lib/fetch.py: fetch: catching socket timeout. This is useful for forban_opportunistic forban_discover while trying to fetch files from a lost Forban or a disconnected network. * bin/forban_opportunistic.py: forban_opportunistic: cleanup exclusion list and logging * bin/forban_opportunistic.py, cfg/forban.cfg-sample: forban_opportunistic: an exclusion filter added to exclude some files to be downloaded. 2010-12-07 Alexandre Dulaunoy * bin/forbanctl: Exit gracefully when the forban config file is missing 2010-11-01 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.22 * lib/loot.py: return a default value for the lastseen of a specific loot. This is to avoid any issue when the lastseen cannot be retrieved due to some race condition as we are just relying on the filesystem to store the value. * bin/forban_opportunistic.py: don't try to get value when the loot is currently not existing. * bin/forban_share.py: remove query string output * lib/index.py: exclude .dotfile from search results 2010-10-31 Alexandre Dulaunoy * bin/forban_share.py: don't show missing link on itself 2010-08-28 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.21 * bin/forban_opportunistic.py, cfg/forban.cfg-sample: opportunistic: maximum size function added to stop fetching if the limit is reached. This is to avoid filling the disk with large loot. * bin/forban_opportunistic.py: fail safely if not filter is configured * README: Python 2.7 tests ok * bin/forbanctl: Check if only one instance of Forban processes is running and don't start if more than one is already running * bin/forban_discover.py: remove import of unused time module 2010-07-10 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.20 2010-07-03 Alexandre Dulaunoy * bin/forban_announce.py, bin/forban_opportunistic.py, cfg/forban.cfg-sample: logging : added a maximum file size. 2010-07-01 Alexandre Dulaunoy * bin/forban_share.py: Add size information while browsing a Forban * lib/index.py: Escape the literal string when compiling regular expression * bin/forban_share.py: Make actions more self explanatory 2010-06-05 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.19 * doc/I-D/forban-p2p.rst, doc/I-D/forban-p2p.txt, doc/I-D/forban-p2p.xml: Forban protocol updated description * lib/ext/cherrypy/__init__.pyc, lib/ext/cherrypy/_cpcgifs.pyc, lib/ext/cherrypy/_cpchecker.pyc, lib/ext/cherrypy/_cpconfig.pyc, lib/ext/cherrypy/_cpdispatch.pyc, lib/ext/cherrypy/_cperror.pyc, lib/ext/cherrypy/_cplogging.pyc, lib/ext/cherrypy/_cprequest.pyc, lib/ext/cherrypy/_cpserver.pyc, lib/ext/cherrypy/_cptools.pyc, lib/ext/cherrypy/_cptree.pyc, lib/ext/cherrypy/_cpwsgi.pyc, lib/ext/cherrypy/_cpwsgi_server.pyc, lib/ext/cherrypy/lib/__init__.pyc, lib/ext/cherrypy/lib/auth.pyc, lib/ext/cherrypy/lib/caching.pyc, lib/ext/cherrypy/lib/cptools.pyc, lib/ext/cherrypy/lib/encoding.pyc, lib/ext/cherrypy/lib/http.pyc, lib/ext/cherrypy/lib/httpauth.pyc, lib/ext/cherrypy/lib/sessions.pyc, lib/ext/cherrypy/lib/static.pyc, lib/ext/cherrypy/lib/tidy.pyc, lib/ext/cherrypy/lib/wsgiapp.pyc, lib/ext/cherrypy/lib/xmlrpc.pyc, lib/ext/cherrypy/process/__init__.pyc, lib/ext/cherrypy/process/plugins.pyc, lib/ext/cherrypy/process/servers.pyc, lib/ext/cherrypy/process/win32.pyc, lib/ext/cherrypy/process/wspbus.pyc, lib/ext/cherrypy/wsgiserver/__init__.pyc: Cleanup and removal of python compiled files * bin/forban_share.py, var/share/forban/css/x.css: Added total size of each Forban discovered 2010-06-03 Alexandre Dulaunoy * lib/index.py: index : new function to get total size of a specific forban * lib/tools.py: tools : added a function to make du-like bytes output 2010-05-27 Alexandre Dulaunoy * doc/NOTES: NOTES : updates for [done] and [todo] 2010-05-24 Alexandre Dulaunoy * doc/I-D/forban-p2p.rst, doc/I-D/forban-p2p.xml, doc/I-D/refs/RFC2119.xml, doc/I-D/refs/RFC4122.xml: Forban protocol Internet-Draft ongoing work... 2010-05-14 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.18 * bin/forbanctl: forbanctl : stopping Forban services on win32 added 2010-05-13 Alexandre Dulaunoy * lib/fetch.py, lib/index.py, lib/loot.py, lib/tools.py: tools.rename used instead of os.rename (win32 support) * lib/tmpname.py: tmpname() : custom suffix added as a parameter * bin/forban_share.py: forban_share: don't show temporary files when browsing the index * lib/tools.py: tools.rename() added to support specific platform like Windows 2010-05-02 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.17 * lib/loot.py: Fix bug if loot is not existing and trying to update hmac value in the loot directory. * cfg/forban.cfg-sample: Forban 0.0.16 * lib/index.py: fixing index not existing * lib/announce.py: avoid hmac announcing value if not calculated * lib/index.py: HMAC support cleanup * lib/index.py: if hmac path doesn't not exist, don't try to go further * bin/forban_announce.py, lib/announce.py, lib/index.py: hmac support added to fetch index only on update * lib/loot.py: use luuid instead of the non-existing self.uuid * lib/loot.py: loot: HMAC support added * lib/loot.py: announce protocol - name and uuid are REQUIRED while hmac is RECOMMENDED in the announce message. order of key-value is not required. name and uuid are REQUIRED but the hmac is RECOMMENDED as this helps to limit the fetching of the index. 2010-05-01 Alexandre Dulaunoy * bin/forban_opportunistic.py: forban_opportunistic: logging for filter * bin/forban_share.py: forban_share: logging to file (instead of stdout) * bin/forban_opportunistic.py: forban_opportunistic: logging added for info level * bin/forban_announce.py: forban_announce : create log directory if missing 2010-04-29 Alexandre Dulaunoy * bin/forban_announce.py, cfg/forban.cfg-sample: forban_announce : logging added in DEBUG or INFO level * bin/build/build-forban.sh: First Forban build script with Pyinstaller The purpose is to build binary packages of Forban. Now we are able to build Linux packages that won't need Python to run. 2010-04-28 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.15 2010-04-17 Alexandre Dulaunoy * README: Forban Protocol : added the use of HMAC for index update notification * README: README: remove CherryPy as requirements (as now included by default) * bin/forban_announce.py, bin/forban_opportunistic.py, bin/forban_share.py, lib/index.py: index: option for index now used by all forban processes * bin/forban_opportunistic.py, bin/forban_share.py, cfg/forban.cfg-sample: share directory is now based on default path the share directory was an option by default but it seems to be confusing for users. Now the default directory is built on the default forban global directory : forbanglobalpath+"/var/share/" An alternate share directory is still an option but commented in the sample configuration file. 2010-04-16 Alexandre Dulaunoy * lib/index.py: some more directory creation cleanup * bin/forban_share.py: more path cleanup creation * bin/forbanctl: cleanup path creation * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py: cleanup path lib building to allow directory without a trailing slash. (following test done during Breizh Entropy Congress) 2010-04-11 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.14 * lib/index.py: index : exclude temporary/dot files * lib/index.py: index: exclude temporary files of diff index * lib/fetch.py: fetch: don't try to rename unexisting files * lib/loot.py: setlastseen is now atomic * lib/loot.py: Make add a discovered loot atomic 2010-04-07 Alexandre Dulaunoy * doc/NOTES: NOTES updated to reflect past changes + new open points/ideas 2010-03-31 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.13 * lib/discover.py: forban_discover : IPv6/IPv4 detection improved (N900 test) * lib/discover.py: forban_discover : Improved IPv6 detection and IPv4 fallback. * bin/forban_share.py: python_share : before binding in IPv6, test effectively IPv6 socket. (N900 test) * lib/announce.py: Added IPv4 binding fallback (N900 test). Even if Python is compiled with IPv6, it doesn't mean that the os is supporting IPv6. (like the Nokia N900) * bin/forban_share.py: Show when an index is missing. This often means that the announce is there but we are not able to get the index from that announced Forban. This can be an issue with the remote forban (forban_share is not started) or the impossibility to fetch the index file (can be a firewall blocking to access port TCP 12555). 2010-03-28 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.12 * bin/forban_share.py: Use system available CherryPy if available, if not use internal CherryPy. * lib/ext/cherrypy/LICENSE.txt, lib/ext/cherrypy/__init__.py, lib/ext/cherrypy/__init__.pyc, lib/ext/cherrypy/_cpcgifs.py, lib/ext/cherrypy/_cpcgifs.pyc, lib/ext/cherrypy/_cpchecker.py, lib/ext/cherrypy/_cpchecker.pyc, lib/ext/cherrypy/_cpconfig.py, lib/ext/cherrypy/_cpconfig.pyc, lib/ext/cherrypy/_cpdispatch.py, lib/ext/cherrypy/_cpdispatch.pyc, lib/ext/cherrypy/_cperror.py, lib/ext/cherrypy/_cperror.pyc, lib/ext/cherrypy/_cplogging.py, lib/ext/cherrypy/_cplogging.pyc, lib/ext/cherrypy/_cpmodpy.py, lib/ext/cherrypy/_cprequest.py, lib/ext/cherrypy/_cprequest.pyc, lib/ext/cherrypy/_cpserver.py, lib/ext/cherrypy/_cpserver.pyc, lib/ext/cherrypy/_cpthreadinglocal.py, lib/ext/cherrypy/_cptools.py, lib/ext/cherrypy/_cptools.pyc, lib/ext/cherrypy/_cptree.py, lib/ext/cherrypy/_cptree.pyc, lib/ext/cherrypy/_cpwsgi.py, lib/ext/cherrypy/_cpwsgi.pyc, lib/ext/cherrypy/_cpwsgi_server.py, lib/ext/cherrypy/_cpwsgi_server.pyc, lib/ext/cherrypy/cherryd, lib/ext/cherrypy/favicon.ico, lib/ext/cherrypy/lib/__init__.py, lib/ext/cherrypy/lib/__init__.pyc, lib/ext/cherrypy/lib/auth.py, lib/ext/cherrypy/lib/auth.pyc, lib/ext/cherrypy/lib/caching.py, lib/ext/cherrypy/lib/caching.pyc, lib/ext/cherrypy/lib/covercp.py, lib/ext/cherrypy/lib/cptools.py, lib/ext/cherrypy/lib/cptools.pyc, lib/ext/cherrypy/lib/encoding.py, lib/ext/cherrypy/lib/encoding.pyc, lib/ext/cherrypy/lib/http.py, lib/ext/cherrypy/lib/http.pyc, lib/ext/cherrypy/lib/httpauth.py, lib/ext/cherrypy/lib/httpauth.pyc, lib/ext/cherrypy/lib/profiler.py, lib/ext/cherrypy/lib/safemime.py, lib/ext/cherrypy/lib/sessions.py, lib/ext/cherrypy/lib/sessions.pyc, lib/ext/cherrypy/lib/static.py, lib/ext/cherrypy/lib/static.pyc, lib/ext/cherrypy/lib/tidy.py, lib/ext/cherrypy/lib/tidy.pyc, lib/ext/cherrypy/lib/wsgiapp.py, lib/ext/cherrypy/lib/wsgiapp.pyc, lib/ext/cherrypy/lib/xmlrpc.py, lib/ext/cherrypy/lib/xmlrpc.pyc, lib/ext/cherrypy/process/__init__.py, lib/ext/cherrypy/process/__init__.pyc, lib/ext/cherrypy/process/plugins.py, lib/ext/cherrypy/process/plugins.pyc, lib/ext/cherrypy/process/servers.py, lib/ext/cherrypy/process/servers.pyc, lib/ext/cherrypy/process/win32.py, lib/ext/cherrypy/process/win32.pyc, lib/ext/cherrypy/process/wspbus.py, lib/ext/cherrypy/process/wspbus.pyc, lib/ext/cherrypy/scaffold/__init__.py, lib/ext/cherrypy/scaffold/example.conf, lib/ext/cherrypy/scaffold/site.conf, .../scaffold/static/made_with_cherrypy_small.png, lib/ext/cherrypy/test/__init__.py, lib/ext/cherrypy/test/benchmark.py, lib/ext/cherrypy/test/checkerdemo.py, lib/ext/cherrypy/test/helper.py, lib/ext/cherrypy/test/logtest.py, lib/ext/cherrypy/test/modfcgid.py, lib/ext/cherrypy/test/modpy.py, lib/ext/cherrypy/test/modwsgi.py, lib/ext/cherrypy/test/py25.py, lib/ext/cherrypy/test/static/dirback.jpg, lib/ext/cherrypy/test/static/index.html, lib/ext/cherrypy/test/style.css, lib/ext/cherrypy/test/test.pem, lib/ext/cherrypy/test/test.py, lib/ext/cherrypy/test/test_caching.py, lib/ext/cherrypy/test/test_config.py, lib/ext/cherrypy/test/test_conn.py, lib/ext/cherrypy/test/test_core.py, lib/ext/cherrypy/test/test_encoding.py, lib/ext/cherrypy/test/test_etags.py, lib/ext/cherrypy/test/test_http.py, lib/ext/cherrypy/test/test_httpauth.py, lib/ext/cherrypy/test/test_httplib.py, lib/ext/cherrypy/test/test_logging.py, lib/ext/cherrypy/test/test_misc_tools.py, lib/ext/cherrypy/test/test_objectmapping.py, lib/ext/cherrypy/test/test_proxy.py, lib/ext/cherrypy/test/test_refleaks.py, lib/ext/cherrypy/test/test_routes.py, lib/ext/cherrypy/test/test_safe_multipart.py, lib/ext/cherrypy/test/test_session.py, lib/ext/cherrypy/test/test_sessionauthenticate.py, lib/ext/cherrypy/test/test_states.py, lib/ext/cherrypy/test/test_states_demo.py, lib/ext/cherrypy/test/test_static.py, lib/ext/cherrypy/test/test_tidy.py, lib/ext/cherrypy/test/test_tools.py, lib/ext/cherrypy/test/test_tutorials.py, lib/ext/cherrypy/test/test_virtualhost.py, lib/ext/cherrypy/test/test_wsgi_ns.py, lib/ext/cherrypy/test/test_wsgi_vhost.py, lib/ext/cherrypy/test/test_wsgiapps.py, lib/ext/cherrypy/test/test_xmlrpc.py, lib/ext/cherrypy/test/webtest.py, lib/ext/cherrypy/tutorial/README.txt, lib/ext/cherrypy/tutorial/__init__.py, lib/ext/cherrypy/tutorial/bonus-sqlobject.py, lib/ext/cherrypy/tutorial/custom_error.html, lib/ext/cherrypy/tutorial/pdf_file.pdf, lib/ext/cherrypy/tutorial/tut01_helloworld.py, lib/ext/cherrypy/tutorial/tut02_expose_methods.py, lib/ext/cherrypy/tutorial/tut03_get_and_post.py, lib/ext/cherrypy/tutorial/tut04_complex_site.py, lib/ext/cherrypy/tutorial/tut05_derived_objects.py, lib/ext/cherrypy/tutorial/tut06_default_method.py, lib/ext/cherrypy/tutorial/tut07_sessions.py, .../tutorial/tut08_generators_and_yield.py, lib/ext/cherrypy/tutorial/tut09_files.py, lib/ext/cherrypy/tutorial/tut10_http_errors.py, lib/ext/cherrypy/tutorial/tutorial.conf, lib/ext/cherrypy/wsgiserver/__init__.py, lib/ext/cherrypy/wsgiserver/__init__.pyc: CherryPy 3.1.2 package is now part of Forban (to limit external dependencies). When testing out Forban on the OLPC XO-1,the missing part is always CherryPy that is not installed by default. So I have imported the package inside Forban libraries. The license are compatible : BSD-like for CherryPy and AGPL for Forban itself. 2010-03-25 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.11 * lib/index.py: removed HEAD support while caching index for remote Forban The HEAD was introduced to permit the comparison between a cached index and a remote index. The comparison was done only on the size of the file. But this is a bad idea, as the size of a index could give the impression that the index didn't change but some values where inversed (especially the size value after each line). This was introducing a bug where a large download is taking place and files were growing in size. So the fetching of the files was based on the wrong data in the index... A new scheme for checking index change need to be done (especially if the indexes are quite large among the Forban). Maybe the HMAC value of the announce could be used to announce an updated index... * lib/fetch.py: make HTTP GET atomic while writing files * lib/tmpname.py: temporary name function for files has been added * lib/fetch.py: typo fixed * FAQ: FAQ updated to include operation question over wireless networks * lib/announce.py, lib/base64e.py, lib/discover.py, lib/fetch.py, lib/fid.py, lib/index.py, lib/loot.py: License header added * bin/forban_announce.py, bin/forban_discover.py, bin/forban_opportunistic.py, bin/forban_share.py, bin/forbanctl: License header added * doc/COPYING: add the full-text of GNU Affero General Public License version 3 in the default Forban package. 2010-03-21 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.10 * README, bin/forban_opportunistic.py, bin/forban_share.py, lib/base64e.py: Encoding of filename moved from Base64 to safe URL Base64 encoding. Protocol description updated to include the information about the replacement of +,/ and = character. A simple base64e library added. This is introduced to avoid issue with non-Forban client getting the HTTP files via the GET method. 2010-03-12 Alexandre Dulaunoy * bin/forban_opportunistic.py, lib/index.py: Fixing non matching index or where size cannot be get for local file * bin/forban_share.py: fixed a bug on web interface when the index can't be already built 2010-03-07 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.9 * lib/fetch.py: url fetch - default timeout set to 10 seconds * bin/forban_opportunistic.py: opportunistic fetching bug fixed for unseen forban services. opportunistic protocol is not trying to compare or fetch files for not recently seen forban services. * bin/forban_opportunistic.py, doc/NOTES: opportunistic wake-up is now function of the announce time. As the speed of getting the files depends on the stability or mobility of the link. It was more logical to use the announce time as a basis for the wake-up of the opportunistic function. The wake-up depends of the announce time multiply by a small decreasing factor. * bin/forban_announce.py, cfg/forban.cfg-sample: announce interval is now a configurable parameter and the default value is to 10 seconds. The announce parameter defines the interval time between two announces sent. The parameter is important if you have a high mobility or instability in the connectivity. The announce interval recommended is 10 seconds, based on current user experience. 2010-03-02 Alexandre Dulaunoy * doc/NOTES: NOTES added regarding open points and next dev. steps 2010-02-19 Alexandre Dulaunoy * lib/announce.py: add old sha module support fallback if hashlib module is not present 2010-02-14 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.8 * bin/forban_share.py: Show mode in the user web interface * bin/forbanctl: cleanup pid files after stopping forban processes 2010-01-30 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.7 * FAQ: FAQ added to answer questions around Forban and its protocol or mode of operation. * FAQ: FAQ added to answer questions around Forban and its protocol or mode of operationg. * bin/forban_opportunistic.py, lib/index.py: opportunistic : if local file in local loot is larger than the remote loot, we don't try to fetch it. Added a function in the index to get file size locally or from the cached index. * lib/fetch.py: lib url fetch : use shutil.copyfileobj instead of reading directly from memory. Avoid high memory usage while fetching large files. * bin/forban_opportunistic.py: opportunistic : rebuild local index after each HTTP fetch Useful when the distance of a cache is far away and files are quite large. 2010-01-23 Alexandre Dulaunoy * cfg/forban.cfg-sample: Forban 0.0.6 * bin/forban_share.py: forban-share : add url builder function and url get for search output * bin/forban_share.py: forban_share : search added to the main web interface. * README: Forban protocols: modification of the search interface and added more information about the gossip protocol approach in the Forban opportunistic mode. * bin/forban_share.py, lib/index.py: index - missingfiles : return None if no files are missing between Forban * bin/forban_share.py: forban-share : refresh parameter added to permit continuous search * bin/forban_share.py: forban-share : search implemented to search all indexes of last seen Forban/loots. 2010-01-17 Alexandre Dulaunoy * bin/forban_share.py: view diff index : URL fixed * bin/forban_opportunistic.py: opportunistic : only get index if the Forban has been recently seen (to avoid trying to fetch shutdown Forban/loots) * bin/forban_share.py: index/diff index: add link to get files in IPv6 too (if IPv6 is present) 2010-01-16 Alexandre Dulaunoy * bin/forban_opportunistic.py: opportunistic : avoid fetching files from not recently seen Forban/loot 2010-01-13 Alexandre Dulaunoy * bin/forban_share.py, cfg/forban.cfg-sample: bug fix in forban_share : do not try to fetch index if the loot was not seen in the past 300 seconds. This is to avoid locking of the web interface for non available forban but still in the cache. 2010-01-10 Alexandre Dulaunoy * bin/forbanctl: start the discover before the announce. useful to avoid a gap when displaying your own announced forban. * bin/forbanctl, cfg/forban.cfg-sample: shared mode added in addition to the opportunistic mode. shared mode is the same mode as opportunistic without the automatic fetching of files. The shared mode is usually used when you are proposing content (e.g. a large and organized library) but you don't fetch any files proposed by the other loots. opportunistic mode is sharing plus doing the automatic download. 2010-01-06 Alexandre Dulaunoy * lib/index.py: index (bug fix): if index not present and HEAD successful, fetch and save it. 2010-01-05 Alexandre Dulaunoy * bin/forban_discover.py, bin/forban_share.py: discover and share : binding address cleaner (especially for host not supporting IPv6 like the iphone) 2010-01-04 Alexandre Dulaunoy * lib/index.py: bug fix : ensure that index already exists 2010-01-03 Alexandre Dulaunoy * bin/forban_opportunistic.py: opportunistic : don't fetch your own files and avoid duplicate fetch. The duplicate fetch was due to the cache not being updated. * lib/index.py: index: renaming file at index creation to ensure atomicity The purpose is to allow other processes to update the local index when this is required. * lib/fetch.py: cache option removed as this is now part of the index handling * lib/index.py: index cache: we HEAD before GETting the index of each discovered Forban. This is useful to speed up cache gathering while the index are pretty large and remains constant over time. * lib/fetch.py: add caching option 2010-01-02 Alexandre Dulaunoy * lib/fetch.py: fetch: add a HEAD function to get last-modified and content-length * bin/forban_opportunistic.py: opportunistic : filter support added to limit fetching to the specified matching patterns (case-insensitive) * bin/forban_share.py: web interface : add a link on the logo to ease navigation 2009-12-31 Alexandre Dulaunoy * lib/loot.py: keep the %interface in the source IPv6 address. * bin/forban_share.py: add a view of loot indexes from the web interface. (v/uuid) The :12555/v/uuid url is not required in the Forban protocols but this is handy for the users to see what's inside the current indexes. The user can also directly grab a file from the index too. * lib/index.py: index.search : add the ability to search in non-local indexes. * bin/forbanctl: test * bin/forbanctl: don't assume location of Python * bin/forbanctl: forbanctl added to start and stop Forban services All the logging is done on stdout with the current version this may change in the future. 2009-12-29 Alexandre Dulaunoy * lib/index.py: index: if we want to compare an index line-by-line. The line must be sorted before hand. * bin/forban_opportunistic.py: first opportunistic client added. The opportunistic client is looking at the missing files between the local index and the discovered loot runnning on other Forban. If files are missing from the local index, they are automatically fetched and saved in the local share directory. * bin/forban_announce.py, bin/forban_share.py: forban index rebuild move from share process to announce process. The rebuild of the local index needs to be performed regularly and in link with the announce. That's why we moved the index rebuild to the the announce process. This also ensures that a single process is in charge of the local index rebuild. * README, bin/forban_share.py: get file from the file index with filename encoded in Base64 to allow any format of filename in the index. * bin/forban_share.py: web interface : add a visual interface of file missed in the cache and a link to download the file. Useful if you are using the opportunistic mode and still want to download files from the discovered loot. * bin/forban_share.py, var/share/forban/css/x.css, var/share/forban/img/forban-small.png: web interface : forban logo added 2009-12-25 Alexandre Dulaunoy * cfg/forban.cfg-sample: sample configuration : mode opportunistic and shared added with an explanation for each mode. The mode opportunistic is the default mode. * README: Python 2.5 is required due to the uuid library * lib/index.py: index: added a basic search function taking a regular expression as input and returns a list of matched lines in the local index. 2009-12-23 Alexandre Dulaunoy * bin/forban_share.py, lib/index.py: added a function to compare the files missing between index caches in each loot discovered. This function is used by the opportunistic file fetching to know which files need to be get. * lib/fetch.py: be more liberal in exception handling when trying to fetch a Forban HTTP URL. As the link-local connectivity can be unstable, we just go on when fetching a file. * bin/forban_share.py, lib/fetch.py, lib/index.py: caching mechanism introducted for each loot The caching mechanism of Forban indexes is the base for checking the differences of indexes among the Forban on a same link-local. The caches are compared (and filtered if the user wants that) and difference are collected on the each Forban. * lib/loot.py: force IPv4 when building URL (especially that urllib2 has still some major issues with IPv6 URLs, TBF) * lib/loot.py: check for the existence of the UUID (in some rare case, the UUID can be created while the lastseen has not been created) * cfg/forban.cfg, lib/loot.py: exclude cache directory from loot uid * lib/loot.py: getindexurl added to get Forban a list of index url for a specific loot * lib/loot.py: make exist function public * bin/forban_share.py, lib/loot.py: list all the discovered loot is now function * bin/forban_share.py, lib/loot.py: lastseen function added to discard unseen services for a specify time 2009-12-22 Alexandre Dulaunoy * README: About the flooding of the announce in broadcast and link-local all nodes address * README: README: added some clarity in message format * bin/forban_share.py, lib/loot.py: Added a view listing the discovered services and minimal loot interface to get the requested parameters to build URLs. * README: README: add more information about the required Python and CherryPy * lib/loot.py: self information added in the directory of discovered loots. This is used for avoiding getting files from the same Forban doing the announce and the discovery. Quite important for the future opportunistic sharing. * README, bin/forban_share.py, cfg/forban.cfg-sample, var/share/forban/css/x.css: Forban minimal HTTP service added using CherryPy The service is used to get the index : http://:12555/s/?g=forban/index and to get a specific file from the index using : http://:12555/s/?g= * lib/index.py: forban : simple index builder for the shared loot The format of the index is the filename (with the subdirectory of loot) and the size of the file. The index is located in shared fixed location on the HTTP Forban service. The index is in text format (UTF encoded). 2009-12-20 Alexandre Dulaunoy * bin/forban_discover.py: added a starter script for the Forban discovery service * cfg/forban.cfg-sample: forban.cfg -> forban.cfg-sample (to avoid overwrite issue) * bin/forban_announce.py, cfg/forban.cfg: added a starter script for the Forban announce service * lib/discover.py: a typo in debug message * lib/discover.py, lib/loot.py: Forban : minimal discovery functionnalities added and loot storage loot is used to save each uuid discovered along with their source ip when they were seen the first and last time. loots are used to build the table of reachable Forban service on a local network. The storage is done on the file system with a subdirectory per uuid. uuid/first -> epoch value for first time uuid/last -> epoch value for last time uuid/name -> string value of the common name used uuid/sourcev6>string value of the IPv6 address seen uuid/sourvev4>string value of the IPv4 address seen minimal but it works. * README: clarification regarding the port used in Forban. Port 12555 in UDP protocol is used for announcing the Forban service. Port 12555 in TCP protocol is used for the HTTP service of Forban. 2009-10-11 Alexandre Dulaunoy * README, lib/announce.py: first implementation of forban announce message broadcast flooding in IPv4 and multicast flooding in IPv6. * lib/fid.py: Forban UUID init, creation and regen added 2009-10-05 Alexandre Dulaunoy * README, lib/announce.py, lib/fid.py: first structure and message format (in README)