code: public byte[] sendDeliverSm(OutputStream os, int sequenceNumber,
              String serviceType, TypeOfNumber sourceAddrTon,
              NumberingPlanIndicator sourceAddrNpi, String sourceAddr,
              TypeOfNumber destAddrTon, NumberingPlanIndicator destAddrNpi,
              String destinationAddr, ESMClass esmClass, byte protocoId,
              byte priorityFlag, RegisteredDelivery registeredDelivery,
              DataCoding dataCoding, byte[] shortMessage,
              OptionalParameter... optionalParameters) throws PDUStringException,
              IOException {
  
          byte[] b = pduComposer.deliverSm(sequenceNumber, serviceType,
                  sourceAddrTon.value(), sourceAddrNpi.value(), sourceAddr,
                  destAddrTon.value(), destAddrNpi.value(), destinationAddr,
                  esmClass.value(), protocoId, priorityFlag, registeredDelivery
                          .value(), dataCoding.toByte(), shortMessage,
                  optionalParameters);
          writeAndFlush(os, b);
          return b;
      }
docs: /*
  (non-Javadoc)
  
  @see org.jsmpp.PDUSender#sendDeliverSm(java.io.OutputStream, int,
  java.lang.String, org.jsmpp.TypeOfNumber,
  org.jsmpp.NumberingPlanIndicator, java.lang.String,
  org.jsmpp.TypeOfNumber, org.jsmpp.NumberingPlanIndicator,
  java.lang.String, org.jsmpp.bean.ESMClass, byte, byte,
  org.jsmpp.bean.RegisteredDelivery, org.jsmpp.bean.DataCoding,
  byte[], org.jsmpp.bean.OptionalParameter[])