/[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 16 by twoaday, Tue Apr 11 06:56:23 2006 UTC revision 23 by twoaday, Sat Aug 18 10:55:14 2007 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 39  static HHOOK ctb_hook = NULL; Line 35  static HHOOK ctb_hook = NULL;
35  /* Outlook Express window handle. */  /* Outlook Express window handle. */
36  static HWND oe_hwnd = NULL;  static HWND oe_hwnd = NULL;
37    
38    /* We need a shared section to define variables which
39       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 256 octets. */
47    char gpgoe_pass_cache[HASH_BUCKETS][256];
48    #ifndef __GNUC__
49    #pragma data_seg()
50    #endif
51    
52    
53  /* Main DLL entry point. */  /* Main DLL entry point. */
54  BOOL WINAPI  BOOL WINAPI
# Line 64  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  /* Quick and dirty check if the dialog is a common dialog
79     and the 'File {Open, Save}' style. */     and the 'File {Open, Save}' style. */
80  static int  static int
# Line 79  is_common_file_dlg (HWND h) Line 90  is_common_file_dlg (HWND h)
90          return -1;          return -1;
91      return 0;      return 0;
92  }  }
93    #endif
94    
95    
96  /* CTB hook procedure.  /* CTB hook procedure.
# Line 97  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 112  ctb_proc (int code, WPARAM wparam, LPARA Line 123  ctb_proc (int code, WPARAM wparam, LPARA
123                  oe_hwnd = hwnd;                  oe_hwnd = hwnd;
124          }          }
125    
126          if (!strcmp (wclass, "Outlook Express Browser Class")) {          if ((gpgoe_active_modes & GPGOE_MODE_PLAINREPLY) &&
127                !strcmp (wclass, "Outlook Express Browser Class")) {
128              oe_main_proc_old = (WNDPROC)GetWindowLong (hwnd, GWL_WNDPROC);              oe_main_proc_old = (WNDPROC)GetWindowLong (hwnd, GWL_WNDPROC);
129              if (!oe_main_proc_old)              if (!oe_main_proc_old)
130                  show_error (NULL, "GPGOE", MB_ICONERROR|MB_OK,                  show_error (NULL, "GPGOE", MB_ICONERROR|MB_OK,
# Line 126  ctb_proc (int code, WPARAM wparam, LPARA Line 138  ctb_proc (int code, WPARAM wparam, LPARA
138          break;          break;
139    
140      case HCBT_ACTIVATE:      case HCBT_ACTIVATE:
141  #if 0  #if 0 /* Disable the attachment related code for now. */
142          if (plugin_active != NULL &&          if (plugin_active != NULL &&
143              WaitForSingleObject (plugin_active, 0) == WAIT_OBJECT_0) {              WaitForSingleObject (plugin_active, 0) == WAIT_OBJECT_0) {
             char wclass[200];  
144    
145              if (GetClassName (hwnd, wclass, sizeof (wclass)-1) <= 0 ||              if (GetClassName (hwnd, wclass, sizeof (wclass)-1) <= 0 ||
146                  !strstr (wclass, "#32770") || !is_common_file_dlg (hwnd))                  !strstr (wclass, "#32770") || !is_common_file_dlg (hwnd))
# Line 150  ctb_proc (int code, WPARAM wparam, LPARA Line 161  ctb_proc (int code, WPARAM wparam, LPARA
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 165  gpgoe_remove (void) Line 177  gpgoe_remove (void)
177  {  {
178      HANDLE hd;      HANDLE hd;
179      int rc;      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 173  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.16  
changed lines
  Added in v.23

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26