--On Tuesday, 02 July, 2002 21:57 -0700 ned.freed@mrochek.com wrote: >> Is this complex? Sure it is. But, if one is going to end up >> with least common denominator, the limiting (and probably >> common) case is to just send that and forget about >> capabilities negotiation. Or, if the number of useful >> differentiated formats is _very_ small, just sending both >> with multipart/alternative might turn out to be easier and >> cheaper than messing around trying to find feature >> intersections. There isn't nearly enough information in the >> spec for me to be able to guess if that would be the case. >> There shouldn't be if this is a general purpose, >> multiple-recipient, capabilities negotiation mechanism but, if >> it is, I don't see much hope other than dealing with the >> complexity (or deciding we don't need something that general). > > I guess I remain to be convinced either way: That multiple > versions schemes are necessary or that a single version > schemes are sufficient. I'd guess there's a sweet spot > somewhere in there. Unfortunately in this particular case the > location of that spot drives a bunch of design choices. I agree completely. >> Ignoring all of the relay issues, which I still don't think >> the document addresses, > > I must say I don't see any of this as particularly useful in a > relay scenario. I don't either. My concern is that it is fairly poorly defined in relay scenarios -- partially, I assume, because its utility is, at best, unclear -- but that the document says it applies to relays. That leaves us in what may be an "almost nothing but edge cases" situation, which is typically a bad way to be doing standards. If we can't see enough utility for relay situations to justify working out the cases --and I can't-- then why not ban the relay cases until and unless someone demonstrates that they are relevant is does the work. >> and the fallback to fax while claiming it >> isn't fax-specific, etc., I'd partition the above a bit >> differently. I'd guess the dominant approach (especially if >> one generalizes beyond fax) is going to be greatest (most >> capable) common denominator above a threshold. I.e., if >> there is some minimal, default, capability, and some >> recipients can support only that (e.g., they don't handle >> option negotiation at all), then two messages are going to be >> sent: one corresponding to the common feature set of the more >> capable recipients and one for the minimal/default feature >> set. Everyone gets downgraded to the minimum/default because >> one recipient isn't highly capable just doesn't feel >> commercially viable to me, while assuming a mix of >> high-function and low-function hosts does. > > I certainly agree with the common denominator above a > threshhold. But given that a single recipient per destination > is likely to be a very common case, I'm less sure that simpler > approaches won't be commercially viable. Or perhaps > capabilities will be used to reduce the number of variants > sent with multipart/alternative. Makes sense. Makes much more sense if relaying is banned. Otherwise, "one recipient per destination" slides over really easily into "send everything to her, and let her deal with splitting the stuff up by destinations and capabilities", and that introduces all the complexity. That still leaves "one virtual fax, one recipient" (and, by definition, one destination) as a probably-very common case, given real-world fax behavior today. Also given that behavior, that case is certainly commercially viable. But this is awfully complex for that case: we could generalize it into a single command or capabilities statement. >> Other >> combinations are possible, but my sense of reality says they >> would rapidly turn into message-copy-per-recipient rather than >> strange combinatorics on feature sets. > > It may indeed turn out that per-recipient message copy is the > right way to finesse the feature set combination issues. Of course, that is another generalization of "one virtual fax, one recipient": one message, one recipient, one set of capabilities. And a vastly simplified protocol. >> But, in that "two message" case, one really doesn't want 5yz >> codes coming back from the server in response to a RCPT TO. >> If the "one digit" rule is observed, there is no way to >> differentiate between "bad mailbox" and "bad parameter". If >> it is not, and three digits are processed, the server cannot >> effectively differentiate between a bad parameter to CONNEG >> and one to some other option by the code -- the reply string >> has to be parsed, and that leads to bad trouble. So I would >> think that a batch of capability-determining commands before >> the first RCPT one would be a better idea, complexity >> notwithstanding. > > I'm not sure I get what you're driving at here. The client gets > to choose whether the server treats a recipient with unknown > capabilities as an error or simply by indicating as much. Suppose the client sends RCPT TO:<foo@bar.baz> CONNEG=REQUIRED;bazoption=REQUIRED and gets back 504 option parameter stinks - REQUIRED or 504 bad parameter - CONNEG REQUIRED in the one-digit case, it can't distinguish either one from 500 Never heard of foo in the three-digit case, the first 504 variant doesn't give a clue as to the difference between "don't know the client's capabilities" and "REQUIRED is not a valid parameter for bazoption". The second variant is better, but requires parsing of a string whose format is not precisely specified. To some degree, this is a general problem with multiple ESMTP option-parameter sets, but it seems to be that the CONNEG case is a little worse than average. >> Again, the way to get most of the complexity out of this, IMO, >> is to change the problem. For example, if the server makes >> the determination of the common capability set among all >> recipients and returns it only once (a bit tricky with the >> SMTP model, but not impossible), then the client doesn't have >> to figure out how to intersect whatever comes back, break >> things up into separate messages, etc. But I don't know if >> that would do the job; it certainly doesn't handle a mix of >> high- and low-function recipients in a plausible way. > > I considered proposing this as well, but it seemed to be that > knowledge of what the client can actually do may determine how > differing feature sets are combined. Yes, but what a nightmare. To really get it right may require fairly complete knowledge of what the client can actually do _and_ fairly complete knowledge of what the recipient (not just the receiving server) can actually do. In a better world, that requires an MUA-MUA negotiation, but we don't have any semantics for talking about that (especially in SMTP). Of course, forcing the problem into one receiving MUA no relay would permit getting close without giving all of us a bad headache. But I don't know if that is feasible. What I'm getting fairly sure of is that the present document is rather seriously underspecified for the mind-boggling general case. john