📄 session.h
字号:
/* The object's handle and the handle of the user who owns this object.
The former is used when sending messages to the object when only the
xxx_INFO is available, the latter is used to avoid having to fetch the
same information from the system object table */
CRYPT_HANDLE objectHandle;
CRYPT_USER ownerHandle;
/* Variable-length storage for the type-specific data */
DECLARE_VARSTRUCT_VARS;
} SESSION_INFO;
/****************************************************************************
* *
* Session Functions *
* *
****************************************************************************/
/* Macros to make handling of error reporting on shutdown a bit more
obvious */
#define disableErrorReporting( sessionInfoPtr ) \
( sessionInfoPtr )->flags |= SESSION_NOREPORTERROR
#define enableErrorReporting( sessionInfoPtr ) \
( sessionInfoPtr )->flags &= ~SESSION_NOREPORTERROR
/* The SESSION_ISSERVER flag is checked so often that we define a macro to
handle it */
#define isServer( sessionInfoPtr ) \
( sessionInfoPtr->flags & SESSION_ISSERVER )
/* Session attribute handling functions */
CHECK_RETVAL STDC_NONNULL_ARG( ( 1, 2 ) ) \
int getSessionAttribute( INOUT SESSION_INFO *sessionInfoPtr,
OUT_INT_Z int *valuePtr,
IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE attribute );
CHECK_RETVAL STDC_NONNULL_ARG( ( 1, 2 ) ) \
int getSessionAttributeS( INOUT SESSION_INFO *sessionInfoPtr,
INOUT MESSAGE_DATA *msgData,
IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE attribute );
CHECK_RETVAL STDC_NONNULL_ARG( ( 1 ) ) \
int setSessionAttribute( INOUT SESSION_INFO *sessionInfoPtr,
IN_INT_Z const int value,
IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE attribute );
CHECK_RETVAL STDC_NONNULL_ARG( ( 1, 2 ) ) \
int setSessionAttributeS( INOUT SESSION_INFO *sessionInfoPtr,
IN_BUFFER( dataLength ) const void *data,
IN_LENGTH const int dataLength,
IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE attribute );
CHECK_RETVAL STDC_NONNULL_ARG( ( 1 ) ) \
int deleteSessionAttribute( INOUT SESSION_INFO *sessionInfoPtr,
IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE attribute );
/* Session-specific attribute management functions */
CHECK_RETVAL \
int addSessionInfo( INOUT_PTR ATTRIBUTE_LIST **listHeadPtr,
const CRYPT_ATTRIBUTE_TYPE attributeID,
IN_BUFFER_OPT( dataLength ) \
const void *data, const int dataLength ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
int addSessionInfoEx( INOUT_PTR ATTRIBUTE_LIST **listHeadPtr,
const CRYPT_ATTRIBUTE_TYPE attributeID,
IN_BUFFER( dataLength ) \
const void *data, const int dataLength,
const int flags ) \
STDC_NONNULL_ARG( ( 1, 3 ) );
CHECK_RETVAL \
int addSessionInfoComposite( INOUT_PTR ATTRIBUTE_LIST **listHeadPtr,
const CRYPT_ATTRIBUTE_TYPE attributeID,
const ATTRACCESSFUNCTION accessFunction,
IN_BUFFER( dataLength ) \
const void *data, const int dataLength,
const int flags ) \
STDC_NONNULL_ARG( ( 1, 4 ) );
CHECK_RETVAL \
int updateSessionInfo( INOUT_PTR ATTRIBUTE_LIST **listHeadPtr,
const CRYPT_ATTRIBUTE_TYPE attributeType,
IN_BUFFER( dataLength ) \
const void *data, const int dataLength,
const int dataMaxLength, const int flags ) \
STDC_NONNULL_ARG( ( 1, 3 ) );
CHECK_RETVAL \
int getSessionAttributeCursor( INOUT ATTRIBUTE_LIST *attributeListHead,
INOUT ATTRIBUTE_LIST *attributeListCursor,
const CRYPT_ATTRIBUTE_TYPE sessionInfoType,
OUT int *valuePtr ) \
STDC_NONNULL_ARG( ( 1, 2, 4 ) );
CHECK_RETVAL \
int setSessionAttributeCursor( INOUT ATTRIBUTE_LIST *attributeListHead,
OUT_PTR ATTRIBUTE_LIST **attributeListCursorPtr,
const CRYPT_ATTRIBUTE_TYPE sessionInfoType,
const int position ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
const ATTRIBUTE_LIST *findSessionInfo( INOUT const ATTRIBUTE_LIST *attributeListPtr,
const CRYPT_ATTRIBUTE_TYPE attributeType ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
const ATTRIBUTE_LIST *findSessionInfoEx( INOUT const ATTRIBUTE_LIST *attributeListPtr,
const CRYPT_ATTRIBUTE_TYPE attributeType,
IN_BUFFER( valueLength )
const void *value, const int valueLength ) \
STDC_NONNULL_ARG( ( 1, 3 ) );
void lockEphemeralAttributes( INOUT ATTRIBUTE_LIST *attributeListHead ) \
STDC_NONNULL_ARG( ( 1 ) );
void deleteSessionInfo( INOUT_PTR ATTRIBUTE_LIST **attributeListHead,
INOUT_PTR ATTRIBUTE_LIST **attributeListCurrent,
INOUT ATTRIBUTE_LIST *attributeListPtr ) \
STDC_NONNULL_ARG( ( 1, 2, 3 ) );
void deleteSessionInfoAll( INOUT_PTR ATTRIBUTE_LIST **attributeListHead,
INOUT_PTR ATTRIBUTE_LIST **attributeListCurrent ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
CRYPT_ATTRIBUTE_TYPE checkMissingInfo( const ATTRIBUTE_LIST *attributeListHead,
const BOOLEAN isServer ) \
STDC_NONNULL_ARG( ( 1 ) );
/* Session scoreboard management functions */
CHECK_RETVAL \
int findScoreboardEntry( INOUT SCOREBOARD_INFO *scoreboardInfo,
IN_BUFFER( keyLength ) \
const void *key, const int keyLength,
OUT_BUFFER( maxValueLength, *valueLength ) \
void *value, const int maxValueLength,
int *valueLength ) \
STDC_NONNULL_ARG( ( 1, 2, 4, 6 ) );
CHECK_RETVAL \
int findScoreboardEntryID( INOUT SCOREBOARD_INFO *scoreboardInfo,
IN_BUFFER( keyLength ) \
const void *key, const int keyLength ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
int addScoreboardEntry( INOUT SCOREBOARD_INFO *scoreboardInfo,
IN_BUFFER( keyLength ) \
const void *key, const int keyLength,
IN_BUFFER( valueLength ) \
const void *value, const int valueLength ) \
STDC_NONNULL_ARG( ( 1, 2, 4 ) );
void deleteScoreboardEntry( INOUT SCOREBOARD_INFO *scoreboardInfo,
const int uniqueID ) \
STDC_NONNULL_ARG( ( 1 ) );
/* Prototypes for functions in sess_rw.c */
CHECK_RETVAL \
int readFixedHeaderAtomic( SESSION_INFO *sessionInfoPtr,
OUT_BUFFER_FIXED( headerLength ) \
void *headerBuffer, const int headerLength ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
int readFixedHeader( SESSION_INFO *sessionInfoPtr,
OUT_BUFFER( headerMaxLen, headerLength ) \
void *headerBuffer, const int headerLength ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
int getSessionData( INOUT SESSION_INFO *sessionInfoPtr,
OUT_BUFFER( dataMaxLength, *bytesCopied ) \
void *data, const int dataMaxLength, int *bytesCopied ) \
STDC_NONNULL_ARG( ( 1, 2, 4 ) );
CHECK_RETVAL \
int putSessionData( INOUT SESSION_INFO *sessionInfoPtr,
IN_BUFFER_OPT( dataLength ) \
const void *data, const int dataLength,
OUT int *bytesCopied ) \
STDC_NONNULL_ARG( ( 1, 4 ) );
CHECK_RETVAL \
int readPkiDatagram( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
int writePkiDatagram( INOUT SESSION_INFO *sessionInfoPtr,
IN_BUFFER( contentTypeLength ) \
const char *contentType, const int contentTypeLength ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
/* Prototypes for functions in session.c */
CHECK_RETVAL \
int initSessionIO( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
void initSessionNetConnectInfo( const SESSION_INFO *sessionInfoPtr,
INOUT NET_CONNECT_INFO *connectInfo ) \
STDC_NONNULL_ARG( ( 1, 2 ) );
CHECK_RETVAL \
BOOLEAN checkAttributesConsistent( INOUT SESSION_INFO *sessionInfoPtr,
const CRYPT_ATTRIBUTE_TYPE attribute ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
int activateSession( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
int sendCloseNotification( INOUT SESSION_INFO *sessionInfoPtr,
IN_BUFFER_OPT( length ) \
const void *data, const int length ) \
STDC_NONNULL_ARG( ( 1 ) );
/* Prototypes for session mapping functions */
#ifdef USE_CERTSTORE
CHECK_RETVAL \
int setAccessMethodCertstore( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodCertstore( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_CERTSTORE */
#ifdef USE_CMP
CHECK_RETVAL \
int setAccessMethodCMP( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodCMP( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_CMP */
#ifdef USE_RTCS
CHECK_RETVAL \
int setAccessMethodRTCS( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodRTCS( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_RTCS */
#ifdef USE_OCSP
CHECK_RETVAL \
int setAccessMethodOCSP( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodOCSP( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_OCSP */
#ifdef USE_SCEP
CHECK_RETVAL \
int setAccessMethodSCEP( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodSCEP( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_SCEP */
#if defined( USE_SSH ) || defined( USE_SSH1 )
CHECK_RETVAL \
int setAccessMethodSSH( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodSSH( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_SSH || USE_SSH1 */
#ifdef USE_SSL
CHECK_RETVAL \
int setAccessMethodSSL( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
CHECK_RETVAL \
int initScoreboard( INOUT SCOREBOARD_INFO *scoreboardInfo,
const int scoreboardSize ) \
STDC_NONNULL_ARG( ( 1 ) );
void endScoreboard( INOUT SCOREBOARD_INFO *scoreboardInfo ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodSSL( x ) CRYPT_ARGERROR_NUM1
#define initScoreboard( scoreboardInfo, scoreboardSize ) CRYPT_OK
#define endScoreboard( scoreboardInfo )
#endif /* USE_SSL */
#ifdef USE_TSP
CHECK_RETVAL \
int setAccessMethodTSP( INOUT SESSION_INFO *sessionInfoPtr ) \
STDC_NONNULL_ARG( ( 1 ) );
#else
#define setAccessMethodTSP( x ) CRYPT_ARGERROR_NUM1
#endif /* USE_TCP */
#endif /* _SES_DEFINED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -