tizen 2.3.1 release
[framework/appfw/app-checker.git] / src / ac_lib.c
1 /*
2  *  app-checker
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>, Jaeho Lee <jaeho81.lee@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22
23 #include <stdio.h>
24 #include <glib.h>
25 #include <string.h>
26 #include <errno.h>
27
28 #include <app-checker.h>
29 #include "ac_sock.h"
30 #include "internal.h"
31
32 #ifndef SLPAPI
33 #define SLPAPI __attribute__ ((visibility("default")))
34 #endif
35
36 static int app_send_cmd(const char *pkg_name, const char *pkg_type, int pid, int cmd)
37 {
38         int ret = -1;
39         unsigned char *data;
40         struct ac_data ad;
41
42         memset(&ad, 0, sizeof(ad));
43
44         strncpy(ad.pkg_name, pkg_name, MAX_PACKAGE_STR_SIZE-1);
45         strncpy(ad.pkg_type, pkg_type, MAX_PACKAGE_TYPE_SIZE-1);
46         ad.pid = pid;
47
48         data = (unsigned char *)g_base64_encode((const guchar *)&ad, sizeof(ad));
49
50         if ((ret = _app_send_raw(cmd, data, (int)strnlen((char *)data, AC_SOCK_MAXBUFF - 8))) < 0) {
51                 switch (ret) {
52                 case -EINVAL:
53                         ret = AC_R_EINVAL;
54                         break;
55                 case -ECOMM:
56                         ret = AC_R_ECOMM;
57                         break;
58                 case -EAGAIN:
59                         ret = AC_R_ETIMEOUT;
60                         break;
61                 case AC_R_ENOPULUGINS:
62                         ret = AC_R_ENOPULUGINS;
63                         break;
64                 default:
65                         ret = AC_R_ERROR;
66                 }
67         }
68
69         g_free(data);
70         return ret;
71 }
72
73 SLPAPI int ac_check_launch_privilege(const char *appid, const char *pkg_type, int pid)
74 {
75         int ret = -1;
76
77         if(appid == NULL || pkg_type == NULL)
78                 return AC_R_EINVAL;
79
80         ret = app_send_cmd(appid, pkg_type, pid, AC_CHECK);
81
82         return ret;
83 }
84
85 SLPAPI int ac_register_launch_privilege(const char *pkg_name, const char *pkg_type)
86 {
87         int ret = -1;
88
89         if(pkg_name == NULL || pkg_type == NULL)
90                 return AC_R_EINVAL;
91
92         ret = app_send_cmd(pkg_name, pkg_type, -1, AC_REGISTER);
93
94         return ret;
95 }
96
97 SLPAPI int ac_unregister_launch_privilege(const char *pkg_name, const char *pkg_type)
98 {
99         int ret = -1;
100
101         if(pkg_name == NULL || pkg_type == NULL)
102                 return AC_R_EINVAL;
103
104         ret = app_send_cmd(pkg_name, pkg_type, -1, AC_UNREGISTER);
105
106         return ret;     
107 }
108