alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

875 lines
25 KiB
C
Executable File

/* c4com.h (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
#ifdef __cplusplus
extern "C" {
#endif
S4EXPORT long S4FUNCTION code4timeout( CODE4 S4PTR * ) ;
S4EXPORT void S4FUNCTION code4timeoutSet( CODE4 S4PTR *, long ) ;
#ifdef __cplusplus
}
#endif
#ifndef S4OFF_COMMUNICATIONS
struct CONNECTION4NETSt ;
#define CONNECTION4ID long
#define COM4DEFAULT_MESSAGE_LEN 1024
#ifndef S4SPX
#ifndef S4WINSOCK
#ifndef S4LOCAL
typedef struct CONNECTION4NETSt
{
void * c4null ;
} CONNECTION4NET ;
typedef struct SOCKET4NETSt
{
void * c4null ;
} SOCKET4NET ;
#endif
#endif
#endif
typedef struct PACKET4HEADERSt
{
CONNECTION4ID connectionId ; /* who is sending the packet? */
long replyNo ; /* for a particular request, to ensure duplicate requests are not performed, and etc. */
unsigned char numParts ; /* total #parts to the packet */
unsigned char partNo ; /* what part # of the packet this part is */
unsigned short int packetDataOffset ; /* where does the data start in the packet? */
unsigned short int packetDataLen ; /* what is the data length for this packet? */
} PACKET4HEADER ;
typedef struct PACKET4St
{
CONNECTION4ID connectionId ; /* who is sending the packet? */
long replyNo ; /* for a particular request, to ensure duplicate requests are not performed, and etc. */
unsigned char numParts ; /* total #parts to the packet */
unsigned char partNo ; /* what part # of the packet this part is */
unsigned short int packetDataOffset ; /* where does the data start in the packet? */
unsigned short int packetDataLen ; /* what is the data length for this packet? */
/* if partNo == 0, this header follows... */
short int type ;
long int dataLen ;
short int status ; /* function rc */
long int errCode2 ;
long clientDataId ; /* which client-data4 id is being referred to? */
long serverDataId ; /* which server-data4 id is being referred to? */
short int readLock ;
/* short int lockEnforce ;*/
short int unlockAuto ;
short int didUnlock ; /* did the server perform unlocks for the client? */
short int didUnlockData ; /* did the server perform data-level unlocks for the client? */
short int requestLockedInfo ;
/* char name[S4STAND_ALONE_ALIAS_LEN+1] ;*/
/* char data[remainingPacketLength] ;*/
} PACKET4 ;
typedef struct MESSAGE4St
{
LINK4 link ;
#ifdef S4SERVER
struct SERVER4CLIENTSt *client ;
#endif
PACKET4 *packet ;
unsigned short int len ;
} MESSAGE4 ;
typedef struct SOCKET4St
{
LINK4 link ;
CODE4 *cb ;
struct SOCKET4NETSt *net ;
struct CONNECTION4St *connect ;
#ifdef S4SERVER
LIST4 connections ; /* connection list of CONNECTION4's */
#else
char serverName[S4MAX_SERVER_NAME_SIZE] ;
#endif
#ifdef E4ANALYZE
short int initUndone ;
#endif
} SOCKET4 ;
typedef struct MESSAGE4DATASt
{
LINK4 link ;
S4CONST char *data ;
char *allocatedData ;
unsigned long int len ;
unsigned long int allocLen ;
char didAlloc ;
} MESSAGE4DATA ;
typedef struct CONNECTION4St
{
LINK4 link ;
LINK4 confirmLink ;
MESSAGE4 *message ;
LIST4 messageData ;
unsigned short dataLen ;
unsigned long int totalDataLen ;
char connected ;
short int connectionFailure ; /* true if a communications failure occurs */
short int adjustForLocked ;
SOCKET4 *socket ;
CODE4 *cb ;
struct CONNECTION4NETSt *net ;
LIST4 receivedMessages ; /* a list of received, unprocessed, partial messages */
#ifdef E4ANALYZE
short int initUndone ;
#endif
} CONNECTION4 ;
/* structures for d4open/d4create communication information between client/server */
typedef struct
{
unsigned short int headerLen ;
unsigned short int recWidth ;
char version ;
long serverId ; /* for when referring to the data on the server */
unsigned short int infoLen ;
unsigned short int numTags ;
short int readOnly ;
/* char *info */
/* void *tagInfo (for each tag...) */
} CONNECTION4OPEN_INFO_OUT ;
typedef struct
{
unsigned short int numTags ;
/* void *tagInfo (for each tag...) */
} CONNECTION4INDEX_INFO_OUT ;
typedef struct
{
char name[even4up( LEN4PATH + 1 )] ;
short int errDefaultUnique ;
short int accessMode ;
short int openForCreate ;
unsigned short int readOnly ;
unsigned short int safety ; /* for catalog only */
unsigned short int singleOpen ;
unsigned short int log ;
} CONNECTION4OPEN_INFO_IN ;
typedef struct
{
char password[even4up( LEN4DATA_ALIAS + 1 )] ;
} CONNECTION4PASSWORD_INFO_IN ;
typedef struct
{
short int accessMode ;
unsigned short int readOnly ;
short int nameLen ;
short int errDefaultUnique ;
short int openForCreate ;
unsigned short int safety ; /* for catalog only */
/* char accessName[nameLen] ;*/
} CONNECTION4OPEN_INDEX_INFO_IN ;
typedef struct
{
unsigned short int numTags ;
/* void *tagInfo (for each tag...) */
} CONNECTION4OPEN_INDEX_INFO_OUT ;
typedef struct
{
short int accessMode ;
unsigned short int readOnly ;
short int nameLen ;
short int errDefaultUnique ;
short int openForCreate ;
unsigned short int safety ; /* for catalog only */
char tagName[even4up( LEN4PATH + 1 )] ;
short int hasIndex ;
char indexName[even4up( LEN4PATH + 1 )] ; /* if t4open is deriving from i4open */
/* char indexName[nameLen] ;*/
} CONNECTION4OPEN_TAG_INFO_IN ;
typedef struct
{
short int autoOpened ; /* flag for whether or not server had to do the open */
/* void *tagInfo (for each tag...) */
} CONNECTION4OPEN_TAG_INFO_OUT ;
typedef union
{
char S4PTR *ptr ;
unsigned short int offset ;
} CONNECTION4PTR_UNION ;
typedef struct
{
CONNECTION4PTR_UNION name ;
short int type ;
unsigned short int len ;
unsigned short int dec ;
unsigned short int nulls ;
} CONNECTION4FIELD_INFO ;
typedef struct
{
CONNECTION4PTR_UNION name ;
CONNECTION4PTR_UNION expression ;
CONNECTION4PTR_UNION filter ;
short int unique ;
unsigned short int descending ;
/* void *data */
} CONNECTION4TAG_INFO ;
typedef struct
{
char name[even4up( LEN4PATH + 1 )] ;
unsigned short int numFields ;
unsigned short int numTags ;
unsigned short int fieldInfoLen ;
unsigned short int createTemp ; /* temporary create only ( name null ) */
unsigned short int safety ;
unsigned short int readOnly ; /* for catalog purposes */
unsigned short int log ;
short int compatibility ; /* what type of data file to create */
/* unsigned short int tagInfoLen ;*/
/* start of info... */
} CONNECTION4CREATE_INFO_IN ;
/*typedef struct*/
/*{*/
/* char name[even4up( LEN4PATH + 1 )] ;*/
/*} CONNECTION4CREATE_TEMP_INFO_OUT ;*/
typedef struct
{
short int catalogAdd ;
short int catalogStatus ;
} CONNECTION4CATALOG_SET_INFO_IN ;
typedef struct
{
short int isProduction ;
unsigned short int numTags ;
char indexFileName[even4up( LEN4PATH + 1 )] ;
unsigned short int createTemp ; /* temporary create only ( name null ) */
unsigned short int safety ;
unsigned short int readOnly ; /* for catalog purposes */
/* start of info... */
} CONNECTION4INDEX_CREATE_INFO_IN ;
typedef struct
{
char indexFileName[even4up( LEN4PATH + 1 )] ;
unsigned short int numTags ;
/* start of info... */
} CONNECTION4TAG_ADD_INFO_IN ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4TAG_ADD_INFO_OUT ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4INDEX_CREATE_INFO_OUT ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4REINDEX_INFO_OUT ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4CHECK_INFO_OUT ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4PACK_INFO_OUT ;
typedef struct
{
short int lockedDatafile ;
} CONNECTION4ZAP_INFO_OUT ;
/*
typedef struct
{
} CONNECTION4INDEX_CLOSE_INFO_IN ;
*/
typedef struct
{
short int usesTag ;
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
long startRecno ;
} CONNECTION4DATA_POS_IN ;
typedef struct
{
double position ;
} CONNECTION4DATA_POS_OUT ;
typedef struct
{
double position ;
short int usesTag ;
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
} CONNECTION4DATA_POS_SET_IN ;
typedef struct
{
long recNo ;
} CONNECTION4DATA_POS_SET_OUT ;
/* structures for d4seek communication information between client/server */
typedef struct
{
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
unsigned short int keyLen ;
unsigned short int fromCurrentPos ;
long startPos ; /* for seek next */
/* char *key */
} CONNECTION4SEEK_INFO_IN ;
typedef struct
{
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
long recno ;
} CONNECTION4TAG_SYNCH_INFO_IN ;
typedef struct
{
long recNo ;
} CONNECTION4TAG_SYNCH_INFO_OUT ;
/* structures for d4skip communication information between client/server */
typedef struct
{
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
short int usesTag ;
long startPos ;
long numSkip ;
} CONNECTION4SKIP_INFO_IN ;
#ifndef S4SINGLE
/*
typedef struct
{
short int type ;
long recNum ;
long clientId ;
long serverId ;
} CONNECTION4LOCK_SINGLE_INFO_IN ;
*/
typedef struct
{
short int numLocks ;
/* locks */
} CONNECTION4LOCK_GROUP_INFO_IN ;
#endif
/* structures for d4go communication information between client/server */
typedef struct
{
long recNo ;
} CONNECTION4GO_INFO_IN ;
typedef struct
{
short int skipRc ; /* used by d4skip to distinguish return codes */
short int recordLocked ;
long recNo ;
/* char *record ; */
} CONNECTION4GO_INFO_OUT ;
typedef struct
{
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
short int usesTag ;
} CONNECTION4TOP_INFO_IN ;
typedef struct
{
long recNo ;
short int recordLocked ;
short int eofFlag ;
short int bofFlag ;
/* char *record ; */
} CONNECTION4TOP_INFO_OUT ;
typedef struct
{
char tagName[even4up( LEN4TAG_ALIAS + 1 )] ;
short int usesTag ;
} CONNECTION4BOTTOM_INFO_IN ;
typedef struct
{
char calcName[even4up( E4MAX_CALC_NAME ) ] ;
/* char *expr */
} CONNECTION4CALC_CREATE_INFO_IN ;
typedef struct
{
long recNo ;
short int recordLocked ;
short int eofFlag ;
short int bofFlag ;
/* char *record ; */
} CONNECTION4BOTTOM_INFO_OUT ;
/* structure for d4recCount communication information between client/server */
typedef struct
{
long recCount ;
short int appendLocked ;
} CONNECTION4RECCOUNT_INFO_OUT ;
#ifndef S4SINGLE
/* structures for d4lock communication information between client/server */
typedef struct
{
short int type ;
short int test ; /* are we testing for a lock only? */
/* record info if appropriate */
} CONNECTION4LOCK_INFO_IN ;
#endif
/* structures for d4write communication information between client/server */
typedef struct
{
long recNo ;
short int numMemoFields ; /* number of memo fields with data included */
short int unlock ; /* should a general unlock call be performed (d4appendStart) */
/* char record[recWidth] */
/* CONNECTION4MEMO memo[numMemoFields] */
} CONNECTION4WRITE_INFO_IN ;
typedef struct
{
short int recordLocked ;
} CONNECTION4WRITE_INFO_OUT ;
typedef struct
{
unsigned short int fieldNum ;
unsigned long int memoLen ;
/* char memo[memoLen] */
} CONNECTION4MEMO ;
typedef struct
{
long recNo ;
short int fieldNo ;
} CONNECTION4MEMO_INFO_IN ;
typedef struct
{
unsigned long int memoLen ;
/* char memo[memoLen] */
} CONNECTION4MEMO_INFO_OUT ;
typedef struct
{
short int numMemoFields ; /* number of memo fields with data included */
/* char record[recWidth] */
/* CONNECTION4MEMO memo[numMemoFields] */
} CONNECTION4APPEND_INFO_IN ;
typedef struct
{
short int bofFlag ;
short int eofFlag ;
short int recordChanged ;
short int recordLocked ;
short int appendLocked ;
long recNum ;
} CONNECTION4APPEND_INFO_OUT ;
/* structures for d4zap communication information between client/server */
typedef struct
{
long recStart ;
long recStop ;
} CONNECTION4ZAP_INFO_IN ;
typedef struct
{
unsigned short int numServers ;
/* start of info... */
} CONNECTION4COMMIT_INFO_IN ;
typedef struct
{
char alias[even4up( LEN4TAG_ALIAS + 1 )] ;
short int unique ;
} CONNECTION4UNIQUE_TAG_INFO ;
typedef struct
{
unsigned short int numTags ;
/* for each tag...
CONNECTION4UNIQUE_TAG_INFO tags[numTags] ;
*/
} CONNECTION4UNIQUE_INFO_IN ;
typedef struct
{
char dateFormat[20] ;
} CONNECTION4DATE_FORMAT_SET_INFO_IN ;
typedef struct
{
short int matchLen ;
short int relationType ;
/* short int sortType ;*/
short int errorAction ;
short int numSlaves ;
short int dataId ;
long clientId ;
CONNECTION4PTR_UNION dataTagName ;
CONNECTION4PTR_UNION masterExpr ;
CONNECTION4PTR_UNION dataAccessName ;
} CONNECTION4RELATE ;
typedef struct
{
unsigned short int skipBackwards ;
CONNECTION4PTR_UNION exprSource ;
CONNECTION4PTR_UNION sortSource ;
} CONNECTION4RELATION ;
typedef struct
{
unsigned long relationId ;
unsigned short int relateOffset ;
unsigned short int flexOffset ;
long masterClientId ;
CONNECTION4RELATION relation ;
unsigned short int bitmapDisable ;
/* CONNECTION4RELATE relates[] ; */
/* flex data */
} CONNECTION4RELATE_INIT_INFO_IN ;
typedef struct
{
unsigned long relationId ;
/* list of relateid's for each relate */
} CONNECTION4RELATE_INIT_INFO_OUT ;
/* the output from relate4top, relate4bottom, relate4skip, relate4seek */
typedef struct
{
unsigned long relationId ;
/* record_num, record_count, record for each record */
} CONNECTION4RELATION_DATA_OUT ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_TOP_INFO_IN ;
typedef struct
{
unsigned long relationId ;
long numSkips ;
} CONNECTION4RELATE_SKIP_INFO_IN ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_BOTTOM_INFO_IN ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_OPT_INFO_IN ;
typedef struct
{
unsigned long relationId ;
unsigned short int relateId ;
long masterStartPos ;
} CONNECTION4RELATE_DO_INFO_IN ;
typedef struct
{
unsigned long relationId ;
unsigned short int relateId ;
long masterStartPos ;
} CONNECTION4RELATE_DO_ONE_INFO_IN ;
typedef struct
{
long recNo ;
} CONNECTION4RELATE_DO_ONE_INFO_OUT ;
typedef struct
{
unsigned long eof ;
} CONNECTION4TRAN_EOF_INFO_OUT ;
typedef struct
{
unsigned long eof ;
} CONNECTION4TRAN_EOF_HALT_INFO_OUT ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_FREE_INFO_IN ;
/*
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_CHANGED_INFO_IN ;
*/
#ifndef S4SINGLE
typedef struct
{
long clientId ;
long serverId ;
} CONNECTION4RELATE_LOCK_SUB_DATA ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_LOCK_INFO_IN ;
typedef struct
{
unsigned short int count ;
} CONNECTION4RELATE_LOCK_INFO_OUT ;
typedef struct
{
unsigned long relationId ;
} CONNECTION4RELATE_UNLOCK_INFO_IN ;
/*typedef struct*/
/*{*/
/* unsigned long unlockAuto ;*/
/*} CONNECTION4UNLOCK_INFO_IN ;*/
/*typedef struct*/
/*{*/
/* unsigned short int unlockedData ;*/
/*} CONNECTION4LOCK_INFO_OUT ;*/
typedef struct
{
long lockPos ; /* ( record no if > 0, appendBytes if 0, file if -1 ) */
/* char fileName[] ;*/
/* char userId[] ;*/
/* char netId[] ;*/
} CONNECTION4LOCKED_INFO_OUT ;
#endif
typedef struct
{
long clientId ;
unsigned short int numData ;
unsigned short int numRelate ;
unsigned long numRequests ;
unsigned long numTransactions ;
unsigned long numCompletedTransactions ;
unsigned long numRollbacks ;
short int activeTransaction ; /* is there a current transaction? */
double elapsedSeconds ;
} CONNECTION4CLIENT_INFO ;
typedef struct
{
long clientId ;
} CONNECTION4CLIENT_CANCEL_INFO_IN ;
typedef struct CONNECTION4SERVER_INFO_OUTSt
{
long memMax ;
long memAlloc ;
unsigned long numRequests ;
unsigned short int numClients ;
double elapsedSeconds ;
/* CONNECTION4CLIENT_INFO clients[numClients] */
} CONNECTION4SERVER_INFO_OUT ;
#ifdef __cplusplus
extern "C" {
#endif
int connection4clear( CONNECTION4 * ) ;
#define connection4addData( a, b, c, d ) ( connection4insertData( (a), (b), (c), (d), 0 ) )
CONNECTION4 *connection4alloc( SOCKET4 * ) ;
#define packet4didUnlockData( p ) ( (p)->didUnlockData )
int connection4disconnect( CONNECTION4 * ) ;
int connection4errorDescribeExecute( const CONNECTION4 *, CODE4 *, int, long, const char *, const char *, const char * ) ;
int connection4free( CONNECTION4 * ) ;
int connection4init( CONNECTION4 *, SOCKET4 * ) ;
int connection4initUndo( CONNECTION4 * ) ;
int connection4insertData( CONNECTION4 *, const void *, const unsigned int, const int, const int ) ;
#define connection4requestLockedInfo( c ) ( packet4requestLockedInfo( (c)->message->packet ) )
int connection4setStatus( CONNECTION4 *, const int ) ;
#define connection4yield( c ) ( socket4netYield( (c)->socket->net ) )
#ifdef S4UTILS
int S4FUNCTION connection4assign( CONNECTION4 *, const int, const long, const long ) ;
S4CONST char * S4FUNCTION connection4dataOffset( const CONNECTION4 *, const unsigned int ) ;
int S4FUNCTION connection4receive( CONNECTION4 * ) ;
int S4FUNCTION connection4send( CONNECTION4 * ) ;
#else
int connection4assign( CONNECTION4 *, const int, const long, const long ) ;
S4CONST char *connection4dataOffset( const CONNECTION4 *, const unsigned int ) ;
int connection4receive( CONNECTION4 * ) ;
int connection4send( CONNECTION4 * ) ;
#endif
#ifndef S4SERVER
int connection4repeat( CONNECTION4 *, const int, const int, const int, DATA4 * ) ;
#endif
#ifdef E4PARM_LOW
int connection4type( const CONNECTION4 * ) ;
long connection4errCode2( const CONNECTION4 * ) ;
S4EXPORT int connection4status( const CONNECTION4 * ) ;
int connection4setLen( CONNECTION4 *, const long int ) ;
void connection4setRequestLockedInfo( CONNECTION4 *, int ) ;
long connection4clientId( const CONNECTION4 * ) ;
S4CONST char *connection4data( const CONNECTION4 * ) ;
int connection4free( CONNECTION4 * ) ;
long connection4id( const CONNECTION4 * ) ;
int connection4didUnlock( const CONNECTION4 * ) ;
int connection4readLock( const CONNECTION4 * ) ;
int connection4unlockAuto( const CONNECTION4 * ) ;
long connection4serverId( const CONNECTION4 * ) ;
long int connection4len( const CONNECTION4 * ) ;
int socket4free( SOCKET4 * ) ;
int socket4init( SOCKET4 *, CODE4 *, const char *, const char * ) ;
#ifdef S4SERVER
int socket4shutdownAdvertising( SOCKET4 * ) ;
#endif
void packet4setDidUnlock( PACKET4 *, const int ) ;
int packet4requestLockedInfo( const PACKET4 * ) ;
#else
#define connection4type( c ) ( packet4type( (c)->message->packet ) )
#define connection4errCode2( c ) ( packet4errCode2( (c)->message->packet ) )
#define connection4status( c ) ( packet4status( (c)->message->packet ) )
#define connection4setLen( c, l ) ( packet4setLen( (c)->message->packet, (l) ) )
#define connection4setRequestLockedInfo( c, v ) ( packet4setRequestLockedInfo( (c)->message->packet, (v) ) )
#define connection4clientId( c ) ( ((c)->message == 0) ? 0 : packet4clientId( (c)->message->packet ) )
#define connection4data( c ) ( connection4dataOffset( (c), 0 ) )
#define connection4free( c ) ( ((c) == 0 ) ? 0 : ( mem4free( (c)->cb->connectionMemory, c ), 0 ) )
#define connection4id( c ) ( ((c) == 0 ) ? 0 : ( connection4netId( (c)->net ) ) )
#define connection4didUnlock( c ) ( packet4didUnlock( (c)->message->packet ) )
#define connection4readLock( c ) ( packet4readLock( (c)->message->packet ) )
#define connection4unlockAuto( c ) ( packet4unlockAuto( (c)->message->packet ) )
#define connection4serverId( c ) ( packet4serverId( (c)->message->packet ) )
#define connection4len( c ) ( packet4len( (c)->message->packet ) - (c)->adjustForLocked )
#define socket4free( s ) ( ( (s) == 0 ) ? 0 : ( u4free( s ), 0 ) )
#ifdef S4SERVER
#define socket4init( s, c4, sn, pi ) ( ((s)->cb = (c4)), ( socket4netInitServer( (s)->net, (sn), (pi) ) ) )
#define socket4shutdownAdvertising( s ) ( socket4netShutdownAdvertising( (s)->net ) )
#else
#define socket4init( s, c4, sn, pi ) ( ( (s)->cb = (c4) ), 0 )
#endif
#define packet4len( p ) ( (p)->dataLen )
#define packet4setLen( p, l ) ( ( (p)->dataLen = (l) ), 0 )
#define packet4setStatus( p, s ) ( ( (p)->status = (s) ) )
#define packet4setType( p, t ) ( ( (p)->type = (t) ) )
#define packet4status( p ) ( (p)->status )
#define packet4setErrCode2( p, e ) ( ((p)->errCode2 = (e)), 0 )
#define packet4errCode2( p ) ( (p)->errCode2 )
#define packet4type( p ) ( (p)->type )
#define packet4serverId( p ) ( (p)->serverDataId )
#define packet4clientId( p ) ( (p)->clientDataId )
#define packet4readLock( p ) ( (p)->readLock )
#define packet4didUnlock( p ) ( (p)->didUnlock )
#define packet4setRequestLockedInfo( p, r ) ( ((p)->requestLockedInfo = (r)) )
#define packet4unlockAuto( p ) ( (p)->unlockAuto )
#define packet4setClientId( p, i ) ( ((p)->clientDataId = (i)) )
#define packet4setServerId( p, i ) ( ((p)->serverDataId = (i)) )
#define packet4setReadLock( p, r ) ( ((p)->readLock = (r)) )
#define packet4requestLockedInfo( p ) ( (p)->requestLockedInfo )
#define packet4setDidUnlock( p, v ) ( ((p)->didUnlock = (v)) )
#define packet4setUnlockAuto( p, v ) ( ((p)->unlockAuto = (v)) )
#define packet4partNo( p ) ( (p)->partNo )
#define packet4numParts( p ) ( (p)->numParts )
#endif
#ifdef E4FILE_LINE
#define connection4error( a, b, c, d ) ( s4fileName = __FILE__ , s4lineNo = __LINE__ , connection4errorDescribeExecute( a, b, c, d, 0, 0, 0 ) )
#define connection4errorDescribe( a, b, c, d, e, f, g ) ( s4fileName = __FILE__ , s4lineNo = __LINE__ , connection4errorDescribeExecute( a, b, c, d, e, f, g ) )
#else
#define connection4error( a, b, c, d ) ( connection4errorDescribeExecute( a, b, c, d, 0, 0, 0 ) )
#define connection4errorDescribe( a, b, c, d, e, f, g ) ( connection4errorDescribeExecute( a, b, c, d, e, f, g ) )
#endif
CONNECTION4 * socket4receiveMessage( SOCKET4 * ) ;
SOCKET4 * socket4alloc( CODE4 * ) ;
int socket4connect( SOCKET4 *, const char *, const char * ) ;
CODE4 S4PTR *S4FUNCTION socket4codeBase( SOCKET4 S4PTR * ) ;
int socket4initUndo( SOCKET4 * ) ;
MESSAGE4 *socket4receive( SOCKET4 * ) ;
struct SOCKET4NETSt S4PTR * S4FUNCTION socket4netAlloc( SOCKET4 S4PTR * ) ;
int S4FUNCTION socket4netInitUndo( struct SOCKET4NETSt S4PTR * ) ;
int S4FUNCTION socket4netFree( struct SOCKET4NETSt S4PTR * ) ;
void S4FUNCTION socket4netYield( const struct SOCKET4NETSt S4PTR * ) ;
struct CONNECTION4NETSt S4PTR * S4FUNCTION connection4netAlloc( struct SOCKET4NETSt S4PTR * ) ;
int S4FUNCTION connection4netDisconnect( struct CONNECTION4NETSt S4PTR * ) ;
int S4FUNCTION connection4netFree( struct CONNECTION4NETSt S4PTR * ) ;
CONNECTION4ID S4FUNCTION connection4netId( const struct CONNECTION4NETSt S4PTR * ) ;
int S4FUNCTION connection4netInit( struct CONNECTION4NETSt S4PTR *, struct SOCKET4NETSt S4PTR * ) ;
int S4FUNCTION connection4netInitUndo( struct CONNECTION4NETSt S4PTR * ) ;
int S4FUNCTION connection4netSend( struct CONNECTION4NETSt S4PTR *, const MESSAGE4 S4PTR * ) ;
CONNECTION4ID S4FUNCTION connection4netDestId( const struct CONNECTION4NETSt S4PTR * ) ;
S4CONST unsigned short S4FUNCTION connection4netMessageLen( struct CONNECTION4NETSt S4PTR * ) ;
MESSAGE4 S4PTR * S4FUNCTION socket4netReceive( struct SOCKET4NETSt S4PTR * ) ;
S4CONST int connection4netMessageSendLen( struct CONNECTION4NETSt * ) ;
char *connection4netMessageSendData( struct CONNECTION4NETSt * ) ;
int packet4copy( PACKET4 *, PACKET4 *, unsigned int ) ;
#define packet4setDidUnlockData( p, v ) ( ((p)->didUnlockData = (v)) )
S4EXPORT struct MESSAGE4St S4PTR *S4FUNCTION message4alloc( CODE4 S4PTR *, unsigned int ) ;
S4EXPORT void S4FUNCTION message4free( CODE4 S4PTR *, struct MESSAGE4St S4PTR * ) ;
void message4release( CODE4 * ) ;
/* cannot be inline due to DLL CODE4 structure potential mismatches */
#ifdef S4DISTRIBUTED
CONNECTION4ID S4FUNCTION connection4netSourceId( const struct CONNECTION4NETSt S4PTR * ) ;
#endif
#ifdef S4SERVER
char *S4FUNCTION connection4netUserId( struct CONNECTION4NETSt S4PTR * ) ;
int socket4verifyConnections( SOCKET4 * ) ;
int socket4connected( SOCKET4 * ) ;
int S4FUNCTION socket4netShutdownAdvertising( struct SOCKET4NETSt S4PTR * ) ;
int S4FUNCTION connection4netDisconnected( struct CONNECTION4NETSt S4PTR * ) ;
int S4FUNCTION socket4netConnected( struct SOCKET4NETSt S4PTR * ) ;
int S4FUNCTION socket4netConnectClient( struct SOCKET4NETSt S4PTR *, CONNECTION4 S4PTR *, struct CONNECTION4NETSt S4PTR * ) ;
int S4FUNCTION socket4netInitServer( struct SOCKET4NETSt S4PTR *, const char *, const char * ) ;
#endif
#ifndef S4SERVER
int S4FUNCTION socket4netConnectServer( struct SOCKET4NETSt S4PTR *, struct CONNECTION4NETSt S4PTR *, const char S4PTR *, const char S4PTR * ) ;
#endif
#ifdef __cplusplus
}
#endif
#endif /* S4OFF_COMMUNICATIONS */