case ClickatellException.ERROR_AUTH_FAILED:
    private void sendConcatMessage(SmsConcatMessage theMsg, SmsAddress theDestination, SmsAddress theSender)        throws SmsException    {        String requestString;        String udStr;        String udhStr;        byte udhData[];        if (theDestination.getTypeOfNumber() == SmsConstants.TON_ALPHANUMERIC)        {            throw new SmsException("Cannot sent SMS to an ALPHANUMERIC address");        }        if (mySessionId == null)        {            throw new SmsException("Must connect before sending");        }        //        // Generate request URL        //        if (theMsg.getUserDataHeaders() == null)        {            //            // Message without UDH            //            switch (SmsDcsUtil.getAlphabet(theMsg.getDataCodingScheme()))            {            case SmsConstants.ALPHABET_8BIT:                throw new SmsException("Clickatell API cannot send 8 bit encoded messages without UDH");            case SmsConstants.ALPHABET_UCS2:                udStr = StringUtil.bytesToHexString(theMsg.getUserData());                requestString = MessageFormat.format(                    "http://api.clickatell.com/http/sendmsg?session_id={0}&concat=3&to={1}&from={2}&unicode=1&text={3}",                    new Object[] { mySessionId, theDestination.getAddress(), theSender.getAddress(), udStr });                break;            case SmsConstants.ALPHABET_GSM:                String msg = SmsPduUtil.readSeptets(theMsg.getUserData(), theMsg.getUserDataLength());                msg = URLEncoder.encode(msg);                requestString = MessageFormat.format(                    "http://api.clickatell.com/http/sendmsg?session_id={0}&concat=3&to={1}&from={2}&text={3}",                    new Object[] { mySessionId, theDestination.getAddress(), theSender.getAddress(), msg });                break;            default:                throw new SmsException("Unsupported data coding scheme");            }        }        else        {            //            // Message Contains UDH            //            switch (SmsDcsUtil.getAlphabet(theMsg.getDataCodingScheme()))            {            case SmsConstants.ALPHABET_8BIT:                udStr = StringUtil.bytesToHexString(theMsg.getUserData());                udhData = theMsg.getUserDataHeaders();                udhStr = StringUtil.bytesToHexString(udhData);                requestString = MessageFormat.format(                    "http://api.clickatell.com/http/sendmsg?session_id={0}&concat=3&to={1}&from={2}&udh={3}&text={4}",                    new Object[] { mySessionId, theDestination.getAddress(), theSender.getAddress(), udhStr, udStr });                break;            case SmsConstants.ALPHABET_UCS2:                udStr = StringUtil.bytesToHexString(theMsg.getUserData());                udhData = theMsg.getUserDataHeaders();                udhStr = StringUtil.bytesToHexString(udhData);                requestString = MessageFormat.format(                    "http://api.clickatell.com/http/sendmsg?session_id={0}&concat=3&to={1}&from={2}&udh={3}&unicode=1&text={4}",                    new Object[] { mySessionId, theDestination.getAddress(), theSender.getAddress(), udhStr, udStr });                break;            case SmsConstants.ALPHABET_GSM:                throw new SmsException("Clickatell API cannot send 7 bit encoded messages with UDH");            default:                throw new SmsException("Unsupported data coding scheme");            }        }        // CLASS_0 message?        if (SmsDcsUtil.getMessageClass(theMsg.getDataCodingScheme()) == SmsConstants.MSG_CLASS_0)        {            requestString += "&msg_type=SMS_FLASH";        }        // myLog.debug("Request -> " + requestString);        // Send request to clickatell        try        {            sendRequest(requestString);        }        catch (ClickatellException ex)        {            switch (ex.getErrId())            {            case ClickatellException.ERROR_SESSION_ID_EXPIRED:                // Try to get a new session id                connect();                // Retry the request...                // OK, this is a bit ugly...                try                {                    sendRequest(requestString);                }                catch (ClickatellException ex2)                {                    throw new SmsException(ex2.getMessage());                }                break;            case ClickatellException.ERROR_UNKNOWN:            default:                throw new SmsException(ex.getMessage());            }        }    }