1 #ifndef _corby_orb_h
2 #define _corby_orb_h
3 
4 /*
5  * Copyright 2003, 2004 Porchdog Software. All rights reserved.
6  *
7  *	Redistribution and use in source and binary forms, with or without modification,
8  *	are permitted provided that the following conditions are met:
9  *
10  *		1. Redistributions of source code must retain the above copyright notice,
11  *		   this list of conditions and the following disclaimer.
12  *		2. Redistributions in binary form must reproduce the above copyright notice,
13  *		   this list of conditions and the following disclaimer in the documentation
14  *		   and/or other materials provided with the distribution.
15  *
16  *	THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY
17  *	EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  *	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  *	IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
20  *	INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  *	BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  *	DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  *	OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
24  *	OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25  *	OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  *	The views and conclusions contained in the software and documentation are those
28  *	of the authors and should not be interpreted as representing official policies,
29  *	either expressed or implied, of Porchdog Software.
30  */
31 
32 #include <salt/salt.h>
33 #include <salt/address.h>
34 #include <salt/socket.h>
35 #include <corby/corby.h>
36 
37 
38 #ifdef __cplusplus
39 extern "C"
40 {
41 #endif
42 
43 
44 struct									_sw_corby_orb;
45 typedef struct _sw_corby_orb	*	sw_corby_orb;
46 typedef sw_opaque						sw_corby_orb_observer;
47 typedef sw_opaque						sw_corby_servant;
48 struct									_sw_corby_object;
49 struct									_sw_corby_channel;
50 struct									_sw_corby_message;
51 struct									_sw_corby_buffer;
52 
53 typedef sw_result
54 (HOWL_API *sw_corby_orb_accept_channel_func)(
55 								sw_corby_orb						orb,
56 								struct _sw_corby_channel	*	channel);
57 
58 
59 typedef struct _sw_corby_orb_delegate
60 {
61 	sw_opaque								m_delegate;
62 	sw_corby_orb_accept_channel_func	m_accept_channel_func;
63 	sw_opaque								m_extra;
64 } * sw_corby_orb_delegate;
65 
66 
67 typedef struct _sw_corby_orb_config
68 {
69 	sw_string	m_name;
70 	sw_uint32	m_tag;
71 	sw_string	m_host;
72 	sw_port	m_port;
73 	sw_string	m_options;
74 } sw_corby_orb_config;
75 
76 
77 typedef sw_result
78 (HOWL_API *sw_corby_servant_cb)(
79 				sw_corby_servant					servant,
80 				sw_salt								salt,
81 				sw_corby_orb						orb,
82 				struct _sw_corby_channel	*	channel,
83 				struct _sw_corby_message	*	message,
84 				struct _sw_corby_buffer		*	buffer,
85 				sw_const_string					op,
86 				sw_uint32							op_len,
87 				sw_uint32							request_id,
88 				sw_uint8							endian);
89 
90 
91 typedef sw_result
92 (HOWL_API *sw_corby_orb_observer_func)(
93 				sw_corby_orb_observer			handler,
94 				sw_salt								salt,
95 				sw_corby_orb						orb,
96 				struct _sw_corby_channel	*	channel,
97 				sw_opaque_t							extra);
98 
99 
100 sw_result HOWL_API
101 sw_corby_orb_init(
102 				sw_corby_orb						*	self,
103 				sw_salt									salt,
104 				const sw_corby_orb_config		*	config,
105             sw_corby_orb_observer				observer,
106             sw_corby_orb_observer_func			func,
107             sw_opaque_t								extra);
108 
109 
110 sw_result HOWL_API
111 sw_corby_orb_fina(
112 				sw_corby_orb	self);
113 
114 
115 sw_result HOWL_API
116 sw_corby_orb_register_servant(
117 				sw_corby_orb					self,
118 				sw_corby_servant				servant,
119             sw_corby_servant_cb			cb,
120 				sw_const_string				oid,
121 				struct _sw_corby_object	**	object,
122 				sw_const_string				protocol_name);
123 
124 
125 sw_result HOWL_API
126 sw_corby_orb_unregister_servant(
127 				sw_corby_orb		self,
128 				sw_const_string	oid);
129 
130 
131 sw_result HOWL_API
132 sw_corby_orb_register_bidirectional_object(
133 				sw_corby_orb					self,
134 				struct _sw_corby_object	*	object);
135 
136 
137 sw_result HOWL_API
138 sw_corby_orb_register_channel(
139 				sw_corby_orb						self,
140 				struct _sw_corby_channel	*	channel);
141 
142 
143 sw_corby_orb_delegate HOWL_API
144 sw_corby_orb_get_delegate(
145 				sw_corby_orb						self);
146 
147 
148 sw_result HOWL_API
149 sw_corby_orb_set_delegate(
150 				sw_corby_orb						self,
151 				sw_corby_orb_delegate			delegate);
152 
153 
154 sw_result HOWL_API
155 sw_corby_orb_set_observer(
156 				sw_corby_orb						self,
157 				sw_corby_orb_observer			observer,
158 				sw_corby_orb_observer_func		func,
159 				sw_opaque_t							extra);
160 
161 
162 sw_result HOWL_API
163 sw_corby_orb_protocol_to_address(
164 				sw_corby_orb		self,
165 				sw_const_string	tag,
166 				sw_string			addr,
167 				sw_port		*	port);
168 
169 
170 sw_result HOWL_API
171 sw_corby_orb_protocol_to_url(
172 				sw_corby_orb		self,
173 				sw_const_string	tag,
174 				sw_const_string	name,
175 				sw_string			url,
176 				sw_size_t			url_len);
177 
178 
179 sw_result HOWL_API
180 sw_corby_orb_read_channel(
181 				sw_corby_orb						self,
182 				struct _sw_corby_channel	*	channel);
183 
184 
185 sw_result HOWL_API
186 sw_corby_orb_dispatch_message(
187 				sw_corby_orb						self,
188 				struct _sw_corby_channel	*	channel,
189 				struct _sw_corby_message	*	message,
190 				struct _sw_corby_buffer		*	buffer,
191 				sw_uint8							endian);
192 
193 
194 #ifdef __cplusplus
195 }
196 #endif
197 
198 
199 #endif
200