Wiki source code of CalDAV and CardDAV handshake

Last modified by Pascal Robert on 2013/11/18 06:16

Hide last authors
Pascal Robert 1.1 1 (% class="panelMacro" %)
2 (((
3 |(((
4 [[image:url:http://www.macti.ca/wiki/images/icons/emoticons/information.png]]
5 )))|(((
6 The RFC that explains the handshake is [[now available>>url:http://tools.ietf.org/html/rfc6764||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]].
7 )))
8
9
10 )))
11
12 (% style="color: rgb(34,34,34);" %)
13
14
15 (% style="color: rgb(34,34,34);" %)If you use iCal/Calendar on Mac OS X or iOS, you might have seen that you don't have to specify the type of server ("Automatic" is the default type). But to work, you need to setup DNS entries so that iCal/Calendar can find the server for the user, and your CalDAV server must support "well-known" URLs. "well-known" is supported by iCal Server (OS X Server 10.7 or 10.8), Calendar Server (the open source version of iCal Server) and Kerio Connect (starting with version 7.2).
16
17 (% style="color: rgb(34,34,34);" %)For DNS, I found how to do it in this [[article>>url:http://www.staze.org/carddav-caldav-autodiscovery-on-mac-os-x-and-ios/||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]]. In short, you need at least one SRV entry that will tell where your server is located. If your domain is "macti.lan", you need to add the following entry:
18
19 (% class="syntaxhighlighter nogutter html" %)
20 (((
21
22
23 |(((
24 (% class="container" title="Hint: double-click to select code" %)
25 (((
26 (% class="line number1 index0 alt2" %)
27 (((
28 {{code language="none"}}
29 _caldavs._tcp.macti.lan.            10800 IN SRV      10 1 8443 server.macti.lan.
30 {{/code}}
31 )))
32 )))
33 )))
34
35
36 )))
37
38 (% style="color: rgb(34,34,34);" %)Where 8443 is the port on which your CalDAV server is running (8443 is the HTTPS port for iCal Server/Calendar Server, for Kerio Connect by default it's on port 443). server.macti.lan is the DNS name of the host running the CalDAV service.
39
40 (% style="color: rgb(34,34,34);" %)You will notice that the DNS entry is _caldav**s**_. If your CalDAV server is running on a non-protected port, or if it's available on both ports, you should add a DNS entry like this:
41
42 (% class="syntaxhighlighter nogutter html" %)
43 (((
44
45
46 |(((
47 (% class="container" title="Hint: double-click to select code" %)
48 (((
49 (% class="line number1 index0 alt2" %)
50 (((
51 {{code language="none"}}
52 _caldav._tcp.macti.lan.            10800 IN SRV      10 1 8008 server.macti.lan.
53 {{/code}}
54 )))
55 )))
56 )))
57
58
59 )))
60
61 (% style="color: rgb(34,34,34);" %)Notice that the 's' is missing in the DNS entry. If you have both entries, iCal/Calendar will try the secure entry first, and it's not working, it will try the non-secure entry after.
62
63 (% style="color: rgb(34,34,34);" %)If you have a iCloud account with a @me.com, a SRV entry do exist:
64
65 (% class="syntaxhighlighter nogutter html" %)
66 (((
67
68
69 |(((
70 (% class="container" title="Hint: double-click to select code" %)
71 (((
72 (% class="line number1 index0 alt2" %)
73 (((
74 {{code language="none"}}
75 $ dig _caldavs._tcp.me.com srv
76 {{/code}}
77 )))
78
79 (% class="line number2 index1 alt1" %)
80 (((
81 {{code language="none"}}
82 _caldavs._tcp.me.com. 3600 IN SRV 0 0 443 caldav.icloud.com.
83 {{/code}}
84 )))
85 )))
86 )))
87
88
89 )))
90
91 Once the DNS entry is found, the CalDAV client will take the value off the SRV record and do the following:
92
93 * (((
94 Do a PROPFIND (WebDAV method) request on [[https:~~/~~/server.macti.lan:443/.well-known/caldav>>url:https://server.macti.lan/.well-known/caldav||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] (or port 80 if the SRV record wasn't specifying https) with the following body:(% style="color: rgb(34,34,34);" %)
95
96
97 (% class="syntaxhighlighter nogutter html" %)
98 (((
99
100
101 |(((
102 (% class="container" title="Hint: double-click to select code" %)
103 (((
104 (% class="line number1 index0 alt2" %)
105 (((
106 {{code language="none"}}
107 <?
108 {{/code}}
109
110 {{code language="none"}}
111 xml
112 {{/code}}
113
114
115
116 {{code language="none"}}
117 version
118 {{/code}}
119
120 {{code language="none"}}
121 =
122 {{/code}}
123
124 {{code language="none"}}
125 "1.0"
126 {{/code}}
127
128
129
130 {{code language="none"}}
131 encoding
132 {{/code}}
133
134 {{code language="none"}}
135 =
136 {{/code}}
137
138 {{code language="none"}}
139 "UTF-8"
140 {{/code}}
141
142 {{code language="none"}}
143 ?>
144 {{/code}}
145 )))
146
147 (% class="line number2 index1 alt1" %)
148 (((
149 {{code language="none"}}
150 <
151 {{/code}}
152
153 {{code language="none"}}
154 A:propfind
155 {{/code}}
156
157
158
159 {{code language="none"}}
160 xmlns:A
161 {{/code}}
162
163 {{code language="none"}}
164 =
165 {{/code}}
166
167 {{code language="none"}}
168 "DAV:"
169 {{/code}}
170
171 {{code language="none"}}
172 >
173 {{/code}}
174 )))
175
176 (% class="line number3 index2 alt2" %)
177 (((
178 {{code language="none"}}
179   
180 {{/code}}
181
182 {{code language="none"}}
183 <
184 {{/code}}
185
186 {{code language="none"}}
187 A:prop
188 {{/code}}
189
190 {{code language="none"}}
191 >
192 {{/code}}
193 )))
194
195 (% class="line number4 index3 alt1" %)
196 (((
197 {{code language="none"}}
198     
199 {{/code}}
200
201 {{code language="none"}}
202 <
203 {{/code}}
204
205 {{code language="none"}}
206 A:current-user-principal
207 {{/code}}
208
209 {{code language="none"}}
210 />
211 {{/code}}
212 )))
213
214 (% class="line number5 index4 alt2" %)
215 (((
216 {{code language="none"}}
217     
218 {{/code}}
219
220 {{code language="none"}}
221 <
222 {{/code}}
223
224 {{code language="none"}}
225 A:principal-URL
226 {{/code}}
227
228 {{code language="none"}}
229 />
230 {{/code}}
231 )))
232
233 (% class="line number6 index5 alt1" %)
234 (((
235 {{code language="none"}}
236     
237 {{/code}}
238
239 {{code language="none"}}
240 <
241 {{/code}}
242
243 {{code language="none"}}
244 A:resourcetype
245 {{/code}}
246
247 {{code language="none"}}
248 />
249 {{/code}}
250 )))
251
252 (% class="line number7 index6 alt2" %)
253 (((
254 {{code language="none"}}
255   
256 {{/code}}
257
258 {{code language="none"}}
259 </
260 {{/code}}
261
262 {{code language="none"}}
263 A:prop
264 {{/code}}
265
266 {{code language="none"}}
267 >
268 {{/code}}
269 )))
270
271 (% class="line number8 index7 alt1" %)
272 (((
273 {{code language="none"}}
274 </
275 {{/code}}
276
277 {{code language="none"}}
278 A:propfind
279 {{/code}}
280
281 {{code language="none"}}
282 >
283 {{/code}}
284 )))
285 )))
286 )))
287 )))
288 )))
289 * If nothing was found on port 443 or port 80, it will do the same request on port 8443 or 8008.
290 * If nothing was found on port 8443 or 8008, it will then use use the host and port from the SRV record.
291
292 (% style="color: rgb(34,34,34);" %)The response from /.well-known/caldav might be a redirect (HTTP status code 301 or 302). In fact, that's what iCal Server 10.8 does, it redirect the request to [[http:~~/~~/server.macti.lan:8008/>>url:http://server.macti.lan:8008/||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]]. So again, iCal will do the same request as before until it gets a 207 status code instead of a redirect. The response will look like this:
293
294 (% class="syntaxhighlighter nogutter html" %)
295 (((
296
297
298 |(((
299 (% class="container" title="Hint: double-click to select code" %)
300 (((
301 (% class="line number1 index0 alt2" %)
302 (((
303 {{code language="none"}}
304 <?
305 {{/code}}
306
307 {{code language="none"}}
308 xml
309 {{/code}}
310
311
312
313 {{code language="none"}}
314 version
315 {{/code}}
316
317 {{code language="none"}}
318 =
319 {{/code}}
320
321 {{code language="none"}}
322 '1.0'
323 {{/code}}
324
325
326
327 {{code language="none"}}
328 encoding
329 {{/code}}
330
331 {{code language="none"}}
332 =
333 {{/code}}
334
335 {{code language="none"}}
336 'UTF-8'
337 {{/code}}
338
339 {{code language="none"}}
340 ?>
341 {{/code}}
342 )))
343
344 (% class="line number2 index1 alt1" %)
345 (((
346 {{code language="none"}}
347 <
348 {{/code}}
349
350 {{code language="none"}}
351 multistatus
352 {{/code}}
353
354
355
356 {{code language="none"}}
357 xmlns
358 {{/code}}
359
360 {{code language="none"}}
361 =
362 {{/code}}
363
364 {{code language="none"}}
365 'DAV:'
366 {{/code}}
367
368 {{code language="none"}}
369 >
370 {{/code}}
371 )))
372
373 (% class="line number3 index2 alt2" %)
374 (((
375 {{code language="none"}}
376   
377 {{/code}}
378
379 {{code language="none"}}
380 <
381 {{/code}}
382
383 {{code language="none"}}
384 response
385 {{/code}}
386
387 {{code language="none"}}
388 >
389 {{/code}}
390 )))
391
392 (% class="line number4 index3 alt1" %)
393 (((
394 {{code language="none"}}
395     
396 {{/code}}
397
398 {{code language="none"}}
399 <
400 {{/code}}
401
402 {{code language="none"}}
403 href
404 {{/code}}
405
406 {{code language="none"}}
407 >/</
408 {{/code}}
409
410 {{code language="none"}}
411 href
412 {{/code}}
413
414 {{code language="none"}}
415 >
416 {{/code}}
417 )))
418
419 (% class="line number5 index4 alt2" %)
420 (((
421 {{code language="none"}}
422     
423 {{/code}}
424
425 {{code language="none"}}
426 <
427 {{/code}}
428
429 {{code language="none"}}
430 propstat
431 {{/code}}
432
433 {{code language="none"}}
434 >
435 {{/code}}
436 )))
437
438 (% class="line number6 index5 alt1" %)
439 (((
440 {{code language="none"}}
441       
442 {{/code}}
443
444 {{code language="none"}}
445 <
446 {{/code}}
447
448 {{code language="none"}}
449 prop
450 {{/code}}
451
452 {{code language="none"}}
453 >
454 {{/code}}
455 )))
456
457 (% class="line number7 index6 alt2" %)
458 (((
459 {{code language="none"}}
460         
461 {{/code}}
462
463 {{code language="none"}}
464 <
465 {{/code}}
466
467 {{code language="none"}}
468 current-user-principal
469 {{/code}}
470
471 {{code language="none"}}
472 >
473 {{/code}}
474 )))
475
476 (% class="line number8 index7 alt1" %)
477 (((
478 {{code language="none"}}
479           
480 {{/code}}
481
482 {{code language="none"}}
483 <
484 {{/code}}
485
486 {{code language="none"}}
487 href
488 {{/code}}
489
490 {{code language="none"}}
491 >/principals/__uids__/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/</
492 {{/code}}
493
494 {{code language="none"}}
495 href
496 {{/code}}
497
498 {{code language="none"}}
499 >
500 {{/code}}
501 )))
502
503 (% class="line number9 index8 alt2" %)
504 (((
505 {{code language="none"}}
506         
507 {{/code}}
508
509 {{code language="none"}}
510 </
511 {{/code}}
512
513 {{code language="none"}}
514 current-user-principal
515 {{/code}}
516
517 {{code language="none"}}
518 >
519 {{/code}}
520 )))
521
522 (% class="line number10 index9 alt1" %)
523 (((
524 {{code language="none"}}
525         
526 {{/code}}
527
528 {{code language="none"}}
529 <
530 {{/code}}
531
532 {{code language="none"}}
533 resourcetype
534 {{/code}}
535
536 {{code language="none"}}
537 >
538 {{/code}}
539 )))
540
541 (% class="line number11 index10 alt2" %)
542 (((
543 {{code language="none"}}
544           
545 {{/code}}
546
547 {{code language="none"}}
548 <
549 {{/code}}
550
551 {{code language="none"}}
552 collection
553 {{/code}}
554
555 {{code language="none"}}
556 />
557 {{/code}}
558 )))
559
560 (% class="line number12 index11 alt1" %)
561 (((
562 {{code language="none"}}
563         
564 {{/code}}
565
566 {{code language="none"}}
567 </
568 {{/code}}
569
570 {{code language="none"}}
571 resourcetype
572 {{/code}}
573
574 {{code language="none"}}
575 >
576 {{/code}}
577 )))
578
579 (% class="line number13 index12 alt2" %)
580 (((
581 {{code language="none"}}
582       
583 {{/code}}
584
585 {{code language="none"}}
586 </
587 {{/code}}
588
589 {{code language="none"}}
590 prop
591 {{/code}}
592
593 {{code language="none"}}
594 >
595 {{/code}}
596 )))
597
598 (% class="line number14 index13 alt1" %)
599 (((
600 {{code language="none"}}
601       
602 {{/code}}
603
604 {{code language="none"}}
605 <
606 {{/code}}
607
608 {{code language="none"}}
609 status
610 {{/code}}
611
612 {{code language="none"}}
613 >HTTP/1.1 200 OK</
614 {{/code}}
615
616 {{code language="none"}}
617 status
618 {{/code}}
619
620 {{code language="none"}}
621 >
622 {{/code}}
623 )))
624
625 (% class="line number15 index14 alt2" %)
626 (((
627 {{code language="none"}}
628     
629 {{/code}}
630
631 {{code language="none"}}
632 </
633 {{/code}}
634
635 {{code language="none"}}
636 propstat
637 {{/code}}
638
639 {{code language="none"}}
640 >
641 {{/code}}
642 )))
643
644 (% class="line number16 index15 alt1" %)
645 (((
646 {{code language="none"}}
647   
648 {{/code}}
649
650 {{code language="none"}}
651 </
652 {{/code}}
653
654 {{code language="none"}}
655 response
656 {{/code}}
657
658 {{code language="none"}}
659 >
660 {{/code}}
661 )))
662
663 (% class="line number17 index16 alt2" %)
664 (((
665 {{code language="none"}}
666 </
667 {{/code}}
668
669 {{code language="none"}}
670 multistatus
671 {{/code}}
672
673 {{code language="none"}}
674 >
675 {{/code}}
676 )))
677 )))
678 )))
679
680
681 )))
682
683 (% style="color: rgb(34,34,34);" %)The value we need is the value of (%%)[[current-user-principal>>url:http://tools.ietf.org/html/rfc5397#section-3||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]](% style="color: rgb(34,34,34);" %), which indicates the location of the user's "principals". With this value, iCal will make a OPTIONS request to /principals/~_~_uids~_~_/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/. I don't know why iCal is making the request, but my guess it's doing it so that it can find which CalDAV features are supported by the CalDAV server. That list is available in the response's DAV header:
684
685 (% class="syntaxhighlighter nogutter html" %)
686 (((
687
688
689 |(((
690 (% class="container" title="Hint: double-click to select code" %)
691 (((
692 (% class="line number1 index0 alt2" %)
693 (((
694 {{code language="none"}}
695 DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendar-availability, inbox-availability, calendar-proxy, calendarserver-private-events, calendarserver-private-comments, calendarserver-sharing, calendarserver-sharing-no-scheduling, calendar-query-extended, calendar-default-alarms, addressbook, extended-mkcol, calendarserver-principal-property-search
696 {{/code}}
697 )))
698 )))
699 )))
700
701
702 )))
703
704 (% style="color: rgb(34,34,34);" %)This is a response from iCal Server 10.8, which supports all CalDAV features and extensions. Doing the same request to a Google Calendar server will return a lot less features/extensions.
705
706 (% style="color: rgb(34,34,34);" %)Following the OPTIONS request, iCal will make a PROPFIND request on the same URL as the OPTIONS request, with the following body:
707
708 (% class="syntaxhighlighter nogutter html" %)
709 (((
710
711
712 |(((
713 (% class="container" title="Hint: double-click to select code" %)
714 (((
715 (% class="line number1 index0 alt2" %)
716 (((
717 {{code language="none"}}
718 <?
719 {{/code}}
720
721 {{code language="none"}}
722 xml
723 {{/code}}
724
725
726
727 {{code language="none"}}
728 version
729 {{/code}}
730
731 {{code language="none"}}
732 =
733 {{/code}}
734
735 {{code language="none"}}
736 "1.0"
737 {{/code}}
738
739
740
741 {{code language="none"}}
742 encoding
743 {{/code}}
744
745 {{code language="none"}}
746 =
747 {{/code}}
748
749 {{code language="none"}}
750 "UTF-8"
751 {{/code}}
752
753 {{code language="none"}}
754 ?>
755 {{/code}}
756 )))
757
758 (% class="line number2 index1 alt1" %)
759 (((
760 {{code language="none"}}
761 <
762 {{/code}}
763
764 {{code language="none"}}
765 A:propfind
766 {{/code}}
767
768
769
770 {{code language="none"}}
771 xmlns:A
772 {{/code}}
773
774 {{code language="none"}}
775 =
776 {{/code}}
777
778 {{code language="none"}}
779 "DAV:"
780 {{/code}}
781
782 {{code language="none"}}
783 >
784 {{/code}}
785 )))
786
787 (% class="line number3 index2 alt2" %)
788 (((
789 {{code language="none"}}
790   
791 {{/code}}
792
793 {{code language="none"}}
794 <
795 {{/code}}
796
797 {{code language="none"}}
798 A:prop
799 {{/code}}
800
801 {{code language="none"}}
802 >
803 {{/code}}
804 )))
805
806 (% class="line number4 index3 alt1" %)
807 (((
808 {{code language="none"}}
809     
810 {{/code}}
811
812 {{code language="none"}}
813 <
814 {{/code}}
815
816 {{code language="none"}}
817 C:calendar-home-set
818 {{/code}}
819
820
821
822 {{code language="none"}}
823 xmlns:C
824 {{/code}}
825
826 {{code language="none"}}
827 =
828 {{/code}}
829
830 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
831
832 {{code language="none"}}
833 ""
834 {{/code}}
835
836 {{code language="none"}}
837 />
838 {{/code}}
839 )))
840
841 (% class="line number5 index4 alt2" %)
842 (((
843 {{code language="none"}}
844     
845 {{/code}}
846
847 {{code language="none"}}
848 <
849 {{/code}}
850
851 {{code language="none"}}
852 C:calendar-user-address-set
853 {{/code}}
854
855
856
857 {{code language="none"}}
858 xmlns:C
859 {{/code}}
860
861 {{code language="none"}}
862 =
863 {{/code}}
864
865 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
866
867 {{code language="none"}}
868 ""
869 {{/code}}
870
871 {{code language="none"}}
872 />
873 {{/code}}
874 )))
875
876 (% class="line number6 index5 alt1" %)
877 (((
878 {{code language="none"}}
879     
880 {{/code}}
881
882 {{code language="none"}}
883 <
884 {{/code}}
885
886 {{code language="none"}}
887 A:current-user-principal
888 {{/code}}
889
890 {{code language="none"}}
891 />
892 {{/code}}
893 )))
894
895 (% class="line number7 index6 alt2" %)
896 (((
897 {{code language="none"}}
898     
899 {{/code}}
900
901 {{code language="none"}}
902 <
903 {{/code}}
904
905 {{code language="none"}}
906 A:displayname
907 {{/code}}
908
909 {{code language="none"}}
910 />
911 {{/code}}
912 )))
913
914 (% class="line number8 index7 alt1" %)
915 (((
916 {{code language="none"}}
917     
918 {{/code}}
919
920 {{code language="none"}}
921 <
922 {{/code}}
923
924 {{code language="none"}}
925 B:dropbox-home-URL
926 {{/code}}
927
928
929
930 {{code language="none"}}
931 xmlns:B
932 {{/code}}
933
934 {{code language="none"}}
935 =
936 {{/code}}
937
938 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
939
940 {{code language="none"}}
941 "
942 {{/code}}
943
944 {{code language="none"}}
945 />
946 {{/code}}
947 )))
948
949 (% class="line number9 index8 alt2" %)
950 (((
951 {{code language="none"}}
952     
953 {{/code}}
954
955 {{code language="none"}}
956 <
957 {{/code}}
958
959 {{code language="none"}}
960 B:email-address-set
961 {{/code}}
962
963
964
965 {{code language="none"}}
966 xmlns:B
967 {{/code}}
968
969 {{code language="none"}}
970 =
971 {{/code}}
972
973 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
974
975 {{code language="none"}}
976 "
977 {{/code}}
978
979 {{code language="none"}}
980 />
981 {{/code}}
982 )))
983
984 (% class="line number10 index9 alt1" %)
985 (((
986 {{code language="none"}}
987     
988 {{/code}}
989
990 {{code language="none"}}
991 <
992 {{/code}}
993
994 {{code language="none"}}
995 B:notification-URL
996 {{/code}}
997
998
999
1000 {{code language="none"}}
1001 xmlns:B
1002 {{/code}}
1003
1004 {{code language="none"}}
1005 =
1006 {{/code}}
1007
1008 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
1009
1010 {{code language="none"}}
1011 "
1012 {{/code}}
1013
1014 {{code language="none"}}
1015 />
1016 {{/code}}
1017 )))
1018
1019 (% class="line number11 index10 alt2" %)
1020 (((
1021 {{code language="none"}}
1022     
1023 {{/code}}
1024
1025 {{code language="none"}}
1026 <
1027 {{/code}}
1028
1029 {{code language="none"}}
1030 A:principal-collection-set
1031 {{/code}}
1032
1033 {{code language="none"}}
1034 />
1035 {{/code}}
1036 )))
1037
1038 (% class="line number12 index11 alt1" %)
1039 (((
1040 {{code language="none"}}
1041     
1042 {{/code}}
1043
1044 {{code language="none"}}
1045 <
1046 {{/code}}
1047
1048 {{code language="none"}}
1049 A:principal-URL
1050 {{/code}}
1051
1052 {{code language="none"}}
1053 />
1054 {{/code}}
1055 )))
1056
1057 (% class="line number13 index12 alt2" %)
1058 (((
1059 {{code language="none"}}
1060     
1061 {{/code}}
1062
1063 {{code language="none"}}
1064 <
1065 {{/code}}
1066
1067 {{code language="none"}}
1068 A:resource-id
1069 {{/code}}
1070
1071 {{code language="none"}}
1072 />
1073 {{/code}}
1074 )))
1075
1076 (% class="line number14 index13 alt1" %)
1077 (((
1078 {{code language="none"}}
1079     
1080 {{/code}}
1081
1082 {{code language="none"}}
1083 <
1084 {{/code}}
1085
1086 {{code language="none"}}
1087 C:schedule-inbox-URL
1088 {{/code}}
1089
1090
1091
1092 {{code language="none"}}
1093 xmlns:C
1094 {{/code}}
1095
1096 {{code language="none"}}
1097 =
1098 {{/code}}
1099
1100 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
1101
1102 {{code language="none"}}
1103 ""
1104 {{/code}}
1105
1106 {{code language="none"}}
1107 /&gt
1108 {{/code}}
1109 )))
1110
1111 (% class="line number15 index14 alt2" %)
1112 (((
1113 {{code language="none"}}
1114     
1115 {{/code}}
1116
1117 {{code language="none"}}
1118 <C:schedule-outbox-URL
1119 {{/code}}
1120
1121 {{code language="none"}}
1122 xmlns:C
1123 {{/code}}
1124
1125 {{code language="none"}}
1126 =
1127 {{/code}}
1128
1129 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
1130
1131 {{code language="none"}}
1132 ""
1133 {{/code}}
1134
1135 {{code language="none"}}
1136 />    <
1137 {{/code}}
1138
1139 {{code language="none"}}
1140 A:supported-report-set
1141 {{/code}}
1142
1143 {{code language="none"}}
1144 />
1145 {{/code}}
1146 )))
1147
1148 (% class="line number16 index15 alt1" %)
1149 (((
1150 {{code language="none"}}
1151   
1152 {{/code}}
1153
1154 {{code language="none"}}
1155 </
1156 {{/code}}
1157
1158 {{code language="none"}}
1159 A:prop
1160 {{/code}}
1161
1162 {{code language="none"}}
1163 >
1164 {{/code}}
1165 )))
1166
1167 (% class="line number17 index16 alt2" %)
1168 (((
1169 {{code language="none"}}
1170 </
1171 {{/code}}
1172
1173 {{code language="none"}}
1174 A:propfind
1175 {{/code}}
1176
1177 {{code language="none"}}
1178 >
1179 {{/code}}
1180 )))
1181 )))
1182 )))
1183
1184
1185 )))
1186
1187 (% style="color: rgb(34,34,34);" %)The value that we need back from this request is the value of the (%%)[[calendar-home-set>>url:http://tools.ietf.org/html/rfc4791#section-6.2.1||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]](% style="color: rgb(34,34,34);" %) property. This property is the URL to calendar collections. So iCal can finally found where the calendars are, and it will do a PROPFIND request to the URL found with the value of calendar-home-set. The body of that PROPFIND request is quite large so I'm not going to past it here, but in short, that PROPFIND will find the request properties for each sub-collections in the main calendar collection. For example, if the main collection is located at:
1188
1189 (% class="syntaxhighlighter nogutter java" %)
1190 (((
1191
1192
1193 |(((
1194 (% class="container" title="Hint: double-click to select code" %)
1195 (((
1196 (% class="line number1 index0 alt2" %)
1197 (((
1198 {{code language="none"}}
1199 /calendars/__uids__/0B9B4FA7-8ADC-
1200 {{/code}}
1201
1202 {{code language="none"}}
1203 4984
1204 {{/code}}
1205
1206 {{code language="none"}}
1207 -
1208 {{/code}}
1209
1210 {{code language="none"}}
1211 8258
1212 {{/code}}
1213
1214 {{code language="none"}}
1215 -D04A4939A574/ 
1216 {{/code}}
1217 )))
1218 )))
1219 )))
1220
1221
1222 )))
1223
1224 (% style="color: rgb(34,34,34);" %)The "calendar" collection will be located at:
1225
1226 (% class="syntaxhighlighter nogutter java" %)
1227 (((
1228
1229
1230 |(((
1231 (% class="container" title="Hint: double-click to select code" %)
1232 (((
1233 (% class="line number1 index0 alt2" %)
1234 (((
1235 {{code language="none"}}
1236 /calendars/__uids__/0B9B4FA7-8ADC-
1237 {{/code}}
1238
1239 {{code language="none"}}
1240 4984
1241 {{/code}}
1242
1243 {{code language="none"}}
1244 -
1245 {{/code}}
1246
1247 {{code language="none"}}
1248 8258
1249 {{/code}}
1250
1251 {{code language="none"}}
1252 -D04A4939A574/calendar/
1253 {{/code}}
1254 )))
1255 )))
1256 )))
1257
1258
1259 )))
1260
1261 (% style="color: rgb(34,34,34);" %)And the "tasks" collection:
1262
1263 (% class="syntaxhighlighter nogutter java" %)
1264 (((
1265
1266
1267 |(((
1268 (% class="container" title="Hint: double-click to select code" %)
1269 (((
1270 (% class="line number1 index0 alt2" %)
1271 (((
1272 {{code language="none"}}
1273 /calendars/__uids__/0B9B4FA7-8ADC-
1274 {{/code}}
1275
1276 {{code language="none"}}
1277 4984
1278 {{/code}}
1279
1280 {{code language="none"}}
1281 -
1282 {{/code}}
1283
1284 {{code language="none"}}
1285 8258
1286 {{/code}}
1287
1288 {{code language="none"}}
1289 -D04A4939A574/tasks/
1290 {{/code}}
1291 )))
1292 )))
1293 )))
1294
1295
1296 )))
1297
1298 (% style="color: rgb(34,34,34);" %)So, for each sub-collection, iCal will do the following:
1299
1300 * A PROPFIND request to find the value of the checksum-versions property;
1301 * A PROPFIND request to find the value of the get[[ctag>>url:http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk/doc/Extensions/caldav-ctag.txt||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] and [[sync-token>>url:http://tools.ietf.org/html/rfc6578#section-4||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] properties;
1302 * A PROPFIND request to find the value of the [[getcontenttype>>url:http://tools.ietf.org/html/rfc2518#section-13.5||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] and [[getetag>>url:http://tools.ietf.org/html/rfc4791#section-5.3.4||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] properties;
1303
1304 (((
1305 The third request, who fetches the content type and etag, is the one that will return a link to all iCalendar objects from the calendar collection. The response will return a <response> XML attribute for each iCalendar objects, with the following structure:
1306
1307 )))
1308
1309 (((
1310
1311
1312 (% class="syntaxhighlighter nogutter html" %)
1313 (((
1314
1315
1316 |(((
1317 (% class="container" title="Hint: double-click to select code" %)
1318 (((
1319 (% class="line number1 index0 alt2" %)
1320 (((
1321 {{code language="none"}}
1322 <
1323 {{/code}}
1324
1325 {{code language="none"}}
1326 response
1327 {{/code}}
1328
1329 {{code language="none"}}
1330 >
1331 {{/code}}
1332 )))
1333
1334 (% class="line number2 index1 alt1" %)
1335 (((
1336 {{code language="none"}}
1337     
1338 {{/code}}
1339
1340 {{code language="none"}}
1341 <
1342 {{/code}}
1343
1344 {{code language="none"}}
1345 href
1346 {{/code}}
1347
1348 {{code language="none"}}
1349 >/calendars/__uids__/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/calendar/20111210T013923Z-uidGen%40mbp-pascal-robert-4.local.ics</
1350 {{/code}}
1351
1352 {{code language="none"}}
1353 href
1354 {{/code}}
1355
1356 {{code language="none"}}
1357 >
1358 {{/code}}
1359 )))
1360
1361 (% class="line number3 index2 alt2" %)
1362 (((
1363 {{code language="none"}}
1364     
1365 {{/code}}
1366
1367 {{code language="none"}}
1368 <
1369 {{/code}}
1370
1371 {{code language="none"}}
1372 propstat
1373 {{/code}}
1374
1375 {{code language="none"}}
1376 >
1377 {{/code}}
1378 )))
1379
1380 (% class="line number4 index3 alt1" %)
1381 (((
1382 {{code language="none"}}
1383       
1384 {{/code}}
1385
1386 {{code language="none"}}
1387 <
1388 {{/code}}
1389
1390 {{code language="none"}}
1391 prop
1392 {{/code}}
1393
1394 {{code language="none"}}
1395 >
1396 {{/code}}
1397 )))
1398
1399 (% class="line number5 index4 alt2" %)
1400 (((
1401 {{code language="none"}}
1402         
1403 {{/code}}
1404
1405 {{code language="none"}}
1406 <
1407 {{/code}}
1408
1409 {{code language="none"}}
1410 getcontenttype
1411 {{/code}}
1412
1413 {{code language="none"}}
1414 >text/calendar;charset=utf-8</
1415 {{/code}}
1416
1417 {{code language="none"}}
1418 getcontenttype
1419 {{/code}}
1420
1421 {{code language="none"}}
1422 >
1423 {{/code}}
1424 )))
1425
1426 (% class="line number6 index5 alt1" %)
1427 (((
1428 {{code language="none"}}
1429         
1430 {{/code}}
1431
1432 {{code language="none"}}
1433 <
1434 {{/code}}
1435
1436 {{code language="none"}}
1437 getetag
1438 {{/code}}
1439
1440 {{code language="none"}}
1441 >"9b6b2d11f86891f748ef09ab0993b75c"</
1442 {{/code}}
1443
1444 {{code language="none"}}
1445 getetag
1446 {{/code}}
1447
1448 {{code language="none"}}
1449 >
1450 {{/code}}
1451 )))
1452
1453 (% class="line number7 index6 alt2" %)
1454 (((
1455 {{code language="none"}}
1456       
1457 {{/code}}
1458
1459 {{code language="none"}}
1460 </
1461 {{/code}}
1462
1463 {{code language="none"}}
1464 prop
1465 {{/code}}
1466
1467 {{code language="none"}}
1468 >
1469 {{/code}}
1470 )))
1471
1472 (% class="line number8 index7 alt1" %)
1473 (((
1474 {{code language="none"}}
1475       
1476 {{/code}}
1477
1478 {{code language="none"}}
1479 <
1480 {{/code}}
1481
1482 {{code language="none"}}
1483 status
1484 {{/code}}
1485
1486 {{code language="none"}}
1487 >HTTP/1.1 200 OK</
1488 {{/code}}
1489
1490 {{code language="none"}}
1491 status
1492 {{/code}}
1493
1494 {{code language="none"}}
1495 >
1496 {{/code}}
1497 )))
1498
1499 (% class="line number9 index8 alt2" %)
1500 (((
1501 {{code language="none"}}
1502     
1503 {{/code}}
1504
1505 {{code language="none"}}
1506 </
1507 {{/code}}
1508
1509 {{code language="none"}}
1510 propstat
1511 {{/code}}
1512
1513 {{code language="none"}}
1514 >
1515 {{/code}}
1516 )))
1517
1518 (% class="line number10 index9 alt1" %)
1519 (((
1520 {{code language="none"}}
1521   
1522 {{/code}}
1523
1524 {{code language="none"}}
1525 </
1526 {{/code}}
1527
1528 {{code language="none"}}
1529 response
1530 {{/code}}
1531
1532 {{code language="none"}}
1533 >
1534 {{/code}}
1535 )))
1536 )))
1537 )))
1538
1539
1540 )))
1541
1542 (((
1543 (% style="color: rgb(34,34,34);" %)
1544
1545 )))
1546
1547 (((
1548 (% style="color: rgb(34,34,34);" %)From there, iCal will simply fetch all valid iCalendar objects and display them in the calendar window. This is done by doing a REPORT request on the calendar collection, with the (%%)[[calendar-multiget >>url:http://tools.ietf.org/html/rfc4791#section-7.9||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]](% style="color: rgb(34,34,34);" %)attribute, with the list of calendar objects that the previous PROPFIND response have returned.
1549 )))
1550
1551 (((
1552 (% style="color: rgb(34,34,34);" %)
1553 )))
1554
1555 (((
1556
1557
1558 (% class="syntaxhighlighter nogutter html" %)
1559 (((
1560
1561
1562 |(((
1563 (% class="container" title="Hint: double-click to select code" %)
1564 (((
1565 (% class="line number1 index0 alt2" %)
1566 (((
1567 {{code language="none"}}
1568 <?
1569 {{/code}}
1570
1571 {{code language="none"}}
1572 xml
1573 {{/code}}
1574
1575
1576
1577 {{code language="none"}}
1578 version
1579 {{/code}}
1580
1581 {{code language="none"}}
1582 =
1583 {{/code}}
1584
1585 {{code language="none"}}
1586 "1.0"
1587 {{/code}}
1588
1589
1590
1591 {{code language="none"}}
1592 encoding
1593 {{/code}}
1594
1595 {{code language="none"}}
1596 =
1597 {{/code}}
1598
1599 {{code language="none"}}
1600 "UTF-8"
1601 {{/code}}
1602
1603 {{code language="none"}}
1604 ?>
1605 {{/code}}
1606 )))
1607
1608 (% class="line number2 index1 alt1" %)
1609 (((
1610 {{code language="none"}}
1611 <
1612 {{/code}}
1613
1614 {{code language="none"}}
1615 B:calendar-multiget
1616 {{/code}}
1617
1618
1619
1620 {{code language="none"}}
1621 xmlns:B
1622 {{/code}}
1623
1624 {{code language="none"}}
1625 =
1626 {{/code}}
1627
1628 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
1629
1630 {{code language="none"}}
1631 ""
1632 {{/code}}
1633
1634 {{code language="none"}}
1635 >  
1636 {{/code}}
1637 )))
1638
1639 (% class="line number3 index2 alt2" %)
1640 (((
1641 {{code language="none"}}
1642   
1643 {{/code}}
1644
1645 {{code language="none"}}
1646 <
1647 {{/code}}
1648
1649 {{code language="none"}}
1650 A:prop
1651 {{/code}}
1652
1653
1654
1655 {{code language="none"}}
1656 xmlns:A
1657 {{/code}}
1658
1659 {{code language="none"}}
1660 =
1661 {{/code}}
1662
1663 {{code language="none"}}
1664 "DAV:"
1665 {{/code}}
1666
1667 {{code language="none"}}
1668 >    
1669 {{/code}}
1670 )))
1671
1672 (% class="line number4 index3 alt1" %)
1673 (((
1674 {{code language="none"}}
1675   
1676 {{/code}}
1677
1678 {{code language="none"}}
1679 <
1680 {{/code}}
1681
1682 {{code language="none"}}
1683 A:getetag
1684 {{/code}}
1685
1686 {{code language="none"}}
1687 />    
1688 {{/code}}
1689 )))
1690
1691 (% class="line number5 index4 alt2" %)
1692 (((
1693 {{code language="none"}}
1694   
1695 {{/code}}
1696
1697 {{code language="none"}}
1698 <
1699 {{/code}}
1700
1701 {{code language="none"}}
1702 B:calendar-data
1703 {{/code}}
1704
1705 {{code language="none"}}
1706 />
1707 {{/code}}
1708 )))
1709
1710 (% class="line number6 index5 alt1" %)
1711 (((
1712 {{code language="none"}}
1713   
1714 {{/code}}
1715
1716 {{code language="none"}}
1717 <
1718 {{/code}}
1719
1720 {{code language="none"}}
1721 C:updated-by
1722 {{/code}}
1723
1724
1725
1726 {{code language="none"}}
1727 xmlns:C
1728 {{/code}}
1729
1730 {{code language="none"}}
1731 =
1732 {{/code}}
1733
1734 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
1735
1736 {{code language="none"}}
1737 "
1738 {{/code}}
1739
1740 {{code language="none"}}
1741 />
1742 {{/code}}
1743 )))
1744
1745 (% class="line number7 index6 alt2" %)
1746 (((
1747 {{code language="none"}}
1748   
1749 {{/code}}
1750
1751 {{code language="none"}}
1752 <
1753 {{/code}}
1754
1755 {{code language="none"}}
1756 C:created-by
1757 {{/code}}
1758
1759
1760
1761 {{code language="none"}}
1762 xmlns:C
1763 {{/code}}
1764
1765 {{code language="none"}}
1766 =
1767 {{/code}}
1768
1769 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
1770
1771 {{code language="none"}}
1772 "
1773 {{/code}}
1774
1775 {{code language="none"}}
1776 />
1777 {{/code}}
1778 )))
1779
1780 (% class="line number8 index7 alt1" %)
1781 (((
1782 {{code language="none"}}
1783   
1784 {{/code}}
1785
1786 {{code language="none"}}
1787 </
1788 {{/code}}
1789
1790 {{code language="none"}}
1791 A:prop
1792 {{/code}}
1793
1794 {{code language="none"}}
1795 >
1796 {{/code}}
1797 )))
1798
1799 (% class="line number9 index8 alt2" %)
1800 (((
1801 {{code language="none"}}
1802   
1803 {{/code}}
1804
1805 {{code language="none"}}
1806 <
1807 {{/code}}
1808
1809 {{code language="none"}}
1810 A:href
1811 {{/code}}
1812
1813
1814
1815 {{code language="none"}}
1816 xmlns:A
1817 {{/code}}
1818
1819 {{code language="none"}}
1820 =
1821 {{/code}}
1822
1823 {{code language="none"}}
1824 "DAV:"
1825 {{/code}}
1826
1827 [[/calendars/~~_~~_uids~~_~~_/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/calendar/2011Z@local.ics>>url:http://wiki.wocommunity.org/mailto:/calendars/__uids__/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/calendar/2011Z@local.ics||shape="rect"]]
1828
1829 {{code language="none"}}
1830 ></
1831 {{/code}}
1832
1833 {{code language="none"}}
1834 A:href
1835 {{/code}}
1836
1837 {{code language="none"}}
1838 >
1839 {{/code}}
1840 )))
1841
1842 (% class="line number10 index9 alt1" %)
1843 (((
1844 {{code language="none"}}
1845 </
1846 {{/code}}
1847
1848 {{code language="none"}}
1849 B:calendar-multiget
1850 {{/code}}
1851
1852 {{code language="none"}}
1853 >
1854 {{/code}}
1855 )))
1856 )))
1857 )))
1858
1859
1860 )))
1861
1862 (((
1863 (% style="color: rgb(34,34,34);" %)
1864
1865 )))
1866
1867 (((
1868 (% style="color: rgb(34,34,34);" %)This is the response:
1869
1870 )))
1871
1872 (% class="syntaxhighlighter nogutter html" %)
1873 (((
1874
1875
1876 |(((
1877 (% class="container" title="Hint: double-click to select code" %)
1878 (((
1879 (% class="line number1 index0 alt2" %)
1880 (((
1881 {{code language="none"}}
1882 <
1883 {{/code}}
1884
1885 {{code language="none"}}
1886 D:multistatus
1887 {{/code}}
1888
1889
1890
1891 {{code language="none"}}
1892 xmlns:D
1893 {{/code}}
1894
1895 {{code language="none"}}
1896 =
1897 {{/code}}
1898
1899 {{code language="none"}}
1900 "DAV:"
1901 {{/code}}
1902
1903 {{code language="none"}}
1904 >  
1905 {{/code}}
1906 )))
1907
1908 (% class="line number2 index1 alt1" %)
1909 (((
1910 {{code language="none"}}
1911   
1912 {{/code}}
1913
1914 {{code language="none"}}
1915 <
1916 {{/code}}
1917
1918 {{code language="none"}}
1919 D:response
1920 {{/code}}
1921
1922 {{code language="none"}}
1923 >   
1924 {{/code}}
1925 )))
1926
1927 (% class="line number3 index2 alt2" %)
1928 (((
1929 {{code language="none"}}
1930     
1931 {{/code}}
1932
1933 {{code language="none"}}
1934 <
1935 {{/code}}
1936
1937 {{code language="none"}}
1938 D:href
1939 {{/code}}
1940
1941 {{code language="none"}}
1942 >/calendars/__uids__/C0F07FAF-A20A-4A88-A518-D27E5D3074CA/calendar/20111210T013923Z-uidGen%40mbp-pascal-robert-4.local.ics</
1943 {{/code}}
1944
1945 {{code language="none"}}
1946 D:href
1947 {{/code}}
1948
1949 {{code language="none"}}
1950 >    
1951 {{/code}}
1952 )))
1953
1954 (% class="line number4 index3 alt1" %)
1955 (((
1956 {{code language="none"}}
1957     
1958 {{/code}}
1959
1960 {{code language="none"}}
1961 <
1962 {{/code}}
1963
1964 {{code language="none"}}
1965 D:propstat
1966 {{/code}}
1967
1968 {{code language="none"}}
1969 >    
1970 {{/code}}
1971 )))
1972
1973 (% class="line number5 index4 alt2" %)
1974 (((
1975 {{code language="none"}}
1976       
1977 {{/code}}
1978
1979 {{code language="none"}}
1980 <
1981 {{/code}}
1982
1983 {{code language="none"}}
1984 D:status
1985 {{/code}}
1986
1987 {{code language="none"}}
1988 >HTTP/1.1 200 OK</
1989 {{/code}}
1990
1991 {{code language="none"}}
1992 D:status
1993 {{/code}}
1994
1995 {{code language="none"}}
1996 >    
1997 {{/code}}
1998 )))
1999
2000 (% class="line number6 index5 alt1" %)
2001 (((
2002 {{code language="none"}}
2003       
2004 {{/code}}
2005
2006 {{code language="none"}}
2007 <
2008 {{/code}}
2009
2010 {{code language="none"}}
2011 D:prop
2012 {{/code}}
2013
2014 {{code language="none"}}
2015 >
2016 {{/code}}
2017 )))
2018
2019 (% class="line number7 index6 alt2" %)
2020 (((
2021 {{code language="none"}}
2022         
2023 {{/code}}
2024
2025 {{code language="none"}}
2026 <
2027 {{/code}}
2028
2029 {{code language="none"}}
2030 D:getetag
2031 {{/code}}
2032
2033 {{code language="none"}}
2034 >"63459166486"</
2035 {{/code}}
2036
2037 {{code language="none"}}
2038 D:getetag
2039 {{/code}}
2040
2041 {{code language="none"}}
2042 >
2043 {{/code}}
2044 )))
2045
2046 (% class="line number8 index7 alt1" %)
2047 (((
2048 {{code language="none"}}
2049          
2050 {{/code}}
2051
2052 {{code language="none"}}
2053 <
2054 {{/code}}
2055
2056 {{code language="none"}}
2057 C:calendar-data
2058 {{/code}}
2059
2060
2061
2062 {{code language="none"}}
2063 xmlns:C
2064 {{/code}}
2065
2066 {{code language="none"}}
2067 =
2068 {{/code}}
2069
2070 [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]
2071
2072 {{code language="none"}}
2073 ""
2074 {{/code}}
2075
2076 {{code language="none"}}
2077 >
2078 {{/code}}
2079 )))
2080
2081 (% class="line number9 index8 alt2" %)
2082 (((
2083 {{code language="none"}}
2084 BEGIN:VCALENDAR
2085 {{/code}}
2086 )))
2087
2088 (% class="line number10 index9 alt1" %)
2089 (((
2090 {{code language="none"}}
2091 PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0
2092 {{/code}}
2093 )))
2094
2095 (% class="line number11 index10 alt2" %)
2096 (((
2097 {{code language="none"}}
2098 CALSCALE:GREGORIAN
2099 {{/code}}
2100 )))
2101
2102 (% class="line number12 index11 alt1" %)
2103 (((
2104 {{code language="none"}}
2105 X-WR-CALNAME:Pascal Robert
2106 {{/code}}
2107 )))
2108
2109 (% class="line number13 index12 alt2" %)
2110 (((
2111 {{code language="none"}}
2112 X-WR-TIMEZONE:America/New_York
2113 {{/code}}
2114 )))
2115
2116 (% class="line number14 index13 alt1" %)
2117 (((
2118 {{code language="none"}}
2119 BEGIN:VEVENT
2120 {{/code}}
2121 )))
2122
2123 (% class="line number15 index14 alt2" %)
2124 (((
2125 {{code language="none"}}
2126 DTSTART:20111209T140000Z
2127 {{/code}}
2128 )))
2129
2130 (% class="line number16 index15 alt1" %)
2131 (((
2132 {{code language="none"}}
2133 DTEND:20111209T180000Z
2134 {{/code}}
2135 )))
2136
2137 (% class="line number17 index16 alt2" %)
2138 (((
2139 {{code language="none"}}
2140 DTSTAMP:20111210T021446Z
2141 {{/code}}
2142 )))
2143
2144 (% class="line number18 index17 alt1" %)
2145 (((
2146 [[lan:mailto~~:probert@macti.lan>>url:http://lanmailto:probert@macti.lan||shape="rect"]]
2147
2148 {{code language="none"}}
2149 ORGANIZER;CN=probert@macti.
2150 {{/code}}
2151 )))
2152
2153 (% class="line number19 index18 alt2" %)
2154 (((
2155 [[20111210T021447Z-uidGen@mbp-pascal-robert-4.local>>mailto:20111210T021447Z-uidGen@mbp-pascal-robert-4.local||shape="rect"]]
2156
2157 {{code language="none"}}
2158 UID:
2159 {{/code}}
2160 )))
2161
2162 (% class="line number20 index19 alt1" %)
2163 (((
2164 [[mailto~~:pascal.probert@gmail.com>>url:http://mailto:pascal.probert@gmail.com||shape="rect"]]
2165
2166 {{code language="none"}}
2167 ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=Pascal Robert;X-NUM-GUESTS=0:     
2168 {{/code}}
2169 )))
2170
2171 (% class="line number21 index20 alt2" %)
2172 (((
2173 {{code language="none"}}
2174 CLASS:CONFIDENTIAL
2175 {{/code}}
2176 )))
2177
2178 (% class="line number22 index21 alt1" %)
2179 (((
2180 {{code language="none"}}
2181 CREATED:20111210T021446Z
2182 {{/code}}
2183 )))
2184
2185 (% class="line number23 index22 alt2" %)
2186 (((
2187 {{code language="none"}}
2188 DESCRIPTION:Un plus long texte
2189 {{/code}}
2190 )))
2191
2192 (% class="line number24 index23 alt1" %)
2193 (((
2194 {{code language="none"}}
2195 LAST-MODIFIED:20111210T021446Z
2196 {{/code}}
2197 )))
2198
2199 (% class="line number25 index24 alt2" %)
2200 (((
2201 {{code language="none"}}
2202 LOCATION:Un endroit
2203 {{/code}}
2204 )))
2205
2206 (% class="line number26 index25 alt1" %)
2207 (((
2208 {{code language="none"}}
2209 SEQUENCE:0
2210 {{/code}}
2211 )))
2212
2213 (% class="line number27 index26 alt2" %)
2214 (((
2215 {{code language="none"}}
2216 STATUS:CONFIRMED
2217 {{/code}}
2218 )))
2219
2220 (% class="line number28 index27 alt1" %)
2221 (((
2222 {{code language="none"}}
2223 SUMMARY:Événement test
2224 {{/code}}
2225 )))
2226
2227 (% class="line number29 index28 alt2" %)
2228 (((
2229 {{code language="none"}}
2230 TRANSP:OPAQU
2231 {{/code}}
2232 )))
2233
2234 (% class="line number30 index29 alt1" %)
2235 (((
2236 {{code language="none"}}
2237 BEGIN:VALARM
2238 {{/code}}
2239 )))
2240
2241 (% class="line number31 index30 alt2" %)
2242 (((
2243 {{code language="none"}}
2244 ACTION:DISPLAY
2245 {{/code}}
2246 )))
2247
2248 (% class="line number32 index31 alt1" %)
2249 (((
2250 {{code language="none"}}
2251 DESCRIPTION:This is an event reminder
2252 {{/code}}
2253 )))
2254
2255 (% class="line number33 index32 alt2" %)
2256 (((
2257 {{code language="none"}}
2258 TRIGGER:-P0DT0H30M0S
2259 {{/code}}
2260 )))
2261
2262 (% class="line number34 index33 alt1" %)
2263 (((
2264 {{code language="none"}}
2265 END:VALARM BEGIN:VALARM
2266 {{/code}}
2267 )))
2268
2269 (% class="line number35 index34 alt2" %)
2270 (((
2271 {{code language="none"}}
2272 ACTION:AUDIO
2273 {{/code}}
2274 )))
2275
2276 (% class="line number36 index35 alt1" %)
2277 (((
2278 {{code language="none"}}
2279 TRIGGER;VALUE=DATE-TIME:20111209T134500Z
2280 {{/code}}
2281 )))
2282
2283 (% class="line number37 index36 alt2" %)
2284 (((
2285 {{code language="none"}}
2286 END:VALARM
2287 {{/code}}
2288 )))
2289
2290 (% class="line number38 index37 alt1" %)
2291 (((
2292 {{code language="none"}}
2293 END:VEVENT
2294 {{/code}}
2295 )))
2296
2297 (% class="line number39 index38 alt2" %)
2298 (((
2299 {{code language="none"}}
2300 END:VCALENDAR
2301 {{/code}}
2302 )))
2303
2304 (% class="line number40 index39 alt1" %)
2305 (((
2306 {{code language="none"}}
2307         
2308 {{/code}}
2309
2310 {{code language="none"}}
2311 </
2312 {{/code}}
2313
2314 {{code language="none"}}
2315 C:calendar-data
2316 {{/code}}
2317
2318 {{code language="none"}}
2319 >
2320 {{/code}}
2321 )))
2322
2323 (% class="line number41 index40 alt2" %)
2324 (((
2325 {{code language="none"}}
2326       
2327 {{/code}}
2328
2329 {{code language="none"}}
2330 </
2331 {{/code}}
2332
2333 {{code language="none"}}
2334 D:prop
2335 {{/code}}
2336
2337 {{code language="none"}}
2338 >
2339 {{/code}}
2340 )))
2341
2342 (% class="line number42 index41 alt1" %)
2343 (((
2344 {{code language="none"}}
2345     
2346 {{/code}}
2347
2348 {{code language="none"}}
2349 </
2350 {{/code}}
2351
2352 {{code language="none"}}
2353 D:propstat
2354 {{/code}}
2355
2356 {{code language="none"}}
2357 >
2358 {{/code}}
2359 )))
2360
2361 (% class="line number43 index42 alt2" %)
2362 (((
2363 {{code language="none"}}
2364     
2365 {{/code}}
2366
2367 {{code language="none"}}
2368 <
2369 {{/code}}
2370
2371 {{code language="none"}}
2372 D:propstat
2373 {{/code}}
2374
2375 {{code language="none"}}
2376 >
2377 {{/code}}
2378 )))
2379
2380 (% class="line number44 index43 alt1" %)
2381 (((
2382 {{code language="none"}}
2383       
2384 {{/code}}
2385
2386 {{code language="none"}}
2387 <
2388 {{/code}}
2389
2390 {{code language="none"}}
2391 D:status
2392 {{/code}}
2393
2394 {{code language="none"}}
2395 >HTTP/1.1 404 Not Found</
2396 {{/code}}
2397
2398 {{code language="none"}}
2399 D:status
2400 {{/code}}
2401
2402 {{code language="none"}}
2403 >
2404 {{/code}}
2405 )))
2406
2407 (% class="line number45 index44 alt2" %)
2408 (((
2409 {{code language="none"}}
2410       
2411 {{/code}}
2412
2413 {{code language="none"}}
2414 <
2415 {{/code}}
2416
2417 {{code language="none"}}
2418 D:prop
2419 {{/code}}
2420
2421 {{code language="none"}}
2422 >
2423 {{/code}}
2424 )))
2425
2426 (% class="line number46 index45 alt1" %)
2427 (((
2428 {{code language="none"}}
2429         
2430 {{/code}}
2431
2432 {{code language="none"}}
2433 <
2434 {{/code}}
2435
2436 {{code language="none"}}
2437 C:updated-by
2438 {{/code}}
2439
2440
2441
2442 {{code language="none"}}
2443 xmlns:C
2444 {{/code}}
2445
2446 {{code language="none"}}
2447 =
2448 {{/code}}
2449
2450 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
2451
2452 {{code language="none"}}
2453 "
2454 {{/code}}
2455
2456
2457
2458 {{code language="none"}}
2459 />
2460 {{/code}}
2461 )))
2462
2463 (% class="line number47 index46 alt2" %)
2464 (((
2465 {{code language="none"}}
2466         
2467 {{/code}}
2468
2469 {{code language="none"}}
2470 <
2471 {{/code}}
2472
2473 {{code language="none"}}
2474 C:created-by
2475 {{/code}}
2476
2477
2478
2479 {{code language="none"}}
2480 xmlns:C
2481 {{/code}}
2482
2483 {{code language="none"}}
2484 =
2485 {{/code}}
2486
2487 [[http:~~/~~/calendarserver.org/ns/">>url:http://calendarserver.org/ns/||style="text-decoration: underline;" shape="rect"]]
2488
2489 {{code language="none"}}
2490 "
2491 {{/code}}
2492
2493
2494
2495 {{code language="none"}}
2496 />
2497 {{/code}}
2498 )))
2499
2500 (% class="line number48 index47 alt1" %)
2501 (((
2502 {{code language="none"}}
2503       
2504 {{/code}}
2505
2506 {{code language="none"}}
2507 </
2508 {{/code}}
2509
2510 {{code language="none"}}
2511 D:prop
2512 {{/code}}
2513
2514 {{code language="none"}}
2515 >
2516 {{/code}}
2517 )))
2518
2519 (% class="line number49 index48 alt2" %)
2520 (((
2521 {{code language="none"}}
2522     
2523 {{/code}}
2524
2525 {{code language="none"}}
2526 </
2527 {{/code}}
2528
2529 {{code language="none"}}
2530 D:propstat
2531 {{/code}}
2532
2533 {{code language="none"}}
2534 >
2535 {{/code}}
2536 )))
2537
2538 (% class="line number50 index49 alt1" %)
2539 (((
2540 {{code language="none"}}
2541   
2542 {{/code}}
2543
2544 {{code language="none"}}
2545 </
2546 {{/code}}
2547
2548 {{code language="none"}}
2549 D:response
2550 {{/code}}
2551
2552 {{code language="none"}}
2553 >
2554 {{/code}}
2555 )))
2556
2557 (% class="line number51 index50 alt2" %)
2558 (((
2559 {{code language="none"}}
2560 </
2561 {{/code}}
2562
2563 {{code language="none"}}
2564 D:multistatus
2565 {{/code}}
2566
2567 {{code language="none"}}
2568 >
2569 {{/code}}
2570 )))
2571
2572 (((
2573 \\
2574
2575 {{code language="none"}}{{/code}}
2576 )))
2577 )))
2578 )))
2579 )))
2580 )))
2581 )))