GUIprogress
Version 1 (Adrian Georgescu, 03/16/2009 01:12 pm)
1 | 1 | Adrian Georgescu | = SIP SIMPLE client GUI = |
---|---|---|---|
2 | 1 | Adrian Georgescu | |
3 | 1 | Adrian Georgescu | Development blueprint for the development of a cross platform GUI for the SIP SIMPLE client library. |
4 | 1 | Adrian Georgescu | |
5 | 1 | Adrian Georgescu | == Background == |
6 | 1 | Adrian Georgescu | |
7 | 1 | Adrian Georgescu | SIP SIMPLE client is a Python software library that allows for easy development of Internet |
8 | 1 | Adrian Georgescu | communications end-points based on SIP and related protocols for voice, |
9 | 1 | Adrian Georgescu | rich presence, session based instant messaging (IM), file transfers and desktop sharing. |
10 | 1 | Adrian Georgescu | Other media types can be easily added by using an extensible high-level API. |
11 | 1 | Adrian Georgescu | |
12 | 1 | Adrian Georgescu | == Stages == |
13 | 1 | Adrian Georgescu | |
14 | 1 | Adrian Georgescu | The implementation of the GUI consists of the following stages: |
15 | 1 | Adrian Georgescu | |
16 | 1 | Adrian Georgescu | 1. Design and implementation of a middleware API |
17 | 1 | Adrian Georgescu | 1. Implementation of a notification bus |
18 | 1 | Adrian Georgescu | 1. Identifications of the GUI events |
19 | 1 | Adrian Georgescu | 1. Identifications of the GUI visual elements |
20 | 1 | Adrian Georgescu | 1. Identification of GUI toolkits |
21 | 1 | Adrian Georgescu | 1. Study GUI toolkit documentation |
22 | 1 | Adrian Georgescu | 1. Identify the platform dependent modifications required for the library |
23 | 1 | Adrian Georgescu | 1. Implement a prototype GUI |
24 | 1 | Adrian Georgescu | 1. Fine tune middleware classes and events |
25 | 1 | Adrian Georgescu | 1. Finalize the specifications for the GUI development |
26 | 1 | Adrian Georgescu | 1. Implement cross platform GUI based |
27 | 1 | Adrian Georgescu | 1. Create GUI installation packages for each target OS |
28 | 1 | Adrian Georgescu | 1. Deploy GUI to end user and collect feedback |
29 | 1 | Adrian Georgescu | 1. Update GUI with end-user feed back |
30 | 1 | Adrian Georgescu | |
31 | 1 | Adrian Georgescu | |
32 | 1 | Adrian Georgescu | == Design and implementation of a middleware API == |
33 | 1 | Adrian Georgescu | |
34 | 1 | Adrian Georgescu | The GUI should not be aware about the underlying protocols and their interaction. this requires the building of an extra layer between the GUI and the protocol components (called middleware). The middleware has been implemented as an addition to SIP SIMPLE library as follows: |
35 | 1 | Adrian Georgescu | |
36 | 1 | Adrian Georgescu | * [browser:sipsimple/session.py] - event driven high level class for handling sessions |
37 | 1 | Adrian Georgescu | * [browser:sipsimple/account.py] - account manager to handle multiple SIP accounts |
38 | 1 | Adrian Georgescu | * [browser:sipsimple/configuration/settings.py] - storage container for middleware and GUI settings |
39 | 1 | Adrian Georgescu | |
40 | 1 | Adrian Georgescu | == Implementation of a notification bus == |
41 | 1 | Adrian Georgescu | |
42 | 1 | Adrian Georgescu | The notification bus is a mechanism to receive notifications from the SIP library and translate them into GUI events. |
43 | 1 | Adrian Georgescu | |
44 | 1 | Adrian Georgescu | It has been implemented into the python application version 1.1.0 from http://pypi.python.org/pypi/python-application/1.1.0 |
45 | 1 | Adrian Georgescu | |
46 | 1 | Adrian Georgescu | == Identifications of the GUI events == |
47 | 1 | Adrian Georgescu | |
48 | 1 | Adrian Georgescu | Such events consists of notifications for sessions or presence notification from the underlying components. |
49 | 1 | Adrian Georgescu | |
50 | 1 | Adrian Georgescu | ==== notifications ==== |
51 | 1 | Adrian Georgescu | |
52 | 1 | Adrian Georgescu | '''SCSessionChangedState''':: |
53 | 1 | Adrian Georgescu | Will be sent whenever the {{{Session}}} object changes its state. |
54 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
55 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
56 | 1 | Adrian Georgescu | [[BR]]''prev_state'':[[BR]] |
57 | 1 | Adrian Georgescu | The previous state state the object was in. |
58 | 1 | Adrian Georgescu | [[BR]]''state'':[[BR]] |
59 | 1 | Adrian Georgescu | The new state the object is in. |
60 | 1 | Adrian Georgescu | '''SCSessionNewIncoming''':: |
61 | 1 | Adrian Georgescu | Will be sent when a new incoming {{{Session}}} is received. |
62 | 1 | Adrian Georgescu | The application should listen for this notification from all objects specifically to get informed of incoming sessions. |
63 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
64 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
65 | 1 | Adrian Georgescu | [[BR]]''has_audio'':[[BR]] |
66 | 1 | Adrian Georgescu | A boolean indicating if the remote party proposed an audio stream within this session. |
67 | 1 | Adrian Georgescu | [[BR]]''has_chat'':[[BR]] |
68 | 1 | Adrian Georgescu | A boolean indicating if the remote party proposed a chat stream within this session. |
69 | 1 | Adrian Georgescu | '''SCSessionNewOutgoing''':: |
70 | 1 | Adrian Georgescu | Will be sent when the applcation requests a new outgoing {{{Session}}}. |
71 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
72 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
73 | 1 | Adrian Georgescu | '''SCSessionGotRingIndication''':: |
74 | 1 | Adrian Georgescu | Will be sent when an outgoing {{{Session}}} receives an indication that a remote device is ringing. |
75 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
76 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
77 | 1 | Adrian Georgescu | '''SCSessionWillStart''':: |
78 | 1 | Adrian Georgescu | Will be sent just before a {{{Session}}} completes negotiation. |
79 | 1 | Adrian Georgescu | In terms of SIP, this is sent after the final response to the {{{INVITE}}}, but before the {{{ACK}}}. |
80 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
81 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
82 | 1 | Adrian Georgescu | '''SCSessionDidStart''':: |
83 | 1 | Adrian Georgescu | Will be sent when a {{{Session}}} completes negotiation. |
84 | 1 | Adrian Georgescu | In terms of SIP this is sent after the {{{ACK}}} was sent or received. |
85 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
86 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
87 | 1 | Adrian Georgescu | '''SCSessionDidFail''':: |
88 | 1 | Adrian Georgescu | This notification is sent whenever the session fails. |
89 | 1 | Adrian Georgescu | The failure reason is included in the data attributes. |
90 | 1 | Adrian Georgescu | This notification is always followed by {{{SCSessionDidEnd}}}. |
91 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
92 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
93 | 1 | Adrian Georgescu | [[BR]]''originator'':[[BR]] |
94 | 1 | Adrian Georgescu | A string indicating the origin of the failure. |
95 | 1 | Adrian Georgescu | This will either be "local" or "remote". |
96 | 1 | Adrian Georgescu | [[BR]]''code'':[[BR]] |
97 | 1 | Adrian Georgescu | The SIP error code of the failure. |
98 | 1 | Adrian Georgescu | If this is 0, the error was an internal exception. |
99 | 1 | Adrian Georgescu | [[BR]]''reason'':[[BR]] |
100 | 1 | Adrian Georgescu | A string explaining the reason of the failure. |
101 | 1 | Adrian Georgescu | '''SCSessionWillEnd''':: |
102 | 1 | Adrian Georgescu | Will be sent just before terminating a {{{Session}}} at the request of the application. |
103 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
104 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
105 | 1 | Adrian Georgescu | '''SCSessionDidEnd''':: |
106 | 1 | Adrian Georgescu | Will be sent always when a {{{Session}}} ends, either because of a failure (in which case it is preceded by {{{SCSessionDidFail}}}), remote or local session termination. |
107 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
108 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
109 | 1 | Adrian Georgescu | [[BR]]''originator'':[[BR]] |
110 | 1 | Adrian Georgescu | A string indicating who originated the termination. |
111 | 1 | Adrian Georgescu | This will either be "local" or "remote". |
112 | 1 | Adrian Georgescu | '''SCSessionGotHoldRequest''':: |
113 | 1 | Adrian Georgescu | Will be sent when the session got put on hold, either by the local or the remote party. |
114 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
115 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
116 | 1 | Adrian Georgescu | [[BR]]''originator'':[[BR]] |
117 | 1 | Adrian Georgescu | A string indicating who originated the hold request, and consequently in which direction the session got put on hold. |
118 | 1 | Adrian Georgescu | '''SCSessionGotUnholdRequest''':: |
119 | 1 | Adrian Georgescu | Will be sent when the session got taken out of hold, either by the local or the remote party. |
120 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
121 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
122 | 1 | Adrian Georgescu | [[BR]]''originator'':[[BR]] |
123 | 1 | Adrian Georgescu | A string indicating who sent the original hold request, and consequently in which direction the session got taken out of hold. |
124 | 1 | Adrian Georgescu | '''SCSessionWillStartRecordingAudio''':: |
125 | 1 | Adrian Georgescu | Will be sent when the application requested that the audio stream active within the session be record to a {{{.wav}}} file, just before recording starts. |
126 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
127 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
128 | 1 | Adrian Georgescu | [[BR]]''file_name'':[[BR]] |
129 | 1 | Adrian Georgescu | The name of the recording {{{.wav}}} file, including full path. |
130 | 1 | Adrian Georgescu | '''SCSessionDidStartRecordingAudio''':: |
131 | 1 | Adrian Georgescu | Will be sent when the application requested that the audio stream active within the session be record to a {{{.wav}}} file, just after recording starts. |
132 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
133 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
134 | 1 | Adrian Georgescu | [[BR]]''file_name'':[[BR]] |
135 | 1 | Adrian Georgescu | The name of the recording {{{.wav}}} file, including full path. |
136 | 1 | Adrian Georgescu | '''SCSessionWillStopRecordingAudio''':: |
137 | 1 | Adrian Georgescu | Will be sent when the application requested ending the recording to a {{{.wav}}} file, just before recording stops. |
138 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
139 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
140 | 1 | Adrian Georgescu | [[BR]]''file_name'':[[BR]] |
141 | 1 | Adrian Georgescu | The name of the recording {{{.wav}}} file, including full path. |
142 | 1 | Adrian Georgescu | '''SCSessionDidStopRecordingAudio''':: |
143 | 1 | Adrian Georgescu | Will be sent when the application requested ending the recording to a {{{.wav}}} file, just before recording stops. |
144 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
145 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
146 | 1 | Adrian Georgescu | [[BR]]''file_name'':[[BR]] |
147 | 1 | Adrian Georgescu | The name of the recording {{{.wav}}} file, including full path. |
148 | 1 | Adrian Georgescu | '''SCSessionGotNoAudio''':: |
149 | 1 | Adrian Georgescu | This notification will be sent if 5 seconds after the audio stream starts, no audio was received from the remote party. |
150 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
151 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
152 | 1 | Adrian Georgescu | '''SCSessionGotDTMF''':: |
153 | 1 | Adrian Georgescu | Will be send if there is a DMTF digit received from the remote party on the audio stream. |
154 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
155 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
156 | 1 | Adrian Georgescu | [[BR]]''digit'':[[BR]] |
157 | 1 | Adrian Georgescu | The DTMF digit that was received, in the form of a string of length 1. |
158 | 1 | Adrian Georgescu | '''SCSessionGotMessage''':: |
159 | 1 | Adrian Georgescu | Will be sent whenever a MSRP message is received on the chat stream of the session. |
160 | 1 | Adrian Georgescu | [[BR]]''content'':[[BR]] |
161 | 1 | Adrian Georgescu | The body of the message. |
162 | 1 | Adrian Georgescu | [[BR]]''content_type'':[[BR]] |
163 | 1 | Adrian Georgescu | The Content-Type of the body. |
164 | 1 | Adrian Georgescu | [[BR]]''cpim_headers'':[[BR]] |
165 | 1 | Adrian Georgescu | A dictionary of headers included in the CPIM wrapper. |
166 | 1 | Adrian Georgescu | [[BR]]''message'':[[BR]] |
167 | 1 | Adrian Georgescu | Raw MSRP message, an msrplib.protocol.MSRPData instance |
168 | 1 | Adrian Georgescu | '''SCSessionDidDeliverMessage''':: |
169 | 1 | Adrian Georgescu | Will be sent when a previously sent MSRP chat message got delivered to the remote party. |
170 | 1 | Adrian Georgescu | [[BR]]''message_id'':[[BR]] |
171 | 1 | Adrian Georgescu | The unique identifier of this message as a string, as previously returned by the {{{send_message()}}} method. |
172 | 1 | Adrian Georgescu | [[BR]]''code'':[[BR]] |
173 | 1 | Adrian Georgescu | The response code of the confirmation report. |
174 | 1 | Adrian Georgescu | [[BR]]''reason'':[[BR]] |
175 | 1 | Adrian Georgescu | The reason string of the confirmation report. |
176 | 1 | Adrian Georgescu | [[BR]]''message'':[[BR]] |
177 | 1 | Adrian Georgescu | Raw MSRP message, an msrplib.protocol.MSRPData instance |
178 | 1 | Adrian Georgescu | '''SCSessionDidDeliverMessage''':: |
179 | 1 | Adrian Georgescu | Will be sent when a previously sent MSRP chat message did not get delivered to the remote party. |
180 | 1 | Adrian Georgescu | [[BR]]''message_id'':[[BR]] |
181 | 1 | Adrian Georgescu | The unique identifier of this message as a string, as previously returned by the {{{send_message()}}} method. |
182 | 1 | Adrian Georgescu | [[BR]]''code'':[[BR]] |
183 | 1 | Adrian Georgescu | The response code of the confirmation report. |
184 | 1 | Adrian Georgescu | [[BR]]''reason'':[[BR]] |
185 | 1 | Adrian Georgescu | The reason string of the confirmation report. |
186 | 1 | Adrian Georgescu | [[BR]]''message'':[[BR]] |
187 | 1 | Adrian Georgescu | Raw MSRP message, an msrplib.protocol.MSRPData instance |
188 | 1 | Adrian Georgescu | '''SCSessionGotStreamProposal''':: |
189 | 1 | Adrian Georgescu | Will be sent when either the local or the remote party proposes to add a stream to the session. |
190 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
191 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
192 | 1 | Adrian Georgescu | [[BR]]''proposer'':[[BR]] |
193 | 1 | Adrian Georgescu | The party that did the stream proposal, can be either "local" or "remote". |
194 | 1 | Adrian Georgescu | [[BR]]''adds_audio'':[[BR]] |
195 | 1 | Adrian Georgescu | A boolean indicating if the proposal would add an audio stream. |
196 | 1 | Adrian Georgescu | [[BR]]''adds_chat'':[[BR]] |
197 | 1 | Adrian Georgescu | A boolean indicating if the proposal would add a chat stream. |
198 | 1 | Adrian Georgescu | '''SCSessionRejectedStreamProposal''':: |
199 | 1 | Adrian Georgescu | Will be sent when either the local or the remote party rejects a proposal to have (a) stream(s) added to the session. |
200 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
201 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
202 | 1 | Adrian Georgescu | [[BR]]''proposer'':[[BR]] |
203 | 1 | Adrian Georgescu | The party that did the stream proposal, can be either "local" or "remote". |
204 | 1 | Adrian Georgescu | [[BR]]''reason'':[[BR]] |
205 | 1 | Adrian Georgescu | The reason for rejecting the stream proposal. |
206 | 1 | Adrian Georgescu | '''SCSessionRejectedStreamProposal''':: |
207 | 1 | Adrian Georgescu | Will be sent when either the local or the remote party accepts a proposal to have (a) stream(s) added to the session. |
208 | 1 | Adrian Georgescu | [[BR]]''timestamp'':[[BR]] |
209 | 1 | Adrian Georgescu | A {{{datetime.datetime}}} object indicating when the notification was sent. |
210 | 1 | Adrian Georgescu | [[BR]]''proposer'':[[BR]] |
211 | 1 | Adrian Georgescu | The party that did the stream proposal, can be either "local" or "remote". |
212 | 1 | Adrian Georgescu | |
213 | 1 | Adrian Georgescu | |
214 | 1 | Adrian Georgescu | == Identification of GUI toolkits == |
215 | 1 | Adrian Georgescu | |
216 | 1 | Adrian Georgescu | The following toollkitts have been identified for the development of a GUI: |
217 | 1 | Adrian Georgescu | |
218 | 1 | Adrian Georgescu | * Native Cocoa for MacOSX OS - used for prototyping the final middleware and GUI specifications |
219 | 1 | Adrian Georgescu | * QT - used for Linux, Windows and other supported OS based |
220 | 1 | Adrian Georgescu | |
221 | 1 | Adrian Georgescu | == Study GUI toolkit documentation == |
222 | 1 | Adrian Georgescu | |
223 | 1 | Adrian Georgescu | Cocoa toolkit documentation has been studied. |