/* Authenticate-Request ::= SEQUENCE { pseudoRandomNumber  Unsigned32, excpectedInvokeID  Unsigned8 OPTIONAL, operatorName  CharacterString OPTIONAL, operatorPassword  CharacterString (SIZE(1..20)) OPTIONAL, startEncypheredSession  BOOLEAN OPTIONAL }  */
static guint fAuthenticateRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
/* Authenticate-Request ::= SEQUENCE { pseudoRandomNumber  Unsigned32, excpectedInvokeID  Unsigned8 OPTIONAL, operatorName  CharacterString OPTIONAL, operatorPassword  CharacterString (SIZE(1..20)) OPTIONAL, startEncypheredSession  BOOLEAN OPTIONAL }  */
static guint fAuthenticateRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
    guint lastoffset = 0;
    while (tvb_reported_length_remaining(tvb, offset) > 0) {
        lastoffset = offset;
        switch (fTagNo(tvb, offset)) {
        case 0:
            offset = fUnsignedTag(tvb, pinfo, tree, offset, "pseudo Random Number: ");
            break;
        case 1:
            proto_tree_add_item(tree, hf_bacapp_invoke_id, tvb, offset++, 1, ENC_BIG_ENDIAN);
            break;
        case 2:
            offset = fCharacterString(tvb, pinfo, tree, offset, "operator Name: ");
            break;
        case 3:
            offset = fCharacterString(tvb, pinfo, tree, offset, "operator Password: ");
            break;
        case 4:
            offset = fBooleanTag(tvb, pinfo, tree, offset, "start Encyphered Session: ");
            break;
        default:
            return offset;
        }
        if (offset == lastoffset) break;
    }
    return offset;
}