# ReplayDetector.h

Go to the documentation of this file.

    00001 /*
    00002  * Copyright 2005,2009 WSO2, Inc. http://wso2.com
    00003  *
    00004  * Licensed under the Apache License, Version 2.0 (the "License");
    00005  * you may not use this file except in compliance with the License.
    00006  * You may obtain a copy of the License at
    00007  *
    00008  * http://www.apache.org/licenses/LICENSE-2.0
    00009  *
    00010  * Unless required by applicable law or agreed to in writing, software
    00011  * distributed under the License is distributed on an "AS IS" BASIS,
    00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    00013  * See the License for the specific language governing permissions and
    00014  * limitations under the License.
    00015  */
    00016
    00017 #ifndef REPLAY_DETECTOR_H
    00018 #define REPLAY_DETECTOR_H
    00019
    00020 #include <WSFDefines.h>
    00021 #include <string>
    00022 #include <MessageContext.h>
    00023 #include <rampart_replay_detector.h>
    00024 #include <Environment.h>
    00025
    00035 namespace wso2wsf
    00036 {
    00047     class WSF_EXTERN ReplayDetector
    00048     {
    00049     public:
    00054         virtual bool WSF_CALL isValid(MessageContext* msgctx) = 0;
    00055
    00059         virtual WSF_CALL ~ReplayDetector();
    00060
    00064         static axis2_status_t WSF_CALL checkValidity(
    00065             rampart_replay_detector_t *rrd,
    00066             const axutil_env_t* env,
    00067             axis2_msg_ctx_t *msg_ctx,
    00068             rampart_context_t *rampart_context);
    00069     };
    00071 }
    00075 typedef struct wsf_replay_detector
    00076 {
    00077     rampart_replay_detector_ops_t *ops;
    00078         axutil_param_t *param;
    00079     wso2wsf::ReplayDetector* callback;
    00080 }wsf_replay_detector_t;
    00087 #define WSF_REPLAY_DETECTOR_INIT(class_name) \
    00088 extern "C" \
    00089 { \
    00090     WSF_EXTERN int \
    00091     axis2_remove_instance( \
    00092         wsf_replay_detector_t *inst, \
    00093         const axutil_env_t *env) \
    00094     { \
    00095         if (inst) \
    00096         { \
    00097             delete inst->callback; \
    00098             AXIS2_FREE(env->allocator, inst->ops); \
    00099             AXIS2_FREE(env->allocator, inst); \
    00100         } \
    00101         return AXIS2_SUCCESS; \
    00102     } \
    00103 \
    00104     axis2_status_t WSF_CALL \
    00105     wsf_rampart_replay_detector_free( \
    00106         rampart_replay_detector_t *inst, \
    00107         const axutil_env_t *env) \
    00108     { \
    00109         return axis2_remove_instance((wsf_replay_detector_t *)inst, env);\
    00110     } \
    00111 \
    00112     WSF_EXTERN int \
    00113     axis2_get_instance( \
    00114         wsf_replay_detector_t **inst, \
    00115         const axutil_env_t *env) \
    00116     { \
    00117         wsf_replay_detector_t* replay_detector = NULL; \
    00118     \
    00119         replay_detector = (wsf_replay_detector_t*)AXIS2_MALLOC(env->allocator, sizeof(wsf_replay_detector_t)); \
    00120     \
    00121         replay_detector->ops = (rampart_replay_detector_ops_t *)AXIS2_MALLOC(env->allocator, sizeof(rampart_replay_detector_ops_t)); \
    00122         replay_detector->ops->is_replayed = wso2wsf::ReplayDetector::checkValidity; \
    00123         replay_detector->ops->free = wsf_rampart_replay_detector_free; \
    00124     \
    00125         replay_detector->callback = new class_name; \
    00126     \
    00127         *inst = replay_detector; \
    00128         if (!(*inst)) \
    00129         { \
    00130             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[wsf_rampart]Cannot initialize the Replay Detection module"); \
    00131             return AXIS2_FAILURE; \
    00132         } \
    00133 \
    00134         wso2wsf::Environment::setEnv(env); \
    00135 \
    00136         return AXIS2_SUCCESS; \
    00137     } \
    00138 } \
    00139
    00140
    00141 #endif // REPLAY_DETECTOR_H