summaryrefslogtreecommitdiff
path: root/TAO/tao/IIOP_Transport.h
blob: 7515d9446bac83bdb5d247a4fe643b18aa741e33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// This may look like C, but it's really -*- C++ -*-
// $Id$

// ============================================================================
//
// = LIBRARY
//     TAO
//
// = FILENAME
//     IIOP_Transport.h
//
// = DESCRIPTION
//     IIOP Transport specific processing
//
// = AUTHOR
//     Fred Kuhns
//
// ============================================================================

#ifndef TAO_IIOP_TRANSPORT_H
#define TAO_IIOP_TRANSPORT_H

#include "tao/Pluggable.h"

class TAO_IIOP_Handler_Base;
class TAO_Client_Connection_Handler;
class TAO_Server_Connection_Handler;
class TAO_ORB_Core;

class TAO_IIOP_Transport : public TAO_Transport
{
public:

  TAO_IIOP_Transport (TAO_IIOP_Handler_Base* handler);
  ~TAO_IIOP_Transport ();

  CORBA::ULong tag (void);

  void close_conn (void);
  void resume_conn (ACE_Reactor *reactor);

  int idle (void);

  TAO_IIOP_Handler_Base*& handler (void);
  virtual int is_nil (TAO_Transport *obj);
  virtual TAO_Transport *_nil (void);

  ACE_HANDLE handle(void);

  virtual ssize_t send (const ACE_Message_Block *mblk);
  virtual ssize_t send (const u_char *buf, size_t len);
  virtual ssize_t send (const iovec *iov, int iovcnt);

  virtual ssize_t receive (char *buf, size_t len);
  virtual ssize_t receive (char *buf, size_t len, int flags);
  virtual ssize_t receive (iovec *iov, int iovcnt);

  int send_request (TAO_ORB_Core * /* orb_core */,
                    TAO_OutputCDR & /* stream */,
                    int /* twoway */) { return -1; }

protected:

  TAO_IIOP_Handler_Base *handler_;
  // the connection service handler used for accessing
  // lower layer communication protocols.

  CORBA::ULong tag_;
  // IIOP tag.

  ssize_t do_sendv (const iovec *iov, int iovcnt, int total_bytes);

};

class TAO_IIOP_Client_Transport : public TAO_IIOP_Transport
{
public:

  TAO_IIOP_Client_Transport (TAO_Client_Connection_Handler *handler);
  // constructor.  Note, TAO_IIOP_Handler_Base is the base
  // class for both TAO_Client_Connection_Handler and
  // TAO_Server_Connection_Handler.

  ~TAO_IIOP_Client_Transport();
  // destructor

  TAO_Client_Connection_Handler* client_handler (void);

  int send_request (TAO_ORB_Core *orb_core,
                    TAO_OutputCDR &stream,
                    int twoway);
private:
  TAO_Client_Connection_Handler *client_handler_;
};

class TAO_IIOP_Server_Transport : public TAO_IIOP_Transport
{
public:

  TAO_IIOP_Server_Transport (TAO_Server_Connection_Handler *handler);

  ~TAO_IIOP_Server_Transport ();
  // destructor

  TAO_Server_Connection_Handler* server_handler (void);

//  virtual int send_response (TAO_OutputCDR &response);

private:
  TAO_Server_Connection_Handler *server_handler_;
};

#endif  /* TAO_IIOP_TRANSPORT_H */