The internal dlr storage is called "internal" for a reason I dont
know,
I assume the developers called it in such way because it keeps
the internal Kannel statuses of the message in the
internal Kannel queue, as SENT, FAILED, QUEUED.
Quick overview for you.
When a message is submitted to an SMSC that you have asked for a DLR
on, the details of the message need to be saved (i.e. the URL its
going to call, the mask, some way of identifying the specific
message). When the SMSC sends a DLR back to kannel, all the saved
messages are checked to see which one the DLR matches (if any), then
the mask is checked and the URL called if required.
Once a final DLR is received, such as delivered the message details
are removed.
Now the default internal dlr storage is done in memory and has no
persistence (i.e. when you restart kannel it looses all the saved
messages, which means that when a DLR comes in from a previous
message you won't get your URL called). There are other DLR storage
schemes using databases such as PostgreSQL or MySQL etc, which
obviously are not lost when kannel restarts.
Hope that helps.
Ben