public static TrieParser buildHeaderParser(StructRegistry schema, int structId, HTTPHeader ... headers) { boolean skipDeepChecks = false; //TODO: does not make as big a difference as expected. boolean supportsExtraction = true; boolean ignoreCase = true; TrieParser headerParser = new TrieParser(256,4,skipDeepChecks,supportsExtraction,ignoreCase); addHeader(headerParser,HTTPSpecification.END_OF_HEADER_ID, ""); int i = headers.length; while (--i>=0) { addHeader(schema, structId, headerParser, headers[i]); } addHeader(headerParser, HTTPSpecification.UNKNOWN_HEADER_ID, "%b: %b"); return headerParser; }
HTTPUtil.addHeader(headerParser,HTTPSpecification.END_OF_HEADER_ID,""); HTTPUtil.addHeader(scs.registry, structId, headerParser, header); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.CONTENT_LENGTH); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.TRANSFER_ENCODING); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.CONNECTION); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.HOST); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.CONTENT_TYPE); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.ACCEPT_LANGUAGE); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.ACCEPT_ENCODING); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.REFERER); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.ORIGIN); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.DNT); HTTPUtil.addHeader(scs.registry, structId, headerParser, HTTPHeaderDefaults.USER_AGENT); int h = toEcho.length; while (--h >= 0) { HTTPUtil.addHeader(scs.registry, structId, headerParser, toEcho[h]);
public static void addHeader(StructRegistry schema, int structId, TrieParser headerParser, HTTPHeader header) { long fieldId = schema.growStruct(structId, StructType.Blob, //TODO: need a way to define dimensions on headers 0, //NOTE: associated object will be used to interpret header.rootBytes()); if (!schema.setAssociatedObject(fieldId, header)) { throw new UnsupportedOperationException("A header with the same identity hash is already held, can not add "+header); } assert(schema.getAssociatedObject(fieldId) == header) : "unable to get associated object"; assert(fieldId == schema.fieldLookupByIdentity(header, structId)); CharSequence template = header.readingTemplate(); addHeader(headerParser, fieldId, template); }