package com.amadeus.session.agent; import javax.annotation.Generated; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @Generated("manual from HelpersToInject using Bytecode plugin for Eclipse") class FilterHelpers implements Opcodes { public static void methods(String className, ClassVisitor cw, boolean addStaticInit) { CommonHelpers.addIsServlet3(cw); cw.visitInnerClass("java/lang/invoke/MethodHandles$Lookup", "java/lang/invoke/MethodHandles", "Lookup", ACC_PUBLIC + ACC_FINAL + ACC_STATIC); MethodVisitor mv; { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "$$debugMode", "Z", null, null); fv.visitEnd(); } if (addStaticInit) { mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); staticInit(className, mv); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitInsn(RETURN); mv.visitMaxs(1, 0); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "$$prepareRequest", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletRequest;", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKESTATIC, className, "$$context", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletContext;", false); mv.visitInsn(ICONST_4); mv.visitInsn(ICONST_3); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_2); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitVarInsn(ALOAD, 2); mv.visitInsn(AASTORE); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLineNumber(1, l2); mv.visitMethodInsn(INVOKESTATIC, className, "$$call", "(Ljavax/servlet/ServletContext;I[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "javax/servlet/ServletRequest"); mv.visitInsn(ARETURN); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLocalVariable("request", "Ljavax/servlet/ServletRequest;", null, l0, l3, 0); mv.visitLocalVariable("response", "Ljavax/servlet/ServletResponse;", null, l0, l3, 1); mv.visitLocalVariable("filterContext", "Ljavax/servlet/ServletContext;", null, l0, l3, 2); mv.visitMaxs(6, 3); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, "$$context", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletContext;", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitFieldInsn(GETSTATIC, className, "$$isServlet3", "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFEQ, l1); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLineNumber(1, l2); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEINTERFACE, "javax/servlet/ServletRequest", "getServletContext", "()Ljavax/servlet/ServletContext;", true); mv.visitVarInsn(ASTORE, 2); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLineNumber(1, l3); mv.visitVarInsn(ALOAD, 2); Label l4 = new Label(); mv.visitJumpInsn(IFNONNULL, l4); mv.visitVarInsn(ALOAD, 1); Label l5 = new Label(); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l4); mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] { "javax/servlet/ServletContext" }, 0, null); mv.visitVarInsn(ALOAD, 2); mv.visitLabel(l5); mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "javax/servlet/ServletContext" }); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARETURN); Label l6 = new Label(); mv.visitLabel(l6); mv.visitLocalVariable("request", "Ljavax/servlet/ServletRequest;", null, l0, l6, 0); mv.visitLocalVariable("context", "Ljavax/servlet/ServletContext;", null, l0, l6, 1); mv.visitLocalVariable("sc", "Ljavax/servlet/ServletContext;", null, l3, l1, 2); mv.visitMaxs(1, 3); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "$$prepareResponse", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletResponse;", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKESTATIC, className, "$$context", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletContext;", false); mv.visitInsn(ICONST_3); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, className, "$$call", "(Ljavax/servlet/ServletContext;I[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "javax/servlet/ServletResponse"); mv.visitInsn(ARETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("request", "Ljavax/servlet/ServletRequest;", null, l0, l1, 0); mv.visitLocalVariable("response", "Ljavax/servlet/ServletResponse;", null, l0, l1, 1); mv.visitLocalVariable("filterContext", "Ljavax/servlet/ServletContext;", null, l0, l1, 2); mv.visitMaxs(6, 3); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "$$initSessionManagement", "(Ljavax/servlet/ServletContext;)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_M1); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, className, "$$call", "(Ljavax/servlet/ServletContext;I[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitInsn(POP); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitInsn(RETURN); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLocalVariable("servletContext", "Ljavax/servlet/ServletContext;", null, l0, l2, 0); mv.visitMaxs(6, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "$$commitRequest", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKESTATIC, className, "$$context", "(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)Ljavax/servlet/ServletContext;", false); mv.visitInsn(ICONST_5); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, className, "$$call", "(Ljavax/servlet/ServletContext;I[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitInsn(POP); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitInsn(RETURN); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLocalVariable("request", "Ljavax/servlet/ServletRequest;", null, l0, l2, 0); mv.visitLocalVariable("oldRequest", "Ljavax/servlet/ServletRequest;", null, l0, l2, 1); mv.visitLocalVariable("filterContext", "Ljavax/servlet/ServletContext;", null, l0, l2, 2); mv.visitMaxs(6, 3); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC + ACC_VARARGS, "$$debug", "(Ljava/lang/String;[Ljava/lang/Object;)V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitFieldInsn(GETSTATIC, className, "$$debugMode", "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFEQ, l1); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLineNumber(1, l2); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("SessionAgent: %s"); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, "java/lang/String", "format", "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", false); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, "java/lang/String", "format", "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", false); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLineNumber(1, l3); mv.visitVarInsn(ALOAD, 1); mv.visitJumpInsn(IFNULL, l1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitInsn(ICONST_1); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitInsn(AALOAD); mv.visitTypeInsn(INSTANCEOF, "java/lang/Throwable"); mv.visitJumpInsn(IFEQ, l1); Label l4 = new Label(); mv.visitLabel(l4); mv.visitLineNumber(1, l4); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitInsn(AALOAD); mv.visitTypeInsn(CHECKCAST, "java/lang/Throwable"); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Throwable", "printStackTrace", "(Ljava/io/PrintStream;)V", false); mv.visitLabel(l1); mv.visitLineNumber(1, l1); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitInsn(RETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("format", "Ljava/lang/String;", null, l0, l5, 0); mv.visitLocalVariable("args", "[Ljava/lang/Object;", null, l0, l5, 1); mv.visitMaxs(7, 2); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, "$$getPropertySecured", "(Ljava/lang/String;)Ljava/lang/String;", null, null); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/SecurityException"); mv.visitLabel(l0); mv.visitLineNumber(1, l0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ACONST_NULL); mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "getProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", false); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitLineNumber(1, l2); mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/SecurityException" }); mv.visitVarInsn(ASTORE, 1); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLineNumber(1, l3); mv.visitLdcInsn("Security exception when trying to get system property"); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, className, "$$debug", "(Ljava/lang/String;[Ljava/lang/Object;)V", false); Label l4 = new Label(); mv.visitLabel(l4); mv.visitLineNumber(1, l4); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l5 = new Label(); mv.visitLabel(l5); mv.visitLocalVariable("key", "Ljava/lang/String;", null, l0, l5, 0); mv.visitLocalVariable("e", "Ljava/lang/SecurityException;", null, l3, l5, 1); mv.visitMaxs(5, 2); mv.visitEnd(); } CommonHelpers.addCallMethod(className, cw); CommonHelpers.addLogError(cw); } static void staticInit(String className, MethodVisitor mv) { mv.visitLdcInsn("com.amadeus.session.debug"); mv.visitMethodInsn(INVOKESTATIC, className, "$$getPropertySecured", "(Ljava/lang/String;)Ljava/lang/String;", false); mv.visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "parseBoolean", "(Ljava/lang/String;)Z", false); mv.visitFieldInsn(PUTSTATIC, className, "$$debugMode", "Z"); mv.visitMethodInsn(INVOKESTATIC, className, "$$isServlet3", "()Z", false); mv.visitFieldInsn(PUTSTATIC, className, "$$isServlet3", "Z"); } }