Per the announcement on Tuesday (08 Apr), Microsoft has released a lot of new documentation for various Exchange and Outlook-Exchange protocols. This is some cool stuff -- just check out the list of what's available. However, as the web site warns, it's preliminary documentation. If you don't believe them, when you download the files (available in PDF format) the big fat "PRELIMINARY" watermark (in very bold font) will help remind you.[1]
I can already hear some of you out there: "So Microsoft released documentation on obscure or unimportant Exchange protocols. Big deal. I bet they've saved all the good stuff for licensing!" Well, I'm not going to deny that this is a complete set of documentation for every Exchange protocol you might ever want to know about -- after all, Microsoft is a company who believes in the value of intellectual property. They've kinda built a business plan around it, and it's both foolish and naive to somehow assume that they're just going to toss all of that overboard overnight. It's not even reasonable to expect them to completely abandon that position; it's an arguable proposition that Open Source principles work best in conjunction with an IP scheme that permits open licensing when the developers feel invested in doing so, alongside more restrictive licensing schemes. But that's a religious argument for another day.
This will be a long post. I'm going to split it into three sections: Appetizers, Main Course, and What's Missing.
Section 1: Appetizers
First, we have some housekeeping and overview documents and protocols:
| Name |
Description |
| MS-CAB |
Cabinet File Format |
| MS-MCI |
MCI Compression and Decompression |
| MS-OXDOCO |
Outlook-Exchange Protocol Document Roadmap |
| MS-OXGLOS |
Office Exchange Protocols Master Glossary |
| MS-OXPROTO |
Office Exchange Protocols Overview |
| MS-OXREF |
Office Exchange Protocols Master Reference |
| MS-PATCH |
LZX DELTA Compression and Decompression |
You may have noticed that these documents include a few things that aren't strictly Exchange or Outlook-specific, such as the CAB file format and various compression protocols. Just remember that the Exchange protocol documentation is part of a wider set of Interoperability Principles, and so it depends on technologies that are part of the more generic set of Windows technologies.
Section 2: Main Course
Okay, with roadmaps and preliminaries out of the way, let's take a look at the meat:
| Name |
Description |
| MS-NSPI |
Name Service Provider Interface (NSPI) Protocol Specification |
| MS-OXABREF |
Address Book Name Service Provider Interface (NSPI) Referral Protocol Specification |
| MS-OXBBODY |
Best Body Retrieval Protocol Specification |
| MS-OXCDATA |
Data Structures Protocol Specification |
| MS-OXCETF |
Enriched Text Format (ETF) Message Body Conversion Protocol Specification |
| MS-OXCFOLD |
Folder Object Protocol Specification |
| MS-OXCFXICS |
Bulk Data Transfer Protocol Specification |
| MS-OXCICAL |
iCalendar to Appointment Object Conversion Protocol Specification |
| MS-OXCMAIL |
RFC2822 and MIME to E-mail Object Conversion Protocol Specification |
| MS-OXCMSG |
Message and Attachment Object Protocol Specification |
| MS-OXCNOTIF |
Core Notifications Protocol Specification |
| MS-OXCPERM |
Exchange Access and Operation Permissions Specification |
| MS-OXCPRPT |
Property and Stream Object Protocol Specification |
| MS-OXCROPS |
Remote Operations (ROP) List and Encoding Protocol Specification |
| MS-OXCRPC |
Wire Format Protocol Specification |
| MS-OXCSPAM |
Spam Confidence Level, Allow and Block Lists Protocol Specification |
| MS-OXCSTOR |
Store Object Protocol Specification |
| MS-OXCSYNC |
Mailbox Synchronization Protocol Specification |
| MS-OXCTABL |
Table Object Protocol Specification |
| MS-OXDISCO |
Autodiscover HTTP Service Protocol Specification |
| MS-OXDSCLI |
Autodiscover Publishing and Lookup Protocol Specification |
| MS-OXIMAP4 |
Internet Message Access Protocol Version 4 (IMAP4) Extensions Specification |
| MS-OXLDAP |
Lightweight Directory Access Protocol (LDAP) Version 3 Extensions Specification |
| MS-OXMSG |
.MSG File Format Specification |
| MS-OXMVMBX |
Mailbox Migration Protocol Specification |
| MS-OXOAB |
Offline Address Book (OAB) Format and Schema Protocol Specification |
| MS-OXOABK |
Address Book Object Protocol Specification |
| MS-OXOABKT |
Address Book User Interface Templates Protocol Specification |
| MS-OXOCAL |
Appointment and Meeting Object Protocol Specification |
| MS-OXOCFG |
Configuration Information Protocol Specification |
| MS-OXOCNTC |
Contact Object Protocol Specification |
| MS-OXODLGT |
Delegate Access Configuration Protocol Specification |
| MS-OXODOC |
Document Object Protocol Specification |
| MS-OXOFLAG |
Informational Flagging Protocol Specification |
| MS-OXOJRNL |
Journal Object Protocol Specification |
| MS-OXOMSG |
E-mail Object Protocol Specification |
| MS-OXONOTE |
Note Object Protocol Specification |
| MS-OXOPFFB |
Public Folder Based Free/Busy Protocol Specification |
| MS-OXOPOST |
Post Object Protocol Specification |
| MS-OXORMDR |
Reminder Settings Protocol Specification |
| MS-OXORMMS |
Rights-Managed E-mail Object Protocol Specification |
| MS-OXORSS |
RSS Object Protocol Specification |
| MS-OXORULE |
E-mail Rules Protocol Specification |
| MS-OXOSFLD |
Special Folders Protocol Specification |
| MS-OXOSMIME |
S/MIME E-mail Object Protocol Specification |
| MS-OXOSMMS |
SMS and MMS Object Protocol Specification |
| MS-OXOSRCH |
Search Folder List Configuration Protocol Specification |
| MS-OXOTASK |
Task-Related Objects Protocol Specification |
| MS-OXOUM |
Voice Mail and Fax Objects Protocol Specification |
| MS-OXPFOAB |
Offline Address Book (OAB) Public Folder Retrieval Protocol Specification |
| MS-OXPHISH |
Phishing Warning Protocol Specification |
| MS-OXPOP3 |
Post Office Protocol Version 3 (POP3) Extensions Specification |
| MS-OXPROPS |
Office Exchange Protocols Master Property List Specification |
| MS-OXPSVAL |
E-mail Postmark Validation Protocol Specification |
| MS-OXRTFCP |
Rich Text Format (RTF) Compression Protocol Specification |
| MS-OXRTFEX |
Rich Text Format (RTF) Extensions Specification |
| MS-OXSHARE |
Sharing Message Object Protocol Specification |
| MS-OXSMTP |
Simple Mail Transfer Protocol (STMP) Mail Submission Extensions Specification |
| MS-OXTNEF |
Transport Neutral Encapsulation Format (TNEF) Protocol Specification |
| MS-OXWAVLS |
Availability Web Service Protocol Specification |
| MS-OXWOAB |
Offline Address Book (OAB) Retrieval Protocol Specification |
| MS-OXWOOF |
Out of Office (OOF) Web Service Protocol Specification |
| MS-OXWUMS |
Voice Mail Settings Web Service Protocol Specification |
| MS-XJRNL |
Journal Record Message Format Protocol Specification |
| MS-XLOGIN |
SMTP Protocol AUTH LOGIN Extension Specification |
| MS-XWDVSEC |
Web Distributed Authoring and Versioning (WebDAV) Protocol Security Descriptor Extensions Specification |
On first glance, that's an impressive list. NSPIs, S/MIME, SMTP and POP3 extensions, RTF extensions, TNEF -- the list goes on. There's a lot of seriously crunchy material here. The question of the moment, though, is "just how detailed is all this documentation?"
Good question.
I haven't had time to look through it all in a lot of detail. To be honest, I suspect that a lot of it is in areas that I wouldn't be able to catch any glaring omissions or discrepancies (sorry, readers, I'm just not up on the latest specs for RTF). However, I did take a quick look through MS-XLOGIN, "SMTP Protocol AUTH LOGIN Extension Specification"[2], since I'm reasonably familiar with SMTP.
Let me skip to the chase: yup, this is preliminary work. On whole, it does a good job of documenting the flow of the LOGIN extension (which people have already mostly figured out how it works through years of careful protocol analysis). The most complicated part of it is that you're using Base64 to encode the credentials being passed -- not rocket science. However, there are some gaps in this straightforward documentation:
- Nowhere did I find any guidance on what the user and passwords challenges are supposed to be computed on (only that they are to be Base64 encoded). This makes it more difficult to properly code a LOGIN implementation.
- The samples they gave look like valid Base64, but according to my quick conversion tests in PowerShell, they aren't. I can't get any of the sample values to match what they should. Again, this means I can't work backwards to get the missing data.
I really hope this is the kind of stuff they're going to fix between this release and the final release, because without it, this documentation isn't nearly as useful as it could be. Some would even accuse it of being provided merely to give the appearance of interoperability while still keeping enough implementation details close to the chest to keep it from really happening. I, however, subscribe to the philosophy that one should never initially ascribe to malice what can be explained through other possibilities -- and I've done enough work on these sorts of projects to know that getting the right level of detail in a document like this is far from a no-brainer, especially if you're dealing with contractors or are having to generate the documentation after the fact. (I don't know that either of these possibilities are involved, but I'm guessing.)
Section 3: What's Missing
There are three obvious protocols missing in all of the above: MAPI, MAPI over RPC over HTTP, and Exchange ActiveSync. I can hear the screams now...but this is where I go back to the point that Microsoft still makes money from intellectual property. Microsoft's Web site offers a searchable IP Catalog that shows you exactly which protocols they offer for a licensing fee, and both MAPI (aka the Outlook Exchange Transport Protocol) and Exchange ActiveSync are on it, as well as several other important protocols for Unified Communications. Microsoft is under no obligation to make every single protocol available for free -- but the fact that they're finding value in doing it with the above protocols is pretty cool and interesting. [3]
[1] If the watermark bugs you, try seeing if your PDF client will allow you to view or print the document without annotations. Using Foxit Reader, I was able to make the watermark go away and actually read some of the text it obscured.
[2] SMTP Protocol? Seriously? Is that like PIN number or ATM machine? Attention, Microsoft technical writers: P stands for Protocol.
[3] You're free to speculate on what value they get, but not here, please. That's another religious discussion.