736 lines
28 KiB
Plaintext
736 lines
28 KiB
Plaintext
# 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:-//Stalwart Labs LLC//Stalwart 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@exa
|
|
mple.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;PARTSTAT=NEEDS-ACTION:mailto:c@exa
|
|
mple.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.com
|
|
ORGANIZER:mailto:a@example.com
|
|
UID:calsrv.example.com-873970198738777@example.com
|
|
DTSTAMP:0
|
|
SEQUENCE:1
|
|
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:-//Stalwart Labs LLC//Stalwart 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@exa
|
|
mple.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;PARTSTAT=NEEDS-ACTION:mailto:c@exa
|
|
mple.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.com
|
|
ORGANIZER:mailto:a@example.com
|
|
UID:calsrv.example.com-873970198738777@example.com
|
|
DTSTAMP:0
|
|
SEQUENCE:1
|
|
END:VEVENT
|
|
END:VCALENDAR
|
|
|
|
# B accepts the request
|
|
> put b@example.com calsrv.example.com-873970198738777@example.com
|
|
BEGIN:VCALENDAR
|
|
VERSION:2.0
|
|
PRODID:-//Stalwart Labs LLC//Stalwart 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@exa
|
|
mple.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.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:-//Stalwart Labs LLC//Stalwart Server//EN
|
|
VERSION:2.0
|
|
BEGIN:VEVENT
|
|
SUMMARY:Conference
|
|
DTEND:19970701T2100000Z
|
|
DTSTART:19970701T200000Z
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=ACCEPTED:mailto:b@example
|
|
.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:1
|
|
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.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.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:-//Stalwart Labs LLC//Stalwart 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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.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:-//Stalwart Labs LLC//Stalwart 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@e
|
|
xample.com
|
|
ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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@examp
|
|
le.com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com":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
|
|
================================
|
|
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:-//Stalwart Labs LLC//Stalwart 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@examp
|
|
le.com
|
|
ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
|
|
ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example.
|
|
com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=NEEDS-ACTIO
|
|
N: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:-//Stalwart Labs LLC//Stalwart 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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION:mailto:b@example.
|
|
com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=NEEDS-AC
|
|
TION: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@exam
|
|
ple.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.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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@e
|
|
xample.com
|
|
ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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@examp
|
|
le.com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=ACCEPTED:mai
|
|
lto: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@exam
|
|
ple.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.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.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:-//Stalwart Labs LLC//Stalwart 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@e
|
|
xample.com
|
|
ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;CUTYPE=ROOM:mailto:conf@example.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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@examp
|
|
le.com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED:mai
|
|
lto: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:-//Stalwart Labs LLC//Stalwart 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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.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@exam
|
|
ple.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.com
|
|
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.com
|
|
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:-//Stalwart Labs LLC//Stalwart 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@example
|
|
.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.com
|
|
ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal;PARTSTAT=NEEDS-ACTION:mailto:d@e
|
|
xample.com
|
|
ATTENDEE;RSVP=TRUE;DELEGATED-FROM="mailto:c@example.com";PARTSTAT=DECLINED:mai
|
|
lto: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:-//Stalwart Labs LLC//Stalwart 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:-//Stalwart Labs LLC//Stalwart 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:-//Stalwart Labs LLC//Stalwart 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@example
|
|
.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.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:0
|
|
SEQUENCE:4
|
|
END:VEVENT
|
|
END:VCALENDAR
|
|
|
|
|