Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

import

  • Loading branch information...
commit 6d91c8df830bafa1f5505f96814fd1c2bc4391c3 1 parent b512c15
@sam-github authored
Showing with 72,814 additions and 0 deletions.
  1. +16 −0 .cvsignore
  2. +262 −0 CHANGES
  3. +58 −0 COPYING
  4. +112 −0 Makefile
  5. +12 −0 Q-COCOA
  6. +24 −0 README
  7. +93 −0 README.mutt
  8. +320 −0 TODO
  9. +57 −0 ab-query.rb
  10. +155 −0 cmd-itip.rb
  11. +3 −0  etc/.cvsignore
  12. BIN  etc/AddressBook.pdf
  13. +99 −0 etc/Comment.txt
  14. +159 −0 etc/dir-30.bnf
  15. +840 −0 etc/draft-butcher-irc-url-04.txt
  16. BIN  etc/draft-dawson-vcard-xml-dtd-04.pdf
  17. +8,008 −0 etc/draft-ietf-calsch-cap-12.txt
  18. +405 −0 etc/draft-jennings-impp-vcard-04.txt
  19. +1,010 −0 etc/draft-saintandre-xmpp-uri-08.txt
  20. +10 −0 etc/osx-addressbook.html
  21. +787 −0 etc/rfc2234.txt
  22. +87 −0 etc/rfc2425-ex.txt
  23. +1,851 −0 etc/rfc2425.txt
  24. +2,355 −0 etc/rfc2426.txt
  25. BIN  etc/rfc2445.pdf
  26. +8,291 −0 etc/rfc2445.txt
  27. BIN  etc/rfc2446.pdf
  28. +6,107 −0 etc/rfc2446.txt
  29. BIN  etc/rfc2447.pdf
  30. +1,011 −0 etc/rfc2447.txt
  31. +899 −0 etc/rfc2739.txt
  32. +15,067 −0 etc/rfc3261.txt
  33. +899 −0 etc/rfc3283.txt
  34. +843 −0 etc/rfc3859.txt
  35. +731 −0 etc/rfc3860.txt
  36. +694 −0 etc/rrule.txt
  37. +215 −0 etc/time+date.txt
  38. +1,603 −0 etc/vcal-10.txt
  39. BIN  etc/vcard-21.2.ps
  40. BIN  etc/vcard-21.4.ps
  41. +115 −0 etc/vcard-21.bnf
  42. BIN  etc/vcard-21.doc
  43. BIN  etc/vcard-21.pdf
  44. BIN  etc/vcard-21.ps
  45. +1,622 −0 etc/vcard-21.txt
  46. +484 −0 etc/vcard-30.bnf
  47. +233 −0 etc/vcard-maker-design.txt
  48. +12 −0 ex_get_vcard_photo.rb
  49. +67 −0 ex_mkvcard.rb
  50. +117 −0 ical-dump.rb
  51. +84 −0 ics-to-rss.rb
  52. +1,098 −0 install.rb
  53. +87 −0 mbox2vcard.rb
  54. +44 −0 mutt-aliases-to-vcf.rb
  55. +108 −0 notes-ical.txt
  56. +89 −0 osx-wrappers.rb
  57. +1 −0  other/.cvsignore
  58. +154 −0 other/cal.rb
  59. +111 −0 other/exch_ical.txt
  60. +289 −0 other/iCal.rb
  61. BIN  other/iCalToRSS.tar.gz
  62. +555 −0 other/libvcard-ruby_0.5-2.diff
  63. +277 −0 other/osx-ical.rb
  64. BIN  other/vcalx-0.1-src.zip
  65. BIN  other/vcf2ldif.tgz
  66. +5 −0 releases/.cvsignore
  67. BIN  releases/doc-0.6.tgz
  68. BIN  releases/doc-0.7.tgz
  69. BIN  releases/doc-0.7bis.tgz
  70. BIN  releases/doc-0.9.tgz
  71. BIN  releases/doc-0.9a.tgz
  72. BIN  releases/vcard-0.1.tgz
  73. BIN  releases/vcard-0.3.tgz
  74. BIN  releases/vcard-0.4.tgz
  75. BIN  releases/vcard-0.5.tgz
  76. BIN  releases/vpim-0.11.tgz
  77. BIN  releases/vpim-0.6.tgz
  78. BIN  releases/vpim-0.7.tgz
  79. BIN  releases/vpim-0.7bis.tgz
  80. BIN  releases/vpim-0.9.tgz
  81. BIN  releases/vpim-0.9a.tgz
  82. +197 −0 reminder.rb
  83. +70 −0 rrule.rb
  84. +1 −0  samples/.cvsignore
  85. +297 −0 samples/Canada Holidays.ics
  86. +665 −0 samples/CanadaHolidays.ics
  87. +336 −0 samples/Canadian32Holidays.ics
  88. +353 −0 samples/Japanese32Holidays.ics
  89. +12 −0 samples/Sam Roberts.vcf
  90. +13 −0 samples/_me.vcf
  91. +26 −0 samples/addrbook-1-3-full-sample.vcf
  92. BIN  samples/alice.vcf
  93. +308 −0 samples/apple-canadian-holidays.ics
  94. +32 −0 samples/apple-event-notification.ics
  95. +70 −0 samples/apple-event-notification.mbox
  96. +25 −0 samples/c155055-accept.ics
  97. +48 −0 samples/c155055.ics
  98. +297 −0 samples/canholidays.ics
  99. +284 −0 samples/ch.ics
  100. +327 −0 samples/could-be-photo-from-osx10.3.vcf
  101. +168 −0 samples/events.ics
  102. +59 −0 samples/evolution-ex1.vcf
  103. BIN  samples/french.vcf
  104. +75 −0 samples/gpope.ics
  105. +344 −0 samples/ical-dateprob.ics
  106. +267 −0 samples/ical-with-1753.ics
  107. +47 −0 samples/ical.ics
  108. +3,489 −0 samples/ical.mbox
  109. +32 −0 samples/method-publish/krea.ics
  110. +25 −0 samples/method-reply/gpope-reply.ics
  111. +75 −0 samples/method-reply/gpope.ics
  112. +36 −0 samples/method-request/efung.ics
  113. +48 −0 samples/method-request/gpope2.ics
  114. +67 −0 samples/method-request/sp1.ics
  115. +61 −0 samples/method-request/sp2.ics
  116. +64 −0 samples/method-request/sp3.ics
  117. +32 −0 samples/method-request/sr1.ics
  118. +35 −0 samples/method-request/sr2.ics
  119. +79 −0 samples/my-certicom.vcf
  120. +123 −0 samples/my-companies.vcf
  121. BIN  samples/my-ensemble.vcf
  122. +30 −0 samples/rfc_ex.vcf
  123. BIN  samples/sample_utf16be.txt
  124. +6 −0 samples/sample_utf16le.txt
  125. +27 −0 samples/vacation.ics
  126. +390 −0 tabbed-file-to-vcf.rb
  127. +13 −0 test_all.rb
  128. +111 −0 test_date.rb
  129. +43 −0 test_dur.rb
  130. +92 −0 test_field.rb
  131. +166 −0 test_ical.rb
  132. +783 −0 test_rrule.rb
  133. +469 −0 test_vcard.rb
  134. +70 −0 vcard-dump.rb
  135. +41 −0 vcf-bday-to-ics.rb
  136. +114 −0 vcf-to-mutt.rb
  137. +3 −0  vpim/.cvsignore
  138. +198 −0 vpim/date.rb
  139. +229 −0 vpim/dirinfo.rb
  140. +121 −0 vpim/duration.rb
  141. +29 −0 vpim/enumerator.rb
  142. +497 −0 vpim/field.rb
  143. +547 −0 vpim/icalendar.rb
  144. +337 −0 vpim/maker/vcard.rb
  145. +244 −0 vpim/rfc2425.rb
  146. +482 −0 vpim/rrule.rb
  147. +42 −0 vpim/time.rb
  148. +151 −0 vpim/vcard.rb
  149. +362 −0 vpim/vevent.rb
  150. +95 −0 vpim/vpim.rb
View
16 .cvsignore
@@ -0,0 +1,16 @@
+.*
+*.ics
+*.tgz
+*.vcf
+tags.*
+tags
+.DS_Store
+_*
+doc
+vcard-0.?*
+cards
+changes.cvs
+rr
+ChangeLog
+rss
+nohup.out
View
262 CHANGES
@@ -0,0 +1,262 @@
+0.15 - ...
+
+- maker/vcard.rb: Added support for X-AIM, an Apple extension.
+
+0.14 - 2005-02-01
+
+- Fix: if an RRULE didn't ever yield an event (a bug in the rule) dountil was never tested.
+
+- Change: don't throw an ArgumentError with infinite events, just stop when the
+ Time is no longer representable
+
+0.13 - 2005-01-20
+
+- Was calling to_time with an arg, fixed.
+
+0.12 - 2005-01-17
+
+- Removed require of pp from the library and utilities where it wasn't needed,
+ it was causing problems because it doesn't exist on ruby 1.6 systems.
+
+- Added Field#to_date, returns field value as an array of Date objects
+
+- Changed Field#to_time - it now auto-detects format of values
+ (DATE/DATE-TIME), and doesn't take/require a default_kind argument.
+
+- Added IMPP support to Vpim::Maker::Vcard.
+
+- Makefile wasn't copying the Maker classes into the release.
+
+- Duration value not returned unless it was negative, fixed.
+
+- An RRULE's UNTIL was always being assumed to be a DATE-TIME, but it can be a
+ DATE. I fixed this, but is something of a hack, see comments and TODO.
+
+- Use String#scan instead of String#gsub, when appropriate (I didn't know it
+ existed when I stated the project).
+
+- Run tests on 3 ruby versions.
+
+- Don't include docs in release package, it makes it way too large.
+
+- Change: use String.unpack instead of iconv to convert UCS-2 to UTF-8,
+ removing dependency on iconv (it wasn't standard in ruby 1.6).
+
+- Change: simplified mutt_ab_query.rb, and renamed to vcf-to-mutt.
+
+- Change: reminder.rb sorts todo items by priority.
+
+- New: Vtodo#priority - the priority of the vTodo component.
+
+0.11 - 2004-11-17
+
+- Added a Vpim::Maker::Vcard class to simplify the creation of vCards, modelled
+ after the RSS maker from ruby's RSS library.
+
+0.10 - 2004-11-07
+
+- If events don't have a recurrence rule, they occur once, but they
+ were being returned even if they occurred after "dountil". Fixed.
+
+- New sample of converting tab-delimited files to a vcard file, from
+ Dane G. Avilla. Thanks!
+
+0.9a - 2004-10-31
+
+- Made sure all events occur once in rrules.
+
+- New sample of encoding: mutt-aliases-vcard.rb
+
+- Added ToDo support to reminder.rb.
+
+0.9 - 2004-06-17
+
+- Field now is mutable, you can change the group, value, params, etc.
+
+- Using the Enumerator object for DirectoryInfo now, instead of all the
+each_by_X, and field_by_X() APIs.
+
+- Moved homepage and docs to Ruby Forge.
+
+- DirectoryInfo.create: added a profile argument
+
+- DirectoryInfo#push: now pushes to 1 before the end
+
+- DirectoryInfo#push_end: pushes onto end, in case you really want to
+
+- Field.create: a Date or Time object value will now be encoded as date or time
+
+- Vpim.encode_date(): encodes an RFC2425 date
+
+- Vpim.encode_time(): encodes an RFC2425 time
+
+- Vpim.encode_date_time(): encodes an RFC2425 date-time
+
+- Icalendar#encode(): encodes an Icalendar
+
+- Icalendar#push(): pushes a calendar component onto a calendar
+
+- Vevent#accept(): accepts an event invitation
+
+- Vevent#create(): creates a new event
+
+- Address#copy(): create a copy of Address. If the original Address was frozen,
+this one won't be.
+
+- Address#partstat=(): set or change the PARTSTAT.
+
+- Field#copy(): create a copy of Field. If the original Field was frozen, this
+one won't be.
+
+0.8 - 2004-04-01
+
+- Moved DirectoryInfo::Field into it's own file, vpim/field.rb.
+
+- New: Vpim::Duration - crude way of getting days/hours/mins/secs from a
+duration in seconds.
+
+- New: Icalendar#create() and Icalendar#create_reply()
+
+- New: Icalendar#encode(), #to_s is an alias to #encode.
+
+- New: Icalendar#protocol?()
+
+- Change: Icalendar#version() raises an error if there is no VERSION
+
+- Change: made all the DirectoryInfo, Vcard, and Field .new() class methods
+private, and replaced with the 2 class methods:
+
+ - decode() decodes a string, returning a ruby object
+ - create() creates a new object
+
+and all objects now get encoded using:
+
+ - encode() takes a ruby object, and encodes it as a string
+
+They become more symetrical, and the overloaded meanings of .new() dissappear -
+with .new() are you decoding, encoding, creating...?
+
+- Change: Icalendar::Vevent#attendees() can return only attendees
+with a particular URI.
+
+- New: Icalendar::Address#==()
+
+- New: Icalendar::Vevent#attendee?()
+
+- Fixed bug: Field#encode() was adding an unexpecte NL to the line.
+
+- Change: Field#name?() can accept a symbol.
+
+- New: DirectoryInfo has an #each(), so I included Enumerable. Because of this
+#to_a() now returns all the Fields in a DirectoryInfo.
+
+- New: DirectoryInfo#push() and DirectoryInfo@push_uniq().
+
+- Change: DirectoryInfo#<<() is now an alias for DirectoryInfo#push()
+
+- Change: DirectoryInfo#each() and DirectoryInfo#each_by() now return self
+instead of nil, I think this is more rubyish.
+
+- New: Date#to_time() - converts a Date, and maybe a DateTime, to a Time
+
+- New: Icalendar#protocol()
+
+- New: Icalendar::Address
+
+- New: Icalendar::Vevent#organizer()/attendees(), which return an
+Icalendar::Address
+
+- New: An array of all the values of fields named name, converted to text,
+using Field.to_text().
+
+
+0.7 - 2004-03-21
+
+- Bug fixes, not all files were requiring vpim.rb, which had the definition of
+the invalid encoding error.
+
+- Implemented much requested feature: ignore empty lines in input. This is an
+invalid encoding, but I'm tired of fighting it.
+
+
+0.6 - 2004-03-20
+
+WARNING: major API renamings!
+
+- Replaced the Vpim::Errors::*Error exception classes with a single exception
+class: Vpim::InvalidEncodingError. That, and a message, is all I really need.
+I don't think people need different classes for different types of encoding
+errors, either the library can decode it for them, or it can't.
+
+- Renamed project to "vpim" (to reflect vCard and vCalendar/iCalendar support),
+renamed top-level Rfc2425 module to Vpim, split vard.rb into multiple files.
+
+- Add support for iCalendar (RFC2445), see vpim/icalendar.rb. Currently only
+supports VEVENT, no VTODO or VALARM yet, but is useable to print my upcoming
+iCal events.
+
+- Implemented the iCalendar recurrence rules mini-language, which is possibly
+of more general use than just for iCalendar.
+
+- Fixed bug in time decoding where usec would be nil instead of zero when no
+usec were present in the time value.
+
+- Field#to_time now assumes that time is in local time, unless the timezone is
+"Z", meaning UTC.
+
+- Field#to_text - new method, unescapes newlines, commas, and escape
+characters.
+
+- Field#field(name) - new method, returns the first field named +name+.
+
+
+0.5 - 3003-11-23
+
+- ab-query.rb - short option for --me was mistyped as -v, instead of -m.
+
+- mutt_ab_query.rb - added a --pipe option, so that the output of an other
+script can be directly queried.
+
+- New method: Rfc2425.version
+
+- Decode vCard 2.1 abbreviated parameters (ones where the name of the parameter
+is missing, only the value is present, which only works for type and encoding).
+
+- Vcard.decode() now support UCS-2 encoded vCards, by translating anything that
+looks like UCS-2 to UTF-8 before decoding.
+
+0.4 - 2003-04-14
+
+- More support for decoding date, time, and date-time values.
+
+- New method Field#to_time().
+
+- Can pass an IO object to decode APIs, its entire contents is read as a
+string.
+
+- Field#group?() now considers nil as equivalent to no group, so you can use
+each_group(nil) to iterate through all fields without a group.
+
+0.3 -
+
+- Added description of how to use mutt_ab_query.rb
+
+- Added support for querying the kind of a value, and began support for
+decoding date and time values.
+
+0.2 -
+
+- Supports encoding.
+
+- Supports accessing values using [].
+
+- No longer have methods return an Array, or nil if the array is zero length, I
+just return an Array.
+
+- mutt_ab_query.rb - an example of using vcard.rb to do lookups in the OS X
+Address Book from Mutt
+
+0.1 -
+
+- First release.
+
View
58 COPYING
@@ -0,0 +1,58 @@
+vPim is copyrighted free software by Sam Roberts <sroberts@uniserve.com>.
+
+You can redistribute it and/or modify it under either the terms of the GPL (see
+the file GPL), or the conditions below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or by allowing the author to include your
+ modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) give non-standard binaries non-standard names, with instructions on
+ where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or binary form,
+ provided that you do at least ONE of the following:
+
+ a) distribute the binaries and library files of the software, together
+ with instructions (in the manual page or equivalent) on where to get the
+ original distribution.
+
+ b) accompany the distribution with the machine-readable source of the
+ software.
+
+ c) give non-standard binaries non-standard names, with instructions on
+ where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under these terms.
+
+ For the list of those files and their copying conditions, see the
+ file LEGAL.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
View
112 Makefile
@@ -0,0 +1,112 @@
+# Makefile
+
+SHELL:=/bin/sh
+
+.PHONY: default doc test other
+
+do:
+ #@ruby -I . ex_mkvcard.rb
+ @ruby -I . vcf-bday-to-ics.rb < _all.vcf
+
+default: test
+
+doc-upload:
+ cd doc; scp -r . sam@rubyforge.org:/var/www/gforge-projects/vpim/
+
+RDFLAGS = -w2
+
+#--diagram
+# --main doc/foo.html
+
+TEST=test_all.rb
+#TEST=test_field.rb test_invalid_fields
+
+dcal:
+ sh -c "./ical-dump.rb ~/Library/Calendars/Play.ics"
+ sh -c "./ical-dump.rb ~/Library/Calendars/Events.ics"
+
+test:
+ /usr/local/bin/ruby18 -w -I . $(TEST)
+ /usr/bin/ruby -w -I . $(TEST)
+ /opt/local/bin/ruby -w -I . $(TEST)
+
+changes:
+ cvs-changelog -r -f changes.cvs
+
+other:
+ ruby -w -I . ab-query.rb --me
+ ruby -w -I . mutt_ab_query.rb --file=_vcards -d Sam
+ ruby -w -I . mbox2vcard.rb _mbox
+
+.PHONY: tags
+tags:
+ exctags -R vpim #rss
+ RUBYLIB=/Users/sam/p/ruby/ruby/lib rdoc18 -f tags vpim #rss
+ mv tags tags.ctags
+ sort tags.ctags tags.rdoc > tags
+
+ri:
+ rdoc18 -f ri vpim
+
+open:
+ open doc/index.html
+
+SAMPLES := \
+ ab-query.rb \
+ cmd-itip.rb \
+ ex_get_vcard_photo.rb \
+ ex_mkvcard.rb \
+ ical-dump.rb \
+ ics-to-rss.rb\
+ mutt-aliases-to-vcf.rb \
+ vcf-to-mutt.rb \
+ reminder.rb \
+ rrule.rb \
+ tabbed-file-to-vcf.rb \
+ vcard-dump.rb \
+
+
+doc:
+ rm -rf doc/
+ rdoc18 $(RDFLAGS) vpim CHANGES COPYING README README.mutt
+ for s in $(SAMPLES); do cp $$s doc/`basename $$s .rb`.txt; done
+ cp etc/rfc24*.txt doc/
+ chmod u=rw doc/*.txt
+ chmod go=r doc/*.txt
+ cp -r doc/* ~/Sites/
+ open doc/index.html
+
+V=0.15
+P=vpim-$V
+R=releases/$P
+
+release: stamp doc pkg
+
+install:
+ for r in /usr/bin/ruby /opt/local/bin/ruby ruby18; do (cd $R; $$r install.rb config; sudo $$r install.rb install); done
+
+stamp:
+ ruby -pi~ -e '$$_.gsub!(/0\.\d+(bis|[a-z])?/, "$V")' vpim/vpim.rb
+
+pkg:
+ rm -rf $R/*
+ mkdir -p releases
+ mkdir -p $R
+ mkdir -p $R/lib
+ mkdir -p $R/lib/vpim/maker
+ mkdir -p $R/samples
+ mkdir -p $R/etc
+ cp COPYING README CHANGES install.rb $R/
+ cp vpim/*.rb $R/lib/vpim/
+ cp vpim/maker/*.rb $R/lib/vpim/maker/
+ cp etc/rfc2425.txt $R/etc
+ cp etc/rfc2426.txt $R/etc
+ cp etc/rfc2445.txt $R/etc
+ cp etc/rrule.txt $R/etc
+ cp README.mutt $R/samples
+ cp $(SAMPLES) $R/samples
+ cp osx-wrappers.rb $R/samples
+ cp test_*.rb $R/samples
+ # no docs: cp -r doc $R/
+ cd releases && tar -zcf $P.tgz $P
+
View
12 Q-COCOA
@@ -0,0 +1,12 @@
++ ABPerson.h documents ABPerson.properties and ABPerson.typeOfProperty, but I can't call them!
+
+[ensemble] ~/p/ruby/vcard $ irb -r osx/addressbook
+irb(main):001:0> OSX::ABAddressBook.sharedAddressBook.me
+#<OSX::ABPerson:0xade6a class='ABPerson' id=0x30ff50>
+irb(main):002:0> OSX::ABAddressBook.sharedAddressBook.me.properties
+OSX::OCMessageSendException: ABPerson#properties - methodSignature is nil.
+ from /Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/objc/oc_wrapper.rb:17:in `ocm_send'
+ from /Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/objc/oc_wrapper.rb:17:in `method_missing'
+ from (irb):2
+
+
View
24 README
@@ -0,0 +1,24 @@
+This is a pure-ruby library for decoding and encoding vCard and iCalendar
+data ("personal information") called vPim.
+
+= Installation
+
+The standard way, with an install.rb script.
+
+See:
+
+ ruby install.rb --help
+
+or
+
+ $ ruby install.rb config
+ $ ruby install.rb setup
+ # ruby install.rb install (may require root privilege)
+
+Please see the documentation in doc/ for more information.
+
+= Thanks
+
+- Ruby Forge - for their generous hosting of this project.
+
+
View
93 README.mutt
@@ -0,0 +1,93 @@
+
+** cmd-itip.rb
+
+This script pretty-prints iTIP calendar invitations, often sent by email using iMIP
+as text/calendar objects.
+
+Download the latest vPim from:
+
+ http://rubyforge.org/projects/vpim/
+
+It requires Ruby to be installed.
+
+Install vpim:
+
+ tar -xzf vpim-XX.tgz
+ cd vpim-XX
+ ruby install.rb config
+ ruby install.rb setup
+ sudo ruby install.rb install
+
+Install cmd-itip.rb into your path, perhaps without the extension.
+
+ cp samples/cmd-itip.rb ~/bin/cmd-itip
+ chmod +x ~/bin/cmd-itip
+
+Modify your ~/.mailcap or /etc/mailcap files to call cmd-itip, add a line like:
+
+ text/calendar; cmd-itip --myaddr "sroberts@" %s; copiousoutput
+
+If you give a REGEX to --myaddr to tell cmd-itip your email addresses, cmd-itip
+will avoid printing some information on the attendees to an invitation.
+
+Modify muttrc to autoview calendars with a command like:
+
+ auto_view text/calendar
+
+Notes on Notes;
+
+Because Domino sends a close-to-unreadable text/plain attachment along with the
+text/calendar in a multipart/alternative, and the text/plain is first in the
+alternatives, the garbage will be at the top, and the nicely printed calendar
+at the bottom. Because of this, I reorder the view preference so the calendar
+invitation is clearly printed at the top of the message with a muttrc command
+like:
+
+ alternative_order text/calendar text/plain
+
+Domino also includes the calendar twice in the mail message, so you'll see it
+twice, I don't know what to do about that.
+
+Notes on application/octet-stream:
+
+Some calendar programs, such as Apple's Mail.app, wrongly send iCalendar attachments
+with a content-type of application/octet-stream. In order to be processed correctly, use
+the mutt 1.5 or later capability to lookup the correct MIME content-type based on the
+file extension. Put this in your muttrc file:
+
+ mime_lookup application/octet-stream
+
+and ensure /etc/mime.types or ~/.mime.types contains:
+
+ text/calendar ics
+
+
+
+** vcf-to-mutt.rb
+
+This script searches a set of vCards can output the results as a Mutt query response,
+or a Mutt aliases file.
+
+It used to support querying the OS X Address Book, but that is better done with lbdb, see
+http://www.spinnaker.de/lbdb/.
+
+To install, you must:
+
+1 - install vPim (see README)
+
+3 - copy vcf-to-mutt into a directory in your path, such
+ as ~/bin, and chmod +x vcf-to-mutt.rb to make it executable.
+
+4 - Put in your muttrc file (either ~/.muttrc or ~/.mutt/muttrc) a line such as:
+
+set query_command = "vcf-to-mutt.rb '%s'"
+
+5 - The query command ("Q") will query the address book, control-t will give you auto-completion
+ of email addresses, see the Mutt manual page.
+
+
+** mutt-aliases-to-vcf.rb
+
+This script converts a mutt aliases file into a vCard file.
+
+
View
320 TODO
@@ -0,0 +1,320 @@
+== 3RD PARTY
+
+todo: a OS X mail plugin that doesn't open a GUI, it just send mail....
+
+todo: cmd line tool to query KeyStore
+
+todo: cmd line tool to query AddressBook (ex: for phone numbers)
+ note: can base it on the lbdb code
+
+todo: LBDB
+
+ - search on ALL fields, not just whatever it searches on
+
+ - add module to search a .vcf file or a directory of .vcf files
+
+ - it is fprinting NULLs if there is no Last Name...! (null)
+
+ - maybe it could include names without email-addrs, so I know why the names
+ aren't showing up?
+
+todo: RSS
+
+ - add atom to rss/
+
+
+== UTILS
+
+Note:
+ - WebDAV client-side:
+ - http://raa.ruby-lang.org/project/libneon-ruby/
+ - http://www.webdav.org/neon/
+
+ - WebDAV server-side:
+ - implement a WEBRick servlet to handle server-side?
+
+todo: ics-alarm
+ A really, really fast way of adding an alarm to iCalendar, i.e., 3 min, check the kettle.
+
+ Input:
+ - a time offset, and an action
+
+ Output:
+ - .ics
+ - ical
+
+
+todo: ics-to-rss
+ Input:
+ - ~/Library/Calendars/
+ - .ics, ../*.ics
+
+ Output:
+ - CGI
+ - stdout
+ - http
+
+ Options:
+ - rss versions
+ - rss versions in the URL
+ - implement autodiscovery with http? what does this mean...
+
+todo: ics-to-ics
+ split calendars by date
+
+todo: ics-to-ics
+ Input:
+ - iCal
+ - .ics
+
+ Output:
+ - http (subscribable)
+ - CAP
+ - WebDAV
+
+ Options:
+ - particular calendars
+ - Rendezvous
+ - StartupItem
+ - all users, if they have a config file, like web pages
+ - combine different calendars, and publish to .mac
+
+todo: rss-to-rss
+
+ See: feedblender - http://feedblender.rubyforge.org
+
+todo: vcf-to-address-book
+ Input:
+ - .vcf
+ - AB
+
+ Output:
+ - LDAP?
+
+ AB can subscribe to, at least, ldap sources. Can I use this? Can the latest
+ AB have plugins?
+
+done: mutt-aliases-to-vcf
+ Input:
+ - mutt aliases
+
+ Output
+ - .vcf
+
+
+todo: rss-to-ics convert rss feed, text or URI, to ics file of todos
+ Input:
+ - .xml
+ - http
+ - http with autodiscovery?
+
+ Output:
+ - http: a subscribable calendar
+ - .ics
+
+ Options:
+ - RSS -> VTODO
+ - RSS -> VEVENT
+ - RSS -> VJOURNAL
+
+ Notes:
+ - will need a decent ics encoding api
+
+
+
+todo: vcf-bday-to-ics.rb
+ Input:
+ - .vcf
+ - AB
+
+ Output:
+ - .ics
+ - .ics
+ - http
+ - RSS??! maybe only see bdays within the next month, as a reminder?
+ - cvt vcf file to ics file of birthdays
+ - pull from Address Book, or from .vcf file
+
+ Options:
+ - bday -> VTODO
+ - bday -> VEVENT
+
+
+todo:
+ - an application server (with plugins?) that can do ALL of the above, live,
+ so you can see local iCal as RSS, see remote iCal as RSS, publish
+ iCal as RSS, publish iCal as http (&webdav?) (with rendezvous?)
+
+ - web-based config?
+
+ - obj-c config panel?
+
+ - don't have to do it manually, can make iCal auto-subscribe, and make
+ NetNewsWire auto-subscribe, etc.
+
+
+done: vcf-to-mutt
+ Input:
+ x .vcf
+ - AB -> DON'T DO
+
+ Output:
+ x mutt aliases
+ x Mutt query
+
+ Options:
+ - group the output into whatever the AB groups are? DON'T DO
+ x use search criteria (like only the "pref" email)
+
+
+== PACKAGING
+
+- Package:
+ - gem
+
+ - Port
+
+ - debian, done?
+
+Check packaging guidelines:
+
+ http://www.rubygarden.org/ruby?QuickGuideToPackaging
+
+Can I get RAA synced up to rubyforge?
+
+- ri docs during install?
+
+- html docs during install?
+
+
+== FEATURES
+
+- complete RRULE support
+
+- icalendar maker
+
+- streaming decoder
+
+- streaming encoder
+
+ maker, take OUT as a param, append fields using << ? then if it's an IO it will
+ be a push encoder, can default to Vcard#create.
+
+- valarms
+
+ - like ones that open apps: http://docs.info.apple.com/article.html?artnum=300368
+
+- vjournal
+
+- value=uri
+ -> the value isn't a URI, the URI points to the value, of unknown type! Should
+ I allow this to be handled? Maybe use open-uri()?
+
+- add way to delete a param from a Field, maybe assign nil to it? done?
+
+- encoding TEXT, and the NOTE field
+
+== QUESTIONS
+
+- What does Time.local do with the isdst, and tz arguments?
+
+- Time.local()/gm() don't raise errors for out-of-range day-of-month (Feb 31st,
+ anyone?)!
+
+- Ask about Date extensions?
+
+- Ask about Time extensions?
+
++ Ask on ietf-icalendar:
+
+ Errors in examples?
+
+
+== CLEANUPS/BUGS
+
+- allow preferred to be set to false/nil in vcard/maker
+
+- Need to deal with Date and Time comparisons, see note in time_from_rfc2425. I
+ might need to extend the date time comparisons so Date and Time can be
+ compared.
+
+- Need to document @properties
+
+- pull common implementation of ical components out into a module/mixin
+
+- Vevent has @fields, and @properties, but @properties has @fields, too.
+ Duplication necessary?
+
+- I could do this entirely differently, by adding a to_rfc2445 method to Date,
+ Time, DateTime, etc. that return string values, then anybody could add their
+ own values, and we'd handle it. But then, what about setting the value type?
+ Maybe some kind of table of handlers, per class?
+
+- Time#plusmonth/day should ask itself if it is in utc, then call Time.utc or Time.local
+ as appropriate.
+
+- bug: deal with "round down" that Date does when you add a month, and the dofmonth is not
+ in valid range -> if you have jan31 repeating monthly with iCal, you shouldn't get an
+ occurence in Feb
+
+- do coverage testing: http://rubyforge.org/project/showfiles.php?group_id=18&release_id=360
+
+- guess whether it's a date or a date-time by matching regexes, instead of
+ having to provide the default, which I hacked in, its ugly, and we can guess
+
+ Done?
+
+- deal with timezones correctly, iCalendar wants:
+
+ DTSTART:19970714T133000 ;Local time
+ DTSTART:19970714T173000Z ;UTC time
+ DTSTART;TZID=US-Eastern:19970714T133000 ;Local time and time zone reference
+
+ Done?
+
+- deal with BOM (there's some test vcfs from macnerd2k@yahoo.com in =l.vcard)
+
+- don't allow quoted-printable encodings if version is 3.0
+
+- encoding values with a \n in it will break
+
+ --> generally, make sure not to generate invalid encodings
+
+- return self for true, and for methods that don't have other return values?
+
+- preserve whitespace in a Field?
+
+- support ';' list values (done on encoding, anything to do on decoding?)
+
+- value=text
+ in this value, newlines are \n or \N, deal with this when decoding
+ (as are ; and ,)
+
+- freeze everything? -> Need to test this.
+
+
+== DOCUMENTATION
+
+- document examples of how to get
+ bday as Time,
+ and email,
+ a photo, (done)
+ etc...
+
+== VCARD VERSION INTEROP
+
+- Confirm Address Book bugs: PHOTO uses version 2 encoding field, and has too many spaces.
+
+Examine vCard 2.1 interop, and possible trans-encoding.
+
+name= is optional in a parameter
+; can show up in a parameter value, if escaped
+
+quoted-printable can be used to encode values with line breaks
+
+a parameter without an = is usually implicitly a type=, unless
+it's one of the encoding types, deal with this on input
+
+- Is email;internet:sroberts@uniserve.com
+valid in vCard2.1? Should I convert it to "type=internet"?
+
View
57 ab-query.rb
@@ -0,0 +1,57 @@
+#!/usr/bin/ruby -w
+# $Id: ab-query.rb,v 1.5 2004/03/21 15:07:41 sam Exp $
+
+$:.unshift File.dirname($0)
+
+require 'osx-wrappers'
+
+require 'getoptlong'
+require 'vpim/vcard'
+require 'osx-wrappers'
+
+HELP =<<EOF
+Usage: ab-query.rb [--me] [--all]
+
+Queries the OS X Address Book for vCards.
+
+ -h, --help print this helpful message
+ -m, --me list my vCard
+ -a, --all list all vCards
+EOF
+
+opts = GetoptLong.new(
+ [ "--help", "-h", GetoptLong::NO_ARGUMENT ],
+ [ "--me", "-m", GetoptLong::NO_ARGUMENT ],
+ [ "--all", "-a", GetoptLong::NO_ARGUMENT ]
+)
+
+abook = nil
+
+opts.each do |opt, arg|
+ case opt
+ when "--help" then
+ puts HELP
+ exit 0
+
+ when "--all" then
+ abook = OSX::ABAddressBook.sharedAddressBook unless abook
+
+ abook.people.to_a.each {
+ |person|
+
+ puts person.vCard
+ }
+
+ when "--me" then
+ abook = OSX::ABAddressBook.sharedAddressBook unless abook
+
+ puts abook.me.vCard
+ end
+end
+
+
+unless abook
+ puts HELP
+ exit 1
+end
+
View
155 cmd-itip.rb
@@ -0,0 +1,155 @@
+#!/usr/bin/ruby -w
+
+$:.unshift File.dirname($0)
+
+require 'getoptlong'
+
+require 'vpim/icalendar'
+require 'vpim/duration'
+
+include Vpim
+
+# TODO - $0 is the full path, fix it.
+HELP =<<EOF
+Usage: #{$0} <invitation.ics>
+
+Options
+ -h,--help Print this helpful message.
+ -d,--debug Print debug information.
+
+ -m,--my-addrs My email addresses, a REGEX.
+Examples:
+EOF
+
+opt_debug = nil
+opt_print = true
+
+# Ways to get this:
+# Use a --mutt option, and steal it from muttrc,
+# from $USER, $LOGNAME,, from /etc/passwd...
+opt_myaddrs = nil
+
+opts = GetoptLong.new(
+ [ "--help", "-h", GetoptLong::NO_ARGUMENT ],
+
+ [ "--myaddrs", "-m", GetoptLong::REQUIRED_ARGUMENT ],
+
+ [ "--accept", "-a", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "--reject", "-r", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "--debug", "-d", GetoptLong::NO_ARGUMENT ]
+)
+
+opts.each do |opt, arg|
+ case opt
+ when "--help" then
+ puts HELP
+ exit 0
+
+ when "--debug" then
+ require 'pp'
+ opt_debug = true
+
+ when "--myaddrs" then
+ opt_myaddrs = Regexp.new(arg, 'i')
+ end
+end
+
+if ARGV.length < 1
+ puts "no input files specified, try -h!\n"
+ exit 1
+end
+
+ARGV.each do |file|
+ cals = Vpim::Icalendar.decode(File.open(file))
+
+ cals.each do |cal|
+ if opt_debug
+ puts "vCalendar: version=#{cal.version/10.0} producer='#{cal.producer}'"
+ if cal.protocol; puts " protocol-method=#{cal.protocol}"; end
+ end
+
+ events = cal.events
+
+ if events.size != 1
+ raise "!! #{events.size} calendar events is more than 1!"
+ end
+
+ events.each do |e|
+ summary = e.summary || e.comment || ''
+
+ case cal.protocol.upcase
+ when 'PUBLISH'
+ puts "Notification of: #{summary}"
+
+ when 'REQUEST'
+ puts "Request for: #{summary}"
+
+ when 'REPLY'
+
+ else
+ raise "!! unhandled protocol type #{cal.protocol}!"
+ end
+
+ puts "Organized by: #{e.organizer.to_s}"
+
+ # TODO - spec as hours/mins/secs
+ e.occurences.each_with_index do |t, i|
+ if(i < 1)
+ puts "At time: #{t}" +( e.duration ? " for #{Duration.secs(e.duration).to_s}" : '' )
+ else
+ puts "... and others"
+ break
+ end
+ end
+
+ if e.location; puts "Located at: #{e.location}"; end
+
+ if e.description
+ puts finish="-- Description --"
+ puts e.description
+ end
+
+ if e.comment
+ puts finish="-- Comment --"
+ puts " comment=#{e.comment}"
+ end
+
+ if e.attendees.first
+
+ puts finish="-- Attendees --"
+
+ e.attendees.each_with_index do |a,i|
+ puts "#{i} #{a.to_s}"
+ if !opt_myaddrs || a.uri =~ opt_myaddrs
+ puts " participation-status: #{a.partstat ? a.partstat.downcase : 'unknown'}"
+ puts " response-requested? #{a.rsvp ? 'yes' : 'no'}"
+ end
+ end
+ end
+
+ if finish
+ puts '-' * finish.length
+ end
+
+ if opt_debug
+ if e.status; puts " status=#{e.status}"; end
+ puts " uid=#{e.uid}"
+ puts " dtstamp=#{e.dtstamp.to_s}"
+ puts " dtstart=#{e.dtstart.to_s}"
+ if e.dtend; puts " dtend=#{e.dtend.to_s}"; end
+ if e.rrule; puts " rrule=#{e.rrule}"; end
+ end
+ end
+
+ todos = cal.todos
+ todos.each do |e|
+ s = e.status ? " (#{e.status})" : ''
+ puts "Todo#{s}: #{e.summary}"
+ end
+
+ if opt_debug
+ pp cals
+ end
+ end
+end
+
View
3  etc/.cvsignore
@@ -0,0 +1,3 @@
+.DS_Store
+doc-ical
+*.swp
View
BIN  etc/AddressBook.pdf
Binary file not shown
View
99 etc/Comment.txt
@@ -0,0 +1,99 @@
+
+Authors: howes@netscape.com, mcs@netscape.com, frank_dawson@lotus.com
+
+* The meaning of "Z" and of the time-zone offset is never defined
+
+I assume that the +/- form has the same definition as RFC822, what is the "Z"?
+
+* why is there no value=image? This would seem to be particularly useful for PHOTO...
+
+* Errors in the definition of time:
+
+ time-secfrac = "," 1*DIGIT
+
+This, if true, means that the time-list would be ambiguous:
+
+ time-list = time *("," time)
+
+But luckily (...?!) it conflicts with the examples given:
+
+ Examples for "time":
+ 10:22:00.33
+ 10:22:00.33Z
+
+
+* Errors in the samples
+
+From Example 3 (8.3) in RFC 2425:
+
+ email;internet:mb@goerlitz.de
+
+The second would appear to be *both* syntactically invalid (no "=", see below),
+and not a valid RFC 2426 EMAIL parameter.
+
+
+From Example 2 (8.2) in RFC 2425:
+
+ ...
+ Content-Transfer-Encoding: Quoted-Printable
+
+ begin:VCARD
+ source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US
+
+This is obviously not quoted-printable (since =bj is not valid) it's just 7bit.
+If it was quoted-printable, "cn=bjorn" would be "cn=3dbjorn".
+
+
+The vcards also don't have a VERSION field, making them non-rfc2426 compliant.
+
+
+
+* Differences between 2.1 and 3.0 that aren't mentioned, or are an RFC 2426 EBNF error
+
+Rfc2425 neglects to mention as a difference that multiple group names
+are allowed in vCard 2.1, but not vCard 3.0 (RFC 2425).
+
+Or is this an error in the RFC2426 EBNF?
+
+vCard 2.1:
+
+ groups = groups "." word / word
+ item = [groups "."] name [params] ":" value CRLF
+
+vCard 3.0/RFC 2426:
+
+ contentline = [group "."] name *(";" param ) ":" value CRLF
+ group = 1*(ALPHA / DIGIT / "-")
+
+
+
+
+
+* params without values are allowed, but not without an "="
+
+param = param-name "=" param-value *("," param-value)
+param-value = ptext / quoted-string
+ptext = *SAFE-CHAR
+
+So
+
+field;toggle:value
+
+is invalid, but
+
+field;toggle=:value
+field;toggle=,,:value
+
+are valid? Is this really the intention?
+
+* no DQUOTE in parameter values
+
+parameter values appear not to be able to contain a DQUOTE, even
+escaped. So:
+
+name;param="..\"..":value
+
+is invalid. This surprised me, I'd assumed that that quoting would be
+possible. I'm not complaining, it makes the syntax simpler, was it
+intended? I'm not missing something, am I?
+
View
159 etc/dir-30.bnf
@@ -0,0 +1,159 @@
+From RFC 2425
+
+5.8.2. ABNF content-type definition
+
+ The following ABNF uses the notation of RFC 2234, which also defines
+ CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT. After the unfolding of
+ any folded lines as described above, the syntax for a line of this
+ content type is as follows:
+
+ contentline = [group "."] name *(";" param) ":" value CRLF
+ ; When parsing a content line, folded lines MUST first
+ ; be unfolded according to the unfolding procedure
+ ; described above.
+ ; When generating a content line, lines longer than 75
+ ; characters SHOULD be folded according to the folding
+ ; procedure described above.
+
+ group = 1*(ALPHA / DIGIT / "-")
+
+ name = x-name / iana-token
+
+ iana-token = 1*(ALPHA / DIGIT / "-")
+ ; identifier registered with IANA
+
+ x-name = "x-" 1*(ALPHA / DIGIT / "-")
+ ; Names that begin with "x-" or "X-" are
+ ; reserved for experimental use, not intended for released
+ ; products, or for use in bilateral agreements.
+
+ param = param-name "=" param-value *("," param-value)
+
+ param-name = x-name / iana-token
+
+ param-value = ptext / quoted-string
+
+ ptext = *SAFE-CHAR
+
+ value = *VALUE-CHAR
+ / valuespec ; valuespec defined in section 5.8.4
+
+ quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
+
+ NON-ASCII = %x80-FF
+ ; use restricted by charset parameter
+ ; on outer MIME object (UTF-8 preferred)
+
+ QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-ASCII
+ ; Any character except CTLs, DQUOTE
+
+ SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E / NON-ASCII
+ ; Any character except CTLs, DQUOTE, ";", ":", ","
+
+ VALUE-CHAR = WSP / VCHAR / NON-ASCII
+ ; any textual character
+
+5.8.3. Pre-defined Parameters
+
+ The following parameters and value types are defined for general use.
+
+ predefined-param = encodingparm
+ / valuetypeparm
+ / languageparm
+ / contextparm
+
+ encodingparm = "encoding" "=" encodingtype
+
+ encodingtype = "b" ; from RFC 2047
+ / iana-token ; registered as described in
+ ; section 15 of this document
+
+ valuetypeparm = "value" "=" valuetype
+
+ valuetype = "uri" ; genericurl from secion 5 of RFC 1738
+ / "text"
+ / "date"
+ / "time"
+ / "date-time" ; date time
+ / "integer"
+ / "boolean"
+ / "float"
+ / x-name
+ / iana-token ; registered as described in
+ ; section 15 of this document
+
+ languageparm = "language" "=" Language-Tag
+ ; Language-Tag is defined in section 2 of RFC 1766
+
+ contextparm = "context" "=" context
+
+ context = x-name
+ / iana-token
+
+5.8.4. Pre-defined Value Types
+
+ The format for values corresponding to the predefined valuetype
+ specifications given above are defined.
+
+ valuespec = text-list
+ / genericurl ; from section 5 of RFC 1738
+ / date-list
+ / time-list
+ / date-time-list
+ / boolean
+ / integer-list
+ / float-list
+ / iana-valuespec
+
+ text-list = *TEXT-LIST-CHAR *("," *TEXT-LIST-CHAR)
+
+ TEXT-LIST-CHAR = "\\" / "\," / "\n"
+ / <any VALUE-CHAR except , or \ or newline>
+ ; Backslashes, newlines, and commas must be encoded.
+ ; \n or \N can be used to encode a newline.
+
+ date-list = date *("," date)
+
+ time-list = time *("," time)
+
+ date-time-list = date "T" time *("," date "T" time)
+
+ boolean = "TRUE" / "FALSE"
+
+ integer-list = integer *("," integer)
+
+ integer = [sign] 1*DIGIT
+
+ float-list = float *("," float)
+
+ float = [sign] 1*DIGIT ["." 1*DIGIT]
+
+ sign = "+" / "-"
+
+ date = date-fullyear ["-"] date-month ["-"] date-mday
+
+ date-fullyear = 4 DIGIT
+
+ date-month = 2 DIGIT ;01-12
+
+ date-mday = 2 DIGIT ;01-28, 01-29, 01-30, 01-31
+ ;based on month/year
+
+ time = time-hour [":"] time-minute [":"] time-second [time-secfrac]
+ [time-zone]
+
+ time-hour = 2 DIGIT ;00-23
+
+ time-minute = 2 DIGIT ;00-59
+
+ time-second = 2 DIGIT ;00-60 (leap second)
+
+ time-secfrac = "," 1*DIGIT
+
+ time-zone = "Z" / time-numzone
+
+ time-numzome = sign time-hour [":"] time-minute
+
+ iana-valuespec = <a publicly-defined valuetype format, registered
+ with IANA, as defined in section 15 of this
+ document>
View
840 etc/draft-butcher-irc-url-04.txt
@@ -0,0 +1,840 @@
+
+
+INTERNET-DRAFT Simon Butcher
+Expires July 2004 Alien Internet Services
+ January 2003
+
+
+ Uniform Resource Locator Schemes for
+ Internet Relay Chat Entities
+ <draft-butcher-irc-url-04.txt>
+
+
+Status of this Memo
+
+ This document is an Internet-Draft and is subject to all provisions
+ of Section 10 of RFC2026. Distribution of this document is
+ unlimited. Comments should be sent to the "irc-url" mailing list,
+ specified at the end of this document.
+
+ Internet-Drafts are working documents of the Internet Engineering
+ Task Force (IETF), its areas, and its working groups. Note that
+ other groups may also distribute working documents as Internet-
+ Drafts.
+
+ Internet-Drafts are draft documents valid for a maximum of six months
+ and may be updated, replaced, or obsoleted by other documents at any
+ time. It is inappropriate to use Internet-Drafts as reference
+ material or to cite them other than as "work in progress."
+
+ The list of current Internet-Drafts can be accessed at
+ http://www.ietf.org/1id-abstracts.html
+
+ The list of Internet-Draft Shadow Directories can be accessed at
+ http://www.ietf.org/shadow.html
+
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+
+Abstract
+
+ This document specifies two URL (Uniform Resource Locator) schemes,
+ using the URI (Uniform Resource Indicator) names "irc" and "ircs",
+ for the location of IRC (Internet Relay Chat) servers. These URLs
+ allow for easy location of an IRC server, optionally also specifying
+ an IRC channel to join, or a person's nickname to contact upon
+ connection.
+
+
+
+
+S. Butcher Expires July 2004 [Page 1]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+1. Introduction
+
+ Since its introduction, Internet Relay Chat (IRC) has become widely
+ known and used within the Internet Community as a real-time chat
+ medium. IRC networks are steadily growing larger, not only with
+ regards to the number of regular users, but also the number of
+ channels and servers required to support the diverse demand.
+
+ Due to the nature of IRC as a real-time chat service, it has been
+ known to be used for a wide variety of uses such as software support,
+ job interviews, and of course just for a casual conversation.
+
+ For years now, the need for an appropriate Uniform Resource Locator
+ (URL) scheme has been apparent. Applications for such a scheme range
+ quite widely, including IRC network's server lists on their website,
+ technical support contact details, or even a meeting location within
+ an e-mail, giving a specific IRC channel or nickname to contact.
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in [RFC2119].
+
+ In this document, the term "client" is defined as the IRC client
+ software, and the term "user" is the end-user of that software. The
+ term "entity" refers to an addressable IRC entity, such as a user,
+ service, or channel.
+
+
+2. URL Definition
+
+ An IRC URL begins with either the Uniform Resource Identifiers (URIs)
+ "irc", or "ircs", denoting normal and secured connections
+ respectively. Normal sessions are via existing transport (such as
+ that in [RFC2812]) and is to be considered insecure. Secured
+ sessions are much the same, only secured via a "blanket security"
+ method such as [SSL], or negotiating a [TLS] session.
+
+ The URL scheme for IRC follows the Generic URL Syntax ([RFC2396]).
+
+ The action the URL instigates is to open a connection to the
+ specified IRC server using whatever protocol necessary, and make
+ contact with the given user, service or channel, if also requested.
+
+ There is no requirement for IRC client software implementing the
+ "irc" scheme to also implement the "ircs" scheme, or vice-versa. It
+ is, however, RECOMMENDED that clients implementing the "ircs" scheme
+ are also capable of handling a normal connection via the "irc"
+ scheme.
+
+
+
+S. Butcher Expires July 2004 [Page 2]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+2.1. ABNF Syntax
+
+ Below is the definition for the IRC URL scheme in [ABNF] grammar:
+
+ ircURL = ircURI "://" location "/" [ entity ] [ flags ] [ options ]
+
+ ircURI = "irc" / "ircs"
+ ; See Section 2, above, for details.
+
+ location = [ authinfo "@" ] hostport
+ ; See Section 3.2.2 of [RFC2396] for the definition
+ ; of 'hostport'.
+
+ authinfo = [ username ] [ ":" password ]
+ ; See Section 2.2 of this document for details.
+
+ username = *( escaped / unreserved )
+
+ password = *( escaped / unreserved ) [ ";" passtype ]
+
+ passtype = *( escaped / unreserved )
+
+ entity = [ "#" ] *( escaped / unreserved )
+ ; Note the prefix, "#", may be used for channel names
+ ; without escapes. Please see Section 2.5.1.
+
+ flags = ( [ "," enttype ] [ "," hosttype ] )
+ /= ( [ "," hosttype ] [ "," enttype ] )
+
+ enttype = "," ( "isuser" / "ischannel" )
+
+ hosttype = "," ( "isserver" / "isnetwork" )
+
+ options = "?" option *( "&" option )
+
+ option = optname [ "=" optvalue ]
+
+ optname = *( ALPHA / "-" )
+ ; Option names are case-insensitive.
+
+ optvalue = optparam *( "," optparam )
+
+ optparam = *( escaped / unreserved )
+
+ The definition of "escaped" and "unreserved" is in sections
+ 2.4.1 and 2.3 of [RFC2396] respectively. Clients MUST be
+ aware of protocol limitations. For example, using "IRC-2"
+ (RFC2812), it's impossible to use codepoint U+0020 in names.
+
+
+
+S. Butcher Expires July 2004 [Page 3]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+2.2. Authentication
+
+ To allow for complete authentication of a session, a username MAY be
+ provided with the password. The username MUST NOT be passed to the
+ server as a nickname. For example, while registering a connection
+ using the "IRC-2" protocol, the username would be passed as the first
+ parameter of the "USER" command (See Section 3.1.3 of [RFC2812]).
+
+ The characters available for use in a username may be restricted by
+ the protocol used, and the IRC server software used.
+
+ The use of the password field is not recommended, as it presents a
+ significant security problem. Authors of IRC URLs using the
+ authentication field, including a password, should make themselves
+ aware of the security issues discussed in Section 6 of this document.
+
+ See Section 3 for examples of username/password pair authentication,
+ and traditional server password only authentication.
+
+
+2.3. Server Names
+
+ Servers can be named with either their hostname, or address, like
+ other URL schemes, but also with an IRC Network's name. The
+ difference can be explicitly specified using the "isserver" and
+ "isnetwork" keywords in the "hosttype" section (see Section 3 for
+ examples).
+
+ As many modern IRC clients maintain lists of major IRC networks and
+ their respective servers, determination of a server to connect to
+ from a given network name should be a trivial task.
+
+ If the host name used is not a raw address (such as an IPv4, IPv6, or
+ other network address), the name cannot be resolved (through DNS or
+ other means), and does not contain a period character (U+002E), the
+ client MAY consider the given host name as a network name to find an
+ appropriate IRC server.
+
+ If the IRC client does not contain IRC Network name lists, and
+ "isnetwork" has been specified, the client MUST NOT attempt to
+ resolve the network name as a hostname.
+
+
+2.4. Server Ports
+
+ Special consideration must be given to URLs without ports specified.
+ Almost all IRC servers are contactable on a variety of standard ports
+ as allocated by the IANA. Should an IRC URL be specified without a
+
+
+
+S. Butcher Expires July 2004 [Page 4]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+ port, a client MAY try a number of standard ports:
+
+ - For the "irc" URI, the client SHOULD attempt connection to the
+ port 6667, and MAY attempt connection to the ports 194, 6665,
+ 6666, 6668 and 6669, in that order. Port 194 is likely to be a
+ more "authentic" server, however at this time the majority of
+ IRC servers are available on port 6667, at least.
+
+ - For the "ircs" URI, the default port used is 994. User-space
+ ports (those above port 1023) may have questionable
+ authenticity, and SHOULD NOT be used unless explicitly
+ specified.
+
+ Port numbers shown are in decimal, and have been assigned by the
+ IANA. Section 3.2.2 of [RFC2396] suggests only one port may be used
+ as a default port, and does not state a preference for or against
+ port hunting. The act of port hunting for the "irc" scheme when no
+ port is specified is therefore left up to the discretion of client
+ authors.
+
+ For URL equivalency, clients SHOULD consider default ports without
+ considering port-hunting. For example, <irc://some.server/> and
+ <irc://some.server:6667/> should be considered equivalent, as should
+ <ircs://some.server/> and <ircs://some.server:994/>.
+
+ Note that the port 194 is officially the "standard" port for IRC
+ servers, the current practise is to use port 6667. This document may
+ be updated in the future if and when port 194 obtains an increased
+ prevailance.
+
+
+2.5. Entity Names
+
+ Only one entity can be named per URL. The named entity SHOULD be
+ presumed to be a channel name, unless the "enttype" section (see
+ Section 2.1) of the URL is provided to determine the entity type.
+
+ An automated message MUST NOT be sent to the addressed entity.
+
+
+2.5.1. Channel Names
+
+ When "enttype" contains "ischannel", or "enttype" is omitted
+ completely, the entity name provided is a channel name.
+
+ While it is discouraged, channel names prefixed with the "#" (U+0023)
+ character may be specified without encoding the character (as "%23")
+ in the URL. Implementers MAY accept this, despite it being an
+
+
+
+S. Butcher Expires July 2004 [Page 5]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+ exception to Section 2.4.3 of [RFC2396], because channels of this
+ type are currently very common, and will remain so in the foreseeable
+ future.
+
+ Clients SHOULD attempt to determine valid channel name prefix
+ characters from the server it has connected to, such as via an
+ "RPL_ISUPPORT" reply. If the client is unable to determine valid
+ prefix characters for the server it is connected to, the client
+ SHOULD attempt to join the channel without modifying its name. If
+ joining the channel failed, the prefix character "#" may be used.
+
+ If the client discovers the channel name given is considered to be
+ invalid because it is missing a valid prefix character, the client
+ SHOULD prepend a default prefix character to the name.
+
+ Since default prefix characters for channels may differ between IRC
+ servers, the client SHOULD try to determine the default channel
+ prefix for the server it is connected to, such as the first prefix
+ character given by "CHANTYPES" in "RPL_ISUPPORT". If the client is
+ still unable to determine a prefix character, a prefix character of
+ '#' (U+0023) MAY be presumed.
+
+
+2.5.2. Nicknames
+
+ When "enttype" contains "isuser", the entity given refers to a user.
+ The given entity name may simply be a nickname, or it may contain
+ more specific information such as the user's hostname, username, or a
+ server they use.
+
+ A user entity is referred to using the following syntax (in [ABNF]
+ grammar):
+
+ userent = nickname [ "%21" username ] [ "%40" hostname ]
+
+
+ The definitions of "nickname", "username", and "hostname" are all
+ identical to the definition of "entname", as defined in Section 2.1
+ of this document.
+
+ It's RECOMMENDED that the client parse this name, as most servers
+ will not accept this syntax directly. For example, the client may
+ wish to make use of the IRC-2 "WHO" command to discover if the entity
+ is valid and available.
+
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 6]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+2.6. Additional Options
+
+ Additional options may be used to provide additional information
+ about the entity you're addressing.
+
+ These options listed here may be expanded on at a later date by
+ future documents. Unsupported options MUST be ignored by the client.
+ The client author is not obligated to utilise the "options" section
+ (see Section 2.1) of the URL, but it is RECOMMENDED to do so.
+
+
+2.6.1. The "key" Option
+
+ This option is only valid if the entity name given is a channel name.
+ If the entity name is not a channel name, then this option MUST
+ simply be ignored.
+
+ The option's value provides a "key" to be given to the server when
+ joining the given channel name, and is used for channels which
+ require a "key" to join them. If a channel key is found to be
+ required and one is not provided with this option, the IRC client may
+ wish to prompt the user for the key.
+
+ Please see Section 6 of this document.
+
+
+3. Examples
+
+ While examples of every situation cannot be shown here because of
+ space considerations, the following examples provide a rough overview
+ of how the IRC URL can be used.
+
+ <irc://irc.undernet.org/>
+
+ In its simplest form, the above complete URL can be used to direct a
+ client to a specific IRC server, which in this case is
+ "irc.undernet.org". The client should presume to use default port
+ settings.
+
+ <irc://irc.ircnet.net/#worldchat,ischannel>
+ <irc://irc.ircnet.net/%23worldchat,ischannel>
+ <irc://irc.ircnet.net/#worldchat>
+ <irc://irc.ircnet.net:6667/%23worldchat>
+
+ All four of these URLs connects to the IRCnet network, and will join
+ the client to the channel "#worldchat" upon connection. All of these
+ URLs are considered identical.
+
+
+
+
+S. Butcher Expires July 2004 [Page 7]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+ <irc://irc.alien.net.au/pickle,isuser>
+
+ This will connect to the server "irc.alien.net.au" and will provoke
+ the client to open up a window (or similar) associated with sending
+ messages to the nickname 'pickle'.
+
+ <irc://irc.austnet.org/%23foobar?key=bazqux>
+
+ This will connect to AUSTnet and join the channel "#foobar", using
+ the channel key "bazqux".
+
+ <irc://undernet/pickle%25butcher.id.au,isuser>
+
+ This will open a dialogue box prepared to send a message to "pickle"
+ with the server name "butcher.id.au". This URL will connect to the
+ network named as "undernet". For this to work correctly, the client
+ must be configured appropriately to know of at least one server's
+ address associated with this name.
+
+ <irc://:pass@irc.efnet.org:194/>
+
+ The above URL specifies that the IRC client should try to connect to
+ "irc.efnet.org" on the port 194, rather than use the default port(s).
+ It also tells the IRC client it should try to connect to the server
+ using the server password "pass".
+
+ <irc://%C4%B0dil:g%C3%BCzel@irc.austnet.org/>
+
+ This shows a properly [UTF-8] encoded URL, specifying the username
+ "Idil" (with the first character being a Turkish Latin capital letter
+ "I" with a dot above it, [Unicode] codepoint U+0130) and the password
+ "guzel" (with a diaeresis on the u, codepoint U+00FC).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 8]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+4. Internationalisation Considerations
+
+ With the inevitable adoption of [Unicode] on IRC, and indeed the
+ Internet as a whole, URLs MUST be encoded using the [UTF-8] character
+ set, with (potentially) unsafe octets encoded using %HH notation
+ (where HH is a hexadecimal value), as per Section 2.2.5 of
+ [RFC-2718]. An example of this in action can be found in Section 3.
+
+ Some IRC servers use such character sets as US-ASCII and KOI-8. It
+ is left up to the client and the server to negotiate an appropriate
+ character set for communication between the two, as more servers are
+ now implementing specific character-set preferences. It is also left
+ up to the client to convert entity names from UTF-8 into the
+ appropriate character set.
+
+ At the time of writing, [UTF-8] is set to become the popular choice
+ (announced via RPL_ISUPPORT) as it's easy to implement with very
+ minimal changes to existing server software. Other IRC servers are
+ opting to announce a preferred character set, but allow the client to
+ switch character sets on the fly, using CAP/CAPAB negotiation, oft
+ implemented using the UNIX98 iconv() function (or something similar).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 9]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+5. Interoperability Considerations
+
+ Many existing implementations fail to acknowledge the correct use of
+ the generic URL syntax defined in [RFC2396], but act like they use
+ the format.
+
+ Some current implementations will need slight modification to accept
+ the extended format defined in this specification, however most
+ implementations which parse the URL in a standard form will continue
+ to work for most IRC URLs.
+
+ The presumption of a channel name without explicitly specifying the
+ entity type is designed to maintain compatibility with the existing
+ implementations. The practise of omitting the channel prefix
+ character, or not encoding it, is also for compatibility, but is
+ STRONGLY DISCOURAGED.
+
+ There are interoperability issues with existing IRC servers as a
+ result of the restricted characters available for channel names and
+ nicknames. The restriction of acceptable characters has been left up
+ to the IRC server authors and not the URL scheme, as not to hinder
+ advances in IRC protocols and servers.
+
+ Some existing IRC servers will accept nickname/password pairs,
+ however at the time of writing these servers do not use this for
+ actually authenticating the session, but instead identifying
+ nicknames to nickname registration services. The use of
+ username/password pairs is used for actual authentication, and has
+ been included.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 10]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+6. Security Considerations
+
+ Security problems naturally arise when a server password and/or a
+ channel key is specified (using the "key" option). While the use of
+ the password and channel key sections is considered to be rare, and
+ they have been included for uses such as for shortcut/bookmark lists,
+ or to be used as a user command.
+
+ As the passwords and channel keys are unfortunately passed as clear
+ text, any user using the IRC URL should be aware of obvious
+ insecurities. It is strongly discouraged to use these fields in a
+ public sense, such as on a website.
+
+ Furthermore, it is recommended that client software does not
+ automatically initiate the connection specified by the URL without
+ the knowledge and consent of the user. To do so would open the
+ implementation up to a variety of malicious activities including, but
+ not limited to, the purposes of direct advertising or channel
+ advertising (known as "spam") via "pop-ups" or other means.
+
+ When connecting using a secure connection ("ircs://"), user-space
+ ports (those above port 1023) should be treated with suspicion, as
+ their authority could be questionable. If a secure connection cannot
+ be established, the client MUST NOT automatically default to an
+ insecure ("irc://") connection. To do so would denigrate the "ircs"
+ scheme and restrict its usefulness.
+
+ Automated messages MUST NOT be sent to any entity upon connection to
+ an IRC server as a direct result of execution of an IRC URL. Sending
+ messages to channels and other users should be left up to the user,
+ not the URL author or the client software. The facility to send
+ automated messages to other users has been explicitly avoided in this
+ document to avoid abuse, common with IRC.
+
+ Clients MUST be aware of protocol limitations, especially when
+ dealing with entity names, as the probability for exploitation is
+ high. For example, a URL with a nickname including "%0D%0A" could be
+ used to exploit a client using using the "IRC-2" protocol,
+ potentially allowing a malicious URL author to execute any command
+ they wish.
+
+ Beyond this, there are security concerns with regards with associated
+ protocols, including the IRC server-to-user protocols themselves,
+ [TLS] and [UTF-8], which must be taken into consideration, but are
+ beyond the scope of this document.
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 11]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+7. IANA Considerations
+
+ The following is registration for the URL schemes as per [RFC2717]:
+
+ URL scheme name: Two URI's are described herein: "irc" and "ircs".
+
+ URL scheme syntax: See Section 2.1, and indeed Section 2 as a
+ whole.
+
+ Character encoding considerations: Characters must be encoded in
+ UTF-8 and escaped. See Section 4.
+
+ Intended usage: The scheme initiates connection to an IRC server,
+ normally through the execution of IRC Client software. Further-
+ more, the scheme may then initiate further commands, such as
+ joining channels, as outlined above.
+
+ Interoperability considerations: See Section 5.
+
+ Security considerations: See Section 6.
+
+ Relevant publications: The IRC protocol is defined by [RFC2812].
+ Either [SSL] or [TLS] may be used for the "ircs" scheme, depending
+ on client and server configuration.
+
+ Person & email address to contact for further information: The
+ Author; See Section 10 for details.
+
+ Author/Change controller: The Author's details are contained
+ within Section 10. The IETF is to maintain change control.
+
+
+8. Acknowledgments
+
+ I acknowledge the previous work of Mandar Mirashi who originally
+ wrote an Internet-Draft to similar effect.
+
+ The input of Petr Baudis, Robert Ginda, Piotr Kucharski, Perry
+ Lorier, Khaled Mardam-Bey, Dominick Meglio, James Ross, and Samuel
+ Sieb, was greatly appreciated, and this draft would not exist without
+ their valued participation. I also thank them for their patience
+ while I was travelling overseas.
+
+ I would also like to acknowledge those members of the IRC development
+ community who encouraged me to publish this document, after more than
+ 18 months of pretermission.
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 12]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+9. References
+
+
+ [ABNF] Crocker, D., and Overell, P., "Augmented BNF for Syntax
+ Specifications: ABNF", RFC 2234, November 1997.
+
+ [PICS] Miller, J., Resnick, P., Singer, D., "Rating Services and
+ Rating Systems (and Their Machine Readable Descriptions)",
+ Version 1.1, <http://www.w3.org/TR/REC-PICS-services>,
+ October 1996.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2368] Hoffman, P., Masinter, L., Zawinski, J., "The mailto URL
+ scheme", RFC 2368, July 1998.
+
+ [RFC2396] Berners-Lee, T, Fielding, T., Masinter, L., "Uniform
+ Resource Identifiers (URI): Generic Syntax", RFC 2396,
+ August 1998.
+
+ [RFC2717] Petke, R., King, I., "Registration Procedures for URL
+ Scheme Names", RFC 2717, November 1999.
+
+ [RFC2718] Masinter, L., Alvestrand, H., Zigmond, D., Petke, R.,
+ "Guidelines for new URL Schemes", RFC 2718, November 1999.
+
+ [RFC2811] Kalt, C., "Internet Relay Chat: Channel Management", RFC
+ 2811, April 2000.
+
+ [RFC2812] Kalt, C., "Internet Relay Chat: Client Protocol", RFC 2812,
+ April 2000.
+
+ [SSL] Hickman, K., "The SSL Protocol", Netscape Communications
+ Corp., February 9, 1995.
+
+ [TLS] Dierks, T. and Allen, C., "The TLS Protocol Version 1.0",
+ RFC 2246, January 1999.
+
+ [Unicode] The Unicode Consortium. The Unicode Standard, Version
+ 4.0.0, (Reading, MA, Addison-Wesley, 2003. ISBN
+ 0-321-18578-1).
+
+ [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
+ RFC 2279, January 1998.
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 13]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+10. Author's Address
+
+ Simon Butcher
+ Alien Internet Services
+
+ PO Box 7041
+ Croydon South
+ VIC 3136
+ Australia
+
+ Phone: +61-3-9879-8052
+ Fax: +61-3-9893-2793
+ Email: simonb@alien.net.au
+ simon@butcher.name
+ simon@butcher.id.au
+
+
+11. Intellectual Property Rights Notice
+
+ The IETF takes no position regarding the validity or scope of any
+ intellectual property or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; neither does it represent that it
+ has made any effort to identify any such rights. Information on the
+ IETF's procedures with respect to rights in standards-track and
+ standards-related documentation can be found in BCP-11. Copies of
+ claims of rights made available for publication and any assurances of
+ licenses to be made available, or the result of an attempt made to
+ obtain a general license or permission for the use of such
+ proprietary rights by implementers or users of this specification can
+ be obtained from the IETF Secretariat.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights which may cover technology that may be required to practice
+ this standard. Please address the information to the IETF Executive
+ Director.
+
+
+
+
+
+
+
+
+
+
+
+
+
+S. Butcher Expires July 2004 [Page 14]
+
+INTERNET-DRAFT URL Schemes for IRC January 2003
+
+
+12. Full Copyright Notice
+
+ Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+
+Document Discussion Forum
+
+ Discussion for this document is currently taking place using the
+ "irc-url@alien.net.au" mailing list in order to keep discussion open
+ and archived appropriately. Those interested in this document are
+ strongly encouraged to join in on the discussion.
+
+ To subscribe to the mailing list, see:
+ <http://alien.net.au/mailman/listinfo/irc-url_alien.net.au>
+
+ Archives of the mailing list are available at:
+ <http://alien.net.au/pipermail/irc-url_alien.net.au>
+
+
+Document Expiration and Filename
+
+ Please note that this is a draft document and it shall expire July
+ 2004. Its filename is <draft-butcher-irc-url-04.txt>.
+
+
+
+
+S. Butcher Expires July 2004 [Page 15]
+
+
View
BIN  etc/draft-dawson-vcard-xml-dtd-04.pdf
Binary file not shown
View
8,008 etc/draft-ietf-calsch-cap-12.txt
8,008 additions, 0 deletions not shown
View
405 etc/draft-jennings-impp-vcard-04.txt
@@ -0,0 +1,405 @@
+IMPP C. Jennings
+Internet-Draft Cisco Systems
+Expires: April 22, 2005 October 22, 2004
+
+
+
+ vCard Extensions for IM
+ draft-jennings-impp-vcard-04
+
+
+Status of this Memo
+
+
+ By submitting this Internet-Draft, I certify that any applicable
+ patent or other IPR claims of which I am aware have been disclosed,
+ and any of which I become aware will be disclosed, in accordance with
+ RFC 3668.
+
+
+ Internet-Drafts are working documents of the Internet Engineering
+ Task Force (IETF), its areas, and its working groups. Note that
+ other groups may also distribute working documents as
+ Internet-Drafts.
+
+
+ Internet-Drafts are draft documents valid for a maximum of six months
+ and may be updated, replaced, or obsoleted by other documents at any
+ time. It is inappropriate to use Internet-Drafts as reference
+ material or to cite them other than as "work in progress."
+
+
+ The list of current Internet-Drafts can be accessed at
+ http://www.ietf.org/ietf/1id-abstracts.txt.
+
+
+ The list of Internet-Draft Shadow Directories can be accessed at
+ http://www.ietf.org/shadow.html.
+
+
+ This Internet-Draft will expire on April 22, 2005.
+
+
+Copyright Notice
+
+
+ Copyright (C) The Internet Society (2004). All Rights Reserved.
+
+
+Abstract
+
+
+ This document describes an extension to vCard to support Instant
+ Messaging (IM) and Presence Protocol (PP) applications. IM and PP
+ are becoming increasingly common ways of communicating, and users
+ want to save this contact information in their address books. This
+ draft allows a URI that is associated with IM or PP to be specified
+ inside of a vCard.
+
+
+1. Conventions
+
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+
+
+
+
+Jennings Expires April 22, 2005 [Page 1]
+Internet-Draft IMPP vCard October 2004
+
+
+
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in RFC 2119 [3].
+
+
+2. Overview
+
+
+ As more and more people use various instant messaging (IM) and
+ presence protocol (PP) applications, it becomes important for them to
+ be able to share this contact address information along with the rest
+ of their contact information. RFC 2425 [1] and RFC 2426 [2] define a
+ standard format for this information which is referred to as vCard.
+ This document defines a new type in a vCard for representing instant
+ IM and PP URIs. It is very similar to existing types for
+ representing email address and telephone contact information.
+
+
+ The type entry to hold this new contact information is an IMPP type.
+ The IMPP entry has a single URI that indicates the address of a
+ service that provides IM, PP, or both. Also defined are some
+ parameters that give hints as to when certain URIs would be
+ appropriate. A given vCard can have multiple IMPP entries but each
+ entry can contain only one URI. Each IMPP entry can contain multiple
+ parameters. Any combination of parameters is valid, though a
+ parameter should occur at most once in a given IMPP entry.
+
+
+ The type of URI indicates what protocols might be useable for
+ accessing it, but this document does not define any of the types.
+ For example a URI type of
+
+
+ "sip"[6] indicates to use SIP/SIMPLE,
+ "xmpp"[7] indicates to use XMPP,
+ "irc"[5] indicates to use IRC,
+ "ymsgr" indicates to use yahoo,
+ "msn" might indicate to use Microsoft messenger,
+ "aim" indicates to use AOL, and
+ "im"[9] or "pres"[8] indicates to use a CPIM or CPP gateway.
+
+
+ The normative definition of this new vCard type is given in Section
+ 3, and an informational ABNF is provided in Section 4.
+
+
+3. IMPP Type Definition
+
+
+ To: ietf-mime-direct@imc.org
+
+
+ Subject: Registration of text/directory MIME type IMPP
+
+
+ Type name: IMPP
+
+
+ Type purpose: To specify the URI for instant messaging and presence
+ protocol communication with the object the vCard represents.
+
+
+
+
+Jennings Expires April 22, 2005 [Page 2]
+Internet-Draft IMPP vCard October 2004
+
+
+
+ Type encoding: 8bit
+
+
+ Type value: A single URI. The type of the URI indicates the protocol
+ that can be used for this contact.
+
+
+ Type special notes: The type can include the type parameter "TYPE" to
+ specify an intended use for the URI. The TYPE parameter values can
+ include:
+
+
+ An indication of the type of communication for which this URI is
+ appropriate. This can be a value of PERSONAL or BUSINESS.
+
+
+ An indication of the location of a device associated with this
+ URI. Values can be HOME, WORK, or MOBILE.
+
+
+ The value PREF indicates this is a preferred address and has the
+ same semantics as the PREF value in a TEL type.
+
+
+ Intended usage: COMMON
+
+
+4. Formal Grammar
+
+
+ The following ABNF grammar[4] extends the grammar found in RFC 2425
+ [1] and RFC 2426 [2].
+
+
+
+ ;For name="IMPP"
+ param = impp-param ; Only impp parameters are allowed
+
+
+ value = uri
+
+
+ impp-param = "TYPE" "=" impp-type *("," impp-type)
+
+
+ impp-type = "PERSONAL" / "BUSINESS" / ; purpose of communications
+ "HOME" / "WORK" / "MOBILE" /
+ "PREF" /
+ iana-token / x-name;
+ ; Values are case insensitive
+
+
+
+5. Example
+
+
+
+ BEGIN:vCard
+ VERSION:3.0
+ FN:Alice Doe
+ IMPP;TYPE=personal,pref:im:alice@example.com
+ END:vCard
+
+
+
+
+Jennings Expires April 22, 2005 [Page 3]
+Internet-Draft IMPP vCard October 2004
+
+
+
+6. IANA Considerations
+
+
+ Section 3 forms the IANA registration.