palm-os-sdk/sdk-5r4/include/Core/System/CTP.h
2018-08-30 15:18:26 +01:00

413 lines
16 KiB
C
Executable File

/******************************************************************************
*
* Copyright (c) 1997-2004 PalmSource, Inc. All rights reserved.
*
* File: CTP.h
*
* Release: eclipse 5 SDK (68K) R4.
*
* Description:
* Header for the CTP Proxy service component of Elaine.
*
*****************************************************************************/
#ifndef _CTP_H_
#define _CTP_H_
#include "PalmLocRawData.h"
//##########################################################
// CTP Commands
// This is the CTP command UIntV which is sent in every
// CTP Request in the common area (CTPReqCommon)
//##########################################################
typedef enum {
ctpCmdReqURL = 0, // request URL
ctpCmdReqMail = 1, // request mail
ctpCmdEcho = 2,
ctpCmdMsgGen = 3,
ctpCmdDiscard = 4,
ctpCmdReqSessionID = 5
} CTPCmdEnum;
//##########################################################
// CTP Content Conversion Types
// The requestor can pass one of these constants in the
// ctpExtConvertTo extension in order to specify the
// the type of content conversion desired.
// If the extension is missing, then ctpConvCML is assumed.
//##########################################################
typedef enum {
ctpConvCML = 0, // CML
ctpConvCML8Bit, // CML in 8-bit debug form
ctpConvNoneLZ77, // Raw data with LZ77 (No primer)
ctpConvNone, // Return in native web format.
// When this is specified, then the response
// will include the ctpRspExtContentType
// and ctpRspExtContentEncoding extensions
ctpConvBest, // Best compression between ctpConvCML, ctpConvCML8Bit & ctpConvCMLLZ77Primer1
// Used together: ctpConvBest, ctpExtCompressSupported & CtpExtCompressedWith
ctpConvCMLLZ77Primer1 // Lz77 Primer#1 (English Clipper)
} CTPConvEnum;
// ctpExtCompressSupported Bits definition
#define ctpSupportCml5Bit 0x01
#define ctpSupportCml8Bit 0x02
#define ctpSupportLZ77Primer1 0x04
#define ctpSupportLZ77 0x08
// This device supports cml5bit, cml8bit and Lz77 Primer #1
#define ctpSupportDecompress (ctpSupportCml5Bit | ctpSupportCml8Bit | ctpSupportLZ77Primer1)
// inetFtrNumCtpDeviceBits1 feature Bits definition (See INetMgr.h for the feature definition)
#define ctpDeviceBits1Ctp1252Secondary 0x00000001 // Cp1252 is supported in Clipper as a secondary charset for Japanese devices
// default CTP header request values
#define ctpHeaderVersion 0 // current version of CTP header
#define ctpConvAlgorithm ctpConvCML // encoding type
#define ctpMaxResponseSize 1024 // max response size
#define ctpContentWidth 160 // displayable width
#define ctpContentDepth 1 // 1 = 2 bit default display depth, 2 = 4 bit, 3 = 8 bit
#define ctpContentVersion1 0x8001
#define ctpContentVersion2 0x8002
#define ctpContentVersionFirst ctpContentVersion1
#define ctpContentVersionLast ctpContentVersion2
#define ctpContentVersion ctpContentVersionLast // encoding version (must be kept up to date!!!)
#define ctpCharsEscapedByClient "=&/%:?#+;@*["
//-----------------------------------------------------------------------------
// %WCDevCaps bits definition Palm OS 4.0 and after
//-----------------------------------------------------------------------------
#define wcDevCaps1ScreenBits 0x0000007F
#define wcDevCaps1ScreenBitShift 0
#define wcDevCaps1ScreenBitDepth1 0x01
#define wcDevCaps1ScreenBitDepth2 0x02
#define wcDevCaps1ScreenBitDepth4 0x04
#define wcDevCaps1ScreenBitDepth8 0x08
#define wcDevCaps1ScreenBitDepth16 0x10
#define wcDevCaps1Lz77 0x00000080
#define wcDevCaps1Reserved1Shift 7
#define wcDevCaps1CommBandwidthBits 0x00000F00
#define wcDevCaps1CommBandwidthBitsShift 8
#define wcDevCaps1MemOSFreeBits 0x0000F000
#define wcDevCaps1MemOSFreeBitsShift 12
#define wcDevCaps1PalmOSVerBits 0x001F0000
#define wcDevCaps1PalmOSVerBitsShift 16
#define wcDevCaps1PalmOSHeapSizeBits 0x00E00000
#define wcDevCaps1PalmOSHeapSizeBitsShift 21
#define wcDevCaps1Reserved2 0xFF000000
#define wcDevCaps1Reserved2Shift 24
//##########################################################
// CTP Request Extensions
// These are the defined extension IDs that can appear
// in the extensions area of a CTP request
//##########################################################
// Extensions defined for the ctpCmdReqMail command....
typedef enum {
ctpExtIncHTTPResponse = 1, // include HTTP response header in data
// only applicable if ctpExtConvertTo
// is set to ctpConvNone
ctpExtEnableCookies = 2, // Cookies are enabled on the device
// If only this flag is on, the cookies
// are to be sent to the device
ctpExtNetID = 128, // Followed by length byte of 4 and
// 4 byte networkID..
// Must be specified when using TCP
// because tunneler is not used.
ctpExtUserID = 129, // Followed by length byte of 4 and
// 4 byte userID.
// Must be specified when using TCP
// because Mobitex MAN# is not available
ctpExtUserPW = 130, // Followed by length byte of 16 and
// 128 bit (16 byte) MD5 hashed password.
// Must be specified when using TCP
// because Mobitex MAN# is not available
ctpExtUserName = 131, // Followed by length byte and
// ascii user name string.
// This or ctpExtUserID must be specified
// when using TCP because Mobitex MAN#
// is not available
ctpExtServer = 132, // Followed by a length byte of 1 and
// 8 bits (1 byte) of server behavior
// flags.
ctpExtConvertTo = 133, // Followed by length byte of 1 and
// a 1 byte conversion identifier
// ctpConvXXX. If not present then
// ctpConvCML is assumed.
ctpExtLocale = 134, // Followed by length byte of 3;
// 1 byte Country as defined by CountryType in Preferences.h
// 1 byte Language as defined by LanguageType in Preferences.h
// 1 byte CharsetID as defined by CharEncodingType in TextMgr.h
// Extension must not be sent if Local =
// ( cUnitedStates, lEnglish, charEncodingPalmLatin )
ctpExtCompressSupported = 135, // During Implementation of LZ77
// Used together: ctpConvBest, ctpExtCompressSupported & CtpExtCompressedWith
// Followed by length byte of 1 and
// 8 compression support bits
ctpExtDeviceBits1 = 136, // Device may send bits to the server
// Followed by a length byte of 4
// and 4 bytes specifying the bits
// See bellow for a set of bits.
ctpExtSendRawLocationInfo = 137, // Raw data information as returned by the connected hardware
// Followed by a length byte and the data
ctpExtCookie = 138, // Cookie Request Header from the device
ctpExtContTypeDevice = 139, // Device may send Content Type to the server
// Followed by a length byte and the data
ctpExtWCDevCaps = 140, // Web Clipping device Capabilities available through %WCDevCaps
// Followed by a variable length byte and the data
ctpExtPalmUserID = 141, // Followed by a length of 16 bytes
// containing 8 bytes of PalmUserID
// and 8 bytes of DeviceID
ctpExtLastReqExtEnum = 255 // The last legal extension id.
} CTPReqExtEnum;
// Enumerations for ctp extened extensions
// These extensions have a 16-bit length field
typedef enum {
ctpExtExtCookie = 0 // used when the device must send a large cookie to the web-clipping proxy server
} CTPReqExtExtEnum;
// Bits definition for ctpExtDeviceBits1:
// initialized by the inetFtrNumCtpDeviceBits1 feature Bits definition
// (See INetmgr.h for the feature definition)
#define ctpDeviceBits1Cp1252Secondary 0x00000001 // Cp1252 is supported in Clipper as a secondary charset
//
#define ctpDeviceBits1PostCharsetBitShift 1 // Shift bits left by 1 bit
#define ctpDeviceBits1PostCharsetBitMask 0x000001FE
//##########################################################
// CTP Response Extensions
// These are the defined extension IDs that can appear
// in the extensions area of a CTP response
//##########################################################
// Extensions defined for the ctpCmdReqURL response
typedef enum {
ctpExtContentType = 128, // Followed by length byte of 'len' and
// a 'len' byte string containing the
// MIME type of the content. This extension
// is only returned when the request has
// a ctpReqExtConverTo value of ctpConvNone
ctpExtContentEncoding = 129, // Followed by length byte of 'len' and
// a 'len' byte string containing the
// encoding type ("x-gzip, "compress", "lz77",
// etc.)
// This extension is only returned when the
// request has a ctpReqExtConverTo value of
// ctpConvNone
ctpExtUncompressSize = 130, // Followed by length byte of 4 and
// a UInt32 containing the uncompressed
// size of the content. Currently only
// sent when the requested content conversion
// type is ctpConvCMLLZSS
ctpExtUntruncatedSize = 131, // Followed by length byte of 4 and
// a UInt32 containing the untruncated
// size of the content. Currently only
// sent when the CTP result is ctpWarnTruncated
ctpExtContentVersion = 132, // Followed by length byte of 2
// and 2 byte desired version number of content
ctpExtCompressedWith = 133, // During Implementation of LZ77
// Used together: ctpConvBest, ctpExtCompressSupported & CtpExtCompressedWith
// Followed by a length byte of 1
// and 1 byte specifying the specific CTPConvEnum used
ctpExtServerBits1 = 134, // Server may send bits to the device
// Followed by a length byte of 4
// and 4 bytes specifying the bits
// See bellow for a set of bits.
ctpExtSetCookie = 135, // SetCookie http response header
// Variable length data which is tagged by field lengths
ctpExtLastRspExtURLEnum = 255 // The last ctp extension;
} CTPRspExtURLEnum;
// Enumerations for ctp extened extensions
// These extensions have a 16-bit length field
typedef enum {
ctpExtExtSetCookie = 0 // Used to send large cookies to the device
} CTPRspExtExtURLEnum;
// Bits definition for ctpExtServerBits1:
#define ctpServerBits1SecondaryCharsetUsed 0x00000001
//
#define ctpServerBits1DocumentCharsetBitShift 1 // Shift bits left by 1 bit
#define ctpServerBits1DocumentCharsetBitMask 0x000001FE
#define ctpServerBits1DoNotCache 0x00000200
//##########################################################
// CTP Network IDs.
// These are used along with the userID to identify a user's
// mailbox account. All mailboxes created for the Mobitex
// network with have a network ID of 0. The network ID
// is passed along with the userID to the mail proxy.
// For wireless networks, the tunneler fills in the network
// ID into the ?? field of the tunneled IP packets. For wireline
// access, the client must include the network ID in the extensions
// field of the CTP mail request.
//##########################################################
typedef enum {
ctpNetIDMobitex = 0,
ctpNetIDUnknown = 0xFFFF
} CTPNetIDEnum;
//##########################################################
// CTP Schemes
// This is the scheme encoding which is used as a field
// in the document address portion in a URL request
//##########################################################
typedef enum {
ctpSchemeHTTP = 0, // http://
ctpSchemeHTTPS = 1, // https://
ctpSchemeFTP = 2, // ftp://
ctpSchemeEmpty = 7
} CTPSchemeEnum;
//##########################################################
// CTP Errors
// These are the possible error codes returned in a CTP response
//##########################################################
typedef enum {
ctpErrNone = 0,
ctpErrMalformedRequest, // malformed CTP-layer request from
// client
// Optional Data:
// UInt32 ctpErr
// Char errMsg[]
//
ctpErrUnknownCmd, // unsupported CTP command
// no extra data
//
ctpErrProxy, // content or other err specific to
// a Palm Proxy Server
// (ie, messaging or clipping proxy)
// Data:
// UInt32 proxyErr
// Char errMsg[]
//
ctpErrServer, // err on WEB Server
// Data:
// UInt32 serverErr
// Char errMsg[]
//
ctpErrSecReplayIDBad, // encrypted request had an
// invalid sequence number
// or sessionID, or anything
// for replay attack
// no extra data
//
ctpErrSecPublicKeyBad, // encrypted request is using an
// invalid server public key
// Data:
// UInt8 newPubKey[]
//
// GT, 01-04-99.
ctpErrMsgProxy, // messaging proxy specific error
// Data:
// UInt32 proxyErr
// Char errMsg[]
//
ctpErrRedirectURL, // Redirecting the URL all the way to
// the device,
// Data:
// UInt8 redirectedURL[]
//
ctpWarnTruncated = 0x8000 // response is truncated
} CTPErrEnum;
// NOTE:
// ctpErrMalformedRequest is an error at the outer CTP
// layer of the protocol - i.e. the outer wrapper around either a Web or Mail
// request. Errors at this level are very basic, akin to errors at the IP layer
// over TCP/IP networks. This kind of error is discovered before Elaine even
// knows if it's a web or mail request.
// The ctpErrProxy errors are errors discovered in the "insides" of a CTP request,
// akin to having bad data in an FTP request for example. These aren't
// discovered until the CTP request wrapper has been stripped off and the guts
// of the request have been passed to the portion of Elaine that handles web
// or mail requests specifically.
//=====================================================
// Functions
//====================================================
#ifdef __cplusplus
extern "C" {
#endif
// <chg 2-13-98 RM>
// NOTE: The following routines are no longer "public" system calls.
// They are now static private functions in :Libraries:INet:Src:INetLibWebCTP.c
// that can be included into another source file if needed.
// The only place they are used is in the INetLib and some test code.
//
// UInt32 PrvCTPURLEncode(Char * urlP, UInt8 * dstP, UInt32 * dstBitOffsetP,
// UInt32 dstBitLen);
// UInt32 PrvCTPURLDecode(UInt8 * srcP, UInt32 * srcBitOffsetP,
// Char * urlP, UInt32 urlBufSize);
// Convert a base26 ascii string as used in a CTP URL into an
// integer. Return's 0 if no error, updates *strPP to point
// to next character past base26 ascii string.
// UInt32 PrvCTPBase26AToI(Char ** strPP, UInt32 * intP);
// MACRO: CtpMaxEncodedURLSize(UInt32 srcByteCount)
//
// Given a source URL size, including terminating zero-byte, returns
// the buffer size (in bytes) that is required to hold the encoded URL;
//
// This value is arrived at as follows: We use the 5-bit encoding with every
// byte escaped as the limit; this consists of 3 scheme bits, 1 encoding bit
// and the string characters where each character is preceded with a 5-bit escape,
// and the terminating zero-byte; plus, we add 10 bytes as a fudge factor for good
// measure. (in this model, every string byte has 5/8ths byte overhead; we
// increase this to 6/8 to get a total of 1 6/8 or 7/4 result bytes for every
// source byte)
//
// *IMPORTANT* if the encoding method changes, this macro will need to be updated.
//
#define CtpMaxEncodedURLSize(srcByteCount) (1 + (srcByteCount * 7 / 4) + 10)
#ifdef __cplusplus
}
#endif
#endif /* _CTP_H_ */