briar issueshttps://code.briarproject.org/briar/briar/-/issues2020-11-21T19:06:06Zhttps://code.briarproject.org/briar/briar/-/issues/338Assign parents to activities2020-11-21T19:06:06ZakwizgranAssign parents to activitiesMost activities are currently using NavDrawerActivity as their parent. Pick an appropriate parent for each activity and update the manifest.Most activities are currently using NavDrawerActivity as their parent. Pick an appropriate parent for each activity and update the manifest.https://code.briarproject.org/briar/briar/-/issues/337Avatar Placeholders for Forums2018-06-12T11:32:29ZTorsten GroteAvatar Placeholders for ForumsTo make forums visually more pleasing, they should have avatars that use the first letter of their name and a deterministically chosen color as a background. Here's a mockup:
![avatars](https://code.briarproject.org/akwizgran/briar/up...To make forums visually more pleasing, they should have avatars that use the first letter of their name and a deterministically chosen color as a background. Here's a mockup:
![avatars](https://code.briarproject.org/akwizgran/briar/uploads/7c7eb7eb7029c015bc2ed48a1115073c/forums_list_with_Circles.jpg)
Tthis works better with unsaturated colors. I would suggest saturation < 50%. For the identicons we pick random red, green and blue values in the bottom 3/4 of the range, which ensures the colours are somewhat desturated and dark enough to contrast with a light background.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/336Remove TestingActivity2018-06-12T11:32:29ZakwizgranRemove TestingActivityThis has been replaced by the new feedback reporter.This has been replaced by the new feedback reporter.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/335UX improvements for crash reports and feedback2018-06-12T11:32:29ZakwizgranUX improvements for crash reports and feedbackIssues to consider:
* Crash report activity appears before accepting the dialog
* Button text for dialog?
* Send icon instead of share icon?
* FAB floats in wrong position when keyboard is open on small screens
* Are crash report ...Issues to consider:
* Crash report activity appears before accepting the dialog
* Button text for dialog?
* Send icon instead of share icon?
* FAB floats in wrong position when keyboard is open on small screens
* Are crash report settings needed?
* Feedback activity uses transitions for separate task
Milestone Chttps://code.briarproject.org/briar/briar/-/issues/334Navigation menu causes crash with support library 23.3.02018-06-12T11:32:29ZakwizgranNavigation menu causes crash with support library 23.3.0After "upgrading" the support library to 23.3.0, clicking any button in the navigation drawer causes a crash with the following stacktrace:
```
java.lang.IllegalStateException: Could not find a method onNavigationClick(View) in the a...After "upgrading" the support library to 23.3.0, clicking any button in the navigation drawer causes a crash with the following stacktrace:
```
java.lang.IllegalStateException: Could not find a method onNavigationClick(View) in the activity class android.support.v7.widget.TintContextWrapper for onClick handler on view class android.support.v7.widget.AppCompatButton with id 'nav_btn_contacts'
at android.view.View$1.onClick(View.java:4012)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.NoSuchMethodException: onNavigationClick [class android.view.View]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at android.view.View$1.onClick(View.java:4005)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
```Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/333Font color2018-06-12T11:32:29ZMegaloxFont colorWe have to define system wide font colorsWe have to define system wide font colorsMilestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/332Looper error in SplashScreenActivity on 5.0.1 with support library 23.2.12018-06-12T11:32:29Zstr4dLooper error in SplashScreenActivity on 5.0.1 with support library 23.2.1```
org.briarproject E/ACRA: ACRA caught a InflateException for org.briarproject
android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
at android.support.v7.preference.PreferenceInflater.cr...```
org.briarproject E/ACRA: ACRA caught a InflateException for org.briarproject
android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:262)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:256)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.support.v7.preference.PreferenceGroup.<init>(PreferenceGroup.java:61)
at android.support.v7.preference.PreferenceGroup.<init>(PreferenceGroup.java:87)
at android.support.v7.preference.PreferenceScreen.<init>(PreferenceScreen.java:84)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:256)
at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281)
at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:161)
at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117)
at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:328)
at android.support.v7.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:287)
at org.briarproject.android.SplashScreenActivity$2.run(SplashScreenActivity.java:93)
```
Reverting to 23.1.1 stops the error.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/331Viewfinder disappears after pausing and resuming activity2018-06-12T11:32:29ZakwizgranViewfinder disappears after pausing and resuming activitySteps to reproduce:
* Click the home button while the QR code camera view is showing
* Click the recents button and return to the camera view
The issue seems to be that the surface is created when the camera's opened, destroyed when...Steps to reproduce:
* Click the home button while the QR code camera view is showing
* Click the recents button and return to the camera view
The issue seems to be that the surface is created when the camera's opened, destroyed when the camera's released, and not recreated when the camera's reopened. Log:
```
04-27 16:09:16.690 22164-23700/org.briarproject I/KeyAgreementConnector: Starting BQP listeners
04-27 16:09:16.690 22164-23700/org.briarproject I/DroidtoothPlugin: Key agreement UUID 1fb1978a-ebfe-3dda-8677-445838dbdf43
04-27 16:09:16.690 22164-23700/org.briarproject I/InsecureBluetooth: Listening with new API
04-27 16:09:16.690 22164-23701/org.briarproject I/ShowQrCodeFragment: Opening camera
04-27 16:09:16.790 22164-22164/org.briarproject I/CameraView: Surface created
04-27 16:09:16.790 22164-22164/org.briarproject I/CameraView: Surface changed: 320x399
04-27 16:09:16.800 22164-22164/org.briarproject I/CameraView: Calculated framing rect: null
04-27 16:09:16.800 22164-22164/org.briarproject I/CameraView: Calculated framing rect: null
04-27 16:09:17.520 22164-22164/org.briarproject I/CameraView: Display orientation 90 degrees
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Scene modes: [auto, night, snow, sports]
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Focus modes: [infinity, fixed]
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Setting focus mode to fixed
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Finding framing dimension, side1 = 480, side2 = 160
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Returning minimum side length: 160
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Metering areas supported: 1
04-27 16:09:17.540 22164-22164/org.briarproject I/CameraView: Size 640x480, stretch 1.06934, pixels 307200, score 287280.0
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 640x368, stretch 1.3947914, pixels 235520, score 168856.8
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 512x288, stretch 1.4257866, pixels 147456, score 103420.805
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 384x288, stretch 1.06934, pixels 110592, score 103420.805
04-27 16:09:17.550 22164-22164/org.briarproject I/CameraView: Size 352x288, stretch 1.0201705, pixels 101376, score 99371.63
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Size 320x240, stretch 1.06934, pixels 76800, score 71820.0
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Size 176x144, stretch 1.0201705, pixels 25344, score 24842.908
04-27 16:09:17.560 22164-22164/org.briarproject I/CameraView: Best size 640x480
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Finding framing dimension, side1 = 320, side2 = 240
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Returning hard minimum: 240
04-27 16:09:17.710 22164-22164/org.briarproject I/CameraView: Calculated framing rect: Rect(40, 0 - 280, 240)
04-27 16:09:23.410 22164-22164/org.briarproject I/ShowQrCodeFragment: Releasing camera
04-27 16:09:23.950 22164-22164/org.briarproject I/CameraView: Surface destroyed
04-27 16:09:24.060 22164-23852/org.briarproject I/KeyAgreementConnector: Stopping BQP listeners
04-27 16:09:29.750 22164-23749/org.briarproject I/ShowQrCodeFragment: Opening camera
04-27 16:09:29.760 22164-23950/org.briarproject I/KeyAgreementConnector: Starting BQP listeners
04-27 16:09:29.760 22164-23950/org.briarproject I/DroidtoothPlugin: Key agreement UUID 00073827-b31d-3cd8-b5bf-596321f0501f
04-27 16:09:29.780 22164-23950/org.briarproject I/InsecureBluetooth: Listening with new API
04-27 16:09:30.750 22164-22164/org.briarproject I/CameraView: Display orientation 90 degrees
04-27 16:09:30.750 22164-22164/org.briarproject I/CameraView: Scene modes: [auto, night, snow, sports]
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Focus modes: [infinity, fixed]
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Setting focus mode to fixed
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Metering areas supported: 1
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 640x480, stretch 1.06934, pixels 307200, score 287280.0
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 640x368, stretch 1.3947914, pixels 235520, score 168856.8
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 512x288, stretch 1.4257866, pixels 147456, score 103420.805
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 384x288, stretch 1.06934, pixels 110592, score 103420.805
04-27 16:09:30.760 22164-22164/org.briarproject I/CameraView: Size 352x288, stretch 1.0201705, pixels 101376, score 99371.63
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Size 320x240, stretch 1.06934, pixels 76800, score 71820.0
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Size 176x144, stretch 1.0201705, pixels 25344, score 24842.908
04-27 16:09:30.770 22164-22164/org.briarproject I/CameraView: Best size 640x480
```Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/330Offer option to Mute Forum instead of leaving it2020-11-21T19:06:56ZTorsten GroteOffer option to Mute Forum instead of leaving itIf a user leaves a forum they've shared with others, we should warn the user that the people she has invited may be disconnected (or cut off) from the forum and do not receive any more messages from others. So we should ask the user to c...If a user leaves a forum they've shared with others, we should warn the user that the people she has invited may be disconnected (or cut off) from the forum and do not receive any more messages from others. So we should ask the user to confirm. (Done in !164)
We could also offer them the option of "muting" the forum (i.e. turning off notifications) but remaining subscribed for the benefit of the people they've invited.https://code.briarproject.org/briar/briar/-/issues/329BTP header is not bound to stream number2022-10-27T20:05:25ZakwizgranBTP header is not bound to stream numberThe BTP tag depends on the stream number, but the header does not, so streams using the same tag and header keys could have their tags swapped without detection. This could be used to distinguish BTP from other protocols.The BTP tag depends on the stream number, but the header does not, so streams using the same tag and header keys could have their tags swapped without detection. This could be used to distinguish BTP from other protocols.Milestone Eakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/328BriarReportPrimer makes calls that require a Looper on some devices2018-06-12T11:32:29ZakwizgranBriarReportPrimer makes calls that require a Looper on some devicesWhen handling an exception, BriarReportPrimer calls BluetoothAdapter.getDefaultAdapter(). On some devices, this method throws a RuntimeException if it's called from a thread without a Looper, i.e. a thread that hasn't called Looper.prepa...When handling an exception, BriarReportPrimer calls BluetoothAdapter.getDefaultAdapter(). On some devices, this method throws a RuntimeException if it's called from a thread without a Looper, i.e. a thread that hasn't called Looper.prepare().
It may be possible to avoid the RuntimeException by using AndroidExecutor to call BluetoothAdapter.getDefaultAdapter(), as DroidtoothPlugin does. However, AndroidExecutor uses the UI thread - if that thread threw the original exception and has therefore died, the Callable might never run and BriarReportPrimer would wait forever.
AndroidExecutor used to create its own captive thread with a Looper. We could revert to that design, but a similar problem would occur if the executor's captive thread had died (less likely but still possible). Since AndroidExecutor is used rarely, perhaps it should create a new thread for each call?
```
04-27 12:28:38.944 23487-23675/org.briarproject E/ACRA: ACRA caught a NoSuchMethodError for org.briarproject
java.lang.NoSuchMethodError: java.util.Collections.emptyEnumeration
at org.briarproject.lifecycle.LifecycleManagerImpl.startServices(LifecycleManagerImpl.java:80)
at org.briarproject.android.BriarService$1.run(BriarService.java:92)
04-27 12:28:39.054 23487-23675/org.briarproject E/ACRA: ACRA failed to capture the error - handing off to native error reporter
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.bluetooth.BluetoothAdapter$1.<init>(BluetoothAdapter.java:1128)
at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:1128)
at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:455)
at org.briarproject.android.util.BriarReportPrimer.primeReport(BriarReportPrimer.java:150)
at org.acra.builder.ReportExecutor.execute(ReportExecutor.java:125)
at org.acra.builder.ReportBuilder.build(ReportBuilder.java:148)
at org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:260)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:854)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:851)
04-27 12:28:39.054 23487-23675/org.briarproject I/ACRA: ACRA is disabled for org.briarproject - forwarding uncaught Exception on to default ExceptionHandler
```Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/327empty state design2018-06-12T11:32:29ZMegaloxempty state designSome parts of the app can show empty states. We will develop an excellent design for these empty states.Some parts of the app can show empty states. We will develop an excellent design for these empty states.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/326Trim leading and trailing whitespace when displaying messages2018-06-12T11:32:29ZakwizgranTrim leading and trailing whitespace when displaying messagesMilestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/325BriarRecyclerView allows `this` to escape constructor2018-06-12T11:32:30ZakwizgranBriarRecyclerView allows `this` to escape constructor`BriarRecyclerView#initViews()`, which is called from the constructor, passes `this` to `LayoutInflater#inflate()`.`BriarRecyclerView#initViews()`, which is called from the constructor, passes `this` to `LayoutInflater#inflate()`.Milestone Cakwizgranakwizgranhttps://code.briarproject.org/briar/briar/-/issues/324Send user feedback through Briar2020-11-21T19:07:22Zstr4dSend user feedback through Briar#124 covered user feedback sent over Tor. This issue covers the extension of sending it through Briar.
The app should post feedback to a feedback channel.
Messages in the feedback channel should be synced with contacts, but no further....#124 covered user feedback sent over Tor. This issue covers the extension of sending it through Briar.
The app should post feedback to a feedback channel.
Messages in the feedback channel should be synced with contacts, but no further. We'll need to add a special contact that's only reachable via Tor for delivering feedback to the developers. To prevent the special contact from being a single point where Briar users can be enumerated, it should only be contacted when there's feedback to deliver.
Users should be able to opt out of delivering feedback for their contacts.https://code.briarproject.org/briar/briar/-/issues/323Send encrypted crash reports through Briar2020-11-21T19:07:47Zstr4dSend encrypted crash reports through Briar#123 covered encrypted crash reports sent over Tor. This issue covers the extension of sending them through Briar.
The app should import the encrypted report, post it to a crash report channel and delete it from the disk.
Messages in t...#123 covered encrypted crash reports sent over Tor. This issue covers the extension of sending them through Briar.
The app should import the encrypted report, post it to a crash report channel and delete it from the disk.
Messages in the crash report channel should be synced with contacts, but no further. We'll need to add a special contact that's only reachable via Tor for delivering reports to the developers. To prevent the special contact from being a single point where Briar users can be enumerated, it should only be contacted when there are crash reports to deliver.
Users should be able to opt out of delivering crash reports for their contacts.https://code.briarproject.org/briar/briar/-/issues/322New ForumSharingManager based on ProtocolEngine2018-06-12T11:32:30ZTorsten GroteNew ForumSharingManager based on ProtocolEngineIn order to improve the UX for sharing forums, the `ForumSharingManager` needs to be rewritten.
Similar to the `IntroductionManager`, it should make use of the abstract Protocol engine and implement a protocol (#320) between two parties...In order to improve the UX for sharing forums, the `ForumSharingManager` needs to be rewritten.
Similar to the `IntroductionManager`, it should make use of the abstract Protocol engine and implement a protocol (#320) between two parties.
This is a subtask of Issue #121 which concerns the UX. The interface with the UI is discussed in #321.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/321ForumSharingManager interface with UI2018-06-12T11:32:30ZTorsten GroteForumSharingManager interface with UIThe ForumSharingManager will be rewritten and changes its paradigm from "sharing as state" to "sharing as action", so the UI interface will need to change along with it.
This is how it could look like:
```java
/** Returns the uniq...The ForumSharingManager will be rewritten and changes its paradigm from "sharing as state" to "sharing as action", so the UI interface will need to change along with it.
This is how it could look like:
```java
/** Returns the unique ID of the forum sharing client. */
ClientId getClientId();
/** Sends an invitation to share the given forum with the given contact and sends an optional message along with it. */
void sendForumInvitation(Forum f, ContactId contactId, @Nullable String message) throws DbException;
/** Responds to a pending forum invitation */
void respondToInvitation(SessionId sessionId, ContactId contactId, boolean accept) throws DbException;
/** Returns all forum sharing messages sent by the Contact identified by contactId. */
Collection<ForumInvitationMessage> getForumInvitationMessages(ContactId contactId) throws DbException;
/** Returns all forums to which the user could subscribe. */
Collection<Forum> getAvailableForums() throws DbException;
/** Returns all contacts who are sharing the given forum with the user. */
Collection<Contact> getSharedBy(Forum f) throws DbException;
/** Returns the IDs of all contacts with whom the given forum is shared. */
Collection<ContactId> getSharedWith(Forum f) throws DbException;
```
Note that I removed methods for adding and (un)subscribing to/from a forum. These are probably better placed into the `ForumManager`.
This is a subtask of Issue #121.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/320Design Protocol for Sharing Forums2018-06-12T11:32:30ZTorsten GroteDesign Protocol for Sharing ForumsThe protocol will look like a simpler version of the introduction protocol, with two parties per session, and messages for invite/accept/decline/abort. (if you share a forum with more than one contact we can just create one session per c...The protocol will look like a simpler version of the introduction protocol, with two parties per session, and messages for invite/accept/decline/abort. (if you share a forum with more than one contact we can just create one session per contact, there's no reason to tie them together.)
1: **INVITATION** - This is send by the sharer to one of her contacts. The content is a BDF list.
* (int) The type of the message, here 1
* (raw) SessionId chosen by the sharer
* (string) name of the forum
* (raw) salt to uniquely identify this forum
* (string) optional invitation message
2: **ACCEPT RESPONSE** - This should be sent by contacts that received a sharing invitation. The content is a BDF list with these elements:
* (int) The type of the message, here 2
* (raw) SessionId must match the SessionId of an unanswered invitation.
3: **DECLINE RESPONSE** - This should be sent by contacts that received a sharing invitation and do not want to add the forum. The content is a BDF list with these elements:
* (int) The type of the message, here 3
* (raw) SessionId must match the SessionId of an unanswered invitation.
4: **LEAVE** - This should be send by a contact that is unsubscribing from the forum. The content is a BDF list with two elements:
* (int) The type of the message, here 4
* (raw) SessionId must match the SessionId of a previous (un)answered invitation.
5: **ABORT** - This should be send by a contact that encountered an error, so that it can not complete the protocol. The content is a BDF list with two elements:
* (int) The type of the message, here 5
* (raw) SessionId must match the SessionId of an unanswered invitation.
A successful run of the protocol would look like this:
![forum-sharing](/uploads/8f53758e8ed55146f498181b2708a9b1/forum-sharing.png)
**Sharer**
![sharer-state-machine](/uploads/5ca0924c21eef0601e5cfdf4060577ad/sharer-state-machine.png)
[sharer-state-machine.odg](/uploads/24354e5ef7779d36ed7a815eccb8f35e/sharer-state-machine.odg)
**Invitee**
![invitee-state-machine](/uploads/b57dc42ebe5873530543ce7ab36af8f4/invitee-state-machine.png)
[invitee-state-machine.odg](/uploads/2099baeb7948980819022fda5f402aed/invitee-state-machine.odg)
Arrows that have no label stand for 'all other actions'.
It should be documented in the wiki as well: https://code.briarproject.org/akwizgran/briar/wikis/ForumSharingClient
This is a subtask of Issue #322.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/319Distinguish between transient, recoverable and permanent DB exceptions2020-11-21T19:08:20ZakwizgranDistinguish between transient, recoverable and permanent DB exceptionsThis would be useful for message delivery hooks and any other operation that should be retried if the failure is temporary, or cancelled if it's permanent.This would be useful for message delivery hooks and any other operation that should be retried if the failure is temporary, or cancelled if it's permanent.