All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cisco.oss.foundation.http.server.TraceWrapper Maven / Gradle / Ivy

Go to download

This project is the http server api library in the cisco vss foundation runtime

There is a newer version: 1.4.0-3
Show newest version
/*
 * Copyright 2015 Cisco Systems, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package com.cisco.oss.foundation.http.server;

import com.cisco.oss.foundation.configuration.ConfigurationFactory;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TraceWrapper {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(TraceWrapper.class);
	
	public static String toStringWithBody(String data, String ndsBodyStatusHeader, byte[] body, int bodyLimit, String contentType, List contentTypes, String characterEncoding, String bodySuffix, boolean forceBinaryPrint) {

		int dataLength = data.length();
		final StringBuilder builder = new StringBuilder(dataLength + bodyLimit);
		builder.append(data);
		builder.append("\n");
		boolean isText = false;
		if (body.length > 0) {			
			boolean bodyEncrypted = (ndsBodyStatusHeader != null) && (ndsBodyStatusHeader.equalsIgnoreCase("Encrypted"));

			if (!forceBinaryPrint && !bodyEncrypted && contentType != null) {
				for (String type : contentTypes) {
					if (contentType.toLowerCase().contains(type)) {
						String enc = characterEncoding;
						if (enc == null) {
							enc = "UTF-8";
						}

						try {
							builder.append(new String(body, enc));
							isText = true;
							break;
						} catch (UnsupportedEncodingException e) {
							LOGGER.trace("problem appending string body with {} encoding. error is: {}", enc, e);
							break;
						}
					}
				}
			}

			if (!isText) {
				builder.append(Hex.encodeHex(body));
			}
			if (builder.length() > dataLength + bodyLimit) {
				builder.setLength(dataLength + bodyLimit);
				builder.replace(builder.length() - bodySuffix.length(), builder.length(), bodySuffix);
			}
		}
		return builder.toString();
		
	}
	
	public static List getContentTypes(String serviceName) {
		List types = new ArrayList(5);
		String baseKey = serviceName + ".http.traceFilter.textContentTypes";
		Configuration subset = ConfigurationFactory.getConfiguration().subset(baseKey);
		Iterator keys = subset.getKeys();
		while(keys.hasNext()){
			String key = keys.next();
			types.add(subset.getString(key));
		}
		return types;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy