/[gpgoe]/trunk/src/GPGOE.c
ViewVC logotype

Diff of /trunk/src/GPGOE.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by twoaday, Fri Mar 24 13:36:54 2006 UTC revision 24 by twoaday, Tue Dec 13 10:40:30 2011 UTC
# Line 1  Line 1 
1  /* GPGOE.c - GnuPG for Outlook Express  /* GPGOE.c - GnuPG for Outlook Express
2   *      Copyright (C) 2001, 2002, 2003, 2006 Timo Schulz   *      Copyright (C) 2001, 2002, 2003, 2006, 2007 Timo Schulz
3   *   *
4   * This file is part of GPGOE.   * This file is part of GPGOE.
5   *   *
# Line 12  Line 12 
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.   * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU Lesser General Public License  
  * along with GPGOE; if not, write to the Free Software Foundation,  
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA  
15   */   */
16    
17  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
# Line 27  Line 23 
23  #include "gpgme.h"  #include "gpgme.h"
24  #include "GPGOE.h"  #include "GPGOE.h"
25    
   
26  /* Global DLL module handle. */  /* Global DLL module handle. */
27  HINSTANCE mod_hinst_dll;  HINSTANCE mod_hinst_dll;
28    
29    /* Outlook Express old window procedure. */
30    WNDPROC oe_proc_old;
31    
32  /* DLL hook handle for the CBT function. */  /* DLL hook handle for the CBT function. */
33  static HHOOK ctb_hook = NULL;  static HHOOK ctb_hook = NULL;
34    
35  /* Outlook Express window handle. */  /* Outlook Express window handle. */
36  static HWND oe_hwnd = NULL;  static HWND oe_hwnd = NULL;
37    
38  /* Outlook Express old window procedure. */  /* We need a shared section to define variables which
39  WNDPROC oe_proc_old;     will keep their values in all address spaces. */
40    #ifndef __GNUC__
41    #pragma  data_seg(".SHARDAT")
42    #endif
43    /* Supported GPGOE feature modes. */
44    int gpgoe_active_modes ATTR_SEC = 0;
45    
46    /* FIXME: we currently limit the passphrase to N octets. */
47    char gpgoe_pass_cache[HASH_BUCKETS][MAX_PASS_LEN];
48    #ifndef __GNUC__
49    #pragma data_seg()
50    #endif
51    
52    
53  /* Main DLL entry point. */  /* Main DLL entry point. */
# Line 65  DllMain (HINSTANCE hinst_dll, DWORD reas Line 74  DllMain (HINSTANCE hinst_dll, DWORD reas
74  }  }
75    
76    
77    #if 0
78    /* Quick and dirty check if the dialog is a common dialog
79       and the 'File {Open, Save}' style. */
80    static int
81    is_common_file_dlg (HWND h)
82    {
83        HWND button = GetDlgItem (h, 1040);
84        char wclass[200];
85    
86        if (button == NULL)
87            return 0;
88        if (GetClassName (button, wclass, 200) > 0
89            && !stricmp (wclass, "Button"))
90            return -1;
91        return 0;
92    }
93    #endif
94    
95    
96  /* CTB hook procedure.  /* CTB hook procedure.
97     Monitors the creation of all windows and subclass the window     Monitors the creation of all windows and subclass the window
98     if it belongs to the Outlook Express message class. */     if it belongs to the Outlook Express (message) class. */
99  static LRESULT CALLBACK  static LRESULT CALLBACK
100  ctb_proc (int code, WPARAM wparam, LPARAM lparam)  ctb_proc (int code, WPARAM wparam, LPARAM lparam)
101  {  {
# Line 80  ctb_proc (int code, WPARAM wparam, LPARA Line 108  ctb_proc (int code, WPARAM wparam, LPARA
108      hwnd = (HWND)wparam;      hwnd = (HWND)wparam;
109      switch (code) {      switch (code) {
110      case HCBT_CREATEWND:      case HCBT_CREATEWND:
111          GetClassName (hwnd, wclass, sizeof (wclass) - 1);          GetClassName (hwnd, wclass, DIM (wclass) - 1);
112          if (!strcmp (wclass, "ATH_Note")) {          if (!strcmp (wclass, "ATH_Note")) {
113              oe_proc_old = (WNDPROC) GetWindowLong (hwnd, GWL_WNDPROC);              oe_proc_old = (WNDPROC) GetWindowLong (hwnd, GWL_WNDPROC);
114              if (!oe_proc_old)              if (!oe_proc_old)
# Line 94  ctb_proc (int code, WPARAM wparam, LPARA Line 122  ctb_proc (int code, WPARAM wparam, LPARA
122              else              else
123                  oe_hwnd = hwnd;                  oe_hwnd = hwnd;
124          }          }
125    
126            if ((gpgoe_active_modes & GPGOE_MODE_PLAINREPLY) &&
127                !strcmp (wclass, "Outlook Express Browser Class")) {
128                oe_main_proc_old = (WNDPROC)GetWindowLong (hwnd, GWL_WNDPROC);
129                if (!oe_main_proc_old)
130                    show_error (NULL, "GPGOE", MB_ICONERROR|MB_OK,
131                                "Could not get window procedure ec=%d",
132                                (int)GetLastError ());
133                else if (!SetWindowLong (hwnd, GWL_WNDPROC, (LONG)(WNDPROC)oe_main_proc))
134                    show_error (NULL, "GPGOE", MB_ICONERROR|MB_OK,
135                                "Could not set window procedure: ec=%d",
136                                (int)GetLastError ());
137            }
138            break;
139    
140        case HCBT_ACTIVATE:
141    #if 0 /* Disable the attachment related code for now. */
142            if (plugin_active != NULL &&
143                WaitForSingleObject (plugin_active, 0) == WAIT_OBJECT_0) {
144    
145                if (GetClassName (hwnd, wclass, sizeof (wclass)-1) <= 0 ||
146                    !strstr (wclass, "#32770") || !is_common_file_dlg (hwnd))
147                    break;
148                of_proc_old = (WNDPROC)GetWindowLong (hwnd, GWL_WNDPROC);
149                SetWindowLong (hwnd, GWL_WNDPROC, (LONG)(WNDPROC)of_proc);
150            }
151    #endif
152          break;          break;
153      }        }  
154      return CallNextHookEx (ctb_hook, code, wparam, lparam);      return CallNextHookEx (ctb_hook, code, wparam, lparam);
155  }  }
156    
157    
158  /* Initialize the hooks.  /* Initialize the hooks; a named mutex prevents that the
159     To prevent double initialisation, we use a named mutex. */     initialisation is done twice.
160       Return value: 0 on success. */
161  int  int
162  gpgoe_initialize (void)  gpgoe_initialize (void)
163  {  {
164        reset_pass_cache ();
165      CreateMutex (NULL, TRUE, "gpgoe");      CreateMutex (NULL, TRUE, "gpgoe");
166      if (GetLastError () == ERROR_ALREADY_EXISTS)      if (GetLastError () == ERROR_ALREADY_EXISTS)
167          return 0;          return 0;
# Line 113  gpgoe_initialize (void) Line 170  gpgoe_initialize (void)
170  }  }
171    
172    
173  /* Deinitialize the hooks and close all handles. */  /* Deinitialize the hooks and close all handles.
174       Return value: 0 on success. */
175  int  int
176  gpgoe_remove (void)  gpgoe_remove (void)
177  {  {
     int rc = 0;  
178      HANDLE hd;      HANDLE hd;
179        int rc;
180        
181      hd = CreateMutex (NULL, TRUE, "gpgoe");      hd = CreateMutex (NULL, TRUE, "gpgoe");
182      if (GetLastError() == ERROR_ALREADY_EXISTS) {      if (GetLastError() == ERROR_ALREADY_EXISTS) {
183          oe_hwnd = NULL;          oe_hwnd = NULL;
# Line 127  gpgoe_remove (void) Line 185  gpgoe_remove (void)
185      }      }
186      SetWindowLong (oe_hwnd, GWL_WNDPROC, (LONG)(WNDPROC)oe_proc_old);      SetWindowLong (oe_hwnd, GWL_WNDPROC, (LONG)(WNDPROC)oe_proc_old);
187      rc = UnhookWindowsHookEx (ctb_hook);      rc = UnhookWindowsHookEx (ctb_hook);
188    
189        /* reset global variables. */
190        reset_pass_cache ();
191        gpgoe_active_modes = 0;
192    
193      return rc ? 0 : (int)GetLastError ();      return rc ? 0 : (int)GetLastError ();
194  }  }
195    
196    
197    /* Change the active plug-in modes, enable mode @mode. */
198    void
199    gpgoe_set_active_modes (int mode)
200    {
201        gpgoe_active_modes = mode;
202    }
203    
204    
205    int
206    gpgoe_get_active_modes (void)
207    {
208        return gpgoe_active_modes;
209    }

Legend:
Removed from v.1  
changed lines
  Added in v.24

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26