13 | | === Functional === |
| 13 | === Functional requirements=== |
| 14 | |
| 15 | ==== 1. Establishing peer relationships ==== |
| 16 | |
| 17 | ===== 1.1. Peer visibility ===== |
| 18 | |
| 19 | The P2P sync component '''must''' be able to make the device it is running on visible to nearby devices in order to establish a peer relationship. |
| 20 | |
| 21 | ===== 1.2. Peer discovery ===== |
| 22 | |
| 23 | The P2P sync component '''must''' be able to discover nearby devices that have made themselves visible. |
| 24 | |
| 25 | ===== 1.3. Peer selection ===== |
| 26 | |
| 27 | When peers have been discovered, the P2P sync component '''must''' allow the user to choose a device to establish a peer relationship with. |
| 28 | |
| 29 | ===== 1.4. Peer authentication ===== |
| 30 | |
| 31 | When the user has chosen a device to peer with, the P2P sync component '''must''' allow the user to authenticate the peer before granting the peer access to any resources. The P2P sync component '''may''' allow the user to continue without authenticating the peer. |
| 32 | |
| 33 | ===== 1.5. Peer persistence ===== |
| 34 | |
| 35 | When a peer has been authenticated, the P2P sync component '''may''' allow the user to store information about the peer, including information that will allow the peer to be authenticated automatically during subsequent connections. If information about a peer has been stored, the P2P sync component '''must''' allow the user to revoke the peer's access to resources. |
| 36 | |
| 37 | ==== 2. Destination servers ==== |
| 38 | |
| 39 | ===== 2.1. Destination server configuration ===== |
| 40 | |
| 41 | The P2P sync component '''may''' allow the user or an administrator to enter the details of a '''destination server''' for the data being synchronized. |
| 42 | |
| 43 | ==== 3. Data synchronization ==== |
| 44 | |
| 45 | ===== 3.1. Data selection ===== |
| 46 | |
| 47 | The P2P sync component '''may''' allow the user to choose which data to synchronize, either with peers in general or with each specific peer. When data is received from a peer, the P2P sync component '''may''' automatically choose it for synchronization with other peers. |
| 48 | |
| 49 | ===== 3.2. Data deletion ===== |
| 50 | |
| 51 | The P2P sync component '''may''' allow the user to delete data from the device, regardless of whether that data has been chosen for synchronization. The P2P sync component '''may''' automatically delete data that has been received from peers, for example on receiving confirmation that the data has been delivered to a destination server. |
| 52 | |
| 53 | ==== 4. Managing conflicts ==== |
| 54 | |
| 55 | ===== 4.1. Conflict detection ===== |
| 56 | |
| 57 | The P2P sync component '''must''' assign an identifier to each item of data chosen for synchronization, such that two peer devices performing synchronization can tell whether they are using the same identifier to refer to different data. |
| 58 | |
| 59 | ===== 4.2. Conflict resolution ===== |
| 60 | |
| 61 | When a conflict is detected during synchronization, the P2P sync component '''may''' resolve the conflict automatically, either by merging the conflicting items or by assigning them distinct identifiers. If a conflict cannot be resolved automatically, the P2P sync component '''must''' be able to continue synchronizing other items with the peer. The P2P sync component '''may''' inform the user of conflicts that cannot be resolved automatically. |