Tizen 2.0 Release
[framework/system/oma-dm-agent.git] / src / plugins / dm-private / slp-device-dm / src / plugin_slp_device_info.c
1 /*
2  * oma-dm-agent
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <sys/utsname.h>
22 #include <vconf.h>
23 #include <vconf-keys.h>
24
25 #include <tapi_common.h>
26 #include <ITapiModem.h>
27 #include <ITapiSim.h>
28
29 /*sync-agent*/
30 #include <sync_agent.h>
31
32 #include "plugin_slp_device_info.h"
33
34 #ifndef OMADM_AGENT_LOG
35 #undef LOG_TAG
36 #define LOG_TAG "PLUGIN_DEVICE_SLP_DM"
37 #endif
38
39 #define _D_MSC_FIRMWARE_MAXSTRING_      40
40 #define _D_SIZE_64_                     64
41 #define _D_SIZE_128_                    128
42
43 /* todo : temporary definition */
44 #define DTD_VERSION                     "1.2"
45
46 #define OPCO                                            "UK"
47
48 #define FOTA_DOWNLOAD_DIR               "/opt/data/fota/download"
49 #define FOTA_SAVE_DIR                                   "/opt/data/fota/save"
50 #define FOTA_SD_DOWNLOAD_DIR    "/opt/storage/sdcard/data/fota/download"
51 #define FOTA_SD_SAVE_DIR                        "/opt/storage/sdcard/data/fota/save"
52
53 /* ========================================*/
54 /* version information
55  *      DTD version
56  *      kernel version
57  */
58 /* ========================================*/
59
60 char *slp_device_info_get_dtd_version()
61 {
62         _EXTERN_FUNC_ENTER;
63
64         char *dtd_version = (char *)calloc(_D_SIZE_128_, sizeof(char));
65         if (dtd_version == NULL) {
66                 _DEBUG_INFO("CALLOC failed !!!");
67                 _EXTERN_FUNC_EXIT;
68                 return 0;
69         }
70         /*snprintf(dtd_version, _D_SIZE_128_ - 1, DTD_VERSION, strlen(DTD_VERSION)); */
71         snprintf(dtd_version, _D_SIZE_128_ - 1, "%s", DTD_VERSION);
72         _DEBUG_INFO("DTD version = %s\n", dtd_version);
73
74         _EXTERN_FUNC_EXIT;
75         return dtd_version;
76 }
77
78 char *slp_device_info_get_kernel_version()
79 {
80         _EXTERN_FUNC_ENTER;
81
82         char *kernel_version = (char *)calloc(_D_SIZE_128_, sizeof(char));
83         if (kernel_version == NULL) {
84                 _DEBUG_INFO("CALLOC failed !!!");
85                 _EXTERN_FUNC_EXIT;
86                 return 0;
87         }
88
89         struct utsname buf;
90         uname(&buf);
91
92         snprintf(kernel_version, _D_SIZE_128_ - 1, "%s.%s", "K", buf.release);
93
94         _DEBUG_INFO("sysname[%s], nodename[%s], release[%s], version[%s], machine[%s] \n", buf.sysname, buf.nodename, buf.release, buf.version, buf.machine);
95         _EXTERN_FUNC_EXIT;
96         return kernel_version;
97 }
98
99 char *slp_device_info_get_msisdn_number()
100 {
101         _EXTERN_FUNC_ENTER;
102
103         char *get_str;
104         char str_key_name[_D_SIZE_128_ * 2] = { 0, };
105         snprintf(str_key_name, _D_SIZE_128_ * 2, "%s", VCONFKEY_TELEPHONY_SUBSCRIBER_NUMBER);
106         get_str = vconf_get_str(str_key_name);
107         _DEBUG_INFO("MSISDN_number = %s\n", get_str);
108         _EXTERN_FUNC_EXIT;
109         return get_str;
110
111 //      char *out_msisdn = 0;
112 //      int MSISDN_LEN = 20;
113 //    int err = SIM_ERROR_NONE;
114 //    char *msisdn = 0;
115 //
116 //    out_msisdn = (char*)calloc(MSISDN_LEN, sizeof(char));
117 //    if (out_msisdn == NULL)
118 //      goto return_part;
119 //
120 //    err = sim_get_subscriber_number(&msisdn);
121 //    if (!err && msisdn == NULL) {
122 //        strncpy(out_msisdn, msisdn, MSISDN_LEN-1);
123 //       free(msisdn);
124 //    } else  {
125 //        strncpy(out_msisdn, "", MSISDN_LEN-1);
126 //    }
127 //
128 // return_part:
129 //      _DEBUG_INFO("MSISDN = %s", msisdn);
130 //    return msisdn;
131 }
132
133 char *slp_device_info_get_mcc()
134 {
135         _EXTERN_FUNC_ENTER;
136
137         int mcc_len = 4;
138         char *mcc = NULL;
139         mcc = (char *)calloc(mcc_len, sizeof(char));
140         if (mcc == NULL) {
141                 goto return_part;
142         }
143
144         int b_card_changed = 0;
145         TapiHandle *handle;
146         handle = tel_init(NULL);
147         if (handle == NULL) {
148                 _DEBUG_INFO("handle is NULL !!");
149                 free(mcc);
150                 mcc = NULL;
151                 _EXTERN_FUNC_EXIT;
152                 return NULL;
153         }
154         TelSimImsiInfo_t imsi;
155         TapiResult_t err_code = TAPI_API_SUCCESS;
156         TelSimCardStatus_t status = TAPI_SIM_STATUS_CARD_ERROR;
157
158         err_code = (TapiResult_t) tel_get_sim_init_info(handle, &status, &b_card_changed);
159         if (err_code == TAPI_API_SUCCESS && status == TAPI_SIM_STATUS_SIM_INIT_COMPLETED) {
160                 err_code = (TapiResult_t) tel_get_sim_imsi(handle, &imsi);
161                 if (err_code == TAPI_API_SUCCESS) {
162                         strncpy(mcc, imsi.szMcc, mcc_len);
163                         _DEBUG_INFO("MCC = %s", mcc);
164                         _EXTERN_FUNC_EXIT;
165                         return mcc;
166                 }
167         }
168
169         strncpy(mcc, "0", mcc_len);
170         _DEBUG_INFO("MCC = %s", mcc);
171
172         tel_deinit(handle);
173
174  return_part:
175         _EXTERN_FUNC_EXIT;
176
177         return mcc;
178 }
179
180 char *slp_device_info_get_csc()
181 {
182         _EXTERN_FUNC_ENTER;
183
184         _EXTERN_FUNC_EXIT;
185         return strdup("VD2");
186 }
187
188 /* ====================================
189  * device directory information
190  *              fota download directory
191  *              fota save directory
192  * =====================================*/
193
194 char *slp_device_info_get_fota_download_dir()
195 {
196         _EXTERN_FUNC_ENTER;
197
198         int ret = sync_agent_create_directory(FOTA_DOWNLOAD_DIR);
199         if (ret == 0) {
200                 _DEBUG_INFO("existed foler or create foler error");
201         }
202
203         char *fota_download_dir = (char *)calloc(_D_SIZE_128_, sizeof(char));
204         if (fota_download_dir == NULL) {
205                 _DEBUG_INFO("CALLOC failed !!!");
206                 _EXTERN_FUNC_EXIT;
207                 return 0;
208         }
209         /*snprintf(FOTA_Download_Dir, _D_SIZE_128_ - 1, FOTA_DOWNLOAD_DIR, strlen(FOTA_DOWNLOAD_DIR)); */
210         snprintf(fota_download_dir, _D_SIZE_128_ - 1, "%s", FOTA_DOWNLOAD_DIR);
211
212         _DEBUG_INFO("FOTA Download dir = %s\n", fota_download_dir);
213         _EXTERN_FUNC_EXIT;
214         return fota_download_dir;
215
216 }
217
218 char *slp_device_info_get_fota_save_dir()
219 {
220         _EXTERN_FUNC_ENTER;
221
222         int ret = sync_agent_create_directory(FOTA_SAVE_DIR);
223         if (ret == 0) {
224                 _DEBUG_INFO("existed foler or create foler error");
225         }
226
227         char *fota_save_dir = (char *)calloc(_D_SIZE_128_, sizeof(char));
228         if (fota_save_dir == NULL) {
229                 _DEBUG_INFO("CALLOC failed !!!");
230                 _EXTERN_FUNC_EXIT;
231                 return 0;
232         }
233         /*snprintf(FOTA_Save_Dir, _D_SIZE_128_ - 1, FOTA_SAVE_DIR, strlen(FOTA_SAVE_DIR)); */
234         snprintf(fota_save_dir, _D_SIZE_128_ - 1, "%s", FOTA_SAVE_DIR);
235
236         _DEBUG_INFO("FOTA save dir = %s\n", fota_save_dir);
237         _EXTERN_FUNC_EXIT;
238         return fota_save_dir;
239 }
240
241 /* ====================================
242  * device directory information
243  *              fota sd card download directory
244  *              fota sd card save directory
245  * =====================================*/
246
247 char *slp_device_info_get_fota_sd_download_dir()
248 {
249         _EXTERN_FUNC_ENTER;
250
251         int ret = sync_agent_create_directory(FOTA_SD_DOWNLOAD_DIR);
252         if (ret == 0) {
253                 _DEBUG_INFO("existed foler or create foler error");
254         }
255
256         char *fota_sd_download_dir = (char *)calloc(_D_SIZE_128_, sizeof(char));
257         if (fota_sd_download_dir == NULL) {
258                 _DEBUG_INFO("CALLOC failed !!!");
259                 _EXTERN_FUNC_EXIT;
260                 return 0;
261         }
262         /*snprintf(FOTA_SD_Download_Dir, _D_SIZE_128_ - 1, FOTA_SD_DOWNLOAD_DIR, strlen(FOTA_SD_DOWNLOAD_DIR)); */
263         snprintf(fota_sd_download_dir, _D_SIZE_128_ - 1, "%s", FOTA_SD_DOWNLOAD_DIR);
264
265         _DEBUG_INFO("FOTA SD CARD Download dir = %s\n", fota_sd_download_dir);
266         _EXTERN_FUNC_EXIT;
267         return fota_sd_download_dir;
268 }
269
270 char *slp_device_info_get_fota_sd_save_dir()
271 {
272         _EXTERN_FUNC_ENTER;
273
274         int ret = sync_agent_create_directory(FOTA_SD_SAVE_DIR);
275         if (ret == 0) {
276                 _DEBUG_INFO("existed foler or create foler error");
277         }
278
279         char *fota_sd_save_dir = (char *)calloc(_D_SIZE_128_, sizeof(char));
280         if (fota_sd_save_dir == NULL) {
281                 _DEBUG_INFO("CALLOC failed !!!");
282                 _EXTERN_FUNC_EXIT;
283                 return 0;
284         }
285         /*snprintf(FOTA_SD_Save_Dir, _D_SIZE_128_ - 1, FOTA_SD_SAVE_DIR, strlen(FOTA_SD_SAVE_DIR)); */
286         snprintf(fota_sd_save_dir, _D_SIZE_128_ - 1, "%s", FOTA_SD_SAVE_DIR);
287
288         _DEBUG_INFO("FOTA SD CARD save dir = %s\n", fota_sd_save_dir);
289         _EXTERN_FUNC_EXIT;
290         return fota_sd_save_dir;
291 }
292
293 /* ====================================
294  * device etc information
295  * =====================================*/
296
297 char *slp_device_info_get_opco_info()
298 {
299         _EXTERN_FUNC_ENTER;
300
301         char *opcoInfo = (char *)calloc(_D_SIZE_128_, sizeof(char));
302         if (opcoInfo == NULL) {
303                 _DEBUG_INFO("CALLOC failed !!!");
304                 _EXTERN_FUNC_EXIT;
305                 return 0;
306         }
307         snprintf(opcoInfo, _D_SIZE_128_ - 1, "%s", OPCO);
308         _DEBUG_INFO("Opco Info = %s\n", opcoInfo);
309         _EXTERN_FUNC_EXIT;
310         return opcoInfo;        /* prevent */
311 }
312
313 char *slp_device_info_get_imsi_info()
314 {
315         _EXTERN_FUNC_ENTER;
316
317         _DEBUG_INFO("Start !!");
318
319         TelSimImsiInfo_t sim_imsi_info;
320         int err_code = -1;
321
322         char imsi_value[30] = { 0, };
323
324         TapiHandle *handle;
325         handle = tel_init(NULL);
326         if (handle == NULL) {
327                 _DEBUG_INFO("handle is NULL !!");
328                 _DEBUG_INFO("End !!");
329                 _EXTERN_FUNC_EXIT;
330                 return 0;
331         } else {
332                 _DEBUG_INFO("handle : %d", handle);
333                 err_code = tel_get_sim_imsi(handle, &sim_imsi_info);
334         }
335
336         if (err_code != TAPI_API_SUCCESS) {
337                 _DEBUG_INFO("tel_get_sim_imsi() failed !!, err_code : 0x%02x", err_code);
338                 _EXTERN_FUNC_EXIT;
339                 return 0;
340         } else {
341                 _DEBUG_INFO("tel_get_sim_imsi() success !!");
342
343                 if (!strcmp(sim_imsi_info.szMcc, " ") && !strcmp(sim_imsi_info.szMnc, " ") && !strcmp(sim_imsi_info.szMsin, " ")) {
344                         _DEBUG_INFO("mcc : %s", sim_imsi_info.szMcc);
345                         _DEBUG_INFO("mnc : %s", sim_imsi_info.szMnc);
346                         _DEBUG_INFO("msin : %s", sim_imsi_info.szMsin);
347
348                         snprintf(imsi_value, sizeof(imsi_value), "%s%s%s", sim_imsi_info.szMcc, sim_imsi_info.szMnc, sim_imsi_info.szMsin);
349                         _DEBUG_INFO("IMSI : %s ( %d )", imsi_value, strlen(imsi_value));
350
351                         tel_deinit(handle);
352
353                         _DEBUG_INFO("End !!");
354                         return strdup(imsi_value);
355                 } else {
356                         _DEBUG_INFO("invalid IMSI value !!");
357                         tel_deinit(handle);
358
359                         _EXTERN_FUNC_EXIT;
360                         return 0;
361                 }
362         }
363
364         _EXTERN_FUNC_EXIT;
365 }