DesignBuddyList » History » Version 26
Adrian Georgescu, 07/13/2009 07:07 PM
1 | 25 | Adrian Georgescu | = Presence design = |
---|---|---|---|
2 | 2 | Adrian Georgescu | |
3 | [[TOC(Design*, depth=1)]] |
||
4 | 1 | Adrian Georgescu | |
5 | 23 | Adrian Georgescu | This is a high level class that can be used to manage a buddy list driven interface of a SIP client graphical user interface. It implements a combination of SIP SIMPLE standards related to presence event package, its storage and policy. |
6 | 14 | Adrian Georgescu | |
7 | 1 | Adrian Georgescu | * Account |
8 | * Address-book |
||
9 | * Buddy list |
||
10 | 13 | Adrian Georgescu | * Presence watcher list |
11 | 1 | Adrian Georgescu | * Presence rules |
12 | 15 | Adrian Georgescu | * Dialog watcher list |
13 | 1 | Adrian Georgescu | * Dialog rules |
14 | 15 | Adrian Georgescu | * Icon exchange |
15 | 1 | Adrian Georgescu | |
16 | == Account == |
||
17 | |||
18 | 25 | Adrian Georgescu | This is the same entity that Registers and does other operations in behalf of the SIP account. |
19 | 22 | Adrian Georgescu | |
20 | 1 | Adrian Georgescu | On boot |
21 | |||
22 | 25 | Adrian Georgescu | * Initialize the '''buddy list''' from XCAP documents cache if any, otherwise build an empty list to be used by the GUI at boot time |
23 | * Initialize '''presentity''' from local cache |
||
24 | * Locate XCAP server by doing a DNS TXT lookup for xcap.example.com, deal with DNS timeout |
||
25 | * GET XCAP application xcap-caps |
||
26 | * Dependent on the content of xcap-caps, GET the default filename for pres-rules, resource-lists, pidf-manipulation, rls-services, dialog-rules, icon, xcap-directory applications from XCAP server and cache all documents, deal with HTTP timeout |
||
27 | 26 | Adrian Georgescu | * If '''pres-rules''' application is supported by XCAP server, send Subscribe for event presence.info and initialize presence '''watchers''' list |
28 | 25 | Adrian Georgescu | * If '''icon''' application is supported by XCAP server, GET curent icon image from the xcap server |
29 | 26 | Adrian Georgescu | * If '''dialog-rules''' application is supported by XCAP server, send Subscribe for event dialog.info and initialize dialog '''watchers''' list |
30 | * if '''pidf-manipulation''' application is supported by XCAP server, update the '''presentity''' with '''pidf-manipulation''' document |
||
31 | * Send PUBLISH for '''Event: presence''' |
||
32 | * If '''account.message_summary.enabled''' SUBSCRIBE for '''Event: message-summary''' |
||
33 | * If '''account.presence.subscribe_xcap_diff.enabled''' SUBSCRIBE for '''Event: xcap-diff''' |
||
34 | 25 | Adrian Georgescu | * Load '''buddy list''' |
35 | 1 | Adrian Georgescu | |
36 | While running |
||
37 | |||
38 | 25 | Adrian Georgescu | * Refresh XCAP server location based on DNS TTL |
39 | 26 | Adrian Georgescu | * Refresh PUBLISH for event '''presence''' |
40 | * Refresh SUBSCRIBE to '''presence.winfo''' |
||
41 | * Refresh SUBSCRIBE to '''dialog.winfo''' |
||
42 | * Refresh SUBSCRIBE to '''xcap-diff''' |
||
43 | * Refresh SUBSCRIBE to '''message-summary''' |
||
44 | 25 | Adrian Georgescu | * Reload XCAP documents based on xcap-diff NOTIFYs |
45 | |||
46 | On shutdown |
||
47 | |||
48 | * Cache last '''presentity''' |
||
49 | |||
50 | 17 | Adrian Georgescu | == Address book == |
51 | 1 | Adrian Georgescu | |
52 | 25 | Adrian Georgescu | Use the OS standard address book. |
53 | 14 | Adrian Georgescu | |
54 | == Buddy list == |
||
55 | 1 | Adrian Georgescu | |
56 | 25 | Adrian Georgescu | Contains a list of buddies we subscribe to. The buddylist is indexed by a unique SIP URI. Additional, one can store full names and other attributes. Based on NOTIFY for event=presence each buddy has a '''Presentity''' attribute that contains published information. GUI displays various attributes of each presentity. |
57 | 17 | Adrian Georgescu | |
58 | 25 | Adrian Georgescu | * The buddy list is stored in the main '''resource-lists''' XCAP document '''index''' |
59 | * Maintain a '''presentity''' attribute with what is received in the Notify for each buddy |
||
60 | * If '''account.presence.subscribe_rls_services''' is true, a RLS document that contains a list of discrete SIP URIs we subscribe to and PUT it on the server under SIP URI account-buddies@domain. Then a Subscribe is sent with Supported: eventlist for this SIP URI. /otherwise send SUBSCRIBVE to each buddy for '''Event: presence''' |
||
61 | * On buddy lists change, PUT resource-lists and rls-services documents on the XCAP server and cache them locally |
||
62 | * account.presence.subscribe_rls_services must be normalized when set to '''auto''' |
||
63 | 13 | Adrian Georgescu | |
64 | 1 | Adrian Georgescu | == Presence watcher lists == |
65 | |||
66 | Built based on the body of NOTIFY for event=presence.winfo. |
||
67 | |||
68 | == Presence rules == |
||
69 | 20 | Adrian Georgescu | |
70 | * Based on NOTIFY for event watcher.info we update the policy |
||
71 | 15 | Adrian Georgescu | * PUT pres-rules document on the XCAP server and cache locally |
72 | |||
73 | == Dialog watcher lists == |
||
74 | 1 | Adrian Georgescu | |
75 | Built based on the body of NOTIFY for event=dialog.winfo. To be built in OpenSIPS. |
||
76 | |||
77 | == Dialog rules == |
||
78 | |||
79 | 15 | Adrian Georgescu | Based on NOTIFY for event dialog.info we update the policy and PUT dialog-rules document on the XCAP server. To be built in OpenXCAP server. |
80 | 1 | Adrian Georgescu | |
81 | 9 | Adrian Georgescu | == Icon exhange == |
82 | 1 | Adrian Georgescu | |
83 | Support in OpenXCAP server is necessary, see http://openxcap.org/ticket/100 |
||
84 | 9 | Adrian Georgescu | |
85 | 26 | Adrian Georgescu | Publishing end-point, on boot: |
86 | |||
87 | 1. HTTP GET for xcap-directory and locate previously uploaded icon (e.g. ABC.png) |
||
88 | 1. HTTP GET http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/ABC.png |
||
89 | |||
90 | 1 | Adrian Georgescu | Publishing end-point, on change: |
91 | 9 | Adrian Georgescu | |
92 | 26 | Adrian Georgescu | 1. Generate a new random filename: XYZ |
93 | 9 | Adrian Georgescu | 1. Build URL http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/XYZ.png |
94 | 1. HTTP PUT to xcap server |
||
95 | 1 | Adrian Georgescu | 1. Update <icon> element of pidf and PUBLISH new pidf |
96 | 26 | Adrian Georgescu | 1. HTTP DELETE any previous icon file ABC.png |
97 | 9 | Adrian Georgescu | |
98 | Subscribing end-point: |
||
99 | |||
100 | 1. Parse <icon> element of pidf received in Notify |
||
101 | 1 | Adrian Georgescu | 2. HTTP GET http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/XYZ.png |
102 | 26 | Adrian Georgescu | 3. Cache picture until next NOTIFY with diferent <icon> element is received |