/*
 * Copyright 2004,2005 The Apache Software Foundation.
 * 
 * Licensed 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.
 */

package org.apache.sandesha2;

/**
 * Contains all the Sandesha2Constants of Sandesha2.
 * Please see sub-interfaces to see grouped data.
 * 
 * @author Chamikara Jayalath <chamikaramj@gmail.com>
 */

public interface Sandesha2ClientAPI {

	String AcksTo = "Sandesha2ClientAPIPropertyAcksTo";
	String LAST_MESSAGE = "Sandesha2ClientAPIPropertyWSRMLastMessage";
	String OFFERED_SEQUENCE_ID = "Sandesha2ClientAPIPropertyOfferedSequenceId";
	String SANDESHA_DEBUG_MODE = "Sandesha2ClientAPIPropertyDebugMode";
	String SEQUENCE_KEY = "Sandesha2ClientAPIPropertySequenceKey";

}
