Home | History | Annotate | Download | only in corby
      1 #ifndef _sw_corby_channel_h
      2 #define _sw_corby_channel_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/socket.h>
     34 #include <corby/corby.h>
     35 #include <corby/buffer.h>
     36 
     37 
     38 #ifdef __cplusplus
     39 extern "C"
     40 {
     41 #endif
     42 
     43 struct												_sw_corby_channel;
     44 typedef struct _sw_corby_channel			*	sw_corby_channel;
     45 struct												_sw_corby_message;
     46 struct												_sw_corby_profile;
     47 typedef struct _sw_corby_profile			*	sw_corby_profile;
     48 typedef struct _sw_corby_profile const	*	sw_const_corby_profile;
     49 
     50 
     51 typedef enum _sw_corby_reply_status
     52 {
     53    SW_CORBY_NO_EXCEPTION		=	0,
     54    SW_CORBY_SYSTEM_EXCEPTION	=	1,
     55    SW_CORBY_USER_EXCEPTION		=	2,
     56    SW_CORBY_LOCATION_FORWARD	=	3
     57 } sw_corby_reply_status;
     58 
     59 
     60 typedef sw_result
     61 (HOWL_API *sw_corby_channel_will_send_func)(
     62 						sw_corby_channel			channel,
     63 						sw_octets					bytes,
     64 						sw_size_t					len,
     65 						sw_opaque_t					extra);
     66 
     67 
     68 typedef sw_result
     69 (HOWL_API *sw_corby_channel_did_read_func)(
     70 						sw_corby_channel			channel,
     71 						sw_octets					bytes,
     72 						sw_size_t					len,
     73 						sw_opaque_t					extra);
     74 
     75 
     76 typedef void
     77 (HOWL_API *sw_corby_channel_cleanup_func)(
     78 						sw_corby_channel			channel);
     79 
     80 
     81 typedef struct _sw_corby_channel_delegate
     82 {
     83 	sw_opaque_t								m_delegate;
     84 	sw_corby_channel_will_send_func	m_will_send_func;
     85 	sw_corby_channel_did_read_func	m_did_read_func;
     86 	sw_corby_channel_cleanup_func		m_cleanup_func;
     87 	sw_opaque_t								m_extra;
     88 } * sw_corby_channel_delegate;
     89 
     90 
     91 sw_result HOWL_API
     92 sw_corby_channel_start_request(
     93 							sw_corby_channel				self,
     94 							sw_const_corby_profile		profile,
     95 							struct _sw_corby_buffer	**	buffer,
     96 							sw_const_string				op,
     97 							sw_uint32						oplen,
     98 							sw_bool						reply_expected);
     99 
    100 
    101 sw_result HOWL_API
    102 sw_corby_channel_start_reply(
    103 							sw_corby_channel				self,
    104 							struct _sw_corby_buffer	**	buffer,
    105 							sw_uint32						request_id,
    106 							sw_corby_reply_status		status);
    107 
    108 
    109 sw_result HOWL_API
    110 sw_corby_channel_send(
    111 							sw_corby_channel					self,
    112 							struct _sw_corby_buffer		*	buffer,
    113 							sw_corby_buffer_observer		observer,
    114 							sw_corby_buffer_written_func	func,
    115 							sw_opaque_t							extra);
    116 
    117 
    118 sw_result HOWL_API
    119 sw_corby_channel_recv(
    120 							sw_corby_channel					self,
    121 							sw_salt							*	salt,
    122 							struct _sw_corby_message	**	message,
    123 							sw_uint32						*	request_id,
    124 							sw_string						*	op,
    125 							sw_uint32						*	op_len,
    126 							struct _sw_corby_buffer		**	buffer,
    127 							sw_uint8						*	endian,
    128 							sw_bool							block);
    129 
    130 
    131 sw_result HOWL_API
    132 sw_corby_channel_last_recv_from(
    133 							sw_corby_channel					self,
    134 							sw_ipv4_address				*	from,
    135 							sw_port						*	from_port);
    136 
    137 
    138 sw_result HOWL_API
    139 sw_corby_channel_ff(
    140 							sw_corby_channel					self,
    141 							struct _sw_corby_buffer		*	buffer);
    142 
    143 
    144 sw_socket HOWL_API
    145 sw_corby_channel_socket(
    146 							sw_corby_channel				self);
    147 
    148 
    149 sw_result HOWL_API
    150 sw_corby_channel_retain(
    151 							sw_corby_channel				self);
    152 
    153 
    154 sw_result HOWL_API
    155 sw_corby_channel_set_delegate(
    156 							sw_corby_channel				self,
    157 							sw_corby_channel_delegate	delegate);
    158 
    159 
    160 sw_corby_channel_delegate HOWL_API
    161 sw_corby_channel_get_delegate(
    162 							sw_corby_channel				self);
    163 
    164 
    165 void HOWL_API
    166 sw_corby_channel_set_app_data(
    167 							sw_corby_channel				self,
    168 							sw_opaque						app_data);
    169 
    170 
    171 sw_opaque HOWL_API
    172 sw_corby_channel_get_app_data(
    173 							sw_corby_channel				self);
    174 
    175 
    176 sw_result HOWL_API
    177 sw_corby_channel_fina(
    178 							sw_corby_channel				self);
    179 
    180 
    181 #ifdef __cplusplus
    182 }
    183 #endif
    184 
    185 
    186 #endif
    187