vrpn
07.35
Virtual Reality Peripheral Network
Toggle main menu visibility
Loading...
Searching...
No Matches
vrpn_ForwarderController.h
Go to the documentation of this file.
1
#ifndef VRPN_FORWARDER_CONTROLLER_H
2
#define VRPN_FORWARDER_CONTROLLER_H
3
4
#include "
vrpn_Configure.h
"
// for VRPN_API, VRPN_CALLBACK
5
#include "
vrpn_Types.h
"
// for vrpn_int32
6
// vrpn_Forwarder_Controller
7
//
8
// Tom Hudson, September 1998
9
10
// Written to allow remote a client to tell a server to open another port
11
// and forward some messages on it to a friend of the client's.
12
13
// Any server that wishes to implement this needs only construct a
14
// vrpn_Forwarder_Server for each server connection it has open and
15
// to call the vrpn_Forwarder_Server mainloop frequently.
16
17
// Clients can construct a vrpn_Forwarder_Controller on a connection
18
// and call start_remote_forwarding(port) to tell the server to open
19
// <port>, then call forward_message_type(port, name) to start forwarding
20
// messages of the given name.
21
22
// This isn't an ideal solution, because it means clients need access to
23
// the names of the message, which they are normally insulated from.
24
25
// Some of the fancier options of the Forwarder (renaming services or
26
// types, changing class of service) are hidden from the user; this
27
// is meant to be a simple interface and simple first implementation.
28
29
// New Forwarder_Servers are NOT constructed on connections that a
30
// Forwarder_Server opens, so clients that are only listening to a
31
// forwarded stream cannot open new forwarders for still other clients to
32
// listen to.
33
34
class
VRPN_API
vrpn_ConnectionForwarder
;
35
class
VRPN_API
vrpn_Connection
;
36
struct
vrpn_HANDLERPARAM
;
37
38
class
VRPN_API
vrpn_Forwarder_Brain
{
39
40
public
:
41
vrpn_Forwarder_Brain
(
vrpn_Connection
*);
42
virtual
~vrpn_Forwarder_Brain
(
void
);
43
44
// Tell a Forwarder_Server to open a vrpn_Connection on remote_port.
45
46
virtual
vrpn_bool
start_remote_forwarding
(vrpn_int32 remote_port) = 0;
47
48
// Tell a Forwarder_Server to begin forwarding messages of type
49
// message_type from the sender named service_name over remote_port.
50
51
virtual
void
forward_message_type
(vrpn_int32 remote_port,
52
const
char
*service_name,
53
const
char
*message_type) = 0;
54
55
protected
:
56
vrpn_Connection
*
d_connection
;
57
58
vrpn_int32
d_myId
;
59
60
vrpn_int32
d_start_forwarding_type
;
61
vrpn_int32
d_forward_type
;
62
63
static
char
*
encode_start_remote_forwarding
(vrpn_int32 *length,
64
vrpn_int32 remote_port);
65
static
char
*
encode_forward_message_type
(vrpn_int32 *length,
66
vrpn_int32 remote_port,
67
const
char
*service_name,
68
const
char
*message_type);
69
70
static
void
decode_start_remote_forwarding
(
const
char
*buffer,
71
vrpn_int32 *remote_port);
72
static
void
decode_forward_message_type
(
const
char
*buffer,
73
vrpn_int32 *remote_port,
74
char
**service_name,
75
char
**message_type);
76
};
77
78
// Server class
79
80
// VRPN server builders who want to enable remotely-controlled forwarding in
81
// their server need only create a Forwarder_Server on their server Connections
82
// and call its mainloop() regularly.
83
84
struct
vrpn_Forwarder_List
{
85
vrpn_Forwarder_List
*
next
;
86
vrpn_int32
port
;
87
vrpn_Connection
*
connection
;
88
vrpn_ConnectionForwarder
*
forwarder
;
89
};
90
91
class
VRPN_API
vrpn_Forwarder_Server
:
public
vrpn_Forwarder_Brain
{
92
93
public
:
94
vrpn_Forwarder_Server
(
vrpn_Connection
*);
95
virtual
~vrpn_Forwarder_Server
(
void
);
96
97
virtual
void
mainloop
(
void
);
98
99
virtual
vrpn_bool
start_remote_forwarding
(vrpn_int32 remote_port);
100
101
virtual
void
forward_message_type
(vrpn_int32 remote_port,
102
const
char
*service_name,
103
const
char
*message_type);
104
105
protected
:
106
vrpn_Forwarder_List
*
d_myForwarders
;
107
108
private
:
109
static
int
VRPN_CALLBACK
handle_start(
void
*,
vrpn_HANDLERPARAM
);
110
static
int
VRPN_CALLBACK
handle_forward(
void
*,
vrpn_HANDLERPARAM
);
111
};
112
113
// Client class
114
115
// Construct a Forwarder_Controller on a connection to control a
116
// Forwarder_Server on its far end.
117
118
class
VRPN_API
vrpn_Forwarder_Controller
:
public
vrpn_Forwarder_Brain
{
119
120
public
:
121
vrpn_Forwarder_Controller
(
vrpn_Connection
*);
122
~vrpn_Forwarder_Controller
(
void
);
123
124
virtual
vrpn_bool
start_remote_forwarding
(vrpn_int32 remote_port);
125
126
virtual
void
forward_message_type
(vrpn_int32 remote_port,
127
const
char
*service_name,
128
const
char
*message_type);
129
};
130
131
#endif
// VRPN_FORWARDER_CONTROLLER_H
vrpn_ConnectionForwarder
Definition
vrpn_Forwarder.h:28
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition
vrpn_Connection.h:561
vrpn_Forwarder_Brain::d_connection
vrpn_Connection * d_connection
Definition
vrpn_ForwarderController.h:56
vrpn_Forwarder_Brain::vrpn_Forwarder_Brain
vrpn_Forwarder_Brain(vrpn_Connection *)
Definition
vrpn_ForwarderController.C:13
vrpn_Forwarder_Brain::encode_start_remote_forwarding
static char * encode_start_remote_forwarding(vrpn_int32 *length, vrpn_int32 remote_port)
Definition
vrpn_ForwarderController.C:39
vrpn_Forwarder_Brain::d_forward_type
vrpn_int32 d_forward_type
Definition
vrpn_ForwarderController.h:61
vrpn_Forwarder_Brain::d_myId
vrpn_int32 d_myId
Definition
vrpn_ForwarderController.h:58
vrpn_Forwarder_Brain::forward_message_type
virtual void forward_message_type(vrpn_int32 remote_port, const char *service_name, const char *message_type)=0
vrpn_Forwarder_Brain::decode_forward_message_type
static void decode_forward_message_type(const char *buffer, vrpn_int32 *remote_port, char **service_name, char **message_type)
Definition
vrpn_ForwarderController.C:111
vrpn_Forwarder_Brain::start_remote_forwarding
virtual vrpn_bool start_remote_forwarding(vrpn_int32 remote_port)=0
vrpn_Forwarder_Brain::d_start_forwarding_type
vrpn_int32 d_start_forwarding_type
Definition
vrpn_ForwarderController.h:60
vrpn_Forwarder_Brain::decode_start_remote_forwarding
static void decode_start_remote_forwarding(const char *buffer, vrpn_int32 *remote_port)
Definition
vrpn_ForwarderController.C:60
vrpn_Forwarder_Brain::encode_forward_message_type
static char * encode_forward_message_type(vrpn_int32 *length, vrpn_int32 remote_port, const char *service_name, const char *message_type)
Definition
vrpn_ForwarderController.C:72
vrpn_Forwarder_Controller::start_remote_forwarding
virtual vrpn_bool start_remote_forwarding(vrpn_int32 remote_port)
Definition
vrpn_ForwarderController.C:320
vrpn_Forwarder_Controller::vrpn_Forwarder_Controller
vrpn_Forwarder_Controller(vrpn_Connection *)
Definition
vrpn_ForwarderController.C:313
vrpn_Forwarder_Controller::forward_message_type
virtual void forward_message_type(vrpn_int32 remote_port, const char *service_name, const char *message_type)
Definition
vrpn_ForwarderController.C:343
vrpn_Forwarder_Server::mainloop
virtual void mainloop(void)
Definition
vrpn_ForwarderController.C:198
vrpn_Forwarder_Server::forward_message_type
virtual void forward_message_type(vrpn_int32 remote_port, const char *service_name, const char *message_type)
Definition
vrpn_ForwarderController.C:247
vrpn_Forwarder_Server::vrpn_Forwarder_Server
vrpn_Forwarder_Server(vrpn_Connection *)
Definition
vrpn_ForwarderController.C:155
vrpn_Forwarder_Server::start_remote_forwarding
virtual vrpn_bool start_remote_forwarding(vrpn_int32 remote_port)
Definition
vrpn_ForwarderController.C:207
vrpn_Forwarder_Server::d_myForwarders
vrpn_Forwarder_List * d_myForwarders
Definition
vrpn_ForwarderController.h:106
vrpn_Forwarder_List
Definition
vrpn_ForwarderController.h:84
vrpn_Forwarder_List::port
vrpn_int32 port
Definition
vrpn_ForwarderController.h:86
vrpn_Forwarder_List::next
vrpn_Forwarder_List * next
Definition
vrpn_ForwarderController.h:85
vrpn_Forwarder_List::forwarder
vrpn_ConnectionForwarder * forwarder
Definition
vrpn_ForwarderController.h:88
vrpn_Forwarder_List::connection
vrpn_Connection * connection
Definition
vrpn_ForwarderController.h:87
vrpn_HANDLERPARAM
This structure is what is passed to a vrpn_Connection message callback.
Definition
vrpn_Connection.h:41
vrpn_Configure.h
VRPN_API
#define VRPN_API
Definition
vrpn_Configure.h:648
VRPN_CALLBACK
#define VRPN_CALLBACK
Definition
vrpn_Configure.h:649
vrpn_ConnectionForwarder
class VRPN_API vrpn_ConnectionForwarder
Definition
vrpn_ForwarderController.h:34
vrpn_Connection
class VRPN_API vrpn_Connection
Definition
vrpn_ForwarderController.h:35
vrpn_Types.h
vrpn_ForwarderController.h
Generated by
1.17.0