Provides classes and interfaces for the SNMP message processing.

The `org.snmp4j.mp` classes provide services to process SNMP messages. The services provided are defined in the `MessageProcessingModel` interface and include the following:

- Prepare data elements from an incoming SNMP message as described in RFC3412 §7.2.
- Prepare a response message as defined in RFC3412 §7.1.
- Prepare an outgoing message as defined in RFC3412 §7.1.

This interface is implemented by the message processing model classes for the SNMP versions 1, v2c, and v3: `MPv1`, `MPv2c`, and `MPv3`.

The `MessageDispatcherImpl` chooses which message processing model it uses to process an outgoing or incoming SNMP message based on the SNMP version of the message. The SNMP version is either extracted from the message header (incoming message) or from the `Target` instance associated with the outgoing PDU (ougoing message).

To be able to match requests and responses SNMP uses request IDs. Since request IDs are created by the command generator, the request IDs are unique within such a command generator only. SNMP4J therefore has to abstract from request IDs and uses `PduHandle` instances instead.

If a `PDU` is processed for sending by the SNMP4J `MessageDispatcherImpl` and the PDU's request ID is set to 0, then a SNMP4J application wide unique ID is generated and set as request ID of the supplied PDU. In any case, the PDU's request ID will be used as transaction ID of the outgoing message. The transaction ID identifies a messages `PduHandle`.

If a `PDU` is received by the SNMP4J `MessageDispatcherImpl` a unique transaction ID is generated so that command responders as well as the message processing model can match requests and responses.

The following UML class diagram shows the most important classes of the `org.snmp4j.mp` package and their relationships (relationships to other packages are not shown):