Remove useless macros in configure.ac regarding libmm-log
[platform/core/multimedia/libmm-session.git] / mm_session.c
index f37ff98..b7e8a49 100644 (file)
@@ -28,7 +28,6 @@
 #include <mm_error.h>
 #include <mm_debug.h>
 #include <errno.h>
-#include <glib.h>
 #include <pthread.h>
 #include <signal.h>
 
@@ -47,14 +46,6 @@ struct sigaction session_xcpu_old_action;
 EXPORT_API
 int mm_session_init(int sessiontype)
 {
-       debug_fenter();
-       return mm_session_init_ex(sessiontype, NULL, NULL);
-       debug_fleave();
-}
-
-EXPORT_API
-int mm_session_init_ex(int sessiontype, session_callback_fn callback, void* user_param)
-{
        int result = MM_ERROR_NONE;
        int ltype = 0;
        bool do_not_update_session_info = false;
@@ -63,7 +54,7 @@ int mm_session_init_ex(int sessiontype, session_callback_fn callback, void* user
        debug_log("type : %d", sessiontype);
 
        if (sessiontype < MM_SESSION_TYPE_MEDIA || sessiontype >= MM_SESSION_TYPE_NUM) {
-               debug_error("Invalid argument %d",sessiontype);
+               debug_error("Invalid argument %d", sessiontype);
                return MM_ERROR_INVALID_ARGUMENT;
        }
 
@@ -78,13 +69,6 @@ int mm_session_init_ex(int sessiontype, session_callback_fn callback, void* user
                }
        }
 
-       /* Monitor Callback */
-       if (NULL == callback) {
-               debug_warning("Null callback function");
-       } else {
-               debug_warning("It was deprecated, do not use monitor callback, callback(%p), user_param(%p)", callback, user_param);
-       }
-
        g_session_type = sessiontype;
 
        if (!do_not_update_session_info) {
@@ -126,11 +110,10 @@ int mm_session_update_option(session_update_type_t update_type, int options)
        }
        debug_log("[current] session_type: %d, session_option: %x", ltype, loption);
 
-       if (update_type == MM_SESSION_UPDATE_TYPE_ADD) {
+       if (update_type == MM_SESSION_UPDATE_TYPE_ADD)
                loption |= options;
-       } else if (update_type == MM_SESSION_UPDATE_TYPE_REMOVE) {
+       else if (update_type == MM_SESSION_UPDATE_TYPE_REMOVE)
                loption &= ~options;
-       }
 
        result = _mm_session_util_write_information(-1, ltype, loption);
        if (result) {
@@ -145,16 +128,6 @@ int mm_session_update_option(session_update_type_t update_type, int options)
 }
 
 EXPORT_API
-int mm_session_add_watch_callback(int watchevent, int watchstate, watch_callback_fn callback, void* user_param)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
 int mm_session_get_current_type(int *sessiontype)
 {
        int result = MM_ERROR_NONE;
@@ -224,7 +197,7 @@ int mm_session_finish(void)
 
        /* Check monitor handle */
        result = _mm_session_util_delete_information(-1);
-       if(result != MM_ERROR_NONE)
+       if (result != MM_ERROR_NONE)
                return result;
 
        debug_fleave();
@@ -233,79 +206,19 @@ int mm_session_finish(void)
 }
 
 EXPORT_API
-int mm_session_remove_watch_callback(int watchevent, int watchstate)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
-int mm_session_set_subsession(mm_subsession_t subsession, mm_subsession_option_t option)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
-int mm_session_get_subsession(mm_subsession_t *subsession)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
-int mm_session_set_subevent(mm_session_sub_t subevent)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
-int mm_session_get_subevent(mm_session_sub_t *subevent)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
-int mm_session_reset_resumption_info(void)
-{
-       debug_fenter();
-
-       debug_fleave();
-
-       return MM_ERROR_NOT_SUPPORT_API;
-}
-
-EXPORT_API
 int _mm_session_util_delete_information(int app_pid)
 {
        pid_t mypid;
        char filename[MAX_FILE_LENGTH];
 
-       if(app_pid == -1)
+       if (app_pid == -1)
                mypid = getpid();
        else
                mypid = (pid_t)app_pid;
 
        ////// DELETE SESSION TYPE /////////
        snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
-       if(-1 ==  unlink(filename))
+       if (-1 ==  unlink(filename))
                return MM_ERROR_FILE_NOT_FOUND;
        ////// DELETE SESSION TYPE /////////
 
@@ -319,29 +232,28 @@ int _mm_session_util_write_type(int app_pid, int sessiontype)
        int fd = -1;
        char filename[MAX_FILE_LENGTH];
 
-       if(sessiontype < MM_SESSION_TYPE_MEDIA || sessiontype >= MM_SESSION_TYPE_NUM) {
+       if (sessiontype < MM_SESSION_TYPE_MEDIA || sessiontype >= MM_SESSION_TYPE_NUM)
                return MM_ERROR_INVALID_ARGUMENT;
-       }
 
-       if(app_pid == -1)
+       if (app_pid == -1)
                mypid = getpid();
        else
                mypid = (pid_t)app_pid;
 
        ////// WRITE SESSION TYPE /////////
        snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
-       fd = open(filename, O_WRONLY | O_CREAT, 0644 );
-       if(fd < 0) {
-               debug_error("open() failed with %d",errno);
+       fd = open(filename, O_WRONLY | O_CREAT, 0644);
+       if (fd < 0) {
+               debug_error("open() failed with %d", errno);
                return MM_ERROR_FILE_WRITE;
        }
        sessiontype = sessiontype << 16;
        write(fd, &sessiontype, sizeof(int));
-       if(0 > fchmod (fd, 00777)) {
+       if (0 > fchmod(fd, 00777))
                debug_error("fchmod failed with %d", errno);
-       } else {
+       else
                debug_warning("write sessiontype(%d) to /tmp/mm_session_%d", sessiontype >> 16, mypid);
-       }
+
        close(fd);
        ////// WRITE SESSION TYPE /////////
 
@@ -357,10 +269,10 @@ int _mm_session_util_read_type(int app_pid, int *sessiontype)
 
        debug_fenter();
 
-       if(sessiontype == NULL)
+       if (sessiontype == NULL)
                return MM_ERROR_INVALID_ARGUMENT;
 
-       if(app_pid == -1)
+       if (app_pid == -1)
                mypid = getpid();
        else
                mypid = (pid_t)app_pid;
@@ -368,9 +280,9 @@ int _mm_session_util_read_type(int app_pid, int *sessiontype)
        ////// READ SESSION TYPE /////////
        snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
        fd = open(filename, O_RDONLY);
-       if(fd < 0) {
+       if (fd < 0)
                return MM_ERROR_INVALID_HANDLE;
-       }
+
        read(fd, sessiontype, sizeof(int));
        *sessiontype = *sessiontype >> 16;
        debug_warning("read sessiontype(%d) from /tmp/mm_session_%d", *sessiontype, mypid);
@@ -390,34 +302,32 @@ int _mm_session_util_write_information(int app_pid, int session_type, int flags)
        char filename[MAX_FILE_LENGTH];
        int result_info = 0;
 
-       if(session_type < MM_SESSION_TYPE_MEDIA || session_type >= MM_SESSION_TYPE_NUM) {
+       if ((session_type != MM_SESSION_TYPE_REPLACED_BY_STREAM) &&
+           (session_type < MM_SESSION_TYPE_MEDIA || session_type >= MM_SESSION_TYPE_NUM)) {
                return MM_ERROR_INVALID_ARGUMENT;
        }
-       if(flags < 0) {
+       if (flags < 0)
                return MM_ERROR_INVALID_ARGUMENT;
-       }
 
-       if(app_pid == -1) {
+       if (app_pid == -1)
                mypid = getpid();
-       } else {
+       else
                mypid = (pid_t)app_pid;
-       }
 
        ////// WRITE SESSION INFO /////////
        snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
-       fd = open(filename, O_WRONLY | O_CREAT, 0644 );
-       if(fd < 0) {
-               debug_error("open() failed with %d",errno);
+       fd = open(filename, O_WRONLY | O_CREAT, 0644);
+       if (fd < 0) {
+               debug_error("open() failed with %d", errno);
                return MM_ERROR_FILE_WRITE;
        }
 
        result_info = (flags) | (session_type << 16);
        write(fd, &result_info, sizeof(int));
-       if(0 > fchmod (fd, 00777)) {
+       if (0 > fchmod(fd, 00777))
                debug_error("fchmod failed with %d", errno);
-       } else {
+       else
                debug_warning("write session information(%x) to /tmp/mm_session_%d", result_info, mypid);
-       }
        close(fd);
        ////// WRITE SESSION INFO /////////
 
@@ -434,22 +344,19 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags
 
        debug_fenter();
 
-       if(session_type == NULL || flags == NULL) {
+       if (session_type == NULL || flags == NULL)
                return MM_ERROR_INVALID_ARGUMENT;
-       }
 
-       if(app_pid == -1) {
+       if (app_pid == -1)
                mypid = getpid();
-       } else {
+       else
                mypid = (pid_t)app_pid;
-       }
 
        ////// READ SESSION INFO /////////
        snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
        fd = open(filename, O_RDONLY);
-       if(fd < 0) {
+       if (fd < 0)
                return MM_ERROR_INVALID_HANDLE;
-       }
        read(fd, &result_info, sizeof(int));
        *session_type = result_info >> 16;
        *flags = result_info & 0x0000ffff;
@@ -463,9 +370,9 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags
        return MM_ERROR_NONE;
 }
 
-void __session_signal_handler(int signo)
+void __session_signal_handler(int signo, siginfo_t *siginfo, void *context)
 {
-       char* filename = NULL;
+       char filename[MAX_FILE_LENGTH];
        char str_error[256];
 
        debug_warning("ENTER, sig.num(%d)", signo);
@@ -475,43 +382,53 @@ void __session_signal_handler(int signo)
        sigfillset(&all_mask);
        sigprocmask(SIG_BLOCK, &all_mask, &old_mask);
 
-       filename = g_strdup_printf("/tmp/mm_session_%d", getpid());
+       snprintf(filename, sizeof(filename) - 1, "/tmp/mm_session_%d", getpid());
        if (!remove(filename)) {
                debug_log(" remove %s success\n", filename);
        } else {
-               strerror_r (errno, str_error, sizeof (str_error));
+               strerror_r(errno, str_error, sizeof(str_error));
                debug_error(" remove %s failed with %s\n", filename, str_error);
        }
 
-       g_free(filename);
-
        sigprocmask(SIG_SETMASK, &old_mask, NULL);
        /* signal unblock ------------ */
 
        switch (signo) {
        case SIGINT:
-               sigaction(SIGINT, &session_int_old_action, NULL);
-               raise(signo);
+               if (session_int_old_action.sa_sigaction)
+                       session_int_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_int_old_action, NULL);
                break;
        case SIGABRT:
-               sigaction(SIGABRT, &session_abrt_old_action, NULL);
-               raise(signo);
+               if (session_abrt_old_action.sa_sigaction)
+                       session_abrt_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_abrt_old_action, NULL);
                break;
        case SIGSEGV:
-               sigaction(SIGSEGV, &session_segv_old_action, NULL);
-               raise(signo);
+               if (session_segv_old_action.sa_sigaction)
+                       session_segv_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_segv_old_action, NULL);
                break;
        case SIGTERM:
-               sigaction(SIGTERM, &session_term_old_action, NULL);
-               raise(signo);
+               if (session_term_old_action.sa_sigaction)
+                       session_term_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_term_old_action, NULL);
                break;
        case SIGSYS:
-               sigaction(SIGSYS, &session_sys_old_action, NULL);
-               raise(signo);
+               if (session_sys_old_action.sa_sigaction)
+                       session_sys_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_sys_old_action, NULL);
                break;
        case SIGXCPU:
-               sigaction(SIGXCPU, &session_xcpu_old_action, NULL);
-               raise(signo);
+               if (session_xcpu_old_action.sa_sigaction)
+                       session_xcpu_old_action.sa_sigaction(signo, siginfo, context);
+               else
+                       sigaction(signo, &session_xcpu_old_action, NULL);
                break;
        default:
                break;
@@ -524,8 +441,8 @@ __attribute__ ((constructor))
 void __mmsession_initialize(void)
 {
        struct sigaction session_action;
-       session_action.sa_handler = __session_signal_handler;
-       session_action.sa_flags = SA_NOCLDSTOP;
+       session_action.sa_sigaction = __session_signal_handler;
+       session_action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO;
 
        debug_fenter();