Improvements to the library organization
Created by: EinMByte
Fragment from IRC:
<EinMByte> 1) Add an (actual) API to the core library.
<EinMByte> 2) Put I2PControl, Streaming etc in the client library.
<EinMByte> 3) Make the main application only use the client library and the API
<EinMByte> So the client library would use *only* the API to do core stuff
<EinMByte> (so the API is used instead of I2CP, since we don't have I2CP)
Comment from @fluffypony on the matter:
<fluffypon> I agree with that approach - core shouldn't be able to provide every-interface- ever when that can be done with stubby clients
This would mean that the application will consist of 3 rather than 4 components:
- The core library (
libkovri-core
). The only thing that changes here is the addition of an API that allows loose coupling with the client library, and possibly other applications that want to use the core directly. - The client library (
libkovri-client
). This will also contain what is currently inlibkovri-api
. This library depends onlibkovri-core
, and its API to do whatever is necessary. - The main application, which should contain the daemon and (command line) interface code. This is the front-end only,. My suggestion is that this repository should only contain a minimal user interface, as is the case right now. There can be separate repositories that use the client and core libraries to provide (various) graphical user interfaces.
Please discuss.