// Instruments a BeginEventHandler method [(object, sender, EventArgs, object) -> IAsyncResult]. // This pattern is commonly used, such as by IHttpModule, PageAsyncTask, and others. // If AppVerifier is disabled, returns the original method unmodified. public static BeginEventHandler WrapBeginMethod(HttpApplication httpApplication, BeginEventHandler originalDelegate) { if (!IsAppVerifierEnabled) { return(originalDelegate); } return((sender, e, cb, extraData) => WrapBeginMethodImpl( httpApplication: httpApplication, beginMethod: (innerCallback, innerState) => originalDelegate(sender, e, innerCallback, innerState), originalDelegate: originalDelegate, errorHandler: HandleAppVerifierException, callStackMask: CallStackCollectionBitMasks.AllStepMask) (cb, extraData)); }
// Instruments a 3-parameter Begin* method [(T, AsyncCallback, object) -> IAsyncResult]. // If AppVerifier is disabled, returns the original method unmodified. public static Func <T, AsyncCallback, object, IAsyncResult> WrapBeginMethod <T>(HttpApplication httpApplication, Func <T, AsyncCallback, object, IAsyncResult> originalDelegate) { if (!IsAppVerifierEnabled) { return(originalDelegate); } return((arg, callback, state) => WrapBeginMethodImpl( httpApplication: httpApplication, beginMethod: (innerCallback, innerState) => originalDelegate(arg, innerCallback, innerState), originalDelegate: originalDelegate, errorHandler: HandleAppVerifierException, callStackMask: CallStackCollectionBitMasks.AllHandlerMask) (callback, state)); }