1e715d8b7Sdamjan /**************************************************************
2e715d8b7Sdamjan *
3e715d8b7Sdamjan * Licensed to the Apache Software Foundation (ASF) under one
4e715d8b7Sdamjan * or more contributor license agreements. See the NOTICE file
5e715d8b7Sdamjan * distributed with this work for additional information
6e715d8b7Sdamjan * regarding copyright ownership. The ASF licenses this file
7e715d8b7Sdamjan * to you under the Apache License, Version 2.0 (the
8e715d8b7Sdamjan * "License"); you may not use this file except in compliance
9e715d8b7Sdamjan * with the License. You may obtain a copy of the License at
10e715d8b7Sdamjan *
11e715d8b7Sdamjan * http://www.apache.org/licenses/LICENSE-2.0
12e715d8b7Sdamjan *
13e715d8b7Sdamjan * Unless required by applicable law or agreed to in writing,
14e715d8b7Sdamjan * software distributed under the License is distributed on an
15e715d8b7Sdamjan * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16e715d8b7Sdamjan * KIND, either express or implied. See the License for the
17e715d8b7Sdamjan * specific language governing permissions and limitations
18e715d8b7Sdamjan * under the License.
19e715d8b7Sdamjan *
20e715d8b7Sdamjan *************************************************************/
21e715d8b7Sdamjan
22*75f04985Sdamjan // MARKER(update_precomp.py): autogen include statement, do not remove
23*75f04985Sdamjan #include "precompiled_cui.hxx"
24e715d8b7Sdamjan
25e715d8b7Sdamjan #if defined _MSC_VER
26e715d8b7Sdamjan #pragma warning(push, 1)
27e715d8b7Sdamjan #endif
28e715d8b7Sdamjan #include <windows.h>
29e715d8b7Sdamjan #if defined _MSC_VER
30e715d8b7Sdamjan #pragma warning(pop)
31e715d8b7Sdamjan #endif
32e715d8b7Sdamjan #include <Winreg.h>
33e715d8b7Sdamjan #include <Shlwapi.h>
34e715d8b7Sdamjan #include <stdio.h>
35e715d8b7Sdamjan
36e715d8b7Sdamjan
37e715d8b7Sdamjan #define SO_PATH_SIZE 4096
38e715d8b7Sdamjan #define MOZ_PLUGIN_DLL_NAME "npsopluginmi.dll"
39e715d8b7Sdamjan extern "C" {
lc_isInstalled(const char * realFilePath)40e715d8b7Sdamjan int lc_isInstalled(const char* realFilePath)
41e715d8b7Sdamjan {
42e715d8b7Sdamjan HKEY hKeySoftware;
43e715d8b7Sdamjan HKEY hMozillaPlugins;
44e715d8b7Sdamjan HKEY hStarOffice;
45e715d8b7Sdamjan char sSoPath[SO_PATH_SIZE];
46e715d8b7Sdamjan char sPluginPath[SO_PATH_SIZE];
47e715d8b7Sdamjan
48e715d8b7Sdamjan LONG ret;
49e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ, &hKeySoftware);
50e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
51e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ, &hKeySoftware);
52e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
53e715d8b7Sdamjan return -1;
54e715d8b7Sdamjan }
55e715d8b7Sdamjan }
56e715d8b7Sdamjan ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ, &hMozillaPlugins);
57e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
58e715d8b7Sdamjan RegCloseKey(hKeySoftware);
59e715d8b7Sdamjan if( ret == ERROR_FILE_NOT_FOUND)
60e715d8b7Sdamjan return 1;
61e715d8b7Sdamjan else
62e715d8b7Sdamjan return -1;
63e715d8b7Sdamjan }
64e715d8b7Sdamjan ret = RegOpenKeyEx(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0", 0, KEY_READ, &hStarOffice);
65e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
66e715d8b7Sdamjan RegCloseKey(hKeySoftware);
67e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
68e715d8b7Sdamjan if( ret == ERROR_FILE_NOT_FOUND)
69e715d8b7Sdamjan return 1;
70e715d8b7Sdamjan else
71e715d8b7Sdamjan return -1;
72e715d8b7Sdamjan }
73e715d8b7Sdamjan
74e715d8b7Sdamjan if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
75e715d8b7Sdamjan ret = -1;
76e715d8b7Sdamjan else{
77e715d8b7Sdamjan sprintf(sSoPath,"%s", realFilePath);
78e715d8b7Sdamjan ret = 0;
79e715d8b7Sdamjan }
80e715d8b7Sdamjan //ret = GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
81e715d8b7Sdamjan //ret = GetEnvironmentVariable("prog", sSoPath, SO_PATH_SIZE);
82e715d8b7Sdamjan // GetCurrentDirectory return the char number of the string
83e715d8b7Sdamjan if(ret == 0){
84e715d8b7Sdamjan DWORD dType = REG_SZ;
85e715d8b7Sdamjan DWORD dSize = SO_PATH_SIZE;
86e715d8b7Sdamjan ret = RegQueryValueEx (hStarOffice, "Path", NULL, &dType , (LPBYTE) sPluginPath, &dSize);
87e715d8b7Sdamjan if(ret == ERROR_SUCCESS){
88e715d8b7Sdamjan if(strcmp(sPluginPath, sSoPath) == 0)
89e715d8b7Sdamjan ret = 0;
90e715d8b7Sdamjan else
91e715d8b7Sdamjan ret = 1;
92e715d8b7Sdamjan }
93e715d8b7Sdamjan else
94e715d8b7Sdamjan ret = -1;
95e715d8b7Sdamjan }
96e715d8b7Sdamjan else
97e715d8b7Sdamjan ret = -1;
98e715d8b7Sdamjan RegCloseKey(hStarOffice);
99e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
100e715d8b7Sdamjan RegCloseKey(hKeySoftware);
101e715d8b7Sdamjan return ret;
102e715d8b7Sdamjan }
103e715d8b7Sdamjan
lc_uninstallPlugin(const char *)104e715d8b7Sdamjan int lc_uninstallPlugin(const char*)
105e715d8b7Sdamjan {
106e715d8b7Sdamjan HKEY hKeySoftware;
107e715d8b7Sdamjan HKEY hMozillaPlugins;
108e715d8b7Sdamjan HKEY hStarOffice;
109e715d8b7Sdamjan
110e715d8b7Sdamjan LONG ret;
111e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
112e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
113e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
114e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
115e715d8b7Sdamjan return -1;
116e715d8b7Sdamjan }
117e715d8b7Sdamjan }
118e715d8b7Sdamjan ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ|KEY_WRITE, &hMozillaPlugins);
119e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
120e715d8b7Sdamjan RegCloseKey(hKeySoftware);
121e715d8b7Sdamjan if( ret == ERROR_FILE_NOT_FOUND)
122e715d8b7Sdamjan return 0;
123e715d8b7Sdamjan else
124e715d8b7Sdamjan return -1;
125e715d8b7Sdamjan }
126e715d8b7Sdamjan
127e715d8b7Sdamjan ret = RegOpenKeyEx(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0", 0, KEY_READ|KEY_WRITE, &hStarOffice);
128e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
129e715d8b7Sdamjan RegCloseKey(hKeySoftware);
130e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
131e715d8b7Sdamjan if( ret == ERROR_FILE_NOT_FOUND)
132e715d8b7Sdamjan return 0;
133e715d8b7Sdamjan else
134e715d8b7Sdamjan return -1;
135e715d8b7Sdamjan }
136e715d8b7Sdamjan RegCloseKey(hStarOffice);
137e715d8b7Sdamjan ret = SHDeleteKey(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0");
138e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
139e715d8b7Sdamjan ret = -1;
140e715d8b7Sdamjan }
141e715d8b7Sdamjan RegFlushKey(hMozillaPlugins);
142e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
143e715d8b7Sdamjan RegCloseKey(hKeySoftware);
144e715d8b7Sdamjan return ret;
145e715d8b7Sdamjan }
146e715d8b7Sdamjan
lc_installPlugin(const char * realFilePath)147e715d8b7Sdamjan int lc_installPlugin(const char* realFilePath)
148e715d8b7Sdamjan {
149e715d8b7Sdamjan HKEY hKeySoftware;
150e715d8b7Sdamjan HKEY hMozillaPlugins;
151e715d8b7Sdamjan HKEY hStarOffice;
152e715d8b7Sdamjan char sSoPath[SO_PATH_SIZE];
153e715d8b7Sdamjan DWORD sState;
154e715d8b7Sdamjan
155e715d8b7Sdamjan
156e715d8b7Sdamjan LONG ret;
157e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
158e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
159e715d8b7Sdamjan ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
160e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
161e715d8b7Sdamjan return -1;
162e715d8b7Sdamjan }
163e715d8b7Sdamjan }
164e715d8b7Sdamjan ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ|KEY_WRITE, &hMozillaPlugins);
165e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
166e715d8b7Sdamjan RegCreateKeyEx(hKeySoftware,
167e715d8b7Sdamjan "MozillaPlugins",
168e715d8b7Sdamjan 0,
169e715d8b7Sdamjan NULL,
170e715d8b7Sdamjan REG_OPTION_NON_VOLATILE,
171e715d8b7Sdamjan KEY_READ|KEY_WRITE,
172e715d8b7Sdamjan NULL,
173e715d8b7Sdamjan &hMozillaPlugins,
174e715d8b7Sdamjan &sState);
175e715d8b7Sdamjan }
176e715d8b7Sdamjan
177e715d8b7Sdamjan ret = RegCreateKeyEx(hMozillaPlugins,
178e715d8b7Sdamjan "@sun.com/npsopluginmi;version=1.0",
179e715d8b7Sdamjan 0,
180e715d8b7Sdamjan NULL,
181e715d8b7Sdamjan REG_OPTION_NON_VOLATILE,
182e715d8b7Sdamjan KEY_READ|KEY_WRITE,
183e715d8b7Sdamjan NULL,
184e715d8b7Sdamjan &hStarOffice,
185e715d8b7Sdamjan &sState);
186e715d8b7Sdamjan if(ret != ERROR_SUCCESS){
187e715d8b7Sdamjan RegCloseKey(hKeySoftware);
188e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
189e715d8b7Sdamjan return -1;
190e715d8b7Sdamjan }
191e715d8b7Sdamjan
192e715d8b7Sdamjan RegFlushKey(hStarOffice);
193e715d8b7Sdamjan RegFlushKey(hMozillaPlugins);
194e715d8b7Sdamjan
195e715d8b7Sdamjan
196e715d8b7Sdamjan if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
197e715d8b7Sdamjan ret = -1;
198e715d8b7Sdamjan else{
199e715d8b7Sdamjan sprintf(sSoPath,"%s", realFilePath);
200e715d8b7Sdamjan ret = 0;
201e715d8b7Sdamjan }
202e715d8b7Sdamjan
203e715d8b7Sdamjan //ret = GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
204e715d8b7Sdamjan // GetCurrentDirectory return the char number of the string
205e715d8b7Sdamjan if(ret == 0){
206e715d8b7Sdamjan ret = RegSetValueEx( hStarOffice, "Path", 0, REG_SZ, (LPBYTE) sSoPath, strlen(sSoPath) + 1);
207e715d8b7Sdamjan if(ret == ERROR_SUCCESS)
208e715d8b7Sdamjan ret = 0;
209e715d8b7Sdamjan else
210e715d8b7Sdamjan ret = -1;
211e715d8b7Sdamjan }
212e715d8b7Sdamjan else
213e715d8b7Sdamjan ret = -1;
214e715d8b7Sdamjan RegFlushKey(hStarOffice);
215e715d8b7Sdamjan RegFlushKey(hMozillaPlugins);
216e715d8b7Sdamjan RegCloseKey(hStarOffice);
217e715d8b7Sdamjan RegCloseKey(hMozillaPlugins);
218e715d8b7Sdamjan RegCloseKey(hKeySoftware);
219e715d8b7Sdamjan RegFlushKey(HKEY_LOCAL_MACHINE);
220e715d8b7Sdamjan
221e715d8b7Sdamjan return ret;
222e715d8b7Sdamjan }
223e715d8b7Sdamjan }
224