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 39extern "C" 40{ 41#endif 42 43struct _sw_corby_channel; 44typedef struct _sw_corby_channel * sw_corby_channel; 45struct _sw_corby_message; 46struct _sw_corby_profile; 47typedef struct _sw_corby_profile * sw_corby_profile; 48typedef struct _sw_corby_profile const * sw_const_corby_profile; 49 50 51typedef 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 60typedef 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 68typedef 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 76typedef void 77(HOWL_API *sw_corby_channel_cleanup_func)( 78 sw_corby_channel channel); 79 80 81typedef 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 91sw_result HOWL_API 92sw_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 101sw_result HOWL_API 102sw_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 109sw_result HOWL_API 110sw_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 118sw_result HOWL_API 119sw_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 131sw_result HOWL_API 132sw_corby_channel_last_recv_from( 133 sw_corby_channel self, 134 sw_ipv4_address * from, 135 sw_port * from_port); 136 137 138sw_result HOWL_API 139sw_corby_channel_ff( 140 sw_corby_channel self, 141 struct _sw_corby_buffer * buffer); 142 143 144sw_socket HOWL_API 145sw_corby_channel_socket( 146 sw_corby_channel self); 147 148 149sw_result HOWL_API 150sw_corby_channel_retain( 151 sw_corby_channel self); 152 153 154sw_result HOWL_API 155sw_corby_channel_set_delegate( 156 sw_corby_channel self, 157 sw_corby_channel_delegate delegate); 158 159 160sw_corby_channel_delegate HOWL_API 161sw_corby_channel_get_delegate( 162 sw_corby_channel self); 163 164 165void HOWL_API 166sw_corby_channel_set_app_data( 167 sw_corby_channel self, 168 sw_opaque app_data); 169 170 171sw_opaque HOWL_API 172sw_corby_channel_get_app_data( 173 sw_corby_channel self); 174 175 176sw_result HOWL_API 177sw_corby_channel_fina( 178 sw_corby_channel self); 179 180 181#ifdef __cplusplus 182} 183#endif 184 185 186#endif 187