blob: 703406f0bfab6d9c14ec1b44dba6ab9b27afc7e7 [file] [log] [blame]
// Copyright 2003-2004 The Apache Software Foundation.
// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
//
// 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.
#if !defined(_AXIS_ICHANNEL_HPP)
#define _AXIS_ICHANNEL_HPP
#include <string>
#include <axis/GDefine.hpp>
#include "URL.hpp"
#include "HTTPTransportException.hpp"
// Need to revisit this, but for now ifdef for OS/400
#ifndef __OS400__
const int BUF_SIZE = 1024 * 8;
#else
const int BUF_SIZE = 1024 * 32;
#endif
using namespace std;
AXIS_CPP_NAMESPACE_USE
// =================================================================
// In order to parse the HTTP protocol data on an ebcdic system, we
// need to ensure that the various tokens we are looking for to distinguish
// between the HTTP headers and payload are in ASCII. So the following
// defines for carriage return-line feed, etc. are ensured to be in ascii
// by using ascii hexadecimal representation of the tokens.
// =================================================================
// Ascii character defines
#define ASCII_C_EQUAL '\x3D' // '='
#define ASCII_C_DASH '\x2D' // '-'
#define ASCII_C_LF '\x0A' // '\n'
#define ASCII_C_CR '\x0D' // '\r'
#define ASCII_C_SPACE '\x20' // ' '
#define ASCII_C_SEMI '\x3B' // ';'
#define ASCII_C_LOWERCASEA '\x61' // 'a'
#define ASCII_C_LOWERCASEF '\x66' // 'f'
#define ASCII_C_UPPERCASEA '\x41' // 'A'
#define ASCII_C_UPPERCASEF '\x46' // 'F'
#define ASCII_C_ZERO '\x30' // '0'
#define ASCII_C_NINE '\x39' // '9'
// Ascii string defines
#define ASCII_S_LF "\x0a" // "\n"
#define ASCII_S_CRLF "\x0d\x0a" // "\r\n"
#define ASCII_S_CRLFCRLF "\x0d\x0a\x0d\x0a" // "\r\n\r\n"
#define ASCII_S_HTTP "\x48\x54\x54\x50" // "HTTP"
#define ASCII_S_LEFTPAREN "\x28" // "("
enum g_ChannelType
{
UnsecureChannel,
SecureChannel,
MaxChannelCount
};
class IChannel
{
public:
virtual ~IChannel() {};
virtual const char* getURL()=0;
virtual void setURL( const char* cpURL)=0;
virtual URL & getURLObject()=0;
virtual bool open()=0;
virtual bool close()=0;
virtual const std::string& GetLastErrorMsg()=0;
virtual int readBytes(char *buf, int bufLen)=0;
virtual int writeBytes(const char *buf, int numBytes)=0;
virtual int setSecureProperties( const char *) {return true;};
virtual const char * getSecureProperties() {return NULL;};
virtual void setTimeout( long lSeconds)=0;
virtual void setSocket( unsigned int uiNewSocket)=0;
virtual int getSocket()=0;
virtual bool setTransportProperty( AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value)=0;
virtual const char * getTransportProperty( AXIS_TRANSPORT_INFORMATION_TYPE type)=0;
virtual void setProxy(const char *pcProxyHost,unsigned int uiProxyPort)=0;
virtual bool reopenRequired()=0;
virtual void closeQuietly( bool bNoExceptionOnForceClose) = 0;
virtual void enableTrace(const char* logFilePath, const char *filters) { }
};
#endif