# RFC5546 - Group Event Request # A sample meeting request is sent from "A" to "B", "C", and "D". > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:mailto:c@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: b@example.com, c@example.com, d@example.com summary: invite summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: Some("B"), is_organizer: false }, ItipParticipant { email: "c@example.com", name: Some("C"), is_organizer: false }, ItipParticipant { email: "conf_big@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T2100000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=NEEDS-ACTION:mailto:b@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;PARTSTAT=NEEDS-ACTION:mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR # Send iTIP request to B, C, and D > send # Make sure B receives the request > get b@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T2100000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=NEEDS-ACTION:mailto:b@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;PARTSTAT=NEEDS-ACTION:mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR # B accepts the request > put b@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR VERSION:2.0 PRODID:-//INBUXA//INBUXA Server//EN BEGIN:VEVENT DTSTAMP:19970701T200000Z SEQUENCE:1 UID:calsrv.example.com-873970198738777@example.com ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=ACCEPTED:mailto:b@exa mple.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;PARTSTAT=NEEDS-ACTION:mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: b@example.com to: a@example.com summary: rsvp ACCEPTED summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: Some("B"), is_organizer: false }, ItipParticipant { email: "c@example.com", name: Some("C"), is_organizer: false }, ItipParticipant { email: "conf_big@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REPLY PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT SUMMARY:Conference DTEND:19970701T2100000Z DTSTART:19970701T200000Z ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=ACCEPTED:mailto:b@exampl e.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:1 REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR # Send iTIP reply to A > send # Make sure A receives the reply > get a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T2100000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=ACCEPTED;SCHEDULE-STATUS =2.0:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:mailto:c@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:1 SEQUENCE:0 END:VEVENT END:VCALENDAR # A moved the event to a new time > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com DTSTART:19970701T180000Z DTEND:19970701T190000Z SUMMARY:Phone Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:1 DTSTAMP:19970613T190000Z STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: b@example.com, c@example.com, d@example.com summary: update REQUEST summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") ~summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: Some("B"), is_organizer: false }, ItipParticipant { email: "c@example.com", name: Some("C"), is_organizer: false }, ItipParticipant { email: "conf_big@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) ~summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) ~summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:c@example .com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 END:VEVENT END:VCALENDAR # Send iTIP request to B, C, and D > send # Make sure C receives the request > get c@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:c@example .com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 END:VEVENT END:VCALENDAR # "C" delegates presence at the meeting to "E". > put c@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR VERSION:2.0 PRODID:-//INBUXA//INBUXA Server//EN BEGIN:VEVENT DTSTAMP:19970701T180000Z UID:calsrv.example.com-873970198738777@example.com ORGANIZER:mailto:a@example.com STATUS:CONFIRMED SEQUENCE:2 ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m DTSTART:19970701T180000Z DTEND:19970701T190000Z SUMMARY:Phone Conference END:VEVENT END:VCALENDAR > expect from: c@example.com to: a@example.com summary: rsvp DELEGATED summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:REPLY PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com":mailto:e@example.c om ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR ================================ from: c@example.com to: e@example.com summary: invite summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=NEEDS-ACT ION:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 END:VEVENT END:VCALENDAR > send # Make sure E receives the request > get e@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=NEEDS-ACT ION:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 END:VEVENT END:VCALENDAR # Make sure A receives the request > get a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exampl e.com";SCHEDULE-STATUS=2.0:mailto:c@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com":mailto:e@example.c om ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:2 SEQUENCE:2 END:VEVENT END:VCALENDAR # Delegate E accepts the request > put e@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR VERSION:2.0 PRODID:-//INBUXA//INBUXA Server//EN BEGIN:VEVENT DTSTAMP:19970701T180000Z SEQUENCE:2 UID:calsrv.example.com-873970198738777@example.com ORGANIZER:mailto:a@example.com STATUS:CONFIRMED ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=ACCEPTED:mailto:e@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m DTSTART:19970701T180000Z DTEND:19970701T190000Z SUMMARY:Phone Conference END:VEVENT END:VCALENDAR > expect from: e@example.com to: a@example.com, c@example.com summary: rsvp ACCEPTED summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:REPLY PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=ACCEPTED: mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR > send # Make sure A receives the reply > get a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exampl e.com";SCHEDULE-STATUS=2.0:mailto:c@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=ACCEPTED; SCHEDULE-STATUS=2.0:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:2 SEQUENCE:2 END:VEVENT END:VCALENDAR # Make sure C receives the reply > get c@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=ACCEPTED; SCHEDULE-STATUS=2.0:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:3 SEQUENCE:2 END:VEVENT END:VCALENDAR # Delegate E declines the request > put e@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR VERSION:2.0 PRODID:-//INBUXA//INBUXA Server//EN BEGIN:VEVENT DTSTAMP:19970701T180000Z SEQUENCE:2 UID:calsrv.example.com-873970198738777@example.com ORGANIZER:mailto:a@example.com STATUS:CONFIRMED ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED:mailto:e@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m DTSTART:19970701T180000Z DTEND:19970701T190000Z SUMMARY:Phone Conference END:VEVENT END:VCALENDAR > expect from: e@example.com to: a@example.com, c@example.com summary: rsvp DECLINED summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:REPLY PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED: mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:2 REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR # Send iTIP reply to A and C > send # Make sure C receives the reply > get c@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@example.com":mailto:c@ex ample.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example .com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED; SCHEDULE-STATUS=2.0:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:3 SEQUENCE:2 END:VEVENT END:VCALENDAR # Make sure A receives the reply > get a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exampl e.com";SCHEDULE-STATUS=2.0:mailto:c@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED; SCHEDULE-STATUS=2.0:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:2 SEQUENCE:2 END:VEVENT END:VCALENDAR # Remove B and expect an iTIP cancelation > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exam ple.com";SCHEDULE-STATUS=2.0:mailto:c@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED; SCHEDULE-STATUS=2.0:mailto:e@example.com DTSTART:19970701T180000Z DTEND:19970701T190000Z SUMMARY:Phone Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:2 DTSTAMP:19970701T180000Z STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: c@example.com, d@example.com summary: update REQUEST summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") ~summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exampl e.com":mailto:c@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@ example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED: mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:3 END:VEVENT END:VCALENDAR ================================ from: a@example.com to: b@example.com summary: cancel summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: None, is_organizer: false }, ItipParticipant { email: "c@example.com", name: None, is_organizer: false }, ItipParticipant { email: "conf@example.com", name: None, is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("Hal"), is_organizer: false }, ItipParticipant { email: "e@example.com", name: None, is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:CANCEL PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CANCELLED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:3 END:VEVENT END:VCALENDAR # Send iTIP cancelation > send # Make sure B receives the cancelation > get b@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CANCELLED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 END:VEVENT END:VCALENDAR # Delete the event from A's calendar and expect an iTIP cancelation > delete a@example.com calsrv.example.com-873970198738777@example.com > expect from: a@example.com to: c@example.com, d@example.com summary: cancel summary.dtstart: Time(ItipTime { start: 867780000, tz_id: 32768 }) summary.summary: Text("Phone Conference") BEGIN:VCALENDAR METHOD:CANCEL PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CANCELLED SUMMARY:Phone Conference DTEND:19970701T190000Z DTSTART:19970701T180000Z ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DELEGATED;DELEGATED-TO="mailto:e@exampl e.com";SCHEDULE-STATUS=2.0:mailto:c@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.co m ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED; SCHEDULE-STATUS=2.0:mailto:e@example.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:4 END:VEVENT END:VCALENDAR