dataconn.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:6k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  * 
  13.  * The Original Code is the Netscape security libraries.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are 
  17.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  18.  * Rights Reserved.
  19.  * 
  20.  * Contributor(s):
  21.  * 
  22.  * Alternatively, the contents of this file may be used under the
  23.  * terms of the GNU General Public License Version 2 or later (the
  24.  * "GPL"), in which case the provisions of the GPL are applicable 
  25.  * instead of those above.  If you wish to allow use of your 
  26.  * version of this file only under the terms of the GPL and not to
  27.  * allow others to use your version of this file under the MPL,
  28.  * indicate your decision by deleting the provisions above and
  29.  * replace them with the notice and other provisions required by
  30.  * the GPL.  If you do not delete the provisions above, a recipient
  31.  * may use your version of this file under either the MPL or the
  32.  * GPL.
  33.  */
  34. #ifndef __SSM_DATACONN_H__
  35. #define __SSM_DATACONN_H__
  36. #include "connect.h"
  37. #include "ctrlconn.h"
  38. /*
  39.   Cartman data connection/thread architecture:
  40.   Data connections are opened by the control connection in response
  41.   to a Request {SSL,etc.} Data message. There is one thread per data
  42.   connection that handles the data traffic, and there is one queue that
  43.   receives a shutdown message from a control thread.
  44.   If an exception or other termination occurs on either side, the 
  45.   m_status flag is changed to the specific exception code, and sockets 
  46.   are closed on either side (after final thread shutdown).
  47.   (### mwelch This has the effect of setting SO_LINGER on the outgoing 
  48.   data stream, is this an issue?)
  49.  */
  50. /*
  51.   Data connection objects.
  52.  */
  53. typedef struct SSMDataConnection
  54. {
  55.     SSMConnection super;
  56.     /* 
  57.        ---------------------------------------------
  58.        Data connection-specific fields - need to 
  59.        merge with control fields or do something more 
  60.        elegant in the long term.
  61.        ---------------------------------------------
  62.     */
  63.     PRUint32 m_dataType;           /* What type of service are we 
  64.                                       providing to client? */
  65.     PRThread* m_dataServiceThread;    /* one and only data thread */
  66.     SSMCollection* m_shutdownQ;    /* data queue that delivers a shutdown
  67.                                       message to the data service thread */
  68.     PRFileDesc *m_clientSocket;    /* Client socket */
  69.     PRBool m_sendResult;           /* When this connection shuts down,
  70.                                       send a result back to the client
  71.                                       (usage depends on subclass) */
  72. } SSMDataConnection;
  73. PR_BEGIN_EXTERN_C
  74. PRBool AreConnectionsActive(void);
  75. SSMStatus SSMDataConnection_Create(void *arg, SSMControlConnection * conn, 
  76.                                   SSMResource **res);
  77. SSMStatus SSMDataConnection_Init(SSMDataConnection *conn, 
  78.                                 SSMControlConnection *parent, 
  79.                                 SSMResourceType type);
  80. SSMStatus SSMDataConnection_Destroy(SSMResource *res, PRBool doFree);
  81. void SSMDataConnection_Invariant(SSMDataConnection *conn);
  82. SSMStatus SSMDataConnection_GetAttrIDs(SSMResource *res,
  83.                                        SSMAttributeID **ids,
  84.                                        PRIntn *count);
  85. SSMStatus SSMDataConnection_GetAttr(SSMResource *res,
  86.                                     SSMAttributeID attrID,
  87.                                     SSMResourceAttrType attrType,
  88.                                     SSMAttributeValue *value);
  89. SSMStatus SSMDataConnection_Shutdown(SSMResource *arg, SSMStatus status);
  90. SSMStatus SSMDataConnection_Authenticate(SSMConnection *arg, char *nonce);
  91. /*
  92.  * Function: SSMStatus SSMDataConnection_SetupClientSocket()
  93.  * Purpose: sets up the client data socket and authenticates the connection.
  94.  *          (blocking I/O)
  95.  * Arguments and return values:
  96.  * - conn: data connection object
  97.  * - returns: PR_SUCCESS if successful, error code otherwise
  98.  */
  99. SSMStatus SSMDataConnection_SetupClientSocket(SSMDataConnection* conn);
  100. /*
  101.  * Function: SSMStatus SSMDataConnection_ReadFromSocket()
  102.  * Purpose: reads data from the client data socket and fill the buffer.  When
  103.  *          particular write target threads read data from the data socket,
  104.  *          it is recommended that they use this function with the notable
  105.  *          exception of SSL connections.
  106.  * Arguments and return values:
  107.  * - conn: data connection object
  108.  * - read: this is a value-result argument.  It should be set to the data
  109.  *         chunk size.  One should always use LINESIZE unless there is a
  110.  *         compelling reason to do otherwise.  On return, this value will be
  111.  *         filled with the actual size of the data (or 0 if EOF or < 0 if
  112.  *         error).
  113.  * - buffer: data buffer.  The memory should have been allocated before this
  114.  *           function is called.  The buffer size should be at least equal to
  115.  *           the read size (thus the reason for specifying read value upon
  116.  *           input).
  117.  * - returns: PR_SUCCESS if successful, error code otherwise
  118.  *
  119.  * Note: this is a blocking I/O operation.
  120.  */
  121. SSMStatus SSMDataConnection_ReadFromSocket(SSMDataConnection* conn,
  122.                                           PRInt32* read,
  123.                                           char* buffer);
  124. PR_END_EXTERN_C
  125. #endif