00001 #ifndef PROTON_ENGINE_H
00002 #define PROTON_ENGINE_H 1
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <proton/import_export.h>
00026 #ifndef __cplusplus
00027 #include <stdbool.h>
00028 #endif
00029 #include <stddef.h>
00030 #include <sys/types.h>
00031 #include <proton/codec.h>
00032 #include <proton/error.h>
00033
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037
00038
00039
00040
00041
00042
00043
00044 typedef struct pn_transport_t pn_transport_t;
00045 typedef struct pn_connection_t pn_connection_t;
00046 typedef struct pn_session_t pn_session_t;
00047 typedef struct pn_link_t pn_link_t;
00048 typedef struct pn_terminus_t pn_terminus_t;
00049 typedef struct pn_condition_t pn_condition_t;
00050
00051 typedef enum {
00052 PN_UNSPECIFIED = 0,
00053 PN_SOURCE = 1,
00054 PN_TARGET = 2,
00055 PN_COORDINATOR = 3
00056 } pn_terminus_type_t;
00057 typedef enum {
00058 PN_NONDURABLE = 0,
00059 PN_CONFIGURATION = 1,
00060 PN_DELIVERIES = 2
00061 } pn_durability_t;
00062 typedef enum {
00063 PN_LINK_CLOSE,
00064 PN_SESSION_CLOSE,
00065 PN_CONNECTION_CLOSE,
00066 PN_NEVER
00067 } pn_expiry_policy_t;
00068 typedef struct pn_delivery_t pn_delivery_t;
00069
00070 typedef struct pn_delivery_tag_t {
00071 size_t size;
00072 const char *bytes;
00073 } pn_delivery_tag_t;
00074
00075 #ifndef SWIG // older versions of SWIG choke on this:
00076 static inline pn_delivery_tag_t pn_dtag(const char *bytes, size_t size) {
00077 pn_delivery_tag_t dtag = {size, bytes};
00078 return dtag;
00079 }
00080 #endif
00081
00082 typedef int pn_state_t;
00083
00084 #define PN_LOCAL_UNINIT (1)
00085 #define PN_LOCAL_ACTIVE (2)
00086 #define PN_LOCAL_CLOSED (4)
00087 #define PN_REMOTE_UNINIT (8)
00088 #define PN_REMOTE_ACTIVE (16)
00089 #define PN_REMOTE_CLOSED (32)
00090
00091 #define PN_LOCAL_MASK (PN_LOCAL_UNINIT | PN_LOCAL_ACTIVE | PN_LOCAL_CLOSED)
00092 #define PN_REMOTE_MASK (PN_REMOTE_UNINIT | PN_REMOTE_ACTIVE | PN_REMOTE_CLOSED)
00093
00094
00095
00096
00097
00098
00099 typedef enum pn_disposition_t {
00100 PN_RECEIVED=1,
00101 PN_ACCEPTED=2,
00102 PN_REJECTED=3,
00103 PN_RELEASED=4,
00104 PN_MODIFIED=5
00105 } pn_disposition_t;
00106
00107 typedef int pn_trace_t;
00108
00109 #define PN_TRACE_OFF (0)
00110 #define PN_TRACE_RAW (1)
00111 #define PN_TRACE_FRM (2)
00112 #define PN_TRACE_DRV (4)
00113
00114 #define PN_SESSION_WINDOW (1024)
00115
00116
00117
00118
00119
00120
00121
00122 PN_EXTERN pn_connection_t *pn_connection(void);
00123
00124
00125
00126
00127
00128
00129 PN_EXTERN pn_state_t pn_connection_state(pn_connection_t *connection);
00130
00131 PN_EXTERN pn_error_t *pn_connection_error(pn_connection_t *connection);
00132
00133 PN_EXTERN const char *pn_connection_get_container(pn_connection_t *connection);
00134
00135 PN_EXTERN void pn_connection_set_container(pn_connection_t *connection, const char *container);
00136
00137 PN_EXTERN const char *pn_connection_get_hostname(pn_connection_t *connection);
00138
00139 PN_EXTERN void pn_connection_set_hostname(pn_connection_t *connection, const char *hostname);
00140 PN_EXTERN const char *pn_connection_remote_container(pn_connection_t *connection);
00141 PN_EXTERN const char *pn_connection_remote_hostname(pn_connection_t *connection);
00142 PN_EXTERN pn_data_t *pn_connection_offered_capabilities(pn_connection_t *connection);
00143 PN_EXTERN pn_data_t *pn_connection_desired_capabilities(pn_connection_t *connection);
00144 PN_EXTERN pn_data_t *pn_connection_remote_offered_capabilities(pn_connection_t *connection);
00145 PN_EXTERN pn_data_t *pn_connection_remote_desired_capabilities(pn_connection_t *connection);
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 PN_EXTERN pn_delivery_t *pn_work_head(pn_connection_t *connection);
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 PN_EXTERN pn_delivery_t *pn_work_next(pn_delivery_t *delivery);
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 PN_EXTERN pn_session_t *pn_session(pn_connection_t *connection);
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 PN_EXTERN pn_transport_t *pn_transport(void);
00194
00195
00196
00197
00198
00199
00200 PN_EXTERN int pn_transport_bind(pn_transport_t *transport, pn_connection_t *connection);
00201
00202 PN_EXTERN int pn_transport_unbind(pn_transport_t *transport);
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 PN_EXTERN pn_session_t *pn_session_head(pn_connection_t *connection, pn_state_t state);
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232 PN_EXTERN pn_session_t *pn_session_next(pn_session_t *session, pn_state_t state);
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 PN_EXTERN pn_link_t *pn_link_head(pn_connection_t *connection, pn_state_t state);
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 PN_EXTERN pn_link_t *pn_link_next(pn_link_t *link, pn_state_t state);
00263
00264 PN_EXTERN void pn_connection_reset(pn_connection_t *connection);
00265 PN_EXTERN void pn_connection_open(pn_connection_t *connection);
00266 PN_EXTERN void pn_connection_close(pn_connection_t *connection);
00267 PN_EXTERN void pn_connection_free(pn_connection_t *connection);
00268
00269
00270
00271
00272
00273
00274
00275
00276 PN_EXTERN void *pn_connection_get_context(pn_connection_t *connection);
00277
00278
00279
00280
00281
00282
00283
00284 PN_EXTERN void pn_connection_set_context(pn_connection_t *connection, void *context);
00285
00286
00287
00288 PN_EXTERN pn_error_t *pn_transport_error(pn_transport_t *transport);
00289
00290 PN_EXTERN ssize_t pn_transport_input(pn_transport_t *transport, const char *bytes, size_t available);
00291
00292 PN_EXTERN ssize_t pn_transport_output(pn_transport_t *transport, char *bytes, size_t size);
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305 PN_EXTERN ssize_t pn_transport_capacity(pn_transport_t *transport);
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315 PN_EXTERN char *pn_transport_tail(pn_transport_t *transport);
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328 PN_EXTERN int pn_transport_push(pn_transport_t *transport, size_t size);
00329
00330
00331
00332
00333
00334
00335
00336 PN_EXTERN int pn_transport_close_tail(pn_transport_t *transport);
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350 PN_EXTERN ssize_t pn_transport_pending(pn_transport_t *transport);
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361 PN_EXTERN const char *pn_transport_head(pn_transport_t *transport);
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371 PN_EXTERN void pn_transport_pop(pn_transport_t *transport, size_t size);
00372
00373
00374
00375
00376
00377
00378
00379 PN_EXTERN int pn_transport_close_head(pn_transport_t *transport);
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395 PN_EXTERN pn_timestamp_t pn_transport_tick(pn_transport_t *transport, pn_timestamp_t now);
00396 PN_EXTERN void pn_transport_trace(pn_transport_t *transport, pn_trace_t trace);
00397
00398 PN_EXTERN uint32_t pn_transport_get_max_frame(pn_transport_t *transport);
00399 PN_EXTERN void pn_transport_set_max_frame(pn_transport_t *transport, uint32_t size);
00400 PN_EXTERN uint32_t pn_transport_get_remote_max_frame(pn_transport_t *transport);
00401
00402 PN_EXTERN pn_millis_t pn_transport_get_idle_timeout(pn_transport_t *transport);
00403 PN_EXTERN void pn_transport_set_idle_timeout(pn_transport_t *transport, pn_millis_t timeout);
00404 PN_EXTERN pn_millis_t pn_transport_get_remote_idle_timeout(pn_transport_t *transport);
00405 PN_EXTERN uint64_t pn_transport_get_frames_output(const pn_transport_t *transport);
00406 PN_EXTERN uint64_t pn_transport_get_frames_input(const pn_transport_t *transport);
00407 PN_EXTERN bool pn_transport_quiesced(pn_transport_t *transport);
00408 PN_EXTERN void pn_transport_free(pn_transport_t *transport);
00409
00410
00411 PN_EXTERN pn_state_t pn_session_state(pn_session_t *session);
00412 PN_EXTERN pn_error_t *pn_session_error(pn_session_t *session);
00413 PN_EXTERN pn_connection_t *pn_session_connection(pn_session_t *session);
00414 PN_EXTERN void pn_session_open(pn_session_t *session);
00415 PN_EXTERN void pn_session_close(pn_session_t *session);
00416 PN_EXTERN void pn_session_free(pn_session_t *session);
00417 PN_EXTERN void *pn_session_get_context(pn_session_t *session);
00418 PN_EXTERN void pn_session_set_context(pn_session_t *session, void *context);
00419
00420
00421 PN_EXTERN pn_link_t *pn_sender(pn_session_t *session, const char *name);
00422 PN_EXTERN pn_link_t *pn_receiver(pn_session_t *session, const char *name);
00423 PN_EXTERN const char *pn_link_name(pn_link_t *link);
00424 PN_EXTERN bool pn_link_is_sender(pn_link_t *link);
00425 PN_EXTERN bool pn_link_is_receiver(pn_link_t *link);
00426 PN_EXTERN pn_state_t pn_link_state(pn_link_t *link);
00427 PN_EXTERN pn_error_t *pn_link_error(pn_link_t *link);
00428 PN_EXTERN pn_session_t *pn_link_session(pn_link_t *link);
00429 PN_EXTERN pn_terminus_t *pn_link_source(pn_link_t *link);
00430 PN_EXTERN pn_terminus_t *pn_link_target(pn_link_t *link);
00431 PN_EXTERN pn_terminus_t *pn_link_remote_source(pn_link_t *link);
00432 PN_EXTERN pn_terminus_t *pn_link_remote_target(pn_link_t *link);
00433 PN_EXTERN pn_delivery_t *pn_link_current(pn_link_t *link);
00434 PN_EXTERN bool pn_link_advance(pn_link_t *link);
00435 PN_EXTERN int pn_link_credit(pn_link_t *link);
00436 PN_EXTERN int pn_link_queued(pn_link_t *link);
00437 PN_EXTERN int pn_link_available(pn_link_t *link);
00438
00439 PN_EXTERN int pn_link_unsettled(pn_link_t *link);
00440 PN_EXTERN pn_delivery_t *pn_unsettled_head(pn_link_t *link);
00441 PN_EXTERN pn_delivery_t *pn_unsettled_next(pn_delivery_t *delivery);
00442
00443 PN_EXTERN void pn_link_open(pn_link_t *sender);
00444 PN_EXTERN void pn_link_close(pn_link_t *sender);
00445 PN_EXTERN void pn_link_free(pn_link_t *sender);
00446 PN_EXTERN void *pn_link_get_context(pn_link_t *link);
00447 PN_EXTERN void pn_link_set_context(pn_link_t *link, void *context);
00448
00449
00450 PN_EXTERN void pn_link_offered(pn_link_t *sender, int credit);
00451 PN_EXTERN ssize_t pn_link_send(pn_link_t *sender, const char *bytes, size_t n);
00452 PN_EXTERN void pn_link_drained(pn_link_t *sender);
00453
00454
00455
00456 PN_EXTERN void pn_link_flow(pn_link_t *receiver, int credit);
00457 PN_EXTERN void pn_link_drain(pn_link_t *receiver, int credit);
00458 PN_EXTERN ssize_t pn_link_recv(pn_link_t *receiver, char *bytes, size_t n);
00459
00460
00461 PN_EXTERN pn_terminus_type_t pn_terminus_get_type(pn_terminus_t *terminus);
00462 PN_EXTERN int pn_terminus_set_type(pn_terminus_t *terminus, pn_terminus_type_t type);
00463
00464 PN_EXTERN const char *pn_terminus_get_address(pn_terminus_t *terminus);
00465 PN_EXTERN int pn_terminus_set_address(pn_terminus_t *terminus, const char *address);
00466 PN_EXTERN pn_durability_t pn_terminus_get_durability(pn_terminus_t *terminus);
00467 PN_EXTERN int pn_terminus_set_durability(pn_terminus_t *terminus,
00468 pn_durability_t durability);
00469 PN_EXTERN pn_expiry_policy_t pn_terminus_get_expiry_policy(pn_terminus_t *terminus);
00470 PN_EXTERN int pn_terminus_set_expiry_policy(pn_terminus_t *terminus, pn_expiry_policy_t policy);
00471 PN_EXTERN pn_seconds_t pn_terminus_get_timeout(pn_terminus_t *terminus);
00472 PN_EXTERN int pn_terminus_set_timeout(pn_terminus_t *terminus, pn_seconds_t);
00473 PN_EXTERN bool pn_terminus_is_dynamic(pn_terminus_t *terminus);
00474 PN_EXTERN int pn_terminus_set_dynamic(pn_terminus_t *terminus, bool dynamic);
00475 PN_EXTERN pn_data_t *pn_terminus_properties(pn_terminus_t *terminus);
00476 PN_EXTERN pn_data_t *pn_terminus_capabilities(pn_terminus_t *terminus);
00477 PN_EXTERN pn_data_t *pn_terminus_outcomes(pn_terminus_t *terminus);
00478 PN_EXTERN pn_data_t *pn_terminus_filter(pn_terminus_t *terminus);
00479 PN_EXTERN int pn_terminus_copy(pn_terminus_t *terminus, pn_terminus_t *src);
00480
00481
00482 PN_EXTERN pn_delivery_t *pn_delivery(pn_link_t *link, pn_delivery_tag_t tag);
00483 PN_EXTERN pn_delivery_tag_t pn_delivery_tag(pn_delivery_t *delivery);
00484 PN_EXTERN pn_link_t *pn_delivery_link(pn_delivery_t *delivery);
00485
00486 PN_EXTERN pn_disposition_t pn_delivery_local_state(pn_delivery_t *delivery);
00487 PN_EXTERN pn_disposition_t pn_delivery_remote_state(pn_delivery_t *delivery);
00488 PN_EXTERN bool pn_delivery_settled(pn_delivery_t *delivery);
00489 PN_EXTERN size_t pn_delivery_pending(pn_delivery_t *delivery);
00490 PN_EXTERN bool pn_delivery_partial(pn_delivery_t *delivery);
00491 PN_EXTERN bool pn_delivery_writable(pn_delivery_t *delivery);
00492 PN_EXTERN bool pn_delivery_readable(pn_delivery_t *delivery);
00493 PN_EXTERN bool pn_delivery_updated(pn_delivery_t *delivery);
00494 PN_EXTERN void pn_delivery_update(pn_delivery_t *delivery, pn_disposition_t disposition);
00495 PN_EXTERN void pn_delivery_clear(pn_delivery_t *delivery);
00496
00497 PN_EXTERN void pn_delivery_settle(pn_delivery_t *delivery);
00498 PN_EXTERN void pn_delivery_dump(pn_delivery_t *delivery);
00499 PN_EXTERN void *pn_delivery_get_context(pn_delivery_t *delivery);
00500 PN_EXTERN void pn_delivery_set_context(pn_delivery_t *delivery, void *context);
00501
00502 PN_EXTERN pn_condition_t *pn_connection_condition(pn_connection_t *connection);
00503 PN_EXTERN pn_condition_t *pn_connection_remote_condition(pn_connection_t *connection);
00504
00505 PN_EXTERN pn_condition_t *pn_session_condition(pn_session_t *session);
00506 PN_EXTERN pn_condition_t *pn_session_remote_condition(pn_session_t *session);
00507
00508 PN_EXTERN pn_condition_t *pn_link_condition(pn_link_t *link);
00509 PN_EXTERN pn_condition_t *pn_link_remote_condition(pn_link_t *link);
00510
00511 PN_EXTERN bool pn_condition_is_set(pn_condition_t *condition);
00512 PN_EXTERN void pn_condition_clear(pn_condition_t *condition);
00513
00514 PN_EXTERN const char *pn_condition_get_name(pn_condition_t *condition);
00515 PN_EXTERN int pn_condition_set_name(pn_condition_t *condition, const char *name);
00516
00517 PN_EXTERN const char *pn_condition_get_description(pn_condition_t *condition);
00518 PN_EXTERN int pn_condition_set_description(pn_condition_t *condition, const char *description);
00519
00520 PN_EXTERN pn_data_t *pn_condition_info(pn_condition_t *condition);
00521
00522 PN_EXTERN bool pn_condition_is_redirect(pn_condition_t *condition);
00523 PN_EXTERN const char *pn_condition_redirect_host(pn_condition_t *condition);
00524 PN_EXTERN int pn_condition_redirect_port(pn_condition_t *condition);
00525
00526 #ifdef __cplusplus
00527 }
00528 #endif
00529
00530 #endif