code: public byte[] sendSubmitSm(OutputStream os, int sequenceNumber,
              String serviceType, TypeOfNumber sourceAddrTon,
              NumberingPlanIndicator sourceAddrNpi, String sourceAddr,
              TypeOfNumber destAddrTon, NumberingPlanIndicator destAddrNpi,
              String destinationAddr, ESMClass esmClass, byte protocoId,
              byte priorityFlag, String scheduleDeliveryTime,
              String validityPeriod, RegisteredDelivery registeredDelivery,
              byte replaceIfPresent, DataCoding dataCoding, byte smDefaultMsgId,
              byte[] shortMessage, OptionalParameter... optionalParameters)
              throws PDUStringException, IOException {
          byte[] b = pduComposer.submitSm(sequenceNumber, serviceType,
                  sourceAddrTon.value(), sourceAddrNpi.value(), sourceAddr,
                  destAddrTon.value(), destAddrNpi.value(), destinationAddr,
                  esmClass.value(), protocoId, priorityFlag,
                  scheduleDeliveryTime, validityPeriod, registeredDelivery
                          .value(), replaceIfPresent, dataCoding.toByte(),
                  smDefaultMsgId, shortMessage, optionalParameters);
          writeAndFlush(os, b);
          return b;
      }
docs: /*
  (non-Javadoc)
  
  @see org.jsmpp.PDUSender#sendSubmitSm(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,
  java.lang.String, java.lang.String,
  org.jsmpp.bean.RegisteredDelivery, byte, org.jsmpp.bean.DataCoding,
  byte, byte[], org.jsmpp.bean.OptionalParameter[])