include/ctl.h

Go to the documentation of this file.
00001 /*
00002  *
00003  *    Copyright CAPLIN Systems Ltd 2000-2015
00004  *
00005  *
00006  *    $Author: dominic $
00007  *    $DateTime: 2015/07/23 08:43:31 $
00008  *    $Change: 302564 $
00009  *    $Id: //CDev/V-6_2/trading/include/ctl.h#5 $
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 /* DataSource API */
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); /* Deallocates 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); // User to free returned 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

Generated on Fri Aug 14 12:41:23 2015 for Trading API for C by  doxygen 1.5.3