ADD_DEFINITIONS("-DNOTIFICATION_SMACK_LABEL=\"data-provider-master::notification\"")
ADD_DEFINITIONS("-DBADGE_SMACK_LABEL=\"data-provider-master::badge\"")
ADD_DEFINITIONS("-DDATA_SHARE_LABEL=\"data-provider-master::share\"")
+ADD_DEFINITIONS("-DDEFAULT_SMACK_LABEL=\"data-provider-master\"")
ADD_DEFINITIONS("-DDEFAULT_MASTER_CONF=\"/usr/share/data-provider-master/conf.ini\"")
* \note
* Create & Destroy
*/
-extern struct client_node *client_create(pid_t pid, int handle);
+extern struct client_node *client_create(pid_t pid, int handle, const char *direct_addr);
#define client_destroy(client) client_unref(client)
/*!
extern int client_nr_of_subscriber(const char *cluster, const char *category);
extern int client_broadcast(struct inst_info *inst, struct packet *packet);
+
+extern const char *client_direct_addr(const struct client_node *client);
/* End of a file */
#include <stdio.h>
#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/smack.h>
#include <Eina.h>
#include <Ecore.h>
Eina_List *subscribe_list;
int faulted;
+ char *direct_addr;
};
static inline void invoke_global_destroyed_cb(struct client_node *client)
s_info.nr_of_paused_clients--;
}
+ if (client->direct_addr) {
+ (void)unlink(client->direct_addr);
+ DbgFree(client->direct_addr);
+ }
+
s_info.client_list = eina_list_remove(s_info.client_list, client);
DbgFree(client);
xmonitor_handle_state_changes();
}
-static inline struct client_node *create_client_data(pid_t pid)
+static inline struct client_node *create_client_data(pid_t pid, const char *direct_addr)
{
struct client_node *client;
client->pid = pid;
client->refcnt = 1;
+ if (direct_addr && direct_addr[0]) {
+ client->direct_addr = strdup(direct_addr);
+ if (!client->direct_addr) {
+ ErrPrint("Failed to allocate direct_addr (%s)\n", direct_addr);
+ }
+ }
+
s_info.client_list = eina_list_append(s_info.client_list, client);
/*!
* So we just create its ADT in this function.
* And invoke the global created event & activated event callbacks
*/
-HAPI struct client_node *client_create(pid_t pid, int handle)
+HAPI struct client_node *client_create(pid_t pid, int handle, const char *direct_addr)
{
struct client_node *client;
int ret;
return client;
}
- client = create_client_data(pid);
+ client = create_client_data(pid, direct_addr);
if (!client) {
ErrPrint("Failed to create a new client (%d)\n", pid);
return NULL;
return LB_STATUS_SUCCESS;
}
+HAPI const char *client_direct_addr(const struct client_node *client)
+{
+ return client ? client->direct_addr : NULL;
+}
+
/* End of a file */
break;
}
- packet = packet_create((const char *)&cmd, "sssiidssiisii",
+ packet = packet_create((const char *)&cmd, "sssiidssiisiis",
package_name(inst->info),
inst->id,
inst->content,
inst->lb.width, inst->lb.height,
package_abi(inst->info),
inst->scroll_locked,
- inst->active_update);
+ inst->active_update,
+ client_direct_addr(inst->client));
if (!packet) {
ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
return LB_STATUS_ERROR_FAULT;
break;
}
- packet = packet_create((const char *)&cmd, "sssiidssisii",
+ packet = packet_create((const char *)&cmd, "sssiidssisiis",
package_name(inst->info),
inst->id,
inst->content,
!!inst->client,
package_abi(inst->info),
inst->lb.width,
- inst->lb.height);
+ inst->lb.height,
+ client_direct_addr(inst->client));
if (!packet) {
ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
return LB_STATUS_ERROR_FAULT;
{
struct client_node *client;
struct packet *result;
+ const char *direct_addr;
double timestamp;
int ret;
goto out;
}
- if (packet_get(packet, "d", ×tamp) != 1) {
+ if (packet_get(packet, "ds", ×tamp, &direct_addr) != 2) {
ErrPrint("Invalid arguemnt\n");
ret = LB_STATUS_ERROR_INVALID;
goto out;
* \note
* client_create will invoke the client created callback
*/
- client = client_create(pid, handle);
+ client = client_create(pid, handle, direct_addr);
if (!client) {
ErrPrint("Failed to create a new client for %d\n", pid);
ret = LB_STATUS_ERROR_FAULT;