private void parseBodyAttributesStandard() {
        int firstpos = undecodedChunk.readerIndex();
        int currentpos = firstpos;
        int equalpos;
        int ampersandpos;
        if (currentStatus == MultiPartStatus.NOTSTARTED) {
            currentStatus = MultiPartStatus.DISPOSITION;
        }
        boolean contRead = true;
        try {
            while (undecodedChunk.isReadable() && contRead) {
                char read = (char) undecodedChunk.readUnsignedByte();
                currentpos++;
                switch (currentStatus) {
                case DISPOSITION:// search '='
                    if (read == '=') {
                        currentStatus = MultiPartStatus.FIELD;
                        equalpos = currentpos - 1;
                        String key = decodeAttribute(undecodedChunk.toString(firstpos, equalpos - firstpos, charset),
                                charset);
                        currentAttribute = factory.createAttribute(request, key);
                        firstpos = currentpos;
                    } else if (read == '&') { // special empty FIELD
                        currentStatus = MultiPartStatus.DISPOSITION;
                        ampersandpos = currentpos - 1;
                        String key = decodeAttribute(
                                undecodedChunk.toString(firstpos, ampersandpos - firstpos, charset), charset);
                        currentAttribute = factory.createAttribute(request, key);
                        currentAttribute.setValue(""); // empty
                        addHttpData(currentAttribute);
                        currentAttribute = null;
                        firstpos = currentpos;
                        contRead = true;
                    }
                    break;
                case FIELD:// search '&' or end of line
                    if (read == '&') {
                        currentStatus = MultiPartStatus.DISPOSITION;
                        ampersandpos = currentpos - 1;
                        setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                        firstpos = currentpos;
                        contRead = true;
                    } else if (read == HttpConstants.CR) {
                        if (undecodedChunk.isReadable()) {
                            read = (char) undecodedChunk.readUnsignedByte();
                            currentpos++;
                            if (read == HttpConstants.LF) {
                                currentStatus = MultiPartStatus.PREEPILOGUE;
                                ampersandpos = currentpos - 2;
                                setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                                firstpos = currentpos;
                                contRead = false;
                            } else {
                                // Error
                                throw new ErrorDataDecoderException("Bad end of line");
                            }
                        } else {
                            currentpos--;
                        }
                    } else if (read == HttpConstants.LF) {
                        currentStatus = MultiPartStatus.PREEPILOGUE;
                        ampersandpos = currentpos - 1;
                        setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                        firstpos = currentpos;
                        contRead = false;
                    }
                    break;
                default:
                    // just stop
                    contRead = false;
                }
            }
            if (isLastChunk && currentAttribute != null) {
                // special case
                ampersandpos = currentpos;
                if (ampersandpos > firstpos) {
                    setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                } else if (!currentAttribute.isCompleted()) {
                    setFinalBuffer(EMPTY_BUFFER);
                }
                firstpos = currentpos;
                currentStatus = MultiPartStatus.EPILOGUE;
            } else if (contRead && currentAttribute != null && currentStatus == MultiPartStatus.FIELD) {
                // reset index except if to continue in case of FIELD getStatus
                currentAttribute.addContent(undecodedChunk.copy(firstpos, currentpos - firstpos),
                                            false);
                firstpos = currentpos;
            }
            undecodedChunk.readerIndex(firstpos);
        } catch (ErrorDataDecoderException e) {
            // error while decoding
            undecodedChunk.readerIndex(firstpos);
            throw e;
        } catch (IOException e) {
            // error while decoding
            undecodedChunk.readerIndex(firstpos);
            throw new ErrorDataDecoderException(e);
        }
    }
private void parseBodyAttributesStandard ( ) { int firstpos = undecodedChunk . readerIndex ( ) ; int currentpos = firstpos ; int equalpos ; int ampersandpos ; if ( currentStatus == MultiPartStatus . NOTSTARTED ) { currentStatus = MultiPartStatus . DISPOSITION ; } boolean contRead = true ; try { while ( undecodedChunk . isReadable ( ) && contRead ) { char read = ( char ) undecodedChunk . readUnsignedByte ( ) ; currentpos ++ ; switch ( currentStatus ) { case DISPOSITION : if ( read == '=' ) { currentStatus = MultiPartStatus . FIELD ; equalpos = currentpos - 1 ; String key = decodeAttribute ( undecodedChunk . toString ( firstpos , equalpos - firstpos , charset ) , charset ) ; currentAttribute = factory . createAttribute ( request , key ) ; firstpos = currentpos ; } else if ( read == '&' ) { currentStatus = MultiPartStatus . DISPOSITION ; ampersandpos = currentpos - 1 ; String key = decodeAttribute ( undecodedChunk . toString ( firstpos , ampersandpos - firstpos , charset ) , charset ) ; currentAttribute = factory . createAttribute ( request , key ) ; currentAttribute . setValue ( "" ) ; addHttpData ( currentAttribute ) ; currentAttribute = null ; firstpos = currentpos ; contRead = true ; } break ; case FIELD : if ( read == '&' ) { currentStatus = MultiPartStatus . DISPOSITION ; ampersandpos = currentpos - 1 ; setFinalBuffer ( undecodedChunk . copy ( firstpos , ampersandpos - firstpos ) ) ; firstpos = currentpos ; contRead = true ; } else if ( read == HttpConstants . CR ) { if ( undecodedChunk . isReadable ( ) ) { read = ( char ) undecodedChunk . readUnsignedByte ( ) ; currentpos ++ ; if ( read == HttpConstants . LF ) { currentStatus = MultiPartStatus . PREEPILOGUE ; ampersandpos = currentpos - 2 ; setFinalBuffer ( undecodedChunk . copy ( firstpos , ampersandpos - firstpos ) ) ; firstpos = currentpos ; contRead = false ; } else { throw new ErrorDataDecoderException ( "Bad end of line" ) ; } } else { currentpos -- ; } } else if ( read == HttpConstants . LF ) { currentStatus = MultiPartStatus . PREEPILOGUE ; ampersandpos = currentpos - 1 ; setFinalBuffer ( undecodedChunk . copy ( firstpos , ampersandpos - firstpos ) ) ; firstpos = currentpos ; contRead = false ; } break ; default : contRead = false ; } } if ( isLastChunk && currentAttribute != null ) { ampersandpos = currentpos ; if ( ampersandpos > firstpos ) { setFinalBuffer ( undecodedChunk . copy ( firstpos , ampersandpos - firstpos ) ) ; } else if ( ! currentAttribute . isCompleted ( ) ) { setFinalBuffer ( EMPTY_BUFFER ) ; } firstpos = currentpos ; currentStatus = MultiPartStatus . EPILOGUE ; } else if ( contRead && currentAttribute != null && currentStatus == MultiPartStatus . FIELD ) { currentAttribute . addContent ( undecodedChunk . copy ( firstpos , currentpos - firstpos ) , false ) ; firstpos = currentpos ; } undecodedChunk . readerIndex ( firstpos ) ; } catch ( ErrorDataDecoderException e ) { undecodedChunk . readerIndex ( firstpos ) ; throw e ; } catch ( IOException e ) { undecodedChunk . readerIndex ( firstpos ) ; throw new ErrorDataDecoderException ( e ) ; } }
This getMethod fill the map and list with as much Attribute as possible from
Body in not Multipart mode.

@throws ErrorDataDecoderException
if there is a problem with the charset decoding or other
errors