# Description

p≡p for Thunderbird is using the MIME implementation of the p≡p engine. Therefore, when calling decrypt_message() and mime_encode_message() p≡p for Thunderbird transmits most of the data unmodified twice through the socket to the p≡p JSON server adapter. This is a waste of CPU cycles and I/O.

The functionality of the Message Cache mitigates the performance drawback. Instead of transmitting all data twice .longmsg, .longmsg_formatted and the .attachments are cached and not re-transmitted.

# API

## cache_mime_decode_message()

This function has the same arguments as mime_decode_message(). It is a drop-in replacement. This function adds msg as src to the cache using msg.id as key. Hence the delivery of msg.id is mandatory.

## cache_decrypt_message()

This function has the same arguments as decrypt_message(). It is a drop-in replacement. This function uses src and dst from the cache using src.id as key. Hence the delivery of src.id is mandatory.

cache_decrypt_message() does not send back .longmsg, .longmsg_formatted and the .attachments, neither from src nor from dst. All other fields remain unmodified and are transmitted.

## cache_encrypt_message()

This function has the same arguments as encrypt_message(). It is a drop-in replacement. This function uses src and dst from the cache using src.id as key. Hence the delivery of src.id is mandatory.

cache_encrypt_message() does not send back .longmsg, .longmsg_formatted and the .attachments, neither from src nor from dst. All other fields remain unmodified and are transmitted.

## cache_encrypt_message_for_self()

This function has the same arguments as encrypt_message_for_self(). It is a drop-in replacement. This function uses src and dst from the cache using src.id as key. Hence the delivery of src.id is mandatory.

cache_encrypt_message_for_self() does not send back .longmsg, .longmsg_formatted and the .attachments, neither from src nor from dst. All other fields remain unmodified and are transmitted.

## cache_mime_encode_message()

This function has an int parameter followed by the arguments of mime_encode_message(). The first parameter must be 0 if the src field of the cache is to be encoded. It must be 1 if the dst field of the cache is to be encoded. All other parameters do not differ from mime_encode_message().

This function deletes the message from the Message Cache, which is identified by msg.id. Hence the delivery of msg.id is mandatory.

## cache_release(id)

When a call to cache_mime_decode_message() is followed by a call to cache_mime_encode_message() calling cache_release(id) is not necessary. This function is for removing a cache entry in case it was added by cache_mime_decode_message() but no further call to cache_mime_encode_message() will occur.