connmgr.h
上传用户:hnnddl
上传日期:2007-01-06
资源大小:3580k
文件大小:6k
源码类别:

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.4 $
  3.  * $Date: 1998/04/03 15:16:33 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996,97 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. //       AND elemedia    //
  13. //                                                            //
  14. //           The copyright notice above does not evidence any //
  15. //          actual or intended publication of such source code//
  16. ////////////////////////////////////////////////////////////////
  17. //
  18. /////////////////////////////////////////////////////////////////
  19. // File : connmgr.h        //
  20. //                                                             //
  21. // This file declares the ConnectionManager class.    //
  22. //    //
  23. // History:    //
  24. //    //
  25. //  01_Apr_1997 Created    //
  26. // 01_Jul_1997 Added GetConnectionAddrs method in    //
  27. // ConnectionEntity class.        //
  28. // 10_Dec_1997 Made destructors virtual.    //
  29. //    //
  30. /////////////////////////////////////////////////////////////////
  31. #if (!defined(__CONNMGR_H__))
  32. #define __CONNMGR_H__
  33. #include "api/connmgrerr.h"
  34. #include "util/platform.h"
  35. // Specifies the action taken by Listen. If LT_ONCE is specified,
  36. // the listening socket is closed after the first accept. If LT_MANY
  37. // is chosen, the listening socket is kept open to accept more than one
  38. // incoming connection.
  39. enum ListenType
  40. {
  41. LT_ONCE,
  42. LT_MANY
  43. };
  44. class ConnectionManager;
  45. class TransDataCallBack;
  46. class TransCtrlCallBackClient;
  47. class Trans;
  48. class Logger;
  49. // The ConnectionEntity class. Users must derive their protocol
  50. // classes H245Protocol and H225CSProtocol from ConnectionEntity class. 
  51. // Note that the destructor closes the connection automatically, so
  52. // there is no need to explicitly call ConnectionManager::CloseConnection for
  53. // connections created using the ConnManager::AcceptConnection or 
  54. // ConnManager::Connect calls.
  55. class DLLEXPORT ConnectionEntity
  56. {
  57. public:
  58. //
  59. // The identifier in connection entity, is used to differentiate
  60. // one instance of the ConnectionEntity object from the other.
  61. // 
  62. ConnectionEntity(int identifier);
  63. virtual ~ConnectionEntity();
  64. int GetIdentifier();
  65. int IsConnectionReady();
  66. // Method returns the local and remote addresses for the
  67. // connection.
  68. ProtReturnCode GetConnectionAddrs(sockaddr *local_addr,
  69. sockaddr *remote_addr);
  70. protected:
  71. TransDataCallBack *GetDataCallBack();
  72. void SetDataCallBack(TransDataCallBack *cb);
  73. virtual int GetLLC();
  74. private:
  75. friend class ConnectionManager;
  76. friend class TransCtrlCallBackClient;
  77. int llc;
  78. int identifier;
  79. TransDataCallBack *data_callback;
  80. int is_data_connection_ready;
  81. virtual void SetLLC(int llc);
  82. virtual void DataConnectionReady();
  83. virtual void DataConnectionDown();
  84. };
  85. // The connection manager class manages the interface to the transport layer. 
  86. // It handles all control functions of the connection, like listen connect,
  87. // accept and close. The Data transfer functions for a connection are enabled, 
  88. // if a connection entity class associated with that connection. This is 
  89. // done either in Connect or the AcceptConnection call. 
  90. class DLLEXPORT ConnectionManager
  91. {
  92. public:
  93. // Note: Make sure that you explicitly disable all listens
  94. // using StopListening routine before destroying the object.
  95. ConnectionManager(ProtReturnCode &result);
  96. virtual ~ConnectionManager();
  97. ProtReturnCode Connect(struct sockaddr* remote_address, 
  98. ConnectionEntity* conn);
  99. // listen_type is one of ListenType.  If listen_type is LT_ONCE
  100. // then after accepting exactly one connection the listening
  101. // socket is closed, otherwise the socket is kept open to
  102. // accept many new connections.
  103. // If multiple Listens are called, then identifier is passed back
  104. // in NotifyNewConnection and this is used to identify which one 
  105. // of the listens did the accept.
  106. ProtReturnCode Listen(int identifier, struct sockaddr* local_address, 
  107. int listen_type);
  108. // Disable an already existing listen. This will close the listening
  109. // socket. Use the identifier field, to specify which listen to 
  110. // disable. To reenable listen, make another call to Listen.
  111. ProtReturnCode StopListening(int identifier);
  112. // Call this to accept an incoming connection. Typically this
  113. // call is made after a NotifyNewConnection call from the
  114. // stack. Pass down the same conn_ref that came in the notification.
  115. ProtReturnCode AcceptConnection(int conn_ref, ConnectionEntity* conn);
  116. // Call this to reject an incoming connection. This call is made
  117. // after a NotifyIncomingConnection call from the stack. Pass
  118. // down the same conn_ref that came in the notification.
  119. ProtReturnCode RejectConnection(int conn_ref);
  120. // Use this to close a connection identified by the ConnectionEntity.
  121. // This would be the same entity that was passed in AcceptConnection
  122. // or in Connect.
  123. ProtReturnCode CloseConnection(ConnectionEntity* conn);
  124. // Notifications to be implemented by the user of this class.
  125. // Notify a new incoming connection.
  126. // This is called, when a Listen succeeds, and the stack calls
  127. // an accept. The identifier is the same one that was passed
  128. // down in the Listen call. This is used by the application
  129. // to identify which one of the many multiple listens accepted
  130. // the new connection.
  131. virtual void NotifyNewConnection(int identifier, int conn_ref,
  132. sockaddr* remote_address) = 0;
  133. // This method is called when a Connect either
  134. // fails or succeeds.
  135. virtual void NotifyConnectionStatus(ConnectionEntity *conn,
  136. ProtReturnCode connection_status) = 0;
  137. // An already existing connection has been closed
  138. //  by the remote end.
  139. virtual void NotifyConnectionClosed(ConnectionEntity *conn,
  140. ProtReturnCode status) = 0;
  141. // Error occured while trying to accept an incoming
  142. // connection (as a result of a earlier Listen call.)
  143. virtual void NotifyListenError(int identifier,
  144. ProtReturnCode status) = 0;
  145. private:
  146. TransCtrlCallBackClient* ctrl_cb_client;
  147. int client_handle;
  148. Logger* _logger;
  149. };
  150. #endif