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