#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##
    /*
     * TODO:231:M: |-> copy $node data.
     * TODO:231:M: |   |-> get address type from your context pointer.
     */
    int  addressType = -1;
    size_t actual_size = 0;

    return MFD_SKIP; /* TODO:235:M: |-> Remove SKIP once you've set $node data */

    switch (addressType) {
    case INETADDRESSTYPE_UNKNOWN:
    /*
     * An unknown address type. This value MUST  be used if the value
     * of the InetAddress object is a zero-length string. It may also be
     * used to indicate an IP address which is not in one of the formats
     * defined below.
     */
        actual_size = ${m2c_ctx_rhs};
        break;

    case INETADDRESSTYPE_IPV4:
    /*
     * Represents an IPv4 network address:
     *      octets   contents         encoding
     *       1-4     IPv4 address     network-byte order
     */
        actual_size = 4;
        break;

    case INETADDRESSTYPE_IPV6:
    /*
     * Represents an IPv6 network address:
     *
     *      octets   contents         encoding
     *       1-16    IPv6 address     network-byte order
     */
        actual_size = 16;
        break;

    case INETADDRESSTYPE_IPV4Z:
    /*
     * Represents a non-global IPv4 network address together
     *    with its zone index:
     *
     *      octets   contents         encoding
     *       1-4     IPv4 address     network-byte order
     *       5-8     zone index       network-byte order
     */
        actual_size = 8;
        break;

    case INETADDRESSTYPE_IPV6Z:
    /*
     * Represents a non-global IPv6 network address together
     *    with its zone index:
     *
     *      octets   contents         encoding
     *       1-16    IPv6 address     network-byte order
     *      17-20    zone index       network-byte order
     */
        actual_size = 20;
        break;

    case INETADDRESSTYPE_DNS:
    /*
     * Represents a DNS domain name. The name SHOULD be fully
     *    qualified whenever possible.
     */
        actual_size = ${m2c_ctx_rhs};
        break;

    default:
        snmp_log(LOG_ERR, "unknown InetAddressType %d for $node\n",
                 addressType);
        return SNMP_ERR_GENERR;
    }

    if ( actual_size > ${m2c_ctx_lhs} ) {
        snmp_log(LOG_ERR, "actual size %d too big for $node\n",
                 addressType);
        return SNMP_ERR_GENERR;
    }

    memcpy( ${m2c_ctx_lh}, ${m2c_ctx_rh}, actual_size);
    ${m2c_ctx_lhs} = actual_size;
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
