4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 #include <arpa/inet.h>
24 #include <sys/types.h>
27 #include <sys/socket.h>
28 #include <util-func.h>
29 #include "media-info.h"
30 #include "media-info-debug.h"
31 #include "media-info-env.h"
32 #include "media-info-util.h"
33 #include "media-svc.h"
34 #include "audio-svc.h"
35 #include "audio-svc-error.h"
37 #define TIMEOUT_SEC 10
39 int mediainfo_open(void)
45 if (err < MB_SVC_ERROR_NONE) {
46 mediainfo_dbg("minfo_init falis");
49 err = audio_svc_open();
50 if (err < AUDIO_SVC_ERROR_NONE) {
51 mediainfo_dbg("audio_svc_open falis");
54 if (err < 0) return MEDIA_INFO_ERROR_DATABASE_CONNECT;
56 mediainfo_dbg("Success");
60 int mediainfo_close(void)
65 err = minfo_finalize();
66 if (err < MB_SVC_ERROR_NONE) {
67 mediainfo_dbg("minfo_finalize falis");
70 err = audio_svc_close();
71 if (err < AUDIO_SVC_ERROR_NONE) {
72 mediainfo_dbg("audio_svc_close falis");
75 if (err < 0) return MEDIA_INFO_ERROR_DATABASE_DISCONNECT;
77 mediainfo_dbg("Success");
81 int mediainfo_connect_db_with_handle(sqlite3 **db_handle)
86 db_util_open(MEDIA_INFO_DATABASE_NAME, db_handle,
87 DB_UTIL_REGISTER_HOOK_METHOD);
89 if (SQLITE_OK != err) {
92 return MEDIA_INFO_ERROR_DATABASE_CONNECT;
95 return MEDIA_INFO_ERROR_NONE;
98 int mediainfo_disconnect_db_with_handle(sqlite3 *db_handle)
102 err = db_util_close(db_handle);
104 if (SQLITE_OK != err) {
107 return MEDIA_INFO_ERROR_DATABASE_DISCONNECT;
110 return MEDIA_INFO_ERROR_NONE;
113 #define MINFO_REGISTER_PORT 1001
115 static bool _mediainfo_is_valid_path(const char *path)
120 if (strncmp(path, MEDIAINFO_PHONE_ROOT_PATH, strlen(MEDIAINFO_PHONE_ROOT_PATH)) == 0) {
122 } else if (strncmp(path, MEDIAINFO_MMC_ROOT_PATH, strlen(MEDIAINFO_MMC_ROOT_PATH)) == 0) {
130 DEPRECATED_API int mediainfo_register_file(const char *file_full_path)
135 int recv_msg = MEDIA_INFO_ERROR_NONE;
136 int server_addr_size;
137 struct sockaddr_in server_addr;
138 struct timeval tv_timeout = { TIMEOUT_SEC, 0 };
140 if(!_mediainfo_is_valid_path(file_full_path)) {
141 mediainfo_dbg("Invalid path : %s", file_full_path);
142 return MEDIA_INFO_ERROR_INVALID_PATH;
145 exist = open(file_full_path, O_RDONLY);
147 mediainfo_dbg("Not exist path : %s", file_full_path);
148 return MEDIA_INFO_ERROR_INVALID_PATH;
152 sockfd = socket(PF_INET, SOCK_DGRAM, 0);
155 mediainfo_dbg("socket create fail");
156 return MEDIA_INFO_ERROR_SOCKET_CONN;
159 /*add timeout : timeout is 10 sec.*/
160 if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv_timeout, sizeof(tv_timeout)) == -1) {
161 mediainfo_dbg("setsockopt failed");
162 return MEDIA_INFO_ERROR_SOCKET_CONN;
165 memset(&server_addr, 0, sizeof(server_addr));
166 server_addr.sin_family = AF_INET;
167 server_addr.sin_port = htons(MINFO_REGISTER_PORT);
168 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
170 err = sendto(sockfd, file_full_path, strlen(file_full_path), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
172 mediainfo_dbg("sendto error");
173 perror("sendto error : ");
174 return MEDIA_INFO_ERROR_SOCKET_SEND;
176 mediainfo_dbg("SEND OK");
179 server_addr_size = sizeof(server_addr);
180 err = recvfrom(sockfd, &recv_msg, sizeof(recv_msg), 0 , (struct sockaddr*)&server_addr, (socklen_t *)&server_addr_size);
182 if (errno == EWOULDBLOCK) {
183 mediainfo_dbg("recvfrom timeout");
184 return MEDIA_INFO_ERROR_SOCKET_RECEIVE_TIMEOUT;
186 mediainfo_dbg("recvfrom error");
187 perror("recvfrom error : ");
188 return MEDIA_INFO_ERROR_SOCKET_RECEIVE;
191 mediainfo_dbg("RECEIVE OK");
192 mediainfo_dbg("client receive: %d", recv_msg);
200 DEPRECATED_API int mediainfo_list_new(minfo_list *list)
202 *list = g_array_new(TRUE, TRUE, sizeof(char*));
204 return MB_SVC_ERROR_NONE;
207 DEPRECATED_API int mediainfo_list_add(minfo_list list, const char* file_full_path)
212 mediainfo_dbg("list == NULL");
213 return MB_SVC_ERROR_INVALID_PARAMETER;
216 if (!file_full_path) {
217 mediainfo_dbg("file_full_path == NULL");
218 return MB_SVC_ERROR_INVALID_PARAMETER;
221 minfo_list ret_list = NULL;
222 char *path = strdup(file_full_path);
224 int len = list->len + 1;
228 ret_list = g_array_append_val(list, path);
229 if(ret_list == NULL) {
230 mediainfo_dbg("g_array_append_val fails");
231 return MB_SVC_ERROR_UNKNOWN;
236 for(i = 0; i < len; i++) {
237 data = g_array_index(list, char*, i);
238 mediainfo_dbg("%d, %s", i, data);
241 return MB_SVC_ERROR_NONE;
244 DEPRECATED_API int mediainfo_list_free(minfo_list list)
247 return MB_SVC_ERROR_INVALID_PARAMETER;
249 int len = list->len + 1;
253 for(i = 0; i < len; i++) {
254 data = g_array_index(list, char*, i);
258 g_array_free(list, TRUE);
260 return MB_SVC_ERROR_NONE;
263 DEPRECATED_API int mediainfo_register_files(const minfo_list list)
266 return MB_SVC_ERROR_INVALID_PARAMETER;
268 int len = list->len + 1;
272 for(i = 0; i < len; i++) {
273 data = g_array_index(list, char*, i);
274 mediainfo_register_file(data);
277 return MB_SVC_ERROR_NONE;