00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef ADBUS_H
00027 #define ADBUS_H
00028
00029 #include <stdint.h>
00030 #include <stdlib.h>
00031 #include <setjmp.h>
00032
00033
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037
00038 #if defined ADBUS_SHARED_LIBRARY
00039 # ifdef _MSC_VER
00040 # if defined ADBUS_LIBRARY
00041 # define ADBUS_API __declspec(dllexport)
00042 # else
00043 # define ADBUS_API __declspec(dllimport)
00044 # endif
00045 # elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && defined(__ELF__)
00046 # define ADBUS_API __attribute__((visibility("default"))) extern
00047 # else
00048 # define ADBUS_API extern
00049 # endif
00050 #else
00051 # define ADBUS_API extern
00052 #endif
00053
00054 #if !defined ADBUS_INLINE
00055 # if defined __cplusplus || __STDC_VERSION__ + 0 >= 199901L
00056 # define ADBUS_INLINE static inline
00057 # else
00058 # define ADBUS_INLINE static
00059 # endif
00060 #endif
00061
00062 #undef interface
00063
00068 enum
00069 {
00070 ADBUS_SERVICE_ALLOW_REPLACEMENT = 0x01,
00071 ADBUS_SERVICE_REPLACE_EXISTING = 0x02,
00072 ADBUS_SERVICE_DO_NOT_QUEUE = 0x04,
00073
00074 ADBUS_SERVICE_SUCCESS = 1,
00075
00076 ADBUS_SERVICE_REQUEST_IN_QUEUE = 2,
00077 ADBUS_SERVICE_REQUEST_FAILED = 3,
00078 ADBUS_SERVICE_REQUEST_ALREADY_OWNER = 4,
00079
00080 ADBUS_SERVICE_RELEASE_INVALID_NAME = 2,
00081 ADBUS_SERVICE_RELEASE_NOT_OWNER = 3,
00082
00083 ADBUS_SERVICE_START_SUCCESS = 1,
00084 ADBUS_SERVICE_START_ALREADY_RUNNING = 2,
00085 };
00086
00087 enum adbus_MessageType
00088 {
00089 ADBUS_MSG_INVALID = 0,
00090 ADBUS_MSG_METHOD = 1,
00091 ADBUS_MSG_RETURN = 2,
00092 ADBUS_MSG_ERROR = 3,
00093 ADBUS_MSG_SIGNAL = 4,
00094 };
00095
00096
00097 enum adbus_FieldType
00098 {
00099 ADBUS_UINT8 = 'y',
00100 ADBUS_BOOLEAN = 'b',
00101 ADBUS_INT16 = 'n',
00102 ADBUS_UINT16 = 'q',
00103 ADBUS_INT32 = 'i',
00104 ADBUS_UINT32 = 'u',
00105 ADBUS_INT64 = 'x',
00106 ADBUS_UINT64 = 't',
00107 ADBUS_DOUBLE = 'd',
00108 ADBUS_STRING = 's',
00109 ADBUS_OBJECT_PATH = 'o',
00110 ADBUS_SIGNATURE = 'g',
00111 ADBUS_ARRAY_BEGIN = 'a',
00112 ADBUS_STRUCT_BEGIN = '(',
00113 ADBUS_STRUCT_END = ')',
00114 ADBUS_VARIANT_BEGIN = 'v',
00115 ADBUS_DICTENTRY_BEGIN = '{',
00116 ADBUS_DICTENTRY_END = '}',
00117 };
00118
00119 enum
00120 {
00121 ADBUS_MSG_NO_REPLY = 1,
00122 ADBUS_MSG_NO_AUTOSTART = 2,
00123 };
00124
00125 enum adbus_BusType
00126 {
00127 ADBUS_DEFAULT_BUS,
00128 ADBUS_SYSTEM_BUS,
00129 ADBUS_SESSION_BUS,
00130 ADBUS_BUS_NUM
00131 };
00132
00133 enum adbus_BlockType
00134 {
00135 ADBUS_WAIT_FOR_CONNECTED,
00136 ADBUS_BLOCK,
00137 ADBUS_UNBLOCK,
00138 };
00139
00140 typedef struct adbus_Auth adbus_Auth;
00141 typedef struct adbus_Argument adbus_Argument;
00142 typedef struct adbus_Bind adbus_Bind;
00143 typedef struct adbus_Buffer adbus_Buffer;
00144 typedef struct adbus_BufArray adbus_BufArray;
00145 typedef struct adbus_BufVariant adbus_BufVariant;
00146 typedef struct adbus_Call adbus_Call;
00147 typedef struct adbus_CbData adbus_CbData;
00148 typedef struct adbus_Connection adbus_Connection;
00149 typedef struct adbus_ConnectionCallbacks adbus_ConnectionCallbacks;
00150 typedef struct adbus_ConnBind adbus_ConnBind;
00151 typedef struct adbus_ConnMatch adbus_ConnMatch;
00152 typedef struct adbus_ConnReply adbus_ConnReply;
00153 typedef struct adbus_Field adbus_Field;
00154 typedef struct adbus_Interface adbus_Interface;
00155 typedef struct adbus_Iterator adbus_Iterator;
00156 typedef struct adbus_IterArray adbus_IterArray;
00157 typedef struct adbus_IterVariant adbus_IterVariant;
00158 typedef struct adbus_Match adbus_Match;
00159 typedef struct adbus_Member adbus_Member;
00160 typedef struct adbus_Message adbus_Message;
00161 typedef struct adbus_MsgFactory adbus_MsgFactory;
00162 typedef struct adbus_Proxy adbus_Proxy;
00163 typedef struct adbus_Reply adbus_Reply;
00164 typedef struct adbus_Remote adbus_Remote;
00165 typedef struct adbus_Server adbus_Server;
00166 typedef struct adbus_Signal adbus_Signal;
00167 typedef struct adbus_State adbus_State;
00168 typedef enum adbus_BlockType adbus_BlockType;
00169 typedef enum adbus_BusType adbus_BusType;
00170 typedef enum adbus_FieldType adbus_FieldType;
00171 typedef enum adbus_MessageType adbus_MessageType;
00172 typedef uint32_t adbus_Bool;
00173
00174
00175 #ifdef _WIN32
00176 typedef int adbus_ssize_t;
00177 typedef uintptr_t adbus_Socket;
00178 # define ADBUS_SOCK_INVALID ~((adbus_Socket) 0)
00179 #else
00180 typedef ssize_t adbus_ssize_t;
00181 typedef int adbus_Socket;
00182 # define ADBUS_SOCK_INVALID -1
00183 #endif
00184
00185 typedef adbus_ssize_t (*adbus_SendCallback)(void*, const char*, size_t);
00186 typedef uint8_t (*adbus_RandCallback)(void*);
00187 typedef int (*adbus_MsgCallback)(adbus_CbData* d);
00188 typedef void (*adbus_Callback)(void*);
00189 typedef void (*adbus_ProxyCallback)(void*,adbus_Callback,void*);
00190 typedef int (*adbus_ProxyMsgCallback)(void*,adbus_MsgCallback,adbus_CbData*);
00191
00192 #include "adbus-iterator.h"
00193
00194
00195 typedef void (*adbus_LogCallback)(const char*, size_t);
00196 ADBUS_API void adbus_set_logger(adbus_LogCallback cb);
00197
00198
00199
00200
00201
00202 struct adbus_CbData
00203 {
00204 adbus_Connection* connection;
00205
00206 adbus_Message* msg;
00207 adbus_MsgFactory* ret;
00208 adbus_Bool noreturn;
00209
00210 adbus_Iterator setprop;
00211 adbus_Buffer* getprop;
00212
00213 void* user1;
00214 void* user2;
00215
00219 adbus_Iterator checkiter;
00220 jmp_buf jmpbuf;
00221 };
00222
00223 ADBUS_API int adbus_dispatch(adbus_MsgCallback callback, adbus_CbData* d);
00224
00225
00226 struct adbus_Argument
00227 {
00228 const char* value;
00229 int size;
00230 };
00231
00232 ADBUS_API void adbus_arg_init(adbus_Argument* args, size_t num);
00233
00234
00235 struct adbus_Message
00236 {
00237 const char* data;
00238 size_t size;
00239
00240 const char* argdata;
00241 size_t argsize;
00242
00243 adbus_MessageType type;
00244 uint8_t flags;
00245 uint32_t serial;
00246
00247 const char* signature;
00248 size_t signatureSize;
00249
00250 const uint32_t* replySerial;
00251 const char* path;
00252 size_t pathSize;
00253 const char* interface;
00254 size_t interfaceSize;
00255 const char* member;
00256 size_t memberSize;
00257 const char* error;
00258 size_t errorSize;
00259 const char* destination;
00260 size_t destinationSize;
00261 const char* sender;
00262 size_t senderSize;
00263
00264 adbus_Argument* arguments;
00265 size_t argumentsSize;
00266 };
00267
00268 ADBUS_API int adbus_parse(adbus_Message* m, char* data, size_t size);
00269 ADBUS_API int adbus_parseargs(adbus_Message* m);
00270 ADBUS_API void adbus_freeargs(adbus_Message* m);
00271 ADBUS_API size_t adbus_parse_size(const char* data, size_t size);
00272 ADBUS_API void adbus_clonedata(adbus_Message* from, adbus_Message* to);
00273 ADBUS_API void adbus_freedata(adbus_Message* m);
00274
00275
00276 ADBUS_API int adbus_connect_address(
00277 adbus_BusType type,
00278 char* buf,
00279 size_t sz);
00280
00281 ADBUS_API int adbus_bind_address(
00282 adbus_BusType type,
00283 char* buf,
00284 size_t sz);
00285
00286 ADBUS_API adbus_Socket adbus_sock_connect(
00287 adbus_BusType type);
00288
00289 ADBUS_API adbus_Socket adbus_sock_connect_s(
00290 const char* envstr,
00291 int size);
00292
00293 ADBUS_API int adbus_sock_cauth(
00294 adbus_Socket sock,
00295 adbus_Buffer* buffer);
00296
00297 ADBUS_API adbus_Socket adbus_sock_bind(
00298 adbus_BusType type);
00299
00300 ADBUS_API adbus_Socket adbus_sock_bind_s(
00301 const char* envstr,
00302 int size);
00303
00304 ADBUS_API adbus_Auth* adbus_sauth_new(
00305 adbus_SendCallback send,
00306 adbus_RandCallback rand,
00307 void* data);
00308
00309 ADBUS_API adbus_Auth* adbus_cauth_new(
00310 adbus_SendCallback send,
00311 adbus_RandCallback rand,
00312 void* data);
00313
00314 typedef adbus_Bool (*adbus_ExternalCallback)(void* data, const char* id);
00315
00316 ADBUS_API void adbus_sauth_external(
00317 adbus_Auth* a,
00318 adbus_ExternalCallback cb);
00319
00320 ADBUS_API void adbus_sauth_setuuid(adbus_Auth* a, const char* uuid);
00321
00322 ADBUS_API void adbus_cauth_external(adbus_Auth* a);
00323 ADBUS_API int adbus_cauth_start(adbus_Auth* a);
00324
00325 ADBUS_API void adbus_auth_free(adbus_Auth* a);
00326
00327
00328 ADBUS_API int adbus_auth_parse(adbus_Auth* a, adbus_Buffer* buf);
00329 ADBUS_API int adbus_auth_line(adbus_Auth* a, const char* line, size_t len);
00330
00331
00332
00333
00334
00335 ADBUS_API int adbus_error(
00336 adbus_CbData* details,
00337 const char* error,
00338 int errorSize,
00339 const char* message,
00340 int messageSize);
00341
00342 ADBUS_API int adbus_errorf(
00343 adbus_CbData* details,
00344 const char* error,
00345 const char* format,
00346 ...);
00347
00348 ADBUS_API int adbus_errorf_jmp(
00349 adbus_CbData* details,
00350 const char* error,
00351 const char* format,
00352 ...);
00353
00354 ADBUS_API int adbus_error_argument(
00355 adbus_CbData* details);
00356
00357
00358
00359
00360
00361
00362 typedef adbus_ssize_t (*adbus_SendMsgCallback)(void*, adbus_Message*);
00363 typedef void (*adbus_GetProxyCallback)(void*, adbus_ProxyCallback*, adbus_ProxyMsgCallback*, void**);
00364 typedef adbus_Bool (*adbus_ShouldProxyCallback)(void*);
00365 typedef int (*adbus_BlockCallback)(void*, adbus_BlockType, int timeoutms);
00366
00367 struct adbus_ConnectionCallbacks
00368 {
00369 adbus_Callback release;
00370 adbus_SendMsgCallback send_message;
00371 adbus_ProxyCallback proxy;
00372 adbus_ShouldProxyCallback should_proxy;
00373 adbus_GetProxyCallback get_proxy;
00374 adbus_BlockCallback block;
00375 };
00376
00377 ADBUS_API adbus_Connection* adbus_conn_new(adbus_ConnectionCallbacks* cb, void* user);
00378 ADBUS_API adbus_Connection* adbus_conn_get(adbus_BusType type);
00379 ADBUS_API void adbus_conn_set(adbus_BusType type, adbus_Connection* c);
00380
00381 ADBUS_API void adbus_conn_ref(adbus_Connection* connection);
00382 ADBUS_API void adbus_conn_deref(adbus_Connection* connection);
00383
00384 #define adbus_conn_free(c) adbus_conn_deref(c)
00385
00386
00387 ADBUS_API void adbus_conn_setsender(
00388 adbus_Connection* connection,
00389 adbus_SendMsgCallback callback,
00390 void* data);
00391
00392 ADBUS_API int adbus_conn_send(
00393 adbus_Connection* connection,
00394 adbus_Message* message);
00395
00396 ADBUS_API adbus_Bool adbus_conn_shouldproxy(
00397 adbus_Connection* connection);
00398
00399 ADBUS_API void adbus_conn_proxy(
00400 adbus_Connection* connection,
00401 adbus_Callback callback,
00402 void* user);
00403
00404 ADBUS_API void adbus_conn_getproxy(
00405 adbus_Connection* connection,
00406 adbus_ProxyCallback* cb,
00407 adbus_ProxyMsgCallback* msgcb,
00408 void** user);
00409
00410 ADBUS_API int adbus_conn_block(
00411 adbus_Connection* connection,
00412 adbus_BlockType type,
00413 int timeoutms);
00414
00415 ADBUS_API uint32_t adbus_conn_serial(
00416 adbus_Connection* connection);
00417
00418 ADBUS_API int adbus_conn_dispatch(
00419 adbus_Connection* connection,
00420 adbus_Message* message);
00421
00422 ADBUS_API int adbus_conn_parse(
00423 adbus_Connection* connection,
00424 adbus_Buffer* buffer);
00425
00426 ADBUS_API void adbus_conn_connect(
00427 adbus_Connection* connection,
00428 adbus_Callback callback,
00429 void* data);
00430
00431 ADBUS_API adbus_Bool adbus_conn_isconnected(
00432 const adbus_Connection* connection);
00433
00434 ADBUS_API const char* adbus_conn_uniquename(
00435 const adbus_Connection* connection,
00436 size_t* size);
00437
00438
00439 struct adbus_Match
00440 {
00441
00442 adbus_MessageType type;
00443
00444
00445
00446 adbus_Bool addMatchToBusDaemon;
00447
00448 int64_t replySerial;
00449
00450
00451 const char* sender;
00452 int senderSize;
00453 const char* destination;
00454 int destinationSize;
00455 const char* interface;
00456 int interfaceSize;
00457 const char* path;
00458 int pathSize;
00459 const char* member;
00460 int memberSize;
00461 const char* error;
00462 int errorSize;
00463
00464 adbus_Argument* arguments;
00465 size_t argumentsSize;
00466
00467 adbus_MsgCallback callback;
00468 void* cuser;
00469
00470 adbus_ProxyMsgCallback proxy;
00471 void* puser;
00472
00473 adbus_Callback release[2];
00474 void* ruser[2];
00475
00476 adbus_ProxyCallback relproxy;
00477 void* relpuser;
00478 };
00479
00480 ADBUS_API void adbus_match_init(adbus_Match* match);
00481
00482 struct adbus_Reply
00483 {
00484 uint32_t serial;
00485
00486 const char* remote;
00487 int remoteSize;
00488
00489 adbus_MsgCallback callback;
00490 void* cuser;
00491
00492 adbus_MsgCallback error;
00493 void* euser;
00494
00495 adbus_ProxyMsgCallback proxy;
00496 void* puser;
00497
00498 adbus_Callback release[2];
00499 void* ruser[2];
00500
00501 adbus_ProxyCallback relproxy;
00502 void* relpuser;
00503 };
00504
00505 ADBUS_API void adbus_reply_init(adbus_Reply* reply);
00506
00507 struct adbus_Bind
00508 {
00509 const char* path;
00510 int pathSize;
00511
00512 adbus_Interface* interface;
00513 void* cuser2;
00514
00515 adbus_ProxyMsgCallback proxy;
00516 void* puser;
00517
00518 adbus_Callback release[2];
00519 void* ruser[2];
00520
00521 adbus_ProxyCallback relproxy;
00522 void* relpuser;
00523 };
00524
00525 ADBUS_API void adbus_bind_init(adbus_Bind* bind);
00526
00527
00528 ADBUS_API adbus_ConnMatch* adbus_conn_addmatch(
00529 adbus_Connection* connection,
00530 const adbus_Match* match);
00531
00532 ADBUS_API void adbus_conn_removematch(
00533 adbus_Connection* connection,
00534 adbus_ConnMatch* match);
00535
00536 ADBUS_API adbus_ConnReply* adbus_conn_addreply(
00537 adbus_Connection* connection,
00538 const adbus_Reply* reply);
00539
00540 ADBUS_API void adbus_conn_removereply(
00541 adbus_Connection* connection,
00542 adbus_ConnReply* reply);
00543
00544 ADBUS_API adbus_ConnBind* adbus_conn_bind(
00545 adbus_Connection* connection,
00546 const adbus_Bind* bind);
00547
00548 ADBUS_API void adbus_conn_unbind(
00549 adbus_Connection* connection,
00550 adbus_ConnBind* bind);
00551
00552
00553
00554 ADBUS_API adbus_Interface* adbus_conn_interface(
00555 adbus_Connection* connection,
00556 const char* path,
00557 int pathSize,
00558 const char* interface,
00559 int interfaceSize,
00560 adbus_ConnBind** bind);
00561
00562 ADBUS_API adbus_Member* adbus_conn_method(
00563 adbus_Connection* connection,
00564 const char* path,
00565 int pathSize,
00566 const char* method,
00567 int methodSize,
00568 adbus_ConnBind** bind);
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579 ADBUS_API adbus_Interface* adbus_iface_new(const char* name, int size);
00580 ADBUS_API void adbus_iface_ref(adbus_Interface* interface);
00581 ADBUS_API void adbus_iface_deref(adbus_Interface* interface);
00582 #define adbus_iface_free(iface) adbus_iface_deref(iface)
00583
00584 ADBUS_API adbus_Member* adbus_iface_addmethod(
00585 adbus_Interface* interface,
00586 const char* name,
00587 int size);
00588
00589 ADBUS_API adbus_Member* adbus_iface_addsignal(
00590 adbus_Interface* interface,
00591 const char* name,
00592 int size);
00593
00594 ADBUS_API adbus_Member* adbus_iface_addproperty(
00595 adbus_Interface* interface,
00596 const char* name,
00597 int namesize,
00598 const char* sig,
00599 int sigsz);
00600
00601 ADBUS_API adbus_Member* adbus_iface_method(
00602 adbus_Interface* interface,
00603 const char* name,
00604 int size);
00605
00606 ADBUS_API adbus_Member* adbus_iface_signal(
00607 adbus_Interface* interface,
00608 const char* name,
00609 int size);
00610
00611 ADBUS_API adbus_Member* adbus_iface_property(
00612 adbus_Interface* interface,
00613 const char* name,
00614 int size);
00615
00616
00617 ADBUS_API void adbus_mbr_annotate(
00618 adbus_Member* member,
00619 const char* name,
00620 int nameSize,
00621 const char* value,
00622 int valueSize);
00623
00624 ADBUS_API void adbus_mbr_argsig(
00625 adbus_Member* member,
00626 const char* sig,
00627 int size);
00628
00629 ADBUS_API void adbus_mbr_retsig(
00630 adbus_Member* member,
00631 const char* sig,
00632 int size);
00633
00634 ADBUS_API void adbus_mbr_argname(
00635 adbus_Member* member,
00636 const char* name,
00637 int nameSize);
00638
00639
00640 ADBUS_API void adbus_mbr_retname(
00641 adbus_Member* member,
00642 const char* name,
00643 int nameSize);
00644
00645 ADBUS_API void adbus_mbr_addrelease(
00646 adbus_Member* member,
00647 adbus_Callback release,
00648 void* ruser);
00649
00650
00651 ADBUS_API void adbus_mbr_setmethod(
00652 adbus_Member* member,
00653 adbus_MsgCallback callback,
00654 void* user1);
00655
00656 ADBUS_API int adbus_mbr_call(
00657 adbus_Member* method,
00658 adbus_ConnBind* bind,
00659 adbus_CbData* data);
00660
00661
00662
00663
00664 ADBUS_API void adbus_mbr_setgetter(
00665 adbus_Member* member,
00666 adbus_MsgCallback callback,
00667 void* user1);
00668
00669 ADBUS_API void adbus_mbr_setsetter(
00670 adbus_Member* member,
00671 adbus_MsgCallback callback,
00672 void* user1);
00673
00674
00675
00676
00677
00678 #ifdef DOC
00679 ADBUS_INLINE int adbus_iter_align(adbus_Iterator* i, int alignment);
00680 ADBUS_INLINE int adbus_iter_alignfield(adbus_Iterator* i, char field);
00681 ADBUS_INLINE int adbus_iter_bool(adbus_Iterator* i, adbus_Bool** v);
00682 ADBUS_INLINE int adbus_iter_u8(adbus_Iterator* i, uint8_t** v);
00683 ADBUS_INLINE int adbus_iter_i16(adbus_Iterator* i, int16_t** v);
00684 ADBUS_INLINE int adbus_iter_u16(adbus_Iterator* i, uint16_t** v);
00685 ADBUS_INLINE int adbus_iter_i32(adbus_Iterator* i, int32_t** v);
00686 ADBUS_INLINE int adbus_iter_u32(adbus_Iterator* i, uint32_t** v);
00687 ADBUS_INLINE int adbus_iter_i64(adbus_Iterator* i, int64_t** v);
00688 ADBUS_INLINE int adbus_iter_u64(adbus_Iterator* i, uint64_t** v);
00689 ADBUS_INLINE int adbus_iter_double(adbus_Iterator* i, double** v);
00690 ADBUS_INLINE int adbus_iter_string(adbus_Iterator* i, const char** pstr, size_t* pstrsz);
00691 ADBUS_INLINE int adbus_iter_objectpath(adbus_Iterator* i, const char** str, size_t* strsz);
00692 ADBUS_INLINE int adbus_iter_signature(adbus_Iterator* i, const char** pstr, size_t* pstrsz);
00693 ADBUS_INLINE int adbus_iter_beginarray(adbus_Iterator* i, adbus_IterArray* a);
00694 ADBUS_INLINE adbus_Bool adbus_iter_inarray(adbus_Iterator* i, adbus_IterArray* a);
00695 ADBUS_INLINE int adbus_iter_endarray(adbus_Iterator* i, adbus_IterArray* a);
00696 ADBUS_INLINE int adbus_iter_begindictentry(adbus_Iterator* i);
00697 ADBUS_INLINE int adbus_iter_enddictentry(adbus_Iterator* i);
00698 ADBUS_INLINE int adbus_iter_beginstruct(adbus_Iterator* i);
00699 ADBUS_INLINE int adbus_iter_endstruct(adbus_Iterator* i);
00700 ADBUS_INLINE int adbus_iter_beginvariant(adbus_Iterator* i, adbus_IterVariant* v);;
00701 ADBUS_INLINE int adbus_iter_endvariant(adbus_Iterator* i, adbus_IterVariant* v);;
00702 #endif
00703
00704 ADBUS_API int adbus_iter_value(adbus_Iterator* i);
00705 ADBUS_API void adbus_iter_buffer(adbus_Iterator* i, const adbus_Buffer* buf);
00706 ADBUS_API void adbus_iter_args(adbus_Iterator* i, const adbus_Message* msg);
00707
00708
00709
00710
00711
00712
00713
00714
00715 ADBUS_API void adbus_check_end(adbus_CbData* d);
00716 ADBUS_API adbus_Bool adbus_check_bool(adbus_CbData* d);
00717 ADBUS_API uint8_t adbus_check_u8(adbus_CbData* d);
00718 ADBUS_API int16_t adbus_check_i16(adbus_CbData* d);
00719 ADBUS_API uint16_t adbus_check_u16(adbus_CbData* d);
00720 ADBUS_API int32_t adbus_check_i32(adbus_CbData* d);
00721 ADBUS_API uint32_t adbus_check_u32(adbus_CbData* d);
00722 ADBUS_API int64_t adbus_check_i64(adbus_CbData* d);
00723 ADBUS_API uint64_t adbus_check_u64(adbus_CbData* d);
00724 ADBUS_API double adbus_check_double(adbus_CbData* d);
00725 ADBUS_API const char* adbus_check_string(adbus_CbData* d, size_t* size);
00726 ADBUS_API const char* adbus_check_objectpath(adbus_CbData* d, size_t* size);
00727 ADBUS_API const char* adbus_check_signature(adbus_CbData* d, size_t* size);
00728 ADBUS_API void adbus_check_beginarray(adbus_CbData* d, adbus_IterArray* a);
00729 ADBUS_API adbus_Bool adbus_check_inarray(adbus_CbData* d, adbus_IterArray* a);
00730 ADBUS_API void adbus_check_endarray(adbus_CbData* d, adbus_IterArray* a);
00731 ADBUS_API void adbus_check_beginstruct(adbus_CbData* d);
00732 ADBUS_API void adbus_check_endstruct(adbus_CbData* d);
00733 ADBUS_API void adbus_check_begindictentry(adbus_CbData* d);
00734 ADBUS_API void adbus_check_enddictentry(adbus_CbData* d);
00735 ADBUS_API const char* adbus_check_beginvariant(adbus_CbData* d, adbus_IterVariant* v);
00736 ADBUS_API void adbus_check_endvariant(adbus_CbData* d, adbus_IterVariant* v);
00737 ADBUS_API void adbus_check_value(adbus_CbData* d);
00738
00739
00740 struct adbus_BufArray
00741 {
00742 size_t szindex;
00743 size_t dataindex;
00744 const char* sigbegin;
00745 const char* sigend;
00746 };
00747
00748 struct adbus_BufVariant
00749 {
00750 const char* oldsig;
00751 };
00752
00753
00754 ADBUS_API adbus_Buffer* adbus_buf_new(void);
00755 ADBUS_API void adbus_buf_free(adbus_Buffer* b);
00756 ADBUS_API size_t adbus_buf_size(const adbus_Buffer* b);
00757 ADBUS_API char* adbus_buf_data(const adbus_Buffer* b);
00758 ADBUS_API void adbus_buf_reserve(adbus_Buffer* b, size_t sz);
00759 ADBUS_API char* adbus_buf_release(adbus_Buffer* b);
00760 ADBUS_API void adbus_buf_reset(adbus_Buffer* b);
00761 ADBUS_API void adbus_buf_remove(adbus_Buffer* b, size_t off, size_t num);
00762 ADBUS_API const char* adbus_buf_line(adbus_Buffer* b, size_t* sz);
00763 ADBUS_API char* adbus_buf_recvbuf(adbus_Buffer* b, size_t len);
00764 ADBUS_API void adbus_buf_recvd(adbus_Buffer* b, size_t len, adbus_ssize_t recvd);
00765
00766 ADBUS_API void adbus_buf_append(adbus_Buffer* b, const char* data, size_t sz);
00767 ADBUS_API void adbus_buf_align(adbus_Buffer* b, int alignment);
00768 ADBUS_API void adbus_buf_alignfield(adbus_Buffer* b, char field);
00769 ADBUS_API const char* adbus_buf_sig(const adbus_Buffer* b, size_t* sz);
00770 ADBUS_API const char* adbus_buf_signext(const adbus_Buffer* b, size_t* sz);
00771 ADBUS_API void adbus_buf_setsig(adbus_Buffer* b, const char* sig, int size);
00772 ADBUS_API void adbus_buf_appendsig(adbus_Buffer* b, const char* sig, int size);
00773 ADBUS_API int adbus_buf_appendvalue(adbus_Buffer* b, adbus_Iterator* iter);
00774
00775
00776 ADBUS_API void adbus_buf_end(adbus_Buffer* b);
00777 ADBUS_API void adbus_buf_bool(adbus_Buffer* b, adbus_Bool v);
00778 ADBUS_API void adbus_buf_u8(adbus_Buffer* b, uint8_t v);
00779 ADBUS_API void adbus_buf_i16(adbus_Buffer* b, int16_t v);
00780 ADBUS_API void adbus_buf_u16(adbus_Buffer* b, uint16_t v);
00781 ADBUS_API void adbus_buf_i32(adbus_Buffer* b, int32_t v);
00782 ADBUS_API void adbus_buf_u32(adbus_Buffer* b, uint32_t v);
00783 ADBUS_API void adbus_buf_i64(adbus_Buffer* b, int64_t v);
00784 ADBUS_API void adbus_buf_u64(adbus_Buffer* b, uint64_t v);
00785 ADBUS_API void adbus_buf_double(adbus_Buffer* b, double v);
00786 ADBUS_API void adbus_buf_string(adbus_Buffer* b, const char* str, int size);
00787 ADBUS_API void adbus_buf_objectpath(adbus_Buffer* b, const char* str, int size);
00788 ADBUS_API void adbus_buf_signature(adbus_Buffer* b, const char* str, int size);
00789 ADBUS_API void adbus_buf_beginarray(adbus_Buffer* b, adbus_BufArray* a);
00790 ADBUS_API void adbus_buf_arrayentry(adbus_Buffer* b, adbus_BufArray* a);
00791 ADBUS_API void adbus_buf_checkarrayentry(adbus_Buffer* b, adbus_BufArray* a);
00792 ADBUS_API void adbus_buf_endarray(adbus_Buffer* b, adbus_BufArray* a);
00793 ADBUS_API void adbus_buf_begindictentry(adbus_Buffer* b);
00794 ADBUS_API void adbus_buf_enddictentry(adbus_Buffer* b);
00795 ADBUS_API void adbus_buf_beginstruct(adbus_Buffer* b);
00796 ADBUS_API void adbus_buf_endstruct(adbus_Buffer* b);
00797 ADBUS_API void adbus_buf_beginvariant(adbus_Buffer* b, adbus_BufVariant* v, const char* sig, int sigsize);
00798 ADBUS_API void adbus_buf_endvariant(adbus_Buffer* b, adbus_BufVariant* v);
00799
00800 ADBUS_API int adbus_flip_value(char** data, size_t* size, const char** sig);
00801 ADBUS_API int adbus_flip_data(char* data, size_t size, const char* sig);
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815 ADBUS_API adbus_MsgFactory* adbus_msg_new(void);
00816 ADBUS_API void adbus_msg_free(adbus_MsgFactory* m);
00817 ADBUS_API void adbus_msg_reset(adbus_MsgFactory* m);
00818
00819
00820 ADBUS_API int adbus_msg_build(adbus_MsgFactory* m, adbus_Message* msg);
00821 ADBUS_API void adbus_msg_iterator(const adbus_Message* m, adbus_Iterator* iterator);
00822
00823 ADBUS_API const char* adbus_msg_path(const adbus_MsgFactory* m, size_t* len);
00824 ADBUS_API const char* adbus_msg_interface(const adbus_MsgFactory* m, size_t* len);
00825 ADBUS_API const char* adbus_msg_sender(const adbus_MsgFactory* m, size_t* len);
00826 ADBUS_API const char* adbus_msg_destination(const adbus_MsgFactory* m, size_t* len);
00827 ADBUS_API const char* adbus_msg_member(const adbus_MsgFactory* m, size_t* len);
00828 ADBUS_API const char* adbus_msg_error(const adbus_MsgFactory* m, size_t* len);
00829
00830 ADBUS_API adbus_MessageType adbus_msg_type(const adbus_MsgFactory* m);
00831 ADBUS_API uint8_t adbus_msg_flags(const adbus_MsgFactory* m);
00832 ADBUS_API int64_t adbus_msg_serial(const adbus_MsgFactory* m);
00833 ADBUS_API adbus_Bool adbus_msg_reply(const adbus_MsgFactory* m, uint32_t* serial);
00834
00835
00836 ADBUS_API void adbus_msg_settype(adbus_MsgFactory* m, adbus_MessageType type);
00837 ADBUS_API void adbus_msg_setserial(adbus_MsgFactory* m, uint32_t serial);
00838 ADBUS_API void adbus_msg_setflags(adbus_MsgFactory* m, uint8_t flags);
00839 ADBUS_API void adbus_msg_setreply(adbus_MsgFactory* m, uint32_t reply);
00840
00841 ADBUS_API void adbus_msg_setpath(adbus_MsgFactory* m, const char* str, int size);
00842 ADBUS_API void adbus_msg_setinterface(adbus_MsgFactory* m, const char* str, int size);
00843 ADBUS_API void adbus_msg_setmember(adbus_MsgFactory* m, const char* str, int size);
00844 ADBUS_API void adbus_msg_seterror(adbus_MsgFactory* m, const char* str, int size);
00845 ADBUS_API void adbus_msg_setdestination(adbus_MsgFactory* m, const char* str, int size);
00846 ADBUS_API void adbus_msg_setsender(adbus_MsgFactory* m, const char* str, int size);
00847
00848 ADBUS_API int adbus_msg_send(adbus_MsgFactory* m, adbus_Connection* c);
00849 ADBUS_API adbus_Buffer* adbus_msg_argbuffer(adbus_MsgFactory* m);
00850
00851 ADBUS_INLINE const adbus_Buffer* adbus_msg_argbuffer_c(const adbus_MsgFactory* m)
00852 { return adbus_msg_argbuffer((adbus_MsgFactory*) m); }
00853
00858 #define adbus_msg_appendsig(m,t,s) adbus_buf_appendsig(adbus_msg_argbuffer(m), t, s)
00859
00861 #define adbus_msg_setsig(m,t,s) adbus_buf_setsig(adbus_msg_argbuffer(m), t, s)
00862
00864 #define adbus_msg_append(m,d,s) adbus_buf_append(adbus_msg_argbuffer(m), d, s)
00865
00867 #define adbus_msg_end(m) adbus_buf_end(adbus_msg_argbuffer(m))
00868
00870 #define adbus_msg_bool(m,v) adbus_buf_bool(adbus_msg_argbuffer(m), v)
00871
00873 #define adbus_msg_u8(m,v) adbus_buf_u8(adbus_msg_argbuffer(m), v)
00874
00876 #define adbus_msg_i16(m,v) adbus_buf_i16(adbus_msg_argbuffer(m), v)
00877
00879 #define adbus_msg_u16(m,v) adbus_buf_u16(adbus_msg_argbuffer(m), v)
00880
00882 #define adbus_msg_i32(m,v) adbus_buf_i32(adbus_msg_argbuffer(m), v)
00883
00885 #define adbus_msg_u32(m,v) adbus_buf_u32(adbus_msg_argbuffer(m), v)
00886
00888 #define adbus_msg_i64(m,v) adbus_buf_i64(adbus_msg_argbuffer(m), v)
00889
00891 #define adbus_msg_u64(m,v) adbus_buf_u64(adbus_msg_argbuffer(m), v)
00892
00894 #define adbus_msg_double(m,v) adbus_buf_double(adbus_msg_argbuffer(m), v)
00895
00897 #define adbus_msg_string(m,v,s) adbus_buf_string(adbus_msg_argbuffer(m), v, s)
00898
00900 #define adbus_msg_objectpath(m,v,s) adbus_buf_objectpath(adbus_msg_argbuffer(m), v, s)
00901
00903 #define adbus_msg_beginarray(m,a) adbus_buf_beginarray(adbus_msg_argbuffer(m), a)
00904
00906 #define adbus_msg_arrayentry(m,a) adbus_buf_arrayentry(adbus_msg_argbuffer(m), a)
00907
00909 #define adbus_msg_endarray(m,a) adbus_buf_endarray(adbus_msg_argbuffer(m), a)
00910
00912 #define adbus_msg_beginstruct(m) adbus_buf_beginstruct(adbus_msg_argbuffer(m))
00913
00915 #define adbus_msg_endstruct(m) adbus_buf_endstruct(adbus_msg_argbuffer(m))
00916
00918 #define adbus_msg_begindictentry(m) adbus_buf_begindictentry(adbus_msg_argbuffer(m))
00919
00921 #define adbus_msg_enddictentry(m) adbus_buf_enddictentry(adbus_msg_argbuffer(m))
00922
00924 #define adbus_msg_beginvariant(m,v,t,s) adbus_buf_beginvariant(adbus_msg_argbuffer(m), v, t, s)
00925
00927 #define adbus_msg_endvariant(m,v) adbus_buf_endvariant(adbus_msg_argbuffer(m), v)
00928
00941 ADBUS_API adbus_State* adbus_state_new(void);
00942 ADBUS_API void adbus_state_free(adbus_State* state);
00943 ADBUS_API void adbus_state_reset(adbus_State* state);
00944
00945 ADBUS_API void adbus_state_bind(
00946 adbus_State* state,
00947 adbus_Connection* connection,
00948 const adbus_Bind* bind);
00949
00950 ADBUS_API void adbus_state_addmatch(
00951 adbus_State* state,
00952 adbus_Connection* connection,
00953 const adbus_Match* match);
00954
00955 ADBUS_API void adbus_state_addreply(
00956 adbus_State* state,
00957 adbus_Connection* connection,
00958 const adbus_Reply* reply);
00959
00960
00961
00962
00963 struct adbus_Call
00964 {
00965 adbus_MsgFactory* msg;
00966
00967 adbus_MsgCallback callback;
00968 void* cuser;
00969
00970 adbus_MsgCallback error;
00971 void* euser;
00972
00973 adbus_Callback release[2];
00974 void* ruser[2];
00975 };
00976
00977 ADBUS_API adbus_Proxy* adbus_proxy_new(
00978 adbus_State* state);
00979
00980 ADBUS_API void adbus_proxy_init(
00981 adbus_Proxy* proxy,
00982 adbus_Connection* connection,
00983 const char* service,
00984 int ssize,
00985 const char* path,
00986 int psize);
00987
00988 ADBUS_API void adbus_proxy_free(
00989 adbus_Proxy* proxy);
00990
00991 ADBUS_API void adbus_proxy_setinterface(
00992 adbus_Proxy* proxy,
00993 const char* interface,
00994 int isize);
00995
00996 ADBUS_API void adbus_proxy_signal(
00997 adbus_Proxy* proxy,
00998 adbus_Match* match,
00999 const char* signal,
01000 int size);
01001
01002 ADBUS_API void adbus_call_method(
01003 adbus_Proxy* proxy,
01004 adbus_Call* call,
01005 const char* method,
01006 int size);
01007
01008 ADBUS_API void adbus_call_setproperty(
01009 adbus_Proxy* proxy,
01010 adbus_Call* call,
01011 const char* property,
01012 int propsize,
01013 const char* type,
01014 int typesize);
01015
01016 ADBUS_API void adbus_call_getproperty(
01017 adbus_Proxy* proxy,
01018 adbus_Call* call,
01019 const char* property,
01020 int propsize);
01021
01022 ADBUS_API void adbus_call_send(
01023 adbus_Proxy* proxy,
01024 adbus_Call* call);
01025
01026
01027 ADBUS_API adbus_Signal* adbus_sig_new(
01028 adbus_Member* mbr);
01029
01030 ADBUS_API void adbus_sig_free(
01031 adbus_Signal* signal);
01032
01033 ADBUS_API void adbus_sig_reset(
01034 adbus_Signal* signal);
01035
01036 ADBUS_API void adbus_sig_bind(
01037 adbus_Signal* signal,
01038 adbus_Connection* connection,
01039 const char* path,
01040 int pathSize);
01041
01042 ADBUS_API adbus_MsgFactory* adbus_sig_msg(
01043 adbus_Signal* signal);
01044
01045 ADBUS_API void adbus_sig_emit(
01046 adbus_Signal* signal);
01047
01048
01049
01050
01051 ADBUS_API adbus_Server* adbus_serv_new(adbus_Interface* bus);
01052 ADBUS_API void adbus_serv_free(adbus_Server* s);
01053
01054 ADBUS_API adbus_Remote* adbus_serv_connect(
01055 adbus_Server* s,
01056 adbus_SendMsgCallback send,
01057 void* data);
01058
01059 ADBUS_API void adbus_remote_disconnect(adbus_Remote* r);
01060 ADBUS_API int adbus_remote_dispatch(adbus_Remote* r, adbus_Message* m);
01061 ADBUS_API int adbus_remote_parse(adbus_Remote* r, adbus_Buffer* buf);
01062
01063
01064 #ifdef __cplusplus
01065 }
01066 #endif
01067
01068 #endif
01069