Home / Function/ parseBodyAttributesStandard() — netty Function Reference

parseBodyAttributesStandard() — netty Function Reference

Architecture documentation for the parseBodyAttributesStandard() function in HttpPostStandardRequestDecoder.java from the netty codebase.

Function java ProtocolCodecs HTTP calls 3 called by 1

Entity Profile

Dependency Diagram

graph TD
  47cf8780_9b26_3d2c_c197_23d4789457b4["parseBodyAttributesStandard()"]
  9a5a01b4_1d50_03ee_e135_2164d7bf32cb["HttpPostStandardRequestDecoder"]
  47cf8780_9b26_3d2c_c197_23d4789457b4 -->|defined in| 9a5a01b4_1d50_03ee_e135_2164d7bf32cb
  a333b733_1885_6dca_feab_aaae770038b8["parseBodyAttributes()"]
  a333b733_1885_6dca_feab_aaae770038b8 -->|calls| 47cf8780_9b26_3d2c_c197_23d4789457b4
  7c4df041_0e76_bfc9_68ff_2f1fff09f22b["hasFormBody()"]
  47cf8780_9b26_3d2c_c197_23d4789457b4 -->|calls| 7c4df041_0e76_bfc9_68ff_2f1fff09f22b
  c71d2c6b_810f_0117_65ca_127d4b53887d["addHttpData()"]
  47cf8780_9b26_3d2c_c197_23d4789457b4 -->|calls| c71d2c6b_810f_0117_65ca_127d4b53887d
  27ed40dc_380e_8a3b_3226_377c2a135fa9["setFinalBuffer()"]
  47cf8780_9b26_3d2c_c197_23d4789457b4 -->|calls| 27ed40dc_380e_8a3b_3226_377c2a135fa9
  style 47cf8780_9b26_3d2c_c197_23d4789457b4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostStandardRequestDecoder.java lines 453–558

    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 == '&' ||
                            (isLastChunk && !undecodedChunk.isReadable() && hasFormBody())) { // special empty FIELD
                        currentStatus = MultiPartStatus.DISPOSITION;
                        ampersandpos = read == '&' ? currentpos - 1 : currentpos;
                        String key = decodeAttribute(
                                undecodedChunk.toString(firstpos, ampersandpos - firstpos, charset), charset);
                        // Some weird request bodies start with an '&' character, eg: &name=J&age=17.
                        // In that case, key would be "", will get exception:
                        // java.lang.IllegalArgumentException: Param 'name' must not be empty;
                        // Just check and skip empty key.
                        if (!key.isEmpty()) {
                            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.retainedSlice(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.retainedSlice(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.retainedSlice(firstpos, ampersandpos - firstpos));
                        firstpos = currentpos;
                        contRead = false;
                    }
                    break;
                default:
                    // just stop
                    contRead = false;
                }
            }
            if (isLastChunk && currentAttribute != null) {
                // special case

Subdomains

Frequently Asked Questions

What does parseBodyAttributesStandard() do?
parseBodyAttributesStandard() is a function in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostStandardRequestDecoder.java.
Where is parseBodyAttributesStandard() defined?
parseBodyAttributesStandard() is defined in codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostStandardRequestDecoder.java at line 453.
What does parseBodyAttributesStandard() call?
parseBodyAttributesStandard() calls 3 function(s): addHttpData, hasFormBody, setFinalBuffer.
What calls parseBodyAttributesStandard()?
parseBodyAttributesStandard() is called by 1 function(s): parseBodyAttributes.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free