Changes:

3.0.1
- Decode not only the header if the status is not OK.
- Fixed typo in sendGenerickNack.
- Replace jCharset due to incompatible GNU GPL license.
- Update several Maven dependencies.

3.0.0
- Require Java 8 as minimum.
- Implement all SMPP 5.0 requests, optional parameters, etc.
- Support for SMPP 3.3
- Fix first message immediately after outbind.
- Use SubmitSmResult instead of MessageId for submit_sm response handling.
- Remove obsolete classes.
- Remove log4j dependency and use slf4j-simple in examples.
- Set the log level of enquire_link messages to trace.
- Add protocol identifier factories.
- Update dependency Slf4j to 1.7.36.

2.3.11
- Also set the socket timeout for server sessions for enquiry link timer.
- Removed not used parameter from getTimeout method.
- Fixed typo in method name of convertBytesToHexString.
- Rewrote concatenation example, including 16-bit reference numbering.
- Added jCharset dependency to examples.
- Added convertByteToHexString to print hex string for single byte.
- Added UCS-2 class to verify Unicode characters are inside BMP Unicode for UCS-2.
- Update Maven dependencies.
- Update Apache Commons Codec dependency to 1.15.
- Renamed sendSubmiMulti to sendSubmitMulti.
- Fix all JavaDoc warnings and errors and generate JavaDoc jars.
- Log send and received PDU's at debug log level. Remove the space to condense the output.

2.3.10
- Implement queue capacity with default 100 include throttle response, handle bound state inside the handler of the bind request.
- Fix decompose of replace_sm PDU.
- Extend the Connection interface to show all local and remote socket addresses and ports.
- Send correct response when request is received.
- Fix the decode of the replace_sm.

2.3.9
- Ignore the PDU body in the handling of submit_multi_resp with non-zero command status.
- Clearify the log in submit_multi_sm example.
- Update JUnit dependency to 4.13.
- Optimize OctetUtil and add extra unit tests.
- Add SSL connection factories and examples.
- Implement additional request handlers in StressClient.

2.3.8
- Update dependency Slf4j to 1.7.30.
- Update dependency commons-codec to 1.14
- Always use placeholders instead of string concatenation for log state.
- AbstractSMPPOperation: Delete pendingResponse field, which is never r.
- DefaultComposer#submitMulti: Fix InvalidNumberOfDestinationsException.
- DefaultDecomposer#submitMulti: Remove check which is always false.
- Add unit test for deliver_sm with optional parameters.
- Add test for receipted message id optional parameter.
- DefaultComposer#submitMulti: Fix InvalidNumberOfDestinationsException message.
- AbstractSession#executeSendCommand: Remove "Tomas: " prefix of info log statement.
- Always use placeholders instead of string concatenation for log statements.
- DefaultComposer#submitMulti: Fix InvalidNumberOfDestinationsException message.
- DefaultDecomposer#submitMulti: Remove check which is always false.
- Fix unused arguments passed to String#format and Logger#info.
- StrictBufferedInputStream#read: Methods overriding synchronized methods should be synchronized, otherwise the thread-safety of the subclass may be broken.
- Avoid comparing boxed primitive values using the == operator.
- Avoid NullPointerException in equals methods if receiver field is null but argument field is not null.
- Improve grammar of bind response timeout exception message.
- Fix Travis CI build by using openjdk8 and openjdk11 (instead of no the longer available openjdk7, oraclejdk8 and oraclejdk9 JDKs).
- Improve grammar of bind response timeout exception message.
- Uniformly use "session" as identifier for sessions in logging and exception messages.
- Uniformly use "sequence_number" as identifier for sequence numbers in logging and exception messages.

2.3.7
- Specify maven-surefire-plugin version to fix maven warning about non-repeatable builds.
- Do not throw exception when socket is closed, handle EOFExceptions for server and lower log level.
- Fixes IllegalArgumentException in BoundSessionStateListener.onStateChange (issue #89) for Java 9 and later.
- Also change the order of ThreadPoolExecutor adjustments to run on Java 9 or later when increasing the PDU processor degree.
- Update dependency commons-codec to 1.11.

2.3.6
- Add descriptions to negative response exceptions.
- Added custom delivery receipt examples
- Fix NPE in DeliveryReceipt constructor when date was blank
- Removed unused code
- Fix typo in composeSmeManualAcknowledgment method name

2.3.5
- Rewrote the GSM 03.38 class
- Don't check explicitly the sequence 1, but the session state
- Add custom delivery receipt stripper

2.3.4
- Removed synchronized from close to prevent deadlock
- When stopping the enquire_link sender, only stop when still alive
- Use slf4j-simple in test case, instead of log4j and System.Out
- Improve the SMPP server simulator example

2.3.3
- Change the close of session method, to fix deadlock in Apache Camel SMPP component

2.3.2
- Process optional seconds in delivery receipt
- Change log level for not recognized optional parameter
- Allow replace_sm in state OUTBOUND_TRX (as it is allowed in SMPP 5.0)
- Add ENROUTE in DeliveryReceiptState enum
- Add SCHEDULED and SKIPPED (SMPP 5.0) message_state

2.3.1
- Allow replace_sm for state OUTBOUND_TRX

2.3.0
- Add outbind processing

2.2.4
- Fixed some logging
- Add PriorityFlag enum
- Add SSL connection factory implementation
- Fixed SMSCDeliveryReceipt.SUCCESS to FAILURE
- Fix RelativeTimeFormatter test
- Multiple lexical and code improvements

2.2.3
- Use StringBuilder instead of StringBuffer
- Use OctetString for unknown OptionalParameter

2.2.2
- Fixed some logging
- Added SMPP 5.0 message states
- Fixed NullPointerException when OptionaParameters are empty in a BindResp
- Fixed invalid command length (<4) throws an IndexOutOfBoundsException
- Added RelativeTimeFormatter

2.2.1
- Fix examples
- Use StrictBufferedInputStream for better performance
- Provide source for onAcceptDataSm

2.2.0
- New DataCoding API.
  Removed the old class (since I could not make the change backwards compatible)
  Added some new classes instead:
  1. DataCodings
  2. DataCoding (GeneralDataCoding, MessageWaitingDataCoding, SimpleDataCoding, RawDataCoding)
- Expose remote InetAddress on server side API via SMPPServerSession
  Add new method: InetAddress SMPPServerSession#getInetAddress()
- Ensure command execution is in valid state. Checking done on local side (remote side also does the checking)
- Make Command and its subclasses serializable

2.1.0
- set connection timeout when binding
- provide source (the session) for onAcceptDataSm
- use StrictBufferedInputStream

2.0.1
- Bug fix, MessageReceiverListener should be subclass of GenericMessageReceiverListener

2.0 beta 6
- Change the max length of short message to 254, referring to SMPP 3.4
  Previously using 255 (taken from SMPP 5.0)

2.0 beta 5
- Bug fix for type on OptionalParameters class
- Update the SessionState way to return the value from:
  1. isBound()
  2. isTransmittable()
  3. isReceiveable()
- Add examples for auto-reconnect gateway (found in the org.jsmpp.examples.gateway package)
- Fix the destination addresses on SMPPSession#submitMultiple
  Some classes and interfaces created to support the bug fixes.
- Fix the date parsing on delivery receipt
- Referring to Appendix C of SMPP 3.4 for year parsing rule

2.0 beta 4
- Modify Optional Parameter API (currently for TLV related to message 
  concatenation case)
- Add ServerResponseDeliveryListener (listener to receive success or failure 
  event of submit_sm_resp/submit_multi_resp delivery)
- Change license from LGPL to "Apache License, Version 2.0"
- Add license notice to every source file

2.0 beta 3
- Add SMPP Server component
- Add Optional Parameter support (contribution from mikko.koponen@gmail.com)
- Handling PDU processing concurrently (performance improvement)
- Add data_sm support
- Add cancel_sm support
- Add replace_sm support
- Add alert_notification support
- Add CapacityPolicy to PDUByteBuffer (performance improvement, minimize ByteArray 
  creation)
