Upload Tizen2.0 source
[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         strncpy(ad.pkg_name, pkg_name, MAX_PACKAGE_STR_SIZE);
43         strncpy(ad.pkg_type, pkg_type, MAX_PACKAGE_TYPE_SIZE);
44         ad.pid = pid;
45
46         data = (unsigned char *)g_base64_encode((const guchar *)&ad, sizeof(ad));
47
48         if ((ret = _app_send_raw(cmd, data, (int)strnlen((char *)data, AC_SOCK_MAXBUFF - 8))) < 0) {
49                 switch (ret) {
50                 case -EINVAL:
51                         ret = AC_R_EINVAL;
52                         break;
53                 case -ECOMM:
54                         ret = AC_R_ECOMM;
55                         break;
56                 case -EAGAIN:
57                         ret = AC_R_ETIMEOUT;
58                         break;
59                 case AC_R_ENOPULUGINS:
60                         ret = AC_R_ENOPULUGINS;
61                         break;
62                 default:
63                         ret = AC_R_ERROR;
64                 }
65         }
66
67         g_free(data);
68         return ret;
69 }
70
71 SLPAPI int ac_check_launch_privilege(const char *pkg_name, const char *pkg_type, int pid)
72 {
73         int ret = -1;
74
75         if(pkg_name == NULL || pkg_type == NULL)
76                 return AC_R_EINVAL;
77
78         ret = app_send_cmd(pkg_name, pkg_type, pid, AC_CHECK);
79
80         return ret;
81 }
82
83 SLPAPI int ac_register_launch_privilege(const char *pkg_name, const char *pkg_type)
84 {
85         int ret = -1;
86
87         if(pkg_name == NULL || pkg_type == NULL)
88                 return AC_R_EINVAL;
89
90         ret = app_send_cmd(pkg_name, pkg_type, -1, AC_REGISTER);
91
92         return ret;
93 }
94
95 SLPAPI int ac_unregister_launch_privilege(const char *pkg_name, const char *pkg_type)
96 {
97         int ret = -1;
98
99         if(pkg_name == NULL || pkg_type == NULL)
100                 return AC_R_EINVAL;
101
102         ret = app_send_cmd(pkg_name, pkg_type, -1, AC_UNREGISTER);
103
104         return ret;     
105 }
106