> As for Put-Delete, it may be possible to realize that as event

The OBEX_CMD_DELETE seems more useful. However, since all packets would need to be read before the operation can be determined to be a Put-Delete, I assume this would be a special command that is only sent for OBEX_EV_REQ and OBEX_EV_REQDONE events, and would appear as an OBEX_CMD_PUT when the OBEX_EV_REQHINT and OBEX_EV_REQCHECK events arrive. This change in commands could be quite confusing.

If there were flags that were set during the parsing of the headers, the programmer could check these flags at the end of the Put operation. For example, there could be flags like this:

    #define OBEX_FL_PUT_NO_BODY
    #define OBEX_FL_PUT_EMPTY_BODY        /* not really necessary, just for consistency */

And when an OBEX_EV_REQ is received for a Put operation, the programmer can check the flags that have been or'd together by calling OBEX_ObjectGetPutFlags(). I think this would be more specific and easier to handle than handling extra events such as OBEX_EV_BODYMISSING.

> That makes the Create-Empty pretty easy to implement on both client and server
> without any(?) changes (don't check the length, though).

Do you mean it can be implemented by checking that a Put did not contain any body data? I understand it can be implemented that way, but if the body data is of zero length, I can't distinguish between an operation that did not contain any body headers (Delete) and an operation that had an empty end-of-body header and no body header (Create).