C AMQP Protocol Engine API  0.4
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
engine.h
Go to the documentation of this file.
1 #ifndef PROTON_ENGINE_H
2 #define PROTON_ENGINE_H 1
3 
4 /*
5  *
6  * Licensed to the Apache Software Foundation (ASF) under one
7  * or more contributor license agreements. See the NOTICE file
8  * distributed with this work for additional information
9  * regarding copyright ownership. The ASF licenses this file
10  * to you under the Apache License, Version 2.0 (the
11  * "License"); you may not use this file except in compliance
12  * with the License. You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing,
17  * software distributed under the License is distributed on an
18  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19  * KIND, either express or implied. See the License for the
20  * specific language governing permissions and limitations
21  * under the License.
22  *
23  */
24 
25 #include <proton/import_export.h>
26 #ifndef __cplusplus
27 #include <stdbool.h>
28 #endif
29 #include <stddef.h>
30 #include <sys/types.h>
31 #include <proton/codec.h>
32 #include <proton/error.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
46 typedef struct pn_session_t pn_session_t;
47 typedef struct pn_link_t pn_link_t;
50 
51 typedef enum {
53  PN_SOURCE = 1,
54  PN_TARGET = 2,
57 typedef enum {
62 typedef enum {
69 
70 typedef struct pn_delivery_tag_t {
71  size_t size;
72  const char *bytes;
74 
75 #ifndef SWIG // older versions of SWIG choke on this:
76 static inline pn_delivery_tag_t pn_dtag(const char *bytes, size_t size) {
77  pn_delivery_tag_t dtag = {size, bytes};
78  return dtag;
79 }
80 #endif
81 
82 typedef int pn_state_t;
84 #define PN_LOCAL_UNINIT (1)
85 #define PN_LOCAL_ACTIVE (2)
86 #define PN_LOCAL_CLOSED (4)
87 #define PN_REMOTE_UNINIT (8)
88 #define PN_REMOTE_ACTIVE (16)
89 #define PN_REMOTE_CLOSED (32)
91 #define PN_LOCAL_MASK (PN_LOCAL_UNINIT | PN_LOCAL_ACTIVE | PN_LOCAL_CLOSED)
92 #define PN_REMOTE_MASK (PN_REMOTE_UNINIT | PN_REMOTE_ACTIVE | PN_REMOTE_CLOSED)
93 
99 typedef enum pn_disposition_t {
106 
107 typedef int pn_trace_t;
108 
109 #define PN_TRACE_OFF (0)
110 #define PN_TRACE_RAW (1)
111 #define PN_TRACE_FRM (2)
112 #define PN_TRACE_DRV (4)
113 
114 #define PN_SESSION_WINDOW (1024)
115 
116 // connection
117 
123 
129 PN_EXTERN pn_state_t pn_connection_state(pn_connection_t *connection);
133 PN_EXTERN const char *pn_connection_get_container(pn_connection_t *connection);
135 PN_EXTERN void pn_connection_set_container(pn_connection_t *connection, const char *container);
137 PN_EXTERN const char *pn_connection_get_hostname(pn_connection_t *connection);
139 PN_EXTERN void pn_connection_set_hostname(pn_connection_t *connection, const char *hostname);
146 
147 
164 
174 
184 
194 
200 PN_EXTERN int pn_transport_bind(pn_transport_t *transport, pn_connection_t *connection);
201 
203 
218 PN_EXTERN pn_session_t *pn_session_head(pn_connection_t *connection, pn_state_t state);
219 
232 PN_EXTERN pn_session_t *pn_session_next(pn_session_t *session, pn_state_t state);
233 
248 PN_EXTERN pn_link_t *pn_link_head(pn_connection_t *connection, pn_state_t state);
249 
262 PN_EXTERN pn_link_t *pn_link_next(pn_link_t *link, pn_state_t state);
263 
268 
277 
284 PN_EXTERN void pn_connection_set_context(pn_connection_t *connection, void *context);
285 
286 
287 // transport
289 /* deprecated */
290 PN_EXTERN ssize_t pn_transport_input(pn_transport_t *transport, const char *bytes, size_t available);
291 /* deprecated */
292 PN_EXTERN ssize_t pn_transport_output(pn_transport_t *transport, char *bytes, size_t size);
293 
306 
315 PN_EXTERN char *pn_transport_tail(pn_transport_t *transport);
316 
328 PN_EXTERN int pn_transport_push(pn_transport_t *transport, size_t size);
329 
337 
350 PN_EXTERN ssize_t pn_transport_pending(pn_transport_t *transport);
351 
361 PN_EXTERN const char *pn_transport_head(pn_transport_t *transport);
362 
371 PN_EXTERN void pn_transport_pop(pn_transport_t *transport, size_t size);
372 
380 
381 
396 PN_EXTERN void pn_transport_trace(pn_transport_t *transport, pn_trace_t trace);
397 // max frame of zero means "unlimited"
399 PN_EXTERN void pn_transport_set_max_frame(pn_transport_t *transport, uint32_t size);
401 /* timeout of zero means "no timeout" */
405 PN_EXTERN uint64_t pn_transport_get_frames_output(const pn_transport_t *transport);
406 PN_EXTERN uint64_t pn_transport_get_frames_input(const pn_transport_t *transport);
409 
410 // session
411 PN_EXTERN pn_state_t pn_session_state(pn_session_t *session);
414 PN_EXTERN void pn_session_open(pn_session_t *session);
416 PN_EXTERN void pn_session_free(pn_session_t *session);
418 PN_EXTERN void pn_session_set_context(pn_session_t *session, void *context);
419 
420 // link
421 PN_EXTERN pn_link_t *pn_sender(pn_session_t *session, const char *name);
422 PN_EXTERN pn_link_t *pn_receiver(pn_session_t *session, const char *name);
423 PN_EXTERN const char *pn_link_name(pn_link_t *link);
426 PN_EXTERN pn_state_t pn_link_state(pn_link_t *link);
438 
442 
443 PN_EXTERN void pn_link_open(pn_link_t *sender);
444 PN_EXTERN void pn_link_close(pn_link_t *sender);
445 PN_EXTERN void pn_link_free(pn_link_t *sender);
447 PN_EXTERN void pn_link_set_context(pn_link_t *link, void *context);
448 
449 // sender
450 PN_EXTERN void pn_link_offered(pn_link_t *sender, int credit);
451 PN_EXTERN ssize_t pn_link_send(pn_link_t *sender, const char *bytes, size_t n);
452 PN_EXTERN void pn_link_drained(pn_link_t *sender);
453 //void pn_link_abort(pn_sender_t *sender);
454 
455 // receiver
456 PN_EXTERN void pn_link_flow(pn_link_t *receiver, int credit);
457 PN_EXTERN void pn_link_drain(pn_link_t *receiver, int credit);
458 PN_EXTERN ssize_t pn_link_recv(pn_link_t *receiver, char *bytes, size_t n);
459 
460 // terminus
463 
464 PN_EXTERN const char *pn_terminus_get_address(pn_terminus_t *terminus);
465 PN_EXTERN int pn_terminus_set_address(pn_terminus_t *terminus, const char *address);
468  pn_durability_t durability);
474 PN_EXTERN int pn_terminus_set_dynamic(pn_terminus_t *terminus, bool dynamic);
480 
481 // delivery
485 // how do we do delivery state?
494 PN_EXTERN void pn_delivery_update(pn_delivery_t *delivery, pn_disposition_t disposition);
496 //int pn_delivery_format(pn_delivery_t *delivery);
500 PN_EXTERN void pn_delivery_set_context(pn_delivery_t *delivery, void *context);
501 
504 
507 
510 
513 
514 PN_EXTERN const char *pn_condition_get_name(pn_condition_t *condition);
515 PN_EXTERN int pn_condition_set_name(pn_condition_t *condition, const char *name);
516 
518 PN_EXTERN int pn_condition_set_description(pn_condition_t *condition, const char *description);
519 
521 
523 PN_EXTERN const char *pn_condition_redirect_host(pn_condition_t *condition);
525 
526 #ifdef __cplusplus
527 }
528 #endif
529 
530 #endif /* engine.h */