briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-01-28T11:30:28Zhttps://code.briarproject.org/briar/briar/-/issues/388Possible Race-Condition when Two Contacts Share Same Forum with each other2018-01-28T11:30:28ZTorsten GrotePossible Race-Condition when Two Contacts Share Same Forum with each other> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent a...> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent an invitation, and delete the incoming invitation. Does that sound right to you? Does that mean neither of them will receive the other's invitation?
Yes, their invitations are most likely deleted without any indication to them.
![forum-sharing-same](/uploads/a267b5ec4a46f4a8f6dc8a83b233d6f9/forum-sharing-same.png)
> Regardless of the answer to this specific question, I think you're right to be concerned about treating symptoms rather than causes. Unfortunately I think the problem might be quite fundamental. We're trying to keep the state of the forum (are we subscribed, is it visible to the contact) consistent with the state of each session - but there can be multiple sessions relating to a given forum. Can we be sure that those sessions will always produce consistent answers to (a) whether we belong to the forum, and (b) whether the contact belongs to it?
> The message queue ensures that our messages are delivered to the contact in order and vice versa, but if we want to be sure that a given set of messages always produces the same state, we need a canonical ordering for all the messages: ours and the contact's. Within each session, we can use knowledge of the protocol to order certain messages (for example, a response must follow an invitation), but I'm not sure we can do that across multiple sessions in the general case.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/387Allow to Unshare Forum2021-10-21T15:47:36ZTorsten GroteAllow to Unshare ForumWe switched the forum sharing paradigm from sharing as state to sharing as action and now there's no way to unshare a forum with someone without leaving the forum. I guess we can just misuse the LEAVE messages without actually leaving th...We switched the forum sharing paradigm from sharing as state to sharing as action and now there's no way to unshare a forum with someone without leaving the forum. I guess we can just misuse the LEAVE messages without actually leaving the forum, so we don't have to alter the protocol.
However, where in the UI do we allow to unshare a forum with someone?https://code.briarproject.org/briar/briar/-/issues/386NullPointerException when rotating screen2018-06-12T11:32:27ZTorsten GroteNullPointerException when rotating screenJust rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
...Just rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
java.lang.RuntimeException: Unable to resume activity {org.briarproject/org.briarproject.android.NavDrawerActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4904)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.briarproject.android.contact.ContactListFragment.onResume(ContactListFragment.java:150)
at android.support.v4.app.Fragment.performResume(Fragment.java:2020)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1107)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2056)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:196)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:505)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:494)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:174)
at android.app.Activity.performResume(Activity.java:5332)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2608)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
```Milestone Chttps://code.briarproject.org/briar/briar/-/issues/385Add BQP support to the LAN plugin2018-06-12T11:32:27ZakwizgranAdd BQP support to the LAN pluginThis will allow us to work around Bluetooth issues when both devices are connected to the same LAN.This will allow us to work around Bluetooth issues when both devices are connected to the same LAN.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/384Create conversation manager2021-07-05T13:41:40ZakwizgranCreate conversation managerThe UI combines private messages, introduction messages and forum sharing messages into a single conversation. This requires various parts of the UI (contact list, conversation view, notification manager) to combine messages from the mes...The UI combines private messages, introduction messages and forum sharing messages into a single conversation. This requires various parts of the UI (contact list, conversation view, notification manager) to combine messages from the messaging, introduction, and forum sharing clients. Create a ConversationManager in the core that deals with combining these messages and presents a unified API (including events) to the UI.https://code.briarproject.org/briar/briar/-/issues/383Database error after OS update2018-06-12T11:32:27ZErnir ErlingssonDatabase error after OS updateUpdated my device from 5.1.1 to 6.0.1 and Briar stopped working, I get a DB_ERROR in BriarService.java.
`
W/LifecycleManagerImpl: org.briarproject.api.db.DbException
org.briarproject.api.db.DbException
at org.briarproject.db.Jd...Updated my device from 5.1.1 to 6.0.1 and Briar stopped working, I get a DB_ERROR in BriarService.java.
`
W/LifecycleManagerImpl: org.briarproject.api.db.DbException
org.briarproject.api.db.DbException
at org.briarproject.db.JdbcDatabase.open(JdbcDatabase.java:256)
at org.briarproject.db.H2Database.open(H2Database.java:41)
at org.briarproject.db.DatabaseComponentImpl.open(DatabaseComponentImpl.java:106)
at org.briarproject.lifecycle.LifecycleManagerImpl.startServices(LifecycleManagerImpl.java:79)
at org.briarproject.android.BriarService$1.run(BriarService.java:94)
05-11 10:16:29.398 18637-19779/org.briarproject W/BriarService: Startup failed: DB_ERROR
`
https://code.briarproject.org/briar/briar/-/issues/382Deliver messages to incoming message hook after their dependencies2018-06-12T11:32:27ZakwizgranDeliver messages to incoming message hook after their dependenciesThe sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be delete...The sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be deleted.
Messages that are waiting for dependencies should not be visible to clients.
Subtask of #122.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/381Extract dependencies from messages in validation hook2018-06-12T11:32:27ZakwizgranExtract dependencies from messages in validation hookThe validation hook should return a list of dependencies to the validation manager.The validation hook should return a list of dependencies to the validation manager.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/380Standard UI pattern for handling background errors2018-06-12T11:32:27ZakwizgranStandard UI pattern for handling background errorsVarious bits of the UI handle errors in background tasks in different ways - for example, by showing a toast, finishing the activity, or just logging the error. Come up with a standard pattern and apply it consistently, except where ther...Various bits of the UI handle errors in background tasks in different ways - for example, by showing a toast, finishing the activity, or just logging the error. Come up with a standard pattern and apply it consistently, except where there's a reason for making an exception.https://code.briarproject.org/briar/briar/-/issues/378Replace BDF data structures with classes in forum sharing client2018-06-12T11:32:28ZakwizgranReplace BDF data structures with classes in forum sharing clientThe forum sharing client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the protocol messag...The forum sharing client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the protocol messages and other internal state.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/377Replace BDF data structures with classes in introduction client2018-04-28T00:17:04ZakwizgranReplace BDF data structures with classes in introduction clientThe introduction client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the client's interna...The introduction client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the client's internal state.Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/376Refactor clients based on ProtocolEngine2018-04-28T00:12:24ZakwizgranRefactor clients based on ProtocolEngineThe ProtocolEngine interface allows certain tasks to be performed in response to local actions and incoming messages: updating local state, sending messages, broadcasting events and deleting the incoming message. Clients based on Protoco...The ProtocolEngine interface allows certain tasks to be performed in response to local actions and incoming messages: updating local state, sending messages, broadcasting events and deleting the incoming message. Clients based on ProtocolEngine that need to perform other tasks are forced to store a task label in the local state, then retrieve it and perform the task outside the engine. This defeats the purpose of the engine interface, which is meant to encapsulate the protocol logic.
Alter or remove the ProtocolEngine interface so clients have the flexibility they need.Android 1.0Torsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/375Extract ForumFactory from ForumManager2018-06-12T11:32:28ZakwizgranExtract ForumFactory from ForumManagerThe code for creating forums in ForumManager is used by ForumSharingManager and also needed by InviteeEngine. Extract it into its own class.The code for creating forums in ForumManager is used by ForumSharingManager and also needed by InviteeEngine. Extract it into its own class.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/374Add Forum Avatars to Available Forums List2018-06-12T11:32:28ZTorsten GroteAdd Forum Avatars to Available Forums ListAs soon as !172 and !178 have both been merged, the forum avatars should also be added to the Available Forums List.
As soon as !172 and !178 have both been merged, the forum avatars should also be added to the Available Forums List.
Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/373Slow Contact list2018-06-12T11:32:28ZErnir ErlingssonSlow Contact listSamsung Galaxy Note 4 (fast device) is taking 4-5 seconds to load the Contact list the first time, with 8+ contacts with a couple of days worth of conversations.Samsung Galaxy Note 4 (fast device) is taking 4-5 seconds to load the Contact list the first time, with 8+ contacts with a couple of days worth of conversations.Milestone ETorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/372Clean up Introduction Session States when removing contact2018-06-12T11:32:28ZTorsten GroteClean up Introduction Session States when removing contactCurrently, when a contact is removed, any existing sessions will be aborted, but no session state messages are deleted from the local group.
Currently, when a contact is removed, any existing sessions will be aborted, but no session state messages are deleted from the local group.
Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/371Don't allow SessionId re-use in IntroductionClient2018-06-12T11:32:28ZTorsten GroteDon't allow SessionId re-use in IntroductionClientWhen an introducee received a message with type `TYPE_REQUEST` that re-uses an old `SessionId`, the introducee treats this as a new introduction.
Check for this to happen and if so, delete message without processing it.
Also add a test.When an introducee received a message with type `TYPE_REQUEST` that re-uses an old `SessionId`, the introducee treats this as a new introduction.
Check for this to happen and if so, delete message without processing it.
Also add a test.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/370Nav Drawer Activity doesn't remember selected Fragment2018-06-12T11:32:28ZTorsten GroteNav Drawer Activity doesn't remember selected Fragment1. Open Forums
2. Rotate your device
3. Observe how you suddenly see the contact list1. Open Forums
2. Rotate your device
3. Observe how you suddenly see the contact listMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/369Remove UiCallback interface2018-06-11T10:16:35ZakwizgranRemove UiCallback interfaceThis interface is an ancient throwback. Plugins that need to call back into the UI should use specialised callback interfaces provided by their factories.This interface is an ancient throwback. Plugins that need to call back into the UI should use specialised callback interfaces provided by their factories.https://code.briarproject.org/briar/briar/-/issues/367Replace invitation codes with list of discovered devices2018-06-12T11:32:28ZakwizgranReplace invitation codes with list of discovered devicesWhen using the Bluetooth method of adding contacts, testers found the similarity between invitation codes and confirmation codes confusing. The workflow could be simplified by picking the contact's device from a list of discovered device...When using the Bluetooth method of adding contacts, testers found the similarity between invitation codes and confirmation codes confusing. The workflow could be simplified by picking the contact's device from a list of discovered devices, then exchanging confirmation codes.
Related to #33.