code: private String sendBind(BindType bindType, String systemId,
                            String password, String systemType,
                            InterfaceVersion interfaceVersion, TypeOfNumber addrTon,
                            NumberingPlanIndicator addrNpi, String addressRange, long timeout)
        throws PDUException, ResponseTimeoutException,
        InvalidResponseException, NegativeResponseException, IOException {
  
      BindCommandTask task = new BindCommandTask(pduSender(), bindType,
          systemId, password, systemType, interfaceVersion, addrTon,
          addrNpi, addressRange);
  
      BindResp resp = (BindResp)executeSendCommand(task, timeout);
      OptionalParameter.Sc_interface_version scVersion = resp.getOptionalParameter(Sc_interface_version.class);
      if(scVersion != null) {
        logger.debug("Other side reports SMPP interface version {}", scVersion);
      }
  
      logger.info("Bind response systemId '{}'", resp.getSystemId());
      return resp.getSystemId();
    }
docs: Sending bind.
  
  @param bindType is the bind type.
  @param systemId is the system id.
  @param password is the password.
  @param systemType is the system type.
  @param interfaceVersion is the interface version.
  @param addrTon is the address TON.
  @param addrNpi is the address NPI.
  @param addressRange is the address range.
  @param timeout is the max time waiting for bind response.
  @return SMSC system id.
  @throws PDUException if we enter invalid bind parameter(s).
  @throws ResponseTimeoutException if there is no valid response after defined millisecond.
  @throws InvalidResponseException if there is invalid response found.
  @throws NegativeResponseException if we receive negative response.
  @throws IOException if there is an IO error occur.