On 04.10.2012 23:14, Christopher Schultz wrote:
Rainer,

On 10/3/12 2:49 PM, Christopher Schultz wrote:
I like the idea of using a macro to compact the code a bit, but in spite
of tcnative's use of macros that don't contain "arguments" for all data
that will be operated on, I prefer to be explicit about mentioning all
data that will be used, like this:

#define TCN_SSL_TEST_OP_SUPPORT(op, option, support) \
   if (op & option) { \
     support |= (op & option); \
   }

...

#ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
     TCN_SSL_TEST_OP_SUPPORT(op, SSL_OP_MICROSOFT_SESS_ID_BUG, support)
#endif

After implementing, testing, and committing this to tcnative-trunk, I
actually think there might be a better way to do it.

Instead of painstakingly examining each bit of the requested op, we
could simply create a bitmask of all supported options and then check
the requested set of bits against that.

For instance, we could use a technique similar to the above to set a
static bitset:

static int supported_ssl_opts = 0;

initialize() {
    ...
#ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
    supported_ssl_opts |= SSL_MICROSOFT_SESS_ID_BUG;
#endif
    ...
}

Then, hasOp becomes:

hasOp(op) {
   return op == (supported_ssl_options & op);
}

That looks good.

If we still want to (and I think we probably should) test for unknown
options in hasOp (to indicate to the user that OpenSSL actually has no
idea what you are talking about -- usually a version-to-low situation),
I'm not sure how to do that.

Wouldn't unknown options result in the same as non-supported ones? That should be OK.

Come to think of it, I'm not sure that my original solution does that,
either: the code will throw an exception if the option isn't supported
rather than returning null. I think I will revert my change and put a
better one in.

What do you think?

Go ahead :)

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to