DesignBuddyList » History » Version 27
Adrian Georgescu, 07/13/2009 07:08 PM
1 | 27 | Adrian Georgescu | = Presence blueprint = |
---|---|---|---|
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 | 1 | Adrian Georgescu | * Refresh SUBSCRIBE to '''message-summary''' |
44 | 27 | Adrian Georgescu | * Reload XCAP documents based on '''xcap-diff''' NOTIFYs |
45 | * Update '''presentity''' based on GUI actions or automatica sensors and cache it |
||
46 | 1 | Adrian Georgescu | |
47 | 25 | Adrian Georgescu | On shutdown |
48 | |||
49 | 27 | Adrian Georgescu | * Cache '''presentity''' |
50 | 25 | Adrian Georgescu | |
51 | 17 | Adrian Georgescu | == Address book == |
52 | 1 | Adrian Georgescu | |
53 | 25 | Adrian Georgescu | Use the OS standard address book. |
54 | 14 | Adrian Georgescu | |
55 | == Buddy list == |
||
56 | 1 | Adrian Georgescu | |
57 | 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. |
58 | 17 | Adrian Georgescu | |
59 | 25 | Adrian Georgescu | * The buddy list is stored in the main '''resource-lists''' XCAP document '''index''' |
60 | * Maintain a '''presentity''' attribute with what is received in the Notify for each buddy |
||
61 | * 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''' |
||
62 | * On buddy lists change, PUT resource-lists and rls-services documents on the XCAP server and cache them locally |
||
63 | * account.presence.subscribe_rls_services must be normalized when set to '''auto''' |
||
64 | 13 | Adrian Georgescu | |
65 | 1 | Adrian Georgescu | == Presence watcher lists == |
66 | |||
67 | Built based on the body of NOTIFY for event=presence.winfo. |
||
68 | |||
69 | == Presence rules == |
||
70 | 20 | Adrian Georgescu | |
71 | * Based on NOTIFY for event watcher.info we update the policy |
||
72 | 15 | Adrian Georgescu | * PUT pres-rules document on the XCAP server and cache locally |
73 | |||
74 | == Dialog watcher lists == |
||
75 | 1 | Adrian Georgescu | |
76 | Built based on the body of NOTIFY for event=dialog.winfo. To be built in OpenSIPS. |
||
77 | |||
78 | == Dialog rules == |
||
79 | |||
80 | 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. |
81 | 1 | Adrian Georgescu | |
82 | 9 | Adrian Georgescu | == Icon exhange == |
83 | 1 | Adrian Georgescu | |
84 | Support in OpenXCAP server is necessary, see http://openxcap.org/ticket/100 |
||
85 | 9 | Adrian Georgescu | |
86 | 26 | Adrian Georgescu | Publishing end-point, on boot: |
87 | |||
88 | 1. HTTP GET for xcap-directory and locate previously uploaded icon (e.g. ABC.png) |
||
89 | 1. HTTP GET http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/ABC.png |
||
90 | |||
91 | 1 | Adrian Georgescu | Publishing end-point, on change: |
92 | 9 | Adrian Georgescu | |
93 | 26 | Adrian Georgescu | 1. Generate a new random filename: XYZ |
94 | 9 | Adrian Georgescu | 1. Build URL http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/XYZ.png |
95 | 1. HTTP PUT to xcap server |
||
96 | 1 | Adrian Georgescu | 1. Update <icon> element of pidf and PUBLISH new pidf |
97 | 26 | Adrian Georgescu | 1. HTTP DELETE any previous icon file ABC.png |
98 | 9 | Adrian Georgescu | |
99 | Subscribing end-point: |
||
100 | |||
101 | 1. Parse <icon> element of pidf received in Notify |
||
102 | 1 | Adrian Georgescu | 2. HTTP GET http://xcap.example.com/xcap-root/icon/users/sip:alice@example.com/XYZ.png |
103 | 26 | Adrian Georgescu | 3. Cache picture until next NOTIFY with diferent <icon> element is received |