255 lines
8.8 KiB
C
255 lines
8.8 KiB
C
/*******************************************************************
|
|
* Pilot Software
|
|
*
|
|
* Copyright(c) 1995, Palm Computing Inc., All Rights Reserved
|
|
*
|
|
*-------------------------------------------------------------------
|
|
* FileName:
|
|
* DLServer.h
|
|
*
|
|
* Description:
|
|
* Desktop Link Protocol(DLP) Server implementation definitions.
|
|
*
|
|
* History:
|
|
* 7/12/95 vmk Created by Vitaly Marty Kruglikov
|
|
*
|
|
*******************************************************************/
|
|
|
|
|
|
#ifndef __DL_SERVER_H__
|
|
#define __DL_SERVER_H__
|
|
|
|
// Pilot common definitions
|
|
#include <Common.h>
|
|
#include <DataMgr.h> // for DmOpenRef
|
|
|
|
|
|
// COMMENT OUT TO BUILD WITHOUT THE VIEWER ID OPTION
|
|
#define INCLUDE_VIEWER_ID
|
|
|
|
/************************************************************
|
|
* DLK result codes
|
|
* (dlkErrorClass is defined in SystemMgr.h)
|
|
*************************************************************/
|
|
|
|
#define dlkErrParam (dlkErrorClass | 1) // invalid parameter
|
|
#define dlkErrMemory (dlkErrorClass | 2) // memory allocation error
|
|
#define dlkErrNoSession (dlkErrorClass | 3) // could not establish a session
|
|
|
|
#define dlkErrSizeErr (dlkErrorClass | 4) // reply length was too big
|
|
|
|
#define dlkErrLostConnection (dlkErrorClass | 5) // lost connection
|
|
#define dlkErrInterrupted (dlkErrorClass | 6) // sync was interrupted (see sync state)
|
|
#define dlkErrUserCan (dlkErrorClass | 7) // cancelled by user
|
|
|
|
|
|
/********************************************************************
|
|
* Desktop Link system preferences resource for user info
|
|
* id = sysResIDDlkUserInfo, defined in SystemMgr.rh
|
|
********************************************************************/
|
|
#define dlkMaxUserNameLength 40
|
|
#define dlkUserNameBufSize (dlkMaxUserNameLength + 1)
|
|
|
|
#define dlkMaxLogSize (2 * 1024)
|
|
|
|
typedef enum DlkSyncStateType {
|
|
dlkSyncStateNeverSynced = 0, // never synced
|
|
dlkSyncStateInProgress, // sync is in progress
|
|
dlkSyncStateLostConnection, // connection lost during sync
|
|
dlkSyncStateLocalCan, // cancelled by local user on TD
|
|
dlkSyncStateRemoteCan, // cancelled by user from desktop
|
|
dlkSyncStateLowMemoryOnTD, // sync ended due to low memory on TD
|
|
dlkSyncStateAborted, // sync was aborted for some other reason
|
|
dlkSyncStateCompleted // sync completed normally
|
|
} DlkSyncStateType;
|
|
|
|
typedef struct DlkUserInfoHdrType {
|
|
DWord userID; // user id
|
|
#ifdef INCLUDE_VIEWER_ID
|
|
DWord viewerID; // id assigned to viewer by the desktop
|
|
#endif
|
|
DWord lastSyncPC; // last sync PC id
|
|
ULong succSyncDate; // last successful sync date
|
|
ULong lastSyncDate; // last sync date
|
|
DlkSyncStateType lastSyncState; // last sync status
|
|
Byte userNameLen; // length of name field(including null)
|
|
UInt syncLogLen; // length of sync log(including null)
|
|
} DlkUserInfoHdrType;
|
|
|
|
typedef struct DlkUserInfoType {
|
|
DlkUserInfoHdrType header; // fixed size header
|
|
Char nameAndLog[2]; // user name, followed by sync log;
|
|
// both null-terminated(for debugging)
|
|
} DlkUserInfoType;
|
|
|
|
typedef DlkUserInfoType* DlkUserInfoPtr; // user info pointer
|
|
|
|
|
|
|
|
/********************************************************************
|
|
* DLK Session Structures
|
|
********************************************************************/
|
|
|
|
|
|
// DesktopLink event notification callback. If non-zero is returned,
|
|
// sync will be cancelled as soon as a safe point is reached.
|
|
typedef enum {
|
|
dlkEventOpeningConduit = 1, // conduit is being opened -- paramP
|
|
// is null;
|
|
|
|
dlkEventDatabaseOpened, // client has opened a database -- paramP
|
|
// points to DlkEventDatabaseOpenedType;
|
|
|
|
dlkEventCleaningUp, // last stage of sync -- cleaning up (notifying apps, etc) --
|
|
// paramP is null
|
|
|
|
dlkEventSystemResetRequested // system reset was requested by the desktop client
|
|
// (the normal action is to delay the reset until
|
|
// end of sync) -- paramP is null
|
|
} DlkEventType;
|
|
|
|
// Prototype for the event notification callback
|
|
typedef Int (*DlkEventProcPtr)(DWord userRef, DlkEventType dlkEvent,
|
|
VoidPtr paramP);
|
|
|
|
// Parameter structure for dlkEventDatabaseOpened
|
|
typedef struct DlkEventDatabaseOpenedType {
|
|
CharPtr dbNameP; // database name
|
|
ULong dbCreator; // database creator
|
|
} DlkEventDatabaseOpenedType;
|
|
|
|
|
|
// Prototype for the "user cancel" check callback function
|
|
typedef Int (*DlkUserCanProcPtr)(DWord userRef);
|
|
|
|
|
|
//
|
|
// List of modified database creators maintained by DLP Server
|
|
//
|
|
typedef struct DlkDBCreatorList {
|
|
UInt count; // number of entries in the list
|
|
Handle listH; // chunk handle of the creators list
|
|
} DlkDBCreatorList;
|
|
|
|
|
|
//
|
|
// DLP Server session information
|
|
//
|
|
typedef struct DlkServerSessionType {
|
|
// Information supplied by user
|
|
Byte sls; // session listenning socket
|
|
DlkEventProcPtr eventProcP; // ptr to DesktopLink event notification proc
|
|
DWord userRef; // user reference value for event proc
|
|
DlkUserCanProcPtr canProcP; // ptr to user-cancel function
|
|
DWord canRef; // parameter for canProcP()
|
|
|
|
// Current database information
|
|
Byte dlkDBID; // Desktop Link database id
|
|
DmOpenRef dbP; // TouchDown database access pointer -- if null, no current db
|
|
UInt cardNo; // memory module number
|
|
ULong dbCreator; // creator id
|
|
Char dbName[dmDBNameLength]; // DB name
|
|
UInt dbOpenMode; // database open mode
|
|
Boolean created; // true if the current db was created
|
|
Boolean isResDB; // set to true if resource database
|
|
Boolean ramBased; // true if the db is in RAM storage
|
|
Boolean readOnly; // true if the db is read-only
|
|
LocalID dbLocalID; // TouchDown LocalID of the database
|
|
ULong initialModNum; // initial DB modification number
|
|
ULong modRecIndex; // modified record index for
|
|
// dlpReadNextModifiedRec(0=beginning)
|
|
|
|
// List of modified database creators maintained by DLP Server
|
|
DlkDBCreatorList creatorList;
|
|
|
|
// Session status information
|
|
DlkSyncStateType syncState; // current sync state;
|
|
|
|
Boolean complete; // set to true when completion request
|
|
// has been received
|
|
|
|
Boolean conduitOpened; // set to true after the first coduit
|
|
// is opened by remote
|
|
|
|
Boolean logCleared; // set to true after sync log has been
|
|
// cleared during the current session;
|
|
// The log will be cleared before any new entries are added or at
|
|
// the end of sync in case no new entries were added.
|
|
// (we do not clear the log at the beginning of sync in case the
|
|
// user cancels during the "identifying user" phase; in this
|
|
// event, the spec calls for preserving the original log)
|
|
|
|
Boolean resetPending; // set to true if system reset is pending;
|
|
// the reset will be carried out at end
|
|
// of sync
|
|
|
|
// Current request information
|
|
Boolean gotCommand; // set to true when got a request
|
|
Byte cmdTID; // current transaction ID
|
|
Word cmdLen; // size of data in request buffer
|
|
VoidPtr cmdP; // pointer to command
|
|
VoidHand cmdH; // handle of command buffer
|
|
Byte remoteSocket; // remote socket id
|
|
} DlkServerSessionType;
|
|
|
|
typedef DlkServerSessionType* DlkServerSessionPtr;
|
|
|
|
|
|
//
|
|
// Parameter passed to DlkStartServer()
|
|
//
|
|
typedef struct DlkServerParamType {
|
|
Byte sls; // server listenning socket id for PAD
|
|
DlkEventProcPtr eventProcP; // ptr to DesktopLink event notification proc
|
|
DWord userRef; // user reference value for event proc
|
|
Int cmdWaitSec; // maximum number of seconds to wait for
|
|
// a command (0=default, -1=forever)
|
|
DlkUserCanProcPtr canProcP; // ptr to user-cancel function
|
|
DWord canRef; // parameter for canProcP()
|
|
|
|
} DlkServerParamType;
|
|
|
|
typedef DlkServerParamType* DlkServerParamPtr;
|
|
|
|
|
|
/********************************************************************
|
|
* DesktopLink Server Routines
|
|
********************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// SERVER API
|
|
//
|
|
|
|
// * RETURNED: 0 if session ended successfully; otherwise: dlkErrParam,
|
|
// * dlkErrNoSession, dlkErrLostConnection, dlkErrMemory,
|
|
// * dlkErrUserCan
|
|
Err DlkStartServer(DlkServerParamPtr paramP)
|
|
SYS_TRAP(sysTrapDlkStartServer);
|
|
|
|
Err DlkGetSyncInfo(ULongPtr succSyncDateP, ULongPtr lastSyncDateP,
|
|
DlkSyncStateType* syncStateP, CharPtr nameBufP,
|
|
CharPtr logBufP, ULongPtr logLenP)
|
|
SYS_TRAP(sysTrapDlkGetSyncInfo);
|
|
|
|
// DOLATER... this is a temporary function for debugging modem manager.
|
|
// remove it when done.
|
|
void DlkSetLogEntry(CharPtr textP, Int textLen, Boolean append)
|
|
SYS_TRAP(sysTrapDlkSetLogEntry);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
/********************************************************************
|
|
* DLK Macros
|
|
********************************************************************/
|
|
|
|
|
|
|
|
#endif // __DL_SERVER_H__
|