![]() |
Functions | |
void | close_dbus_connection (EasyDbus_conn *data) |
Close DBus connection. | |
int | easydbus_acquire_name (struct EasyDbus_core *core, char *serviceName, int flags, DBusError *err) |
Acquire service name. | |
int | easydbus_connect_to_bus (struct EasyDbus_core *core, DBusError *err, DBusBusType type_bus) |
Connect to dbus bus. | |
char * | easydbus_found_new_name (struct EasyDbus_core *core, char *oldName, int flags, DBusError *err) |
Found a new service name. | |
int | easydbus_get_address_onsession (struct EasyDbus_conn *data, char *serviceName) |
Acquire source address on session bus. | |
int | easydbus_get_address_onsystem (struct EasyDbus_conn *data, char *serviceName) |
Acquire source address for system dbus bus. | |
int | easydbus_get_address_serverSession (struct EasyDbus_conn *data, char *serviceName) |
Acquire source addres for server on session bus. | |
int | easydbus_set_request_flags (int easydbus_flags) |
Convert easydbus_connection_flags to dbus_flags. | |
int | easydbus_set_unique_nameID (struct EasyDbus_core *core, char *nameId) |
Set unique name ID. |
void close_dbus_connection | ( | EasyDbus_conn * | data | ) |
Close DBus connection.
For internal use only.
data | EasyDbus_conn object pointer |
Definition at line 340 of file acquire_internal.c.
References EasyDbus_core::conn.
00341 { 00342 struct EasyDbus_core *core = (struct EasyDbus_core *) data; 00343 00344 dbus_connection_close (core->conn); 00345 }
int easydbus_acquire_name | ( | struct EasyDbus_core * | core, | |
char * | serviceName, | |||
int | flags, | |||
DBusError * | err | |||
) | [inline] |
Acquire service name.
For internal use only.
core | pointer to EasyDbus_core object | |
serviceName | name used for acquire service name | |
flags | easydbus flags for connection | |
err | pointer to DBusError object. |
EASYDBUS_CONN_NAME_SERVICE_EXISTS name service exists.
EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE name service in queue.
EASYDBUS_CONN_NAME_SERVICE_PRIMARY name service is primary name.
Definition at line 90 of file acquire_name.c.
References EasyDbus_core::conn, EASYDBUS_CONN_NAME_SERVICE_EXISTS, EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE, EASYDBUS_CONN_NAME_SERVICE_PRIMARY, easydbus_set_request_flags(), and EasyDbusDebug.
Referenced by easydbus_conn_reconnect(), easydbus_found_new_name(), easydbus_get_address_onsession(), easydbus_get_address_onsystem(), and easydbus_get_address_serverSession().
00093 { 00094 int result = -1; 00095 int dbus_flags = 0; 00096 00097 EasyDbusDebug ("Request name"); 00098 00099 dbus_flags = easydbus_set_request_flags (flags); 00100 00101 /* TODO: manage return values correctly */ 00102 /* request for set service name */ 00103 result = dbus_bus_request_name 00104 (core->conn, serviceName, dbus_flags, err); 00105 00106 if (dbus_error_is_set (err)) { 00107 EasyDbusDebug ("Error %s from " 00108 "dbus_bus_request_name: %s", 00109 err->name, err->message); 00110 return -1; 00111 } 00112 00113 switch (result) { 00114 case DBUS_REQUEST_NAME_REPLY_EXISTS: 00115 EasyDbusDebug ("Owner already exist"); 00116 result = EASYDBUS_CONN_NAME_SERVICE_EXISTS; 00117 break; 00118 case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER: 00119 EasyDbusDebug ("Service is primary onwner"); 00120 result = EASYDBUS_CONN_NAME_SERVICE_PRIMARY; 00121 break; 00122 case DBUS_REQUEST_NAME_REPLY_IN_QUEUE: 00123 EasyDbusDebug ("Service in queue"); 00124 result = EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE; 00125 break; 00126 case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER: 00127 EasyDbusDebug ("Service already owner"); 00128 result = EASYDBUS_CONN_NAME_SERVICE_PRIMARY; 00129 break; 00130 default: 00131 EasyDbusDebug ("Error! Returned value not managed"); 00132 return -1; 00133 break; 00134 } 00135 00136 return result; 00137 }
int easydbus_connect_to_bus | ( | struct EasyDbus_core * | core, | |
DBusError * | err, | |||
DBusBusType | type_bus | |||
) |
Connect to dbus bus.
For internal use only.
core | pointer to struct EasyDbus_core object. | |
err | DBusError object pointer. | |
type_bus | DBusBusType value with dbus bus type. |
0 ok
Definition at line 237 of file acquire_internal.c.
References EasyDbus_core::conn, and EasyDbusDebug.
Referenced by easydbus_conn_reconnect(), easydbus_get_address_onsession(), easydbus_get_address_onsystem(), and easydbus_get_address_serverSession().
00240 { 00241 /* connect to system bus */ 00242 core->conn = dbus_bus_get (type_bus, err); 00243 if (!core->conn) { 00244 EasyDbusDebug ("Error %s from dbus_bus_get: %s", 00245 err->name, err->message); 00246 return -1; 00247 } 00248 00249 EasyDbusDebug ("Connected and registered to bus daemon"); 00250 /* do not allw libdbus to exit on connection failure ( This 00251 * may around random exit () on SIGPIPE errors) */ 00252 dbus_connection_set_exit_on_disconnect (core->conn, FALSE); 00253 return 0; 00254 }
char* easydbus_found_new_name | ( | struct EasyDbus_core * | core, | |
char * | oldName, | |||
int | flags, | |||
DBusError * | err | |||
) |
Found a new service name.
For internal use only.
core | pointer to EasyDbus_core object | |
oldName | old name used as prefix for new name | |
flags | easydbus flags for connection | |
err | pointer to DBusError object. |
pointer to new service name string. Must be free.
Definition at line 152 of file acquire_name.c.
References EasyDbus_core::conn, easydbus_acquire_name(), EASYDBUS_RENAMED_MAX_TEST, EasyDbusDebug, and EasyDbus_core::service_name.
Referenced by easydbus_conn_reconnect(), easydbus_get_address_onsession(), easydbus_get_address_onsystem(), and easydbus_get_address_serverSession().
00155 { 00156 char *service_name = NULL; 00157 int string_length = 0, string_length_max = 0; 00158 int i, result = -1; 00159 char buffer[5]; 00160 00161 // 1 --> for \0 and 3 --> for 3 char number. 00162 string_length_max = strlen (oldName) + 1 + 3; 00163 string_length = strlen (oldName) + 1; 00164 service_name = (char *) malloc (string_length_max); 00165 if (!service_name) 00166 return NULL; 00167 memset (service_name, 0, string_length_max); 00168 memcpy (service_name, oldName, string_length); 00169 00170 EasyDbusDebug ("Check %s service name", oldName); 00171 for (i = 1; i < EASYDBUS_RENAMED_MAX_TEST; i++) { 00172 memset (buffer, 0, 5); 00173 snprintf (buffer, 5, "%d", i); 00174 memcpy (&service_name[string_length - 1], 00175 buffer, strlen (buffer) + 1); 00176 EasyDbusDebug ("Check %s service name", service_name); 00177 if (!dbus_bus_name_has_owner (core->conn, service_name, err)) { 00178 result = easydbus_acquire_name (core, service_name, 00179 flags, err); 00180 if (result == -1) 00181 goto error; 00182 return service_name; 00183 } 00184 } 00185 00186 error: 00187 00188 if (service_name != NULL) 00189 free (service_name); 00190 00191 return NULL; 00192 }
int easydbus_get_address_onsession | ( | struct EasyDbus_conn * | data, | |
char * | serviceName | |||
) | [inline] |
Acquire source address on session bus.
For internal use only.
data | pointer to EasyDbus_conn object | |
serviceName | name of service that must be acquired |
EASYDBUS_CONN_NAME_SERVICE_EXISTS name service exists.
EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE name service in queue.
EASYDBUS_CONN_NAME_SERVICE_PRIMARY name service is primary name.
EASYDBUS_CONN_NAME_SERVICE_RENAMED name service is been renamed.
Definition at line 162 of file acquire_internal.c.
References EasyDbus_core::conn, easydbus_acquire_name(), EASYDBUS_CONN_DO_NOT_QUEUE, EASYDBUS_CONN_NAME_SERVICE_EXISTS, EASYDBUS_CONN_NAME_SERVICE_RENAMED, EASYDBUS_CONN_NAME_UNIQUE, easydbus_connect_to_bus(), easydbus_found_new_name(), easydbus_save_serviceName(), easydbus_set_unique_nameID(), EasyDbusDebug, EasyDbus_conn::flags, EasyDbus_conn::registered_ondbus, and EasyDbus_core::service_name.
Referenced by easydbus_conn_get_address().
00164 { 00165 struct EasyDbus_core *core = (struct EasyDbus_core *) data; 00166 DBusError err; 00167 int result = -1; 00168 char *new_service_name = NULL; 00169 00170 dbus_error_init (&err); 00171 00172 /* connect to system bus */ 00173 if (easydbus_connect_to_bus (core, &err, DBUS_BUS_SESSION)) 00174 goto error_acquire; 00175 00176 result = easydbus_acquire_name (core, serviceName, 00177 data->flags, &err); 00178 if (result == -1) 00179 goto error_acquire; 00180 00181 if (result == EASYDBUS_CONN_NAME_SERVICE_EXISTS && 00182 // probably this isn't needed because without this flags 00183 // return value is EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE 00184 (data->flags & EASYDBUS_CONN_DO_NOT_QUEUE)) { 00185 if (data->flags & EASYDBUS_CONN_NAME_SERVICE_RENAMED) { 00186 new_service_name = easydbus_found_new_name 00187 (core, serviceName, data->flags, &err); 00188 if (new_service_name == NULL) 00189 goto error_acquire; 00190 result = EASYDBUS_CONN_NAME_SERVICE_RENAMED; 00191 } 00192 else 00193 goto error_acquire; 00194 } 00195 00196 data->registered_ondbus = 1; 00197 00198 if (new_service_name != NULL) 00199 core->service_name = new_service_name; 00200 else if (easydbus_save_serviceName (core, serviceName)) { 00201 EasyDbusDebug ("Error on save service name"); 00202 goto error_acquire; 00203 } 00204 00205 if (data->flags & EASYDBUS_CONN_NAME_UNIQUE) 00206 if (easydbus_set_unique_nameID (core, core->service_name)) 00207 goto error_acquire; 00208 00209 EasyDbusDebug ("Acquire operation terminated"); 00210 00211 dbus_error_free (&err); 00212 return result; 00213 00214 error_acquire: 00215 if (data->registered_ondbus) 00216 dbus_bus_release_name (core->conn, 00217 core->service_name, &err); 00218 00219 if (core->conn != NULL) 00220 dbus_connection_unref (core->conn); 00221 00222 dbus_error_free (&err); 00223 00224 return result; 00225 }
int easydbus_get_address_onsystem | ( | struct EasyDbus_conn * | data, | |
char * | serviceName | |||
) | [inline] |
Acquire source address for system dbus bus.
For internal use only.
data | pointer to EasyDbus_conn object | |
serviceName | name of service that must be acquired |
EASYDBUS_CONN_NAME_SERVICE_EXISTS name service exists.
EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE name service in queue.
EASYDBUS_CONN_NAME_SERVICE_PRIMARY name service is primary name.
EASYDBUS_CONN_NAME_SERVICE_RENAMED name service is been renamed.
Definition at line 269 of file acquire_internal.c.
References EasyDbus_core::conn, easydbus_acquire_name(), EASYDBUS_CONN_DO_NOT_QUEUE, EASYDBUS_CONN_NAME_SERVICE_EXISTS, EASYDBUS_CONN_NAME_SERVICE_RENAMED, EASYDBUS_CONN_NAME_UNIQUE, easydbus_connect_to_bus(), easydbus_found_new_name(), easydbus_save_serviceName(), easydbus_set_unique_nameID(), EasyDbusDebug, EasyDbus_conn::flags, EasyDbus_conn::registered_ondbus, and EasyDbus_core::service_name.
Referenced by easydbus_conn_get_address().
00271 { 00272 struct EasyDbus_core *core = (struct EasyDbus_core *) data; 00273 DBusError err; 00274 int result = -1; 00275 char *new_service_name = NULL; 00276 00277 dbus_error_init (&err); 00278 00279 if (easydbus_connect_to_bus (core, &err, DBUS_BUS_SYSTEM)) 00280 goto error_acquire; 00281 00282 result = easydbus_acquire_name (core, serviceName, data->flags, 00283 &err); 00284 if (result == -1) 00285 goto error_acquire; 00286 if (result == EASYDBUS_CONN_NAME_SERVICE_EXISTS && 00287 // probably this isn't needed because without this flags 00288 // return value is EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE 00289 (data->flags & EASYDBUS_CONN_DO_NOT_QUEUE)) { 00290 if (data->flags & EASYDBUS_CONN_NAME_SERVICE_RENAMED) { 00291 new_service_name = easydbus_found_new_name 00292 (core, serviceName, data->flags, &err); 00293 if (new_service_name == NULL) 00294 goto error_acquire; 00295 result = EASYDBUS_CONN_NAME_SERVICE_RENAMED; 00296 } 00297 else 00298 goto error_acquire; 00299 } 00300 00301 data->registered_ondbus = 1; 00302 00303 if (new_service_name != NULL) 00304 core->service_name = new_service_name; 00305 else if (easydbus_save_serviceName (core, serviceName)) { 00306 EasyDbusDebug ("Error on save service name"); 00307 goto error_acquire; 00308 } 00309 00310 if (data->flags & EASYDBUS_CONN_NAME_UNIQUE) 00311 if (easydbus_set_unique_nameID (core, core->service_name)) 00312 goto error_acquire; 00313 00314 dbus_error_free (&err); 00315 return result; 00316 00317 error_acquire: 00318 if (data->registered_ondbus) 00319 dbus_bus_release_name (core->conn, 00320 core->service_name, &err); 00321 00322 if (core->conn != NULL) 00323 dbus_connection_unref (core->conn); 00324 00325 dbus_error_free (&err); 00326 00327 return -1; 00328 }
int easydbus_get_address_serverSession | ( | struct EasyDbus_conn * | data, | |
char * | serviceName | |||
) | [inline] |
Acquire source addres for server on session bus.
For internal use only.
data | pointer to EasyDbus_conn object | |
serviceName | name of service that must be acquired |
EASYDBUS_CONN_NAME_SERVICE_EXISTS name service exists.
EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE name service in queue.
EASYDBUS_CONN_NAME_SERVICE_PRIMARY name service is primary name.
EASYDBUS_CONN_NAME_SERVICE_RENAMED name service is been renamed.
Definition at line 57 of file acquire_internal.c.
References EasyDbus_core::conn, easydbus_acquire_name(), EASYDBUS_CONN_DO_NOT_QUEUE, EASYDBUS_CONN_NAME_SERVICE_EXISTS, EASYDBUS_CONN_NAME_SERVICE_RENAMED, EASYDBUS_CONN_NAME_UNIQUE, easydbus_connect_to_bus(), easydbus_found_new_name(), easydbus_save_serviceName(), easydbus_set_unique_nameID(), EasyDbusDebug, EasyDbus_conn::flags, EasyDbus_conn::registered_ondbus, and EasyDbus_core::service_name.
Referenced by easydbus_conn_get_address().
00059 { 00060 DBusError err; 00061 struct EasyDbus_core *core = (struct EasyDbus_core *) data; 00062 int result = -1; 00063 char *new_service_name = NULL; 00064 00065 dbus_error_init (&err); 00066 00067 if (easydbus_connect_to_bus (core, &err, DBUS_BUS_SESSION)) 00068 goto error_acquire; 00069 00070 // if (dbus_bus_register (core->conn, &err) == FALSE) { 00071 // EasyDbusDebug ("Error %s from dbus_bus_register: %s", 00072 // err.name, 00073 // err.message); 00074 // goto error_acquire; 00075 // } 00076 00077 result = easydbus_acquire_name (core, serviceName, 00078 data->flags | EASYDBUS_CONN_DO_NOT_QUEUE, 00079 &err); 00080 if (result == -1) 00081 goto error_acquire; 00082 if (result == EASYDBUS_CONN_NAME_SERVICE_EXISTS) { 00083 // probably this isn't needed because without this flags 00084 // return value is EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE 00085 if (data->flags & EASYDBUS_CONN_NAME_SERVICE_RENAMED) { 00086 new_service_name = easydbus_found_new_name 00087 (core, serviceName, data->flags, &err); 00088 if (new_service_name == NULL) 00089 goto error_acquire; 00090 result = EASYDBUS_CONN_NAME_SERVICE_RENAMED; 00091 } 00092 else 00093 goto error_acquire; 00094 } 00095 00096 data->registered_ondbus = 1; 00097 00098 if (new_service_name != NULL) 00099 core->service_name = new_service_name; 00100 else if (easydbus_save_serviceName (core, serviceName)) { 00101 EasyDbusDebug ("Error on save service name"); 00102 goto error_acquire; 00103 } 00104 00105 if (data->flags & EASYDBUS_CONN_NAME_UNIQUE) 00106 if (easydbus_set_unique_nameID (core, core->service_name)) 00107 goto error_acquire; 00108 00109 dbus_error_free (&err); 00110 return result; 00111 00112 error_acquire: 00113 if (data->registered_ondbus) 00114 dbus_bus_release_name (core->conn, 00115 core->service_name, &err); 00116 00117 if (core->conn != NULL) 00118 dbus_connection_unref (core->conn); 00119 00120 dbus_error_free (&err); 00121 00122 return -1; 00123 }
int easydbus_set_request_flags | ( | int | easydbus_flags | ) | [inline] |
Convert easydbus_connection_flags to dbus_flags.
For internal use only.
easydbus_flags | integer with easydbus connection flags. |
Definition at line 55 of file acquire_name.c.
References EASYDBUS_CONN_ALLOW_REPLACEMENT, EASYDBUS_CONN_DO_NOT_QUEUE, EASYDBUS_CONN_REPLACE_EXISTING, and EasyDbusDebug.
Referenced by easydbus_acquire_name().
00056 { 00057 int dbus_flags = 0; 00058 00059 if (easydbus_flags & EASYDBUS_CONN_ALLOW_REPLACEMENT) { 00060 EasyDbusDebug ("Set ALLOW_REPLACEMENT flag"); 00061 dbus_flags |= DBUS_NAME_FLAG_ALLOW_REPLACEMENT; 00062 } 00063 if (easydbus_flags & EASYDBUS_CONN_REPLACE_EXISTING) { 00064 EasyDbusDebug ("Set REPLACE_EXISTING flag"); 00065 dbus_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING; 00066 } 00067 if (easydbus_flags & EASYDBUS_CONN_DO_NOT_QUEUE) { 00068 EasyDbusDebug ("Set DO_NOT_QUEUE flag"); 00069 dbus_flags |= DBUS_NAME_FLAG_DO_NOT_QUEUE; 00070 } 00071 00072 return dbus_flags; 00073 }
int easydbus_set_unique_nameID | ( | struct EasyDbus_core * | core, | |
char * | nameId | |||
) | [inline] |
Set unique name ID.
For internal use only.
core | pointer to struct EasyDbus_core object. | |
nameId | new unique name id to set. |
0 ok
Definition at line 134 of file acquire_internal.c.
References EasyDbus_core::conn, and EasyDbusDebug.
Referenced by easydbus_get_address_onsession(), easydbus_get_address_onsystem(), and easydbus_get_address_serverSession().
00136 { 00137 EasyDbusDebug ("DBUS unique name = %s", 00138 dbus_bus_get_unique_name (core->conn)); 00139 00140 if (!dbus_bus_set_unique_name (core->conn, nameId)) 00141 return -1; 00142 00143 EasyDbusDebug ("DBUS unique name = %s", 00144 dbus_bus_get_unique_name (core->conn)); 00145 00146 return 0; 00147 }