protocol.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:5k
- /*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code is the Netscape security libraries.
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1994-2000 Netscape Communications Corporation. All
- * Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License Version 2 or later (the
- * "GPL"), in which case the provisions of the GPL are applicable
- * instead of those above. If you wish to allow use of your
- * version of this file only under the terms of the GPL and not to
- * allow others to use your version of this file under the MPL,
- * indicate your decision by deleting the provisions above and
- * replace them with the notice and other provisions required by
- * the GPL. If you do not delete the provisions above, a recipient
- * may use your version of this file under either the MPL or the
- * GPL.
- */
- /*
- protocol.h - Definitions of various items to support the PSM protocol.
- */
- #ifndef __PROTOCOL_H__
- #define __PROTOCOL_H__
- #include "rsrcids.h"
- #define SSMPRStatus SSMStatus
- #define SSMPR_SUCCESS SSM_SUCCESS
- #define SSMPR_FAILURE SSM_FAILURE
- #define SSMPR_INVALID_ARGUMENT_ERROR PR_INVALID_ARGUMENT_ERROR
- #define SSMPR_OUT_OF_MEMORY_ERROR PR_OUT_OF_MEMORY_ERROR
- #define SSMPRInt32 PRInt32
- #define SSMPRUint32 PRUint32
- #define SSMPR_ntohl PR_ntohl
- #define SSMPR_htonl PR_htonl
- #define SSMPORT_Free PORT_Free
- #define SSMPORT_ZAlloc PORT_ZAlloc
- #define SSMPR_SetError PR_SetError
- #define SSMPR_GetError PR_GetError
- #define SSMPORT_SetError PORT_SetError
- #define SSMPORT_GetError PORT_GetError
- /*
- Current version of PSM protocol.
- Increment this value when the protocol changes.
- */
- #define SSMSTRING_PADDED_LENGTH(x) ((((x)+3)/4)*4)
- #define SSMPORT_ZNEW(type) (type*)SSMPORT_ZAlloc(sizeof(type))
- #define SSMPORT_ZNewArray(type,size) (type*)SSMPORT_ZAlloc(sizeof(type)*(size))
- /* Various message structs */
- struct _SSMHelloRequest {
- CMUint32 m_version; /* Protocol version supported by client */
- struct _SSMString m_profileName; /* Name of user profile (where to find
- certs etc) */
- };
- struct _SSMHelloReply {
- CMInt32 m_result; /* Error, if any, which occurred
- (0 == success) */
- CMUint32 m_version; /* Protocol version supported by PSM */
- struct _SSMString m_nonce; /* Session nonce -- must be written to data channels */
- };
- struct _SSMRequestSSLDataConnection
- {
- CMUint32 m_flags; /* Flags to indicate to SSM what to do with
- the connection */
- CMUint32 m_port; /* Port number to connect to */
- struct _SSMString m_hostIP; /* IP address of final target machine (not proxy) */
- /* struct _SSMString m_hostName; Host name of target machine (for server auth) -- not accessed directly */
- };
- struct _SSMReplySSLDataConnection {
- CMInt32 m_result; /* Error, if any, which occurred (0 == success) */
- CMUint32 m_connectionID; /* Connection ID of newly opened channel */
- CMUint32 m_port; /* Port number to which to connect on PSM */
- };
- struct _SSMRequestSecurityStatus {
- CMUint32 m_connectionID; /* ID of connection of which to stat */
- };
- struct _SSMReplySecurityStatus {
- CMInt32 m_result; /* Error, if any, which occurred (0 == success) */
- CMUint32 m_keySize; /* Key size */
- CMUint32 m_secretKeySize; /* Secret key size */
- struct _SSMString m_cipherName; /* Name of cipher in use */
- /* SSMString m_certificate; -- DER encoded cert
- We do not access this as a field, we have to skip over m_cipherName */
- };
- /*
- Use this macro to jump over strings.
- For example, if you wanted to access m_certificate above,
- use a line like the following:
- char *ptr = &(reply->m_cipherName) + SSM_SIZEOF_STRING(reply->m_cipherName);
- */
- #define SSM_SIZEOF_STRING(str) (SSMSTRING_PADDED_LENGTH(PR_ntohl((str).m_length)) + sizeof(CMUint32))
- typedef struct _SSMHelloRequest SSMHelloRequest;
- typedef struct _SSMHelloReply SSMHelloReply;
- typedef struct _SSMRequestSSLDataConnection SSMRequestSSLDataConnection;
- typedef struct _SSMReplySSLDataConnection SSMReplySSLDataConnection;
- typedef struct _SSMRequestSecurityStatus SSMRequestSecurityStatus;
- typedef struct _SSMReplySecurityStatus SSMReplySecurityStatus;
- /*
- Functions to convert between an SSMString and a C string.
- Return values are allocated using PR_Malloc (which means that
- SSMPR_Free must be used to free up the memory after use).
- */
- CMTStatus SSM_StringToSSMString(SSMString ** ssmString, int len, char * string);
- CMTStatus SSM_SSMStringToString(char ** string,int *len, SSMString * ssmString);
- #endif /* __PROTOCOL_H__ */