~ubuntu-branches/ubuntu/natty/evolution-exchange/natty

« back to all changes in this revision

Viewing changes to docs/reference/html/ximian-connector-freebusy.html

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2009-03-17 02:41:01 UTC
  • mfrom: (1.1.56 upstream)
  • Revision ID: james.westby@ubuntu.com-20090317024101-slykmlnk7zgcz318
Tags: 2.26.0-0ubuntu1
New upstream version

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
<link rel="up" href="ch02.html" title="Implementation of Connector Features">
9
9
<link rel="prev" href="ximian-connector-fba.html" title="Exchange 2003 Forms-Based Authentication">
10
10
<link rel="next" href="ximian-connector-oof.html" title="Out of Office">
11
 
<meta name="generator" content="GTK-Doc V1.10 (XML mode)">
 
11
<meta name="generator" content="GTK-Doc V1.12 (XML mode)">
12
12
<link rel="stylesheet" href="style.css" type="text/css">
13
13
<link rel="chapter" href="ch01.html" title="Exchange Architectural Notes">
14
14
<link rel="chapter" href="ch02.html" title="Implementation of Connector Features">
35
35
<td valign="top" align="right"></td>
36
36
</tr></table></div>
37
37
<div class="refsect1" lang="en">
38
 
<a name="id2965084"></a><h2>The <span class="application">OWA</span> XML Free/Busy interface</h2>
 
38
<a name="id2588865"></a><h2>The <span class="application">OWA</span> XML Free/Busy interface</h2>
39
39
<p>
40
40
In Connector versions up to and including 2.0, we get free/busy data
41
41
by using the XML interface to <span class="application">OWA</span>. The
42
42
request URL looks like:
43
43
</p>
44
 
<div class="informalexample"><pre class="programlisting">
45
 
        /public/?Cmd=freebusy
46
 
                &amp;start=2002-10-23T04:00:00Z
47
 
                &amp;end=2002-11-27T05:00:00Z
48
 
                &amp;interval=30
49
 
                &amp;u=SMTP:danw@xcs.ximian.com
50
 
                &amp;u=SMTP:eleanor@xcs.ximian.com
51
 
</pre></div>
 
44
<div class="informalexample">
 
45
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
46
    <tbody>
 
47
      <tr>
 
48
        <td class="listing_lines" align="right"><pre>1
 
49
2
 
50
3
 
51
4
 
52
5
 
53
6</pre></td>
 
54
        <td class="listing_code"><pre class="programlisting">/<span class="keyword">public</span>/?Cmd=freebusy
 
55
                &amp;start=<span class="number">2002</span>-<span class="number">10</span>-23T04:<span class="preproc">0</span><span class="number">0</span>:00Z
 
56
                &amp;end=<span class="number">2002</span>-<span class="number">11</span>-27T05:<span class="preproc">0</span><span class="number">0</span>:00Z
 
57
                &amp;interval=<span class="number">30</span>
 
58
                &amp;u=SMTP:danw@xcs.ximian.com
 
59
                &amp;u=SMTP:eleanor@xcs.ximian.com</pre></td>
 
60
      </tr>
 
61
    </tbody>
 
62
  <table>
 
63
</div>
 
64
 
52
65
<p>
53
66
(Line breaks inserted for clarity. The actual URL would all be on one
54
67
line of course.) This must be sent with a proper
60
73
The response (with a status of <code class="literal"><span class="errorcode">200</span>
61
74
<span class="errorname">OK</span></code>) looks like:
62
75
</p>
63
 
<div class="informalexample"><pre class="programlisting">
64
 
        &lt;a:response xmlns:a="WM"&gt;
65
 
          &lt;a:recipients&gt;
66
 
            &lt;a:item&gt;
67
 
              &lt;a:displayname&gt;All Attendees&lt;/a:displayname&gt;
68
 
              &lt;a:type&gt;1&lt;/a:type&gt;
69
 
              &lt;a:fbdata&gt;00000022220000000000000001221000222222...&lt;/a:fbdata&gt;
70
 
            &lt;/a:item&gt;
71
 
            &lt;a:item&gt;
72
 
              &lt;a:displayname&gt;Dan Winship&lt;/a:displayname&gt;
73
 
              &lt;a:email type="SMTP"&gt;danw@xcs.ximian.com&lt;/a:email&gt;
74
 
              &lt;a:type&gt;1&lt;/a:type&gt;
75
 
              &lt;a:fbdata&gt;00000000000000000000000000220000222222...&lt;/a:fbdata&gt;
76
 
            &lt;/a:item&gt;
77
 
            &lt;a:item&gt;
78
 
              &lt;a:displayname&gt;Eleanor Garcia&lt;/a:displayname&gt;
79
 
              &lt;a:email type="SMTP"&gt;eleanor@xcs.ximian.com&lt;/a:email&gt;
80
 
              &lt;a:type&gt;1&lt;/a:type&gt;
81
 
              &lt;a:fbdata&gt;00000022220000000000000001111000000000...&lt;/a:fbdata&gt;
82
 
            &lt;/a:item&gt;
83
 
          &lt;/a:recipients&gt;  
84
 
        &lt;/a:response&gt;
85
 
</pre></div>
 
76
<div class="informalexample">
 
77
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
78
    <tbody>
 
79
      <tr>
 
80
        <td class="listing_lines" align="right"><pre>1
 
81
2
 
82
3
 
83
4
 
84
5
 
85
6
 
86
7
 
87
8
 
88
9
 
89
10
 
90
11
 
91
12
 
92
13
 
93
14
 
94
15
 
95
16
 
96
17
 
97
18
 
98
19
 
99
20
 
100
21</pre></td>
 
101
        <td class="listing_code"><pre class="programlisting">&lt;a:response xmlns:a=<span class="number">&quot;WM&quot;</span>&gt;
 
102
          &lt;a:recipients&gt;
 
103
            &lt;a:item&gt;
 
104
              &lt;a:displayname&gt;All Attendees&lt;/a:displayname&gt;
 
105
              &lt;a:type&gt;<span class="number">1</span>&lt;/a:type&gt;
 
106
              &lt;a:fbdata&gt;<span class="number">00000022220000000000000001221000222222.</span>..&lt;/a:fbdata&gt;
 
107
            &lt;/a:item&gt;
 
108
            &lt;a:item&gt;
 
109
              &lt;a:displayname&gt;Dan Winship&lt;/a:displayname&gt;
 
110
              &lt;a:email type=<span class="number">&quot;SMTP&quot;</span>&gt;danw@xcs.ximian.com&lt;/a:email&gt;
 
111
              &lt;a:type&gt;<span class="number">1</span>&lt;/a:type&gt;
 
112
              &lt;a:fbdata&gt;<span class="number">00000000000000000000000000220000222222.</span>..&lt;/a:fbdata&gt;
 
113
            &lt;/a:item&gt;
 
114
            &lt;a:item&gt;
 
115
              &lt;a:displayname&gt;Eleanor Garcia&lt;/a:displayname&gt;
 
116
              &lt;a:email type=<span class="number">&quot;SMTP&quot;</span>&gt;eleanor@xcs.ximian.com&lt;/a:email&gt;
 
117
              &lt;a:type&gt;<span class="number">1</span>&lt;/a:type&gt;
 
118
              &lt;a:fbdata&gt;<span class="number">00000022220000000000000001111000000000.</span>..&lt;/a:fbdata&gt;
 
119
            &lt;/a:item&gt;
 
120
          &lt;/a:recipients&gt;
 
121
        &lt;/a:response&gt;</pre></td>
 
122
      </tr>
 
123
    </tbody>
 
124
  <table>
 
125
</div>
 
126
 
86
127
<p>
87
128
Each character in the <code class="literal">fbdata</code> section represents a
88
129
length of "<code class="literal">interval</code>" minutes (the interval
111
152
</table></div>
112
153
</div>
113
154
<div class="refsect1" lang="en">
114
 
<a name="id2977428"></a><h2>The Lower-level Free/Busy Interface</h2>
 
155
<a name="id2582716"></a><h2>The Lower-level Free/Busy Interface</h2>
115
156
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
116
157
<h3 class="title">Note</h3>
117
158
<p>There is some code in
121
162
</p>
122
163
</div>
123
164
<div class="refsect2" lang="en">
124
 
<a name="id2977450"></a><h3>Public Free/Busy file</h3>
 
165
<a name="id2582738"></a><h3>Public Free/Busy file</h3>
125
166
<p>
126
167
<span class="application">OWA</span>'s free/busy data is generated from the
127
168
data in <code class="uri">/public/NON_IPM_SUBTREE/SCHEDULE%2B%20FREE%20BUSY/</code>.
188
229
<p>
189
230
The <code class="literal">_MONTHS</code> properties are arrays of
190
231
</p>
191
 
<div class="informalexample"><pre class="programlisting">
192
 
struct {
193
 
        guint month:4;  /* 1 = January */
194
 
        guint year :28;
195
 
};
196
 
</pre></div>
 
232
<div class="informalexample">
 
233
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
234
    <tbody>
 
235
      <tr>
 
236
        <td class="listing_lines" align="right"><pre>1
 
237
2
 
238
3
 
239
4</pre></td>
 
240
        <td class="listing_code"><pre class="programlisting"><span class="type">struct</span> {
 
241
        guint month:<span class="number">4</span>; <span class="comment">/*</span><span class="comment"> 1 = January </span><span class="comment">*/</span>
 
242
        guint year :<span class="number">28</span>;
 
243
};</pre></td>
 
244
      </tr>
 
245
    </tbody>
 
246
  <table>
 
247
</div>
 
248
 
197
249
<p>
198
250
Each element of this array has a corresponding element in the
199
251
<code class="literal">_EVENTS</code> array containing the events in that month
200
252
and year as an array of:
201
253
</p>
202
 
<div class="informalexample"><pre class="programlisting">
203
 
struct {
204
 
        guint16 start;  /* minutes since start of month */
205
 
        guint16 end;    /* minutes since start of month */
206
 
};
207
 
</pre></div>
 
254
<div class="informalexample">
 
255
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
256
    <tbody>
 
257
      <tr>
 
258
        <td class="listing_lines" align="right"><pre>1
 
259
2
 
260
3
 
261
4</pre></td>
 
262
        <td class="listing_code"><pre class="programlisting"><span class="type">struct</span> {
 
263
        guint16 start;  <span class="comment">/*</span><span class="comment"> minutes since start of month </span><span class="comment">*/</span>
 
264
        guint16 end;    <span class="comment">/*</span><span class="comment"> minutes since start of month </span><span class="comment">*/</span>
 
265
};</pre></td>
 
266
      </tr>
 
267
    </tbody>
 
268
  <table>
 
269
</div>
 
270
 
208
271
<p>
209
272
If there are no events of a given type in the given interval, then
210
273
<span class="application">Outlook</span> leaves the two properties for that
250
313
</div>
251
314
<hr>
252
315
<div class="refsect2" lang="en">
253
 
<a name="id2956944"></a><h3>Personal Free/Busy file</h3>
 
316
<a name="id2576364"></a><h3>Personal Free/Busy file</h3>
254
317
<p>
255
318
Each user also has a personal free/busy message, at:
256
319
</p>
289
352
The free/busy data is stored in the
290
353
<code class="literal">PR_PERSONAL_FREEBUSY</code> property as follows:
291
354
</p>
292
 
<div class="informalexample"><pre class="programlisting">
293
 
struct {
294
 
        guint32 magic;          /* 0xdeadbeef */
295
 
        guint32 header_len;     /* 0x00000040 */
296
 
        guint32 unknown_1;      /* 0x00010000 */
297
 
        guint32 unknown_2;      /* 0x00000000 */
298
 
 
299
 
        guint32 num_groups;     /* number of free/busy groups */
300
 
        guint32 num_events;     /* total number of free/busy objects */
301
 
        guint32 unknown_3;      /* 0x00000008 */
302
 
        guint32 unknown_4;      /* 0x00000004 */
303
 
 
304
 
        guint64 first_event;    /* Windows filetime of start of first event */
305
 
        guint64 last_event;     /* Windows filetime of end of last event */
306
 
        guint64 start_valid;    /* Windows filetime of start of range */
307
 
        guint64 end_valid;      /* Windows filetime of end of range */
308
 
 
309
 
        struct {
310
 
                guint32 index;  /* Index of first event belonging to this group */
311
 
                guint32 count;  /* Number of events in this group */
312
 
        } groups[num_groups];
313
 
 
314
 
        struct {
315
 
                guint32 offset; /* Offset in minutes of event from start of group */
316
 
                guint len:13;   /* Length of event in minutes */
317
 
                guint status:3; /* Status (1 = tentative, 2 = busy, 3 = oof) */
318
 
        } events[num_events];
319
 
};
320
 
</pre></div>
 
355
<div class="informalexample">
 
356
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
357
    <tbody>
 
358
      <tr>
 
359
        <td class="listing_lines" align="right"><pre>1
 
360
2
 
361
3
 
362
4
 
363
5
 
364
6
 
365
7
 
366
8
 
367
9
 
368
10
 
369
11
 
370
12
 
371
13
 
372
14
 
373
15
 
374
16
 
375
17
 
376
18
 
377
19
 
378
20
 
379
21
 
380
22
 
381
23
 
382
24
 
383
25
 
384
26
 
385
27</pre></td>
 
386
        <td class="listing_code"><pre class="programlisting"><span class="type">struct</span> {
 
387
        guint32 magic;          <span class="comment">/*</span><span class="comment"> 0xdeadbeef </span><span class="comment">*/</span>
 
388
        guint32 header_len;     <span class="comment">/*</span><span class="comment"> 0x00000040 </span><span class="comment">*/</span>
 
389
        guint32 unknown_1;      <span class="comment">/*</span><span class="comment"> 0x00010000 </span><span class="comment">*/</span>
 
390
        guint32 unknown_2;      <span class="comment">/*</span><span class="comment"> 0x00000000 </span><span class="comment">*/</span>
 
391
 
 
392
        guint32 num_groups;     <span class="comment">/*</span><span class="comment"> number of free/busy groups </span><span class="comment">*/</span>
 
393
        guint32 num_events;     <span class="comment">/*</span><span class="comment"> total number of free/busy objects </span><span class="comment">*/</span>
 
394
        guint32 unknown_3;      <span class="comment">/*</span><span class="comment"> 0x00000008 </span><span class="comment">*/</span>
 
395
        guint32 unknown_4;      <span class="comment">/*</span><span class="comment"> 0x00000004 </span><span class="comment">*/</span>
 
396
 
 
397
        guint64 first_event;    <span class="comment">/*</span><span class="comment"> Windows filetime of start of first event </span><span class="comment">*/</span>
 
398
        guint64 last_event;     <span class="comment">/*</span><span class="comment"> Windows filetime of end of last event </span><span class="comment">*/</span>
 
399
        guint64 start_valid;    <span class="comment">/*</span><span class="comment"> Windows filetime of start of range </span><span class="comment">*/</span>
 
400
        guint64 end_valid;      <span class="comment">/*</span><span class="comment"> Windows filetime of end of range </span><span class="comment">*/</span>
 
401
 
 
402
        <span class="type">struct</span> {
 
403
                guint32 index;  <span class="comment">/*</span><span class="comment"> Index of first event belonging to this group </span><span class="comment">*/</span>
 
404
                guint32 count;  <span class="comment">/*</span><span class="comment"> Number of events in this group </span><span class="comment">*/</span>
 
405
        } groups[num_groups];
 
406
 
 
407
        <span class="type">struct</span> {
 
408
                guint32 offset; <span class="comment">/*</span><span class="comment"> Offset in minutes of event from start of group </span><span class="comment">*/</span>
 
409
                guint len:<span class="number">13</span>; <span class="comment">/*</span><span class="comment"> Length of event in minutes </span><span class="comment">*/</span>
 
410
                guint status:<span class="number">3</span>;       <span class="comment">/*</span><span class="comment"> Status (1 = tentative, 2 = busy, 3 = oof) </span><span class="comment">*/</span>
 
411
        } events[num_events];
 
412
};</pre></td>
 
413
      </tr>
 
414
    </tbody>
 
415
  <table>
 
416
</div>
 
417
 
321
418
<p>
322
419
The first group starts at the time indicated by
323
420
<em class="structfield"><code>start_valid</code></em>, so an event in group
353
450
</div>
354
451
<div class="footer">
355
452
<hr>
356
 
          Generated by GTK-Doc V1.10</div>
 
453
          Generated by GTK-Doc V1.12</div>
357
454
</body>
358
455
</html>