12 #include <package_manager.h>
13 #include <ckm/ckm-control.h>
16 #define CKM_TAG "CKM_LISTENER"
21 package_manager_event_type_e eventType,
22 package_manager_event_state_e eventState,
24 package_manager_error_e error,
32 if (eventType != PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL)
35 if (eventState != PACKAGE_MANAGER_EVENT_STATE_STARTED)
41 SLOG(LOG_DEBUG, CKM_TAG, "Get callback. Uninstalation of: %s", package);
42 auto control = CKM::Control::create();
43 control->removeApplicationData(std::string(package));
47 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Start!");
49 // Let's operate in background
52 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Error in fork!");
59 // Let's disconnect from terminal
61 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Error in fork!");
65 // Let's close all descriptors
66 // for (result = getdtablesize(); result>=0; --result)
69 // result = open("/dev/null", O_RDWR); // open stdin
70 // dup(result); // stdout
71 // dup(result); // stderr
75 // Let's change current directory
76 if (-1 == chdir("/")) {
77 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Error in chdir!");
81 // Let's create lock file
82 result = open("/tmp/ckm-listener.lock", O_RDWR | O_CREAT, 0640);
84 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Error in opening lock file!");
88 if (lockf(result, F_TLOCK, 0) < 0) {
89 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Daemon already working!");
94 sprintf(str, "%d\n", getpid());
95 result = write(result, str, strlen(str));
97 SLOG(LOG_DEBUG, CKM_TAG, "%s", str);
99 // Let's start to listen
100 GMainLoop *main_loop = g_main_loop_new(NULL, FALSE);
101 package_manager_h request;
103 package_manager_create(&request);
104 if (0 != package_manager_set_event_cb(request, eventCallback, NULL)) {
105 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Error in package_manager_set_event_cb");
109 /* Change file mode mask */
111 SLOG(LOG_DEBUG, CKM_TAG, "%s", "Ready to listen!");
112 g_main_loop_run(main_loop);