/* 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 */