4 * Copyright (C) 2012, 2013 Samsung Electronics Co., Ltd. All rights reserved.
7 * SeokYeon Hwang <syeon.hwang@samsung.com>
8 * MunKyu Im <munkyu.im@samsung.com>
9 * GiWoong Kim <giwoong.kim@samsung.com>
10 * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
34 @brief Collection of utilities for win32
38 #include "maru_common.h"
42 #include "maru_err_table.h"
51 MULTI_DEBUG_CHANNEL (emulator, osutil);
54 static qemu_timeval tv = { 0, 0 };
56 static char buf_time[64];
57 static HANDLE g_hMapFile;
60 extern char tizen_target_img_path[];
62 static const char *pactempfile = ".autoproxy";
64 void check_vm_lock_os(void)
67 char *base_port = NULL;
71 for (port = 26100; port < 26200; port += 10) {
72 base_port = g_strdup_printf("%d", port);
73 hMapFile = OpenFileMapping(FILE_MAP_READ, TRUE, base_port);
74 if (hMapFile == NULL) {
75 INFO("port %s is not used.\n", base_port);
78 pBuf = (char *)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 50);
80 ERR("Could not map view of file (%d).\n", GetLastError());
81 CloseHandle(hMapFile);
84 if (strcmp(pBuf, tizen_target_img_path) == 0) {
85 maru_register_exit_msg(MARU_EXIT_UNKNOWN,
86 "Can not execute this VM.\n"
87 "The same name is running now.");
88 UnmapViewOfFile(pBuf);
89 CloseHandle(hMapFile);
93 UnmapViewOfFile(pBuf);
97 CloseHandle(hMapFile);
102 void make_vm_lock_os(void)
108 base_port = get_emul_vm_base_port();
109 shared_memory = g_strdup_printf("%s", tizen_target_img_path);
110 port_in_use = g_strdup_printf("%d", base_port);
111 g_hMapFile = CreateFileMapping(
112 INVALID_HANDLE_VALUE, /* use paging file */
113 NULL, /* default security */
114 PAGE_READWRITE, /* read/write access */
115 0, /* maximum object size (high-order DWORD) */
116 50, /* maximum object size (low-order DWORD) */
117 port_in_use); /* name of mapping object */
118 if (g_hMapFile == NULL) {
119 ERR("Could not create file mapping object (%d).\n", GetLastError());
123 g_pBuf = MapViewOfFile(g_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 50);
124 if (g_pBuf == NULL) {
125 ERR("Could not map view of file (%d).\n", GetLastError());
126 CloseHandle(g_hMapFile);
130 CopyMemory((PVOID)g_pBuf, shared_memory, strlen(shared_memory));
135 void remove_vm_lock_os(void)
137 if (g_pBuf != NULL) {
138 UnmapViewOfFile(g_pBuf);
140 if (g_hMapFile != NULL) {
141 CloseHandle(g_hMapFile);
146 void set_bin_path_os(gchar * exec_argv)
148 gchar link_path[PATH_MAX] = { 0, };
149 gchar *file_name = NULL;
151 if (!GetModuleFileName(NULL, link_path, PATH_MAX)) {
155 file_name = g_strrstr(link_path, "\\");
156 g_strlcpy(bin_path, link_path, strlen(link_path) - strlen(file_name) + 1);
158 g_strlcat(bin_path, "\\", PATH_MAX);
161 int get_number_of_processors(void)
164 int num_processors = 0;
166 GetSystemInfo(&sysi);
167 TRACE("Processor type: %d, Core number: %d\n",
168 sysi.dwProcessorType, sysi.dwNumberOfProcessors);
170 num_processors = sysi.dwNumberOfProcessors;
171 if (num_processors < 1) {
175 return num_processors;
178 void print_system_info_os(void)
182 INFO("* LibPNG Version : %s\n", PNG_LIBPNG_VER_STRING);
184 /* Retrieves information about the current os */
186 ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
187 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
189 if (GetVersionEx(&osvi)) {
190 INFO("* MajorVersion : %d, MinorVersion : %d, BuildNumber : %d, "
191 "PlatformId : %d, CSDVersion : %s\n", osvi.dwMajorVersion,
192 osvi.dwMinorVersion, osvi.dwBuildNumber,
193 osvi.dwPlatformId, osvi.szCSDVersion);
196 /* Retrieves information about the current system */
198 ZeroMemory(&sysi, sizeof(SYSTEM_INFO));
201 GetSystemInfo(&sysi);
202 INFO("* Processor type : %d, Number of processors : %d\n",
203 sysi.dwProcessorType, sysi.dwNumberOfProcessors);
205 get_number_of_processors();
207 MEMORYSTATUSEX memInfo;
208 memInfo.dwLength = sizeof(MEMORYSTATUSEX);
209 GlobalMemoryStatusEx(&memInfo);
210 INFO("* Total Ram : %llu kB, Free: %lld kB\n",
211 memInfo.ullTotalPhys / 1024, memInfo.ullAvailPhys / 1024);
214 char *get_timeofday(void)
216 qemu_gettimeofday(&tv);
219 struct tm *ptm = localtime(&ti);
220 strftime(buf_time, sizeof(buf_time),
226 static int get_auto_proxy(BYTE *url, char *http_proxy, char *https_proxy, char *ftp_proxy, char *socks_proxy)
234 INFO("pac address: %s\n", (char*)url);
235 download_url((char*)url);
237 fp_pacfile = fopen(pactempfile, "r");
238 if(fp_pacfile != NULL) {
239 while(fgets(line, MAXLEN, fp_pacfile) != NULL) {
240 if( (strstr(line, "return") != NULL) && (strstr(line, "if") == NULL)) {
241 INFO("line found %s", line);
242 sscanf(line, "%*[^\"]\"%s %s", type, proxy);
246 if(g_str_has_prefix(type, DIRECT)) {
247 INFO("auto proxy is set to direct mode\n");
250 else if(g_str_has_prefix(type, PROXY)) {
251 INFO("auto proxy is set to proxy mode\n");
252 INFO("type: %s, proxy: %s\n", type, proxy);
253 p = strtok(proxy, "\";");
255 INFO("auto proxy to set: %s\n",p);
256 strcpy(http_proxy, p);
257 strcpy(https_proxy, p);
258 strcpy(ftp_proxy, p);
259 strcpy(socks_proxy, p);
265 ERR("pac file is not wrong! It could be the wrong pac address or pac file format\n");
270 ERR("fail to get pacfile fp\n");
279 void get_host_proxy_os(char *http_proxy, char *https_proxy, char *ftp_proxy, char *socks_proxy)
284 BYTE *proxyenable, *proxyserver;
290 nRet = RegOpenKeyEx(HKEY_CURRENT_USER,
291 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
292 0, KEY_QUERY_VALUE, &hKey);
293 if (nRet != ERROR_SUCCESS) {
294 ERR("Failed to open registry from %s\n",
295 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
298 //check auto proxy key exists
299 lRet = RegQueryValueEx(hKey, "AutoConfigURL", 0, NULL, NULL, &dwLength);
300 if (lRet != ERROR_SUCCESS && dwLength == 0) {
301 ERR("Failed to query value from %s\n",
302 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\AutoConfigURL");
306 url = (char*)malloc(dwLength);
308 ERR( "Failed to allocate a buffer\n");
311 memset(url, 0x00, dwLength);
312 lRet = RegQueryValueEx(hKey, "AutoConfigURL", 0, NULL, url, &dwLength);
313 if (lRet == ERROR_SUCCESS && dwLength != 0) {
314 get_auto_proxy(url, http_proxy, https_proxy, ftp_proxy, socks_proxy);
320 //check manual proxy key exists
321 lRet = RegQueryValueEx(hKey, "ProxyEnable", 0, NULL, NULL, &dwLength);
322 if (lRet != ERROR_SUCCESS && dwLength == 0) {
323 ERR(stderr, "Failed to query value from %s\n",
324 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyEnable");
328 proxyenable = (BYTE*)malloc(dwLength);
329 if (proxyenable == NULL) {
330 ERR( "Failed to allocate a buffer\n");
335 lRet = RegQueryValueEx(hKey, "ProxyEnable", 0, NULL, proxyenable, &dwLength);
336 if (lRet != ERROR_SUCCESS) {
338 ERR("Failed to query value from %s\n",
339 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ProxyEnable");
343 if (*(char*)proxyenable == 0) {
350 lRet = RegQueryValueEx(hKey, "ProxyServer", 0, NULL, NULL, &dwLength);
351 if (lRet != ERROR_SUCCESS && dwLength == 0) {
352 ERR("Failed to query value from from %s\n",
353 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
358 proxyserver = (BYTE*)malloc(dwLength);
359 if (proxyserver == NULL) {
360 ERR( "Failed to allocate a buffer\n");
365 memset(proxyserver, 0x00, dwLength);
366 lRet = RegQueryValueEx(hKey, "ProxyServer", 0, NULL, proxyserver, &dwLength);
367 if (lRet != ERROR_SUCCESS) {
369 ERR( "Failed to query value from from %s\n",
370 "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
375 if((char*)proxyserver != NULL) {
376 INFO("proxy value: %s\n", (char*)proxyserver);
377 real_proxy = malloc(MAXLEN);
379 for(p = strtok((char*)proxyserver, ";"); p; p = strtok(NULL, ";")){
380 if(strstr(p, HTTP_PROTOCOL)) {
381 remove_string(p, real_proxy, HTTP_PROTOCOL);
382 strcpy(http_proxy, real_proxy);
384 else if(strstr(p, HTTPS_PROTOCOL)) {
385 remove_string(p, real_proxy, HTTPS_PROTOCOL);
386 strcpy(https_proxy, real_proxy);
388 else if(strstr(p, FTP_PROTOCOL)) {
389 remove_string(p, real_proxy, FTP_PROTOCOL);
390 strcpy(ftp_proxy, real_proxy);
392 else if(strstr(p, SOCKS_PROTOCOL)) {
393 remove_string(p, real_proxy, SOCKS_PROTOCOL);
394 strcpy(socks_proxy, real_proxy);
397 INFO("all protocol uses the same proxy server: %s\n", p);
398 strcpy(http_proxy, p);
399 strcpy(https_proxy, p);
400 strcpy(ftp_proxy, p);
401 strcpy(socks_proxy, p);
407 INFO("proxy is null\n");