Search in sources :

Example 6 with ErrorDataDecoderException

use of io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException in project netty by netty.

the class HttpPostStandardRequestDecoder method parseBodyAttributesStandard.

/**
     * 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
     */
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 // search '='
                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 == '&') {
                        // special empty FIELD
                        currentStatus = MultiPartStatus.DISPOSITION;
                        ampersandpos = currentpos - 1;
                        String key = decodeAttribute(undecodedChunk.toString(firstpos, ampersandpos - firstpos, charset), charset);
                        currentAttribute = factory.createAttribute(request, key);
                        // empty
                        currentAttribute.setValue("");
                        addHttpData(currentAttribute);
                        currentAttribute = null;
                        firstpos = currentpos;
                        contRead = true;
                    }
                    break;
                case // search '&' or end of line
                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 {
                                // 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;
            undecodedChunk.readerIndex(firstpos);
            return;
        }
        if (contRead && currentAttribute != null) {
            // reset index except if to continue in case of FIELD getStatus
            if (currentStatus == MultiPartStatus.FIELD) {
                currentAttribute.addContent(undecodedChunk.copy(firstpos, currentpos - firstpos), false);
                firstpos = currentpos;
            }
            undecodedChunk.readerIndex(firstpos);
        } else {
            // end of line or end of block so keep index to last valid position
            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);
    }
}
Also used : IOException(java.io.IOException) ErrorDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException)

Example 7 with ErrorDataDecoderException

use of io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException in project netty by netty.

the class HttpPostStandardRequestDecoder method parseBodyAttributes.

/**
     * 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
     */
private void parseBodyAttributes() {
    SeekAheadOptimize sao;
    try {
        sao = new SeekAheadOptimize(undecodedChunk);
    } catch (SeekAheadNoBackArrayException ignored) {
        parseBodyAttributesStandard();
        return;
    }
    int firstpos = undecodedChunk.readerIndex();
    int currentpos = firstpos;
    int equalpos;
    int ampersandpos;
    if (currentStatus == MultiPartStatus.NOTSTARTED) {
        currentStatus = MultiPartStatus.DISPOSITION;
    }
    boolean contRead = true;
    try {
        loop: while (sao.pos < sao.limit) {
            char read = (char) (sao.bytes[sao.pos++] & 0xFF);
            currentpos++;
            switch(currentStatus) {
                case // search '='
                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 == '&') {
                        // special empty FIELD
                        currentStatus = MultiPartStatus.DISPOSITION;
                        ampersandpos = currentpos - 1;
                        String key = decodeAttribute(undecodedChunk.toString(firstpos, ampersandpos - firstpos, charset), charset);
                        currentAttribute = factory.createAttribute(request, key);
                        // empty
                        currentAttribute.setValue("");
                        addHttpData(currentAttribute);
                        currentAttribute = null;
                        firstpos = currentpos;
                        contRead = true;
                    }
                    break;
                case // search '&' or end of line
                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 (sao.pos < sao.limit) {
                            read = (char) (sao.bytes[sao.pos++] & 0xFF);
                            currentpos++;
                            if (read == HttpConstants.LF) {
                                currentStatus = MultiPartStatus.PREEPILOGUE;
                                ampersandpos = currentpos - 2;
                                sao.setReadPosition(0);
                                setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                                firstpos = currentpos;
                                contRead = false;
                                break loop;
                            } else {
                                // Error
                                sao.setReadPosition(0);
                                throw new ErrorDataDecoderException("Bad end of line");
                            }
                        } else {
                            if (sao.limit > 0) {
                                currentpos--;
                            }
                        }
                    } else if (read == HttpConstants.LF) {
                        currentStatus = MultiPartStatus.PREEPILOGUE;
                        ampersandpos = currentpos - 1;
                        sao.setReadPosition(0);
                        setFinalBuffer(undecodedChunk.copy(firstpos, ampersandpos - firstpos));
                        firstpos = currentpos;
                        contRead = false;
                        break loop;
                    }
                    break;
                default:
                    // just stop
                    sao.setReadPosition(0);
                    contRead = false;
                    break loop;
            }
        }
        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;
            undecodedChunk.readerIndex(firstpos);
            return;
        }
        if (contRead && currentAttribute != null) {
            // reset index except if to continue in case of FIELD getStatus
            if (currentStatus == MultiPartStatus.FIELD) {
                currentAttribute.addContent(undecodedChunk.copy(firstpos, currentpos - firstpos), false);
                firstpos = currentpos;
            }
            undecodedChunk.readerIndex(firstpos);
        } else {
            // end of line or end of block so keep index to last valid position
            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);
    } catch (IllegalArgumentException e) {
        // error while decoding
        undecodedChunk.readerIndex(firstpos);
        throw new ErrorDataDecoderException(e);
    }
}
Also used : SeekAheadOptimize(io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize) SeekAheadNoBackArrayException(io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException) IOException(java.io.IOException) ErrorDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException)

Example 8 with ErrorDataDecoderException

use of io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException in project cloudstack by apache.

the class HttpUploadServerHandler method channelRead0.

@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
    if (msg instanceof HttpRequest) {
        HttpRequest request = this.request = (HttpRequest) msg;
        responseContent.setLength(0);
        if (request.getMethod().equals(HttpMethod.POST)) {
            URI uri = new URI(request.getUri());
            String signature = null;
            String expires = null;
            String metadata = null;
            String hostname = null;
            long contentLength = 0;
            for (Entry<String, String> entry : request.headers()) {
                switch(entry.getKey()) {
                    case HEADER_SIGNATURE:
                        signature = entry.getValue();
                        break;
                    case HEADER_METADATA:
                        metadata = entry.getValue();
                        break;
                    case HEADER_EXPIRES:
                        expires = entry.getValue();
                        break;
                    case HEADER_HOST:
                        hostname = entry.getValue();
                        break;
                    case HttpHeaders.Names.CONTENT_LENGTH:
                        contentLength = Long.parseLong(entry.getValue());
                        break;
                }
            }
            logger.info("HEADER: signature=" + signature);
            logger.info("HEADER: metadata=" + metadata);
            logger.info("HEADER: expires=" + expires);
            logger.info("HEADER: hostname=" + hostname);
            logger.info("HEADER: Content-Length=" + contentLength);
            QueryStringDecoder decoderQuery = new QueryStringDecoder(uri);
            Map<String, List<String>> uriAttributes = decoderQuery.parameters();
            uuid = uriAttributes.get("uuid").get(0);
            logger.info("URI: uuid=" + uuid);
            UploadEntity uploadEntity = null;
            try {
                // Validate the request here
                storageResource.validatePostUploadRequest(signature, metadata, expires, hostname, contentLength, uuid);
                //create an upload entity. This will fail if entity already exists.
                uploadEntity = storageResource.createUploadEntity(uuid, metadata, contentLength);
            } catch (InvalidParameterValueException ex) {
                logger.error("post request validation failed", ex);
                responseContent.append(ex.getMessage());
                writeResponse(ctx.channel(), HttpResponseStatus.BAD_REQUEST);
                requestProcessed = true;
                return;
            }
            if (uploadEntity == null) {
                logger.error("Unable to create upload entity. An exception occurred.");
                responseContent.append("Internal Server Error");
                writeResponse(ctx.channel(), HttpResponseStatus.INTERNAL_SERVER_ERROR);
                requestProcessed = true;
                return;
            }
            //set the base directory to download the file
            DiskFileUpload.baseDirectory = uploadEntity.getInstallPathPrefix();
            logger.info("base directory: " + DiskFileUpload.baseDirectory);
            try {
                //initialize the decoder
                decoder = new HttpPostRequestDecoder(factory, request);
            } catch (ErrorDataDecoderException | IncompatibleDataDecoderException e) {
                logger.error("exception while initialising the decoder", e);
                responseContent.append(e.getMessage());
                writeResponse(ctx.channel(), HttpResponseStatus.INTERNAL_SERVER_ERROR);
                requestProcessed = true;
                return;
            }
        } else {
            logger.warn("received a get request");
            responseContent.append("only post requests are allowed");
            writeResponse(ctx.channel(), HttpResponseStatus.BAD_REQUEST);
            requestProcessed = true;
            return;
        }
    }
    // check if the decoder was constructed before
    if (decoder != null) {
        if (msg instanceof HttpContent) {
            // New chunk is received
            HttpContent chunk = (HttpContent) msg;
            try {
                decoder.offer(chunk);
            } catch (ErrorDataDecoderException e) {
                logger.error("data decoding exception", e);
                responseContent.append(e.getMessage());
                writeResponse(ctx.channel(), HttpResponseStatus.INTERNAL_SERVER_ERROR);
                requestProcessed = true;
                return;
            }
            if (chunk instanceof LastHttpContent) {
                writeResponse(ctx.channel(), readFileUploadData());
                reset();
            }
        }
    }
}
Also used : HttpRequest(io.netty.handler.codec.http.HttpRequest) IncompatibleDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.IncompatibleDataDecoderException) LastHttpContent(io.netty.handler.codec.http.LastHttpContent) URI(java.net.URI) HttpPostRequestDecoder(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder) QueryStringDecoder(io.netty.handler.codec.http.QueryStringDecoder) UploadEntity(org.apache.cloudstack.storage.template.UploadEntity) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) List(java.util.List) ErrorDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException) LastHttpContent(io.netty.handler.codec.http.LastHttpContent) HttpContent(io.netty.handler.codec.http.HttpContent)

Example 9 with ErrorDataDecoderException

use of io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException in project netty by netty.

the class HttpPostMultipartRequestDecoder method readFileUploadByteMultipart.

/**
     * Read a FileUpload data as Byte (Binary) and add the bytes directly to the
     * FileUpload. If the delimiter is found, the FileUpload is completed.
     *
     * @throws NotEnoughDataDecoderException
     *             Need more chunks but do not reset the readerInder since some
     *             values will be already added to the FileOutput
     * @throws ErrorDataDecoderException
     *             write IO error occurs with the FileUpload
     */
private void readFileUploadByteMultipart(String delimiter) {
    SeekAheadOptimize sao;
    try {
        sao = new SeekAheadOptimize(undecodedChunk);
    } catch (SeekAheadNoBackArrayException ignored) {
        readFileUploadByteMultipartStandard(delimiter);
        return;
    }
    int readerIndex = undecodedChunk.readerIndex();
    // found the decoder limit
    boolean newLine = true;
    int index = 0;
    int lastrealpos = sao.pos;
    int lastPosition;
    boolean found = false;
    while (sao.pos < sao.limit) {
        byte nextByte = sao.bytes[sao.pos++];
        if (newLine) {
            // Check the delimiter
            if (nextByte == delimiter.codePointAt(index)) {
                index++;
                if (delimiter.length() == index) {
                    found = true;
                    break;
                }
            } else {
                newLine = false;
                index = 0;
                // continue until end of line
                if (nextByte == HttpConstants.CR) {
                    if (sao.pos < sao.limit) {
                        nextByte = sao.bytes[sao.pos++];
                        if (nextByte == HttpConstants.LF) {
                            newLine = true;
                            index = 0;
                            lastrealpos = sao.pos - 2;
                        } else {
                            // unread next byte
                            sao.pos--;
                            // save last valid position
                            lastrealpos = sao.pos;
                        }
                    }
                } else if (nextByte == HttpConstants.LF) {
                    newLine = true;
                    index = 0;
                    lastrealpos = sao.pos - 1;
                } else {
                    // save last valid position
                    lastrealpos = sao.pos;
                }
            }
        } else {
            // continue until end of line
            if (nextByte == HttpConstants.CR) {
                if (sao.pos < sao.limit) {
                    nextByte = sao.bytes[sao.pos++];
                    if (nextByte == HttpConstants.LF) {
                        newLine = true;
                        index = 0;
                        lastrealpos = sao.pos - 2;
                    } else {
                        // unread next byte
                        sao.pos--;
                        // save last valid position
                        lastrealpos = sao.pos;
                    }
                }
            } else if (nextByte == HttpConstants.LF) {
                newLine = true;
                index = 0;
                lastrealpos = sao.pos - 1;
            } else {
                // save last valid position
                lastrealpos = sao.pos;
            }
        }
    }
    lastPosition = sao.getReadPosition(lastrealpos);
    ByteBuf buffer = undecodedChunk.copy(readerIndex, lastPosition - readerIndex);
    if (found) {
        // found so lastPosition is correct and final
        try {
            currentFileUpload.addContent(buffer, true);
            // just before the CRLF and delimiter
            undecodedChunk.readerIndex(lastPosition);
        } catch (IOException e) {
            throw new ErrorDataDecoderException(e);
        }
    } else {
        // position is OK
        try {
            currentFileUpload.addContent(buffer, false);
            // last valid char (not CR, not LF, not beginning of delimiter)
            undecodedChunk.readerIndex(lastPosition);
            throw new NotEnoughDataDecoderException();
        } catch (IOException e) {
            throw new ErrorDataDecoderException(e);
        }
    }
}
Also used : SeekAheadOptimize(io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize) SeekAheadNoBackArrayException(io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException) NotEnoughDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.NotEnoughDataDecoderException) IOException(java.io.IOException) ByteBuf(io.netty.buffer.ByteBuf) ErrorDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException)

Example 10 with ErrorDataDecoderException

use of io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException in project netty by netty.

the class HttpUploadServerHandler method channelRead0.

@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
    if (msg instanceof HttpRequest) {
        HttpRequest request = this.request = (HttpRequest) msg;
        URI uri = new URI(request.uri());
        if (!uri.getPath().startsWith("/form")) {
            // Write Menu
            writeMenu(ctx);
            return;
        }
        responseContent.setLength(0);
        responseContent.append("WELCOME TO THE WILD WILD WEB SERVER\r\n");
        responseContent.append("===================================\r\n");
        responseContent.append("VERSION: " + request.protocolVersion().text() + "\r\n");
        responseContent.append("REQUEST_URI: " + request.uri() + "\r\n\r\n");
        responseContent.append("\r\n\r\n");
        // new getMethod
        for (Entry<String, String> entry : request.headers()) {
            responseContent.append("HEADER: " + entry.getKey() + '=' + entry.getValue() + "\r\n");
        }
        responseContent.append("\r\n\r\n");
        // new getMethod
        Set<Cookie> cookies;
        String value = request.headers().get(HttpHeaderNames.COOKIE);
        if (value == null) {
            cookies = Collections.emptySet();
        } else {
            cookies = ServerCookieDecoder.STRICT.decode(value);
        }
        for (Cookie cookie : cookies) {
            responseContent.append("COOKIE: " + cookie + "\r\n");
        }
        responseContent.append("\r\n\r\n");
        QueryStringDecoder decoderQuery = new QueryStringDecoder(request.uri());
        Map<String, List<String>> uriAttributes = decoderQuery.parameters();
        for (Entry<String, List<String>> attr : uriAttributes.entrySet()) {
            for (String attrVal : attr.getValue()) {
                responseContent.append("URI: " + attr.getKey() + '=' + attrVal + "\r\n");
            }
        }
        responseContent.append("\r\n\r\n");
        // if GET Method: should not try to create a HttpPostRequestDecoder
        if (request.method().equals(HttpMethod.GET)) {
            // GET Method: should not try to create a HttpPostRequestDecoder
            // So stop here
            responseContent.append("\r\n\r\nEND OF GET CONTENT\r\n");
            // Not now: LastHttpContent will be sent writeResponse(ctx.channel());
            return;
        }
        try {
            decoder = new HttpPostRequestDecoder(factory, request);
        } catch (ErrorDataDecoderException e1) {
            e1.printStackTrace();
            responseContent.append(e1.getMessage());
            writeResponse(ctx.channel());
            ctx.channel().close();
            return;
        }
        readingChunks = HttpUtil.isTransferEncodingChunked(request);
        responseContent.append("Is Chunked: " + readingChunks + "\r\n");
        responseContent.append("IsMultipart: " + decoder.isMultipart() + "\r\n");
        if (readingChunks) {
            // Chunk version
            responseContent.append("Chunks: ");
            readingChunks = true;
        }
    }
    // if not it handles the form get
    if (decoder != null) {
        if (msg instanceof HttpContent) {
            // New chunk is received
            HttpContent chunk = (HttpContent) msg;
            try {
                decoder.offer(chunk);
            } catch (ErrorDataDecoderException e1) {
                e1.printStackTrace();
                responseContent.append(e1.getMessage());
                writeResponse(ctx.channel());
                ctx.channel().close();
                return;
            }
            responseContent.append('o');
            // example of reading chunk by chunk (minimize memory usage due to
            // Factory)
            readHttpDataChunkByChunk();
            // example of reading only if at the end
            if (chunk instanceof LastHttpContent) {
                writeResponse(ctx.channel());
                readingChunks = false;
                reset();
            }
        }
    } else {
        writeResponse(ctx.channel());
    }
}
Also used : HttpRequest(io.netty.handler.codec.http.HttpRequest) Cookie(io.netty.handler.codec.http.cookie.Cookie) LastHttpContent(io.netty.handler.codec.http.LastHttpContent) URI(java.net.URI) HttpPostRequestDecoder(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder) QueryStringDecoder(io.netty.handler.codec.http.QueryStringDecoder) List(java.util.List) ErrorDataDecoderException(io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException) LastHttpContent(io.netty.handler.codec.http.LastHttpContent) HttpContent(io.netty.handler.codec.http.HttpContent)

Aggregations

ErrorDataDecoderException (io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException)10 IOException (java.io.IOException)7 NotEnoughDataDecoderException (io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.NotEnoughDataDecoderException)6 SeekAheadNoBackArrayException (io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException)3 SeekAheadOptimize (io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize)3 ByteBuf (io.netty.buffer.ByteBuf)2 HttpContent (io.netty.handler.codec.http.HttpContent)2 HttpRequest (io.netty.handler.codec.http.HttpRequest)2 LastHttpContent (io.netty.handler.codec.http.LastHttpContent)2 QueryStringDecoder (io.netty.handler.codec.http.QueryStringDecoder)2 HttpPostRequestDecoder (io.netty.handler.codec.http.multipart.HttpPostRequestDecoder)2 URI (java.net.URI)2 List (java.util.List)2 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)1 Cookie (io.netty.handler.codec.http.cookie.Cookie)1 TransferEncodingMechanism (io.netty.handler.codec.http.multipart.HttpPostBodyUtil.TransferEncodingMechanism)1 IncompatibleDataDecoderException (io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.IncompatibleDataDecoderException)1 Charset (java.nio.charset.Charset)1 UnsupportedCharsetException (java.nio.charset.UnsupportedCharsetException)1 UploadEntity (org.apache.cloudstack.storage.template.UploadEntity)1