
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

#ifndef NEETHI_CONSTANTS_H
#define NEETHI_CONSTANTS_H

#define NEETHI_EXACTLYONE "ExactlyOne"
#define NEETHI_ALL "All"
#define NEETHI_POLICY "Policy"
#define NEETHI_REFERENCE "PolicyReference"
#define NEETHI_URI "URI"
#define NEETHI_NAMESPACE "http://schemas.xmlsoap.org/ws/2004/09/policy"
#define NEETHI_POLICY_15_NAMESPACE "http://www.w3.org/ns/ws-policy"
#define NEETHI_PREFIX "wsp"
#define NEETHI_WSU_NS "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
#define NEETHI_ID "Id"
#define NEETHI_WSU_NS_PREFIX "wsu"
#define NEETHI_NAME "Name"

/**
* @file neethi_constants.h
* @brief includes all the string constants
*/
#ifdef __cplusplus
extern "C"
{
#endif

    /** @} */

#ifdef __cplusplus
}
#endif

#endif                          /*NEETHI_INCLUDES_H */
