00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CTL_H
00015 #define CTL_H
00016
00026 #ifndef CTL_EXPORT
00027 #ifdef WIN32
00028 #define CTL_EXPORT __declspec(dllimport)
00029 #else
00030 #define CTL_EXPORT extern
00031 #endif
00032 #endif
00033
00034 #ifdef HAVE_STREAMLINK
00035 #define HAVE_CLIENT_API
00036 #endif
00037
00038
00039 #ifdef HAVE_DSDK
00040 #define HAVE_SERVER_API
00041 #define HAVE_CLIENT_API
00042 #endif
00043
00044 #ifdef HAVE_TRANSFORMER
00045 #define HAVE_CLIENT_API
00046 #define HAVE_SERVER_API
00047 #endif
00048
00049
00050 #include <stdarg.h>
00051 #include <sys/types.h>
00052
00053
00057 typedef struct ctl_trade_s ctl_trade;
00061 typedef struct ctl_tradeevent_s ctl_tradeevent;
00065 typedef struct ctl_channel_s ctl_channel;
00067 typedef struct ctl_provider_s ctl_provider;
00068
00069
00070
00071
00072
00073 #define FIELD_REQUESTID "RequestID"
00074 #define FIELD_PROTOCOL "TradingProtocol"
00075 #define FIELD_MSGTYPE "MsgType"
00076
00082 typedef enum {
00083 ctl_error_OK,
00084 ctl_error_FAILED_SOURCE_GUARD,
00085 ctl_error_INVALID_TRANSITION,
00086 ctl_error_UNKNOWN_CHANNEL,
00087 ctl_error_UNKNOWN_TRADE,
00088 ctl_error_INVALID_PARAMETERS,
00089 ctl_error_MISSING_REQUIRED_FIELD,
00090 } ctl_error;
00091
00095 typedef struct {
00104 void (*on_event)(void *context, ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, ctl_tradeevent *ev);
00105
00114 void (*on_invalid_event)(void *context, ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, ctl_tradeevent *ev, ctl_error reason);
00115 } ctl_trade_listener;
00116
00120 typedef struct {
00130 void (*trade_created)(void *context, ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00138 void (*trade_closed)(void *context, ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00139
00140
00147 void (*channel_closed)(void *context, ctl_provider *provider, ctl_channel *channel);
00148
00149 } ctl_channel_listener;
00150
00151
00152
00153 #ifdef HAVE_STREAMLINK
00154 #include "sl4c.h"
00155 CTL_EXPORT ctl_provider *ctl_create_sl_provider(streamlink *sl, int num_models, const char * const *models);
00156 #endif
00157
00158 #ifdef HAVE_CLIENT_API
00159 CTL_EXPORT ctl_channel *ctl_provider_create_channel(ctl_provider *provider, const char *subject, ctl_channel_listener *listener, void *context);
00160 CTL_EXPORT ctl_trade *ctl_channel_create_trade(ctl_provider *provider, ctl_channel *channel, const char *model);
00161 #endif
00162
00163
00164 #ifdef HAVE_SERVER_API
00165
00172 typedef struct {
00181 void (*channel_created)(void *context, ctl_provider *provider, ctl_channel *channel);
00182
00189 void (*channel_closed)(void *context, ctl_provider *provider, ctl_channel *channel);
00190 } ctl_app_listener;
00191
00203 typedef void (*ctl_audit_log_cb)(void *ctx, ctl_provider *provider, const char *id, ctl_trade *trade, ctl_tradeevent *ev);
00204 #endif
00205
00206 #ifdef HAVE_TRANSFORMER
00207 CTL_EXPORT ctl_provider *ctl_create_tf_server_provider(ctl_app_listener *listener, void *context, int num_models, const char * const *models, const char *namespacePattern);
00208 CTL_EXPORT ctl_provider *ctl_create_tf_client_provider(int num_models, const char * const *models);
00209 #else
00210
00211 #ifdef HAVE_DSDK
00212 #include "datasrc.h"
00213 CTL_EXPORT ctl_provider *ctl_create_ds_provider(ctl_app_listener *listener, void *context, int num_models, const char * const *models, const char *namespacePattern);
00214 CTL_EXPORT void ctl_provider_set_audit_dslog(ctl_provider *provider, ds_log_t *log);
00215 CTL_EXPORT void ctl_provider_set_audit_logger(ctl_provider *provider, ctl_audit_log_cb callback, void *ctx);
00216 CTL_EXPORT void ctl_provider_set_use_generic_messages(ctl_provider *provider, int use_generic_messages);
00217 CTL_EXPORT ctl_provider *ctl_create_ds_client_provider(int num_models, const char * const *models);
00218 CTL_EXPORT void ctl_provider_set_application_listener(ctl_provider *provider, ctl_app_listener *listener, void *context);
00219 #endif
00220
00221 #endif
00222
00223
00224
00225 CTL_EXPORT void ctl_provider_dealloc(ctl_provider *provider);
00226 CTL_EXPORT void ctl_channel_set_listener(ctl_provider *provider, ctl_channel *channel, ctl_channel_listener *listener, void *context);
00227 CTL_EXPORT const char *ctl_channel_get_username(ctl_provider *provider, ctl_channel *channel);
00228 CTL_EXPORT const char *ctl_channel_get_subject(ctl_provider *provider, ctl_channel *channel);
00229 CTL_EXPORT void *ctl_channel_get_user_pointer(ctl_provider *provider, ctl_channel *channel);
00230 CTL_EXPORT void ctl_channel_set_user_pointer(ctl_provider *provider, ctl_channel *channel, void *ptr);
00231 CTL_EXPORT void ctl_channel_close(ctl_provider *provider, ctl_channel *channel);
00232
00233
00234 CTL_EXPORT void ctl_trade_set_listener(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, ctl_trade_listener *listener, void *context);
00235 CTL_EXPORT ctl_error ctl_trade_process_event(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, ctl_tradeevent *tradeevent);
00236 CTL_EXPORT const char *ctl_trade_get_field(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, const char *fieldname);
00237 CTL_EXPORT const char *ctl_trade_get_protocol(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00238 CTL_EXPORT const char *ctl_trade_get_requestid(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00239 CTL_EXPORT const char *ctl_trade_get_state(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00240 CTL_EXPORT void *ctl_trade_get_user_pointer(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade);
00241 CTL_EXPORT void ctl_trade_set_user_pointer(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, void *ptr);
00242
00243
00244 CTL_EXPORT ctl_tradeevent *ctl_trade_create_tradeevent(ctl_provider *provider, ctl_channel *channel, ctl_trade *trade, const char *type);
00245 CTL_EXPORT void ctl_tradeevent_add_field(ctl_tradeevent *ev, const char *name, const char *value);
00246 CTL_EXPORT const char *ctl_tradeevent_get_type(ctl_tradeevent *ev);
00247 CTL_EXPORT const char *ctl_tradeevent_get_field(ctl_tradeevent *ev, const char *name);
00248 CTL_EXPORT char const **ctl_tradeevent_get_fields(ctl_tradeevent *ev, int *num_ptr);
00249 CTL_EXPORT void ctl_tradeevent_dealloc(ctl_tradeevent *ev);
00250 CTL_EXPORT ctl_tradeevent *ctl_tradeevent_clone(ctl_tradeevent *ev);
00251
00257 typedef enum {
00258 ctl_LOG_FINEST = 1,
00259 ctl_LOG_FINER,
00260 ctl_LOG_DEBUG,
00261 ctl_LOG_INFO,
00262 ctl_LOG_NOTIFY,
00263 ctl_LOG_WARN,
00264 ctl_LOG_ERROR,
00265 ctl_LOG_CRITICAL,
00266 ctl_LOG_CONFIG
00267 } ctl_loglevel;
00268
00280 typedef void (*ctl_log_cb)(void *ctx, ctl_loglevel level, const char *fmt, va_list ap);
00281
00282 CTL_EXPORT void ctl_set_log_callback(ctl_provider *provider, ctl_log_cb callback, void *ctx);
00283 CTL_EXPORT void ctl_free(void *ptr);
00284 CTL_EXPORT void ctl_log(ctl_provider *provider, ctl_loglevel level, const char *fmt, ...);
00285 CTL_EXPORT void ctl_set_allocator(void *(*realloc_func)(void *ctx, void *orig, size_t size), void (*free_func)(void *ctx, void *), void *ctx);
00286 CTL_EXPORT void *ctl_malloc(size_t size);
00287 CTL_EXPORT void *ctl_realloc(void *orig, size_t size);
00288 CTL_EXPORT void ctl_free(void *);
00289 CTL_EXPORT char *ctl_strdup(const char *orig);
00290 CTL_EXPORT void *ctl_calloc(size_t nmemb, size_t size);
00291 CTL_EXPORT const char *ctl_loglevel_tostring(ctl_loglevel level);
00292 CTL_EXPORT const char *ctl_error_tostring(ctl_error error);
00293 CTL_EXPORT char *ctl_tradeevent_tostring(ctl_tradeevent *trade, char *buf, size_t buflen);
00294 CTL_EXPORT char *ctl_trade_tostring(ctl_trade *trade, char *buf, size_t buflen);
00295 CTL_EXPORT char *ctl_channel_tostring(ctl_channel *channel, char *buf, size_t buflen);
00296
00297
00298 #endif