91aafd226f02bb76b4f8d44a220603c08de253ef
[openafs.git] / src / WINNT / client_config / dlg_binding.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14 #include <stdio.h>
15 #include "afs_config.h"
16 #include "getlana.h"
17
18
19 /*
20  * DEFINITIONS ________________________________________________________________
21  *
22  */
23
24
25 // Our dialog data
26 static BOOL fFirstTime = TRUE;
27 int nLanAdapter;
28 LANAINFO* lanainfo = NULL;
29
30 int GetAdapterNumber(TCHAR*);
31
32 /*
33  * PROTOTYPES _________________________________________________________________
34  *
35  */
36
37 void Binding_OnInitDialog (HWND hDlg);
38 void Binding_OnOK(HWND hDlg);
39 void Binding_OnCancel(HWND hDlg);
40 BOOL Binding_OnApply();
41
42 BOOL isGateway = FALSE;
43 /*
44  * ROUTINES ___________________________________________________________________
45  *
46  */
47
48 BOOL CALLBACK Binding_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
49 {
50    switch (msg)
51       {
52       case WM_INITDIALOG:
53          Binding_OnInitDialog (hDlg);
54          break;
55
56       case WM_CTLCOLORSTATIC:
57          if ((HWND)lp == GetDlgItem (hDlg, IDC_CHUNK_SIZE))
58             {
59             if (IsWindowEnabled ((HWND)lp))
60                {
61                static HBRUSH hbrStatic = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
62                SetTextColor ((HDC)wp, GetSysColor (COLOR_WINDOWTEXT));
63                SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
64                return (BOOL)hbrStatic;
65                }
66             }
67          break;
68
69       case WM_COMMAND:
70          switch (LOWORD(wp))
71          {
72             case IDHELP:
73                Binding_DlgProc (hDlg, WM_HELP, 0, 0);
74                break;
75
76             case IDOK:
77                 Binding_OnOK(hDlg);
78                 break;
79                 
80             case IDCANCEL:
81                 Binding_OnCancel(hDlg);
82                 break;
83                               case IDC_DEFAULTNIC:
84                 if (HIWORD(wp) == BN_CLICKED)
85                 {
86                   TCHAR name[MAX_PATH];
87                   memset(name, 0, sizeof(name));
88                                           if (IsDlgButtonChecked(hDlg,IDC_DEFAULTNIC))
89                                                   nLanAdapter=-1;
90                                           else
91                   {
92                     HWND hwndCombo = GetDlgItem(hDlg, IDC_NICSELECTION);
93                     if (SendMessage(hwndCombo, CB_GETCURSEL, 0, 0) == CB_ERR)
94                       SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
95
96                     TCHAR selected[MAX_PATH];
97                     memset(selected, 0, sizeof(selected));
98                     SendDlgItemMessage(hDlg, IDC_NICSELECTION, 
99                           WM_GETTEXT, sizeof(selected), 
100                           (LPARAM) selected); 
101
102                     if (_tcslen(selected) <= 0)
103                   
104                       nLanAdapter = -1;
105                     else
106                       nLanAdapter = GetAdapterNumber(selected);
107                   }
108                                     
109                   GetAfsName(nLanAdapter, isGateway, name);
110                   SetDlgItemText (hDlg, IDC_BINDING_MESSAGE, name);
111                                           EnableWindow(GetDlgItem(hDlg,IDC_NICSELECTION),(nLanAdapter!=-1));
112                   break;
113                 }
114             case IDC_NICSELECTION:
115               if (HIWORD(wp) == CBN_SELCHANGE)
116               {
117                 TCHAR name[MAX_PATH];
118                 TCHAR selected[MAX_PATH];
119                 memset(name, 0, sizeof(name));
120                 memset(selected, 0, sizeof(selected));
121                 HWND hwndCombo = GetDlgItem(hDlg, IDC_NICSELECTION);
122                 int i = SendMessage(hwndCombo, CB_GETCURSEL, 0, 0);
123                 if (i != CB_ERR)
124                   SendMessage(hwndCombo, CB_GETLBTEXT, (WPARAM)i, 
125                         (LPARAM) selected); 
126
127                 if (_tcslen(selected) <= 0)
128                   nLanAdapter = -1;
129                 else
130                   nLanAdapter = GetAdapterNumber(selected);
131         
132                                   
133                 GetAfsName(nLanAdapter, isGateway, name);
134                 SetDlgItemText (hDlg, IDC_BINDING_MESSAGE, name);
135                 break;
136               }
137
138          }
139          break;
140
141       case WM_HELP:
142          WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_ADVANCED_MISC);
143          break;
144       }
145
146    return FALSE;
147 }
148
149
150 void Binding_OnInitDialog (HWND hDlg)
151 {
152    
153   TCHAR msg[MAX_PATH];
154   TCHAR name[MAX_PATH];
155   memset(msg, 0, sizeof(msg));
156   memset(name, 0, sizeof(name));
157       
158   if (fFirstTime) {
159     Config_GetLanAdapter(&g.Configuration.nLanAdapter);
160     nLanAdapter = g.Configuration.nLanAdapter;
161     isGateway = g.Configuration.fBeGateway;
162     fFirstTime = FALSE;
163   }
164
165   lanainfo = GetLana(msg, NULL);
166
167   if (!lanainfo && _tcslen(msg) > 0)
168     MessageBox(hDlg, msg, "LANA ERROR", MB_ICONERROR);
169   else
170   {
171     HWND hwndCombo = GetDlgItem(hDlg, IDC_NICSELECTION);
172     int index = 0;
173     TCHAR tmp[MAX_PATH];
174     while (_tcslen(lanainfo[index].lana_name) > 0)
175     {
176       _stprintf(tmp, "%s (lana number = %d)", lanainfo[index].lana_name, 
177             lanainfo[index].lana_number);
178       SendMessage(hwndCombo, CB_ADDSTRING, 
179             0, (LPARAM) tmp);
180       if (nLanAdapter == lanainfo[index].lana_number)
181         SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM)-1, 
182               (LPARAM)tmp);
183       index++;
184     }
185   }
186
187
188   GetAfsName(nLanAdapter, isGateway, name);
189   SetDlgItemText (hDlg, IDC_BINDING_MESSAGE, name);
190
191   CheckDlgButton (hDlg, IDC_DEFAULTNIC, (nLanAdapter==-1));
192
193   EnableWindow(GetDlgItem(hDlg,IDC_NICSELECTION),(nLanAdapter!=-1));
194 }
195
196 void Binding_OnOK (HWND hDlg)
197 {
198   if (IsDlgButtonChecked(hDlg,IDC_DEFAULTNIC))
199     nLanAdapter = -1;
200   else
201   {
202     TCHAR selected[MAX_PATH];
203     memset(selected, 0, sizeof(selected));
204     SendDlgItemMessage(hDlg, IDC_NICSELECTION, 
205                         WM_GETTEXT, sizeof(selected), 
206                         (LPARAM) selected); 
207
208     if (_tcslen(selected) <= 0)
209     {
210       MessageBox(hDlg, "Please select the NIC to bind to", "Error", MB_ICONERROR);
211       return;
212     }
213     
214     nLanAdapter = GetAdapterNumber(selected);
215
216   }
217  
218    EndDialog(hDlg, IDOK);
219 }
220
221
222 BOOL Binding_OnApply()
223 {
224    if (fFirstTime)
225       return TRUE;
226
227   if (nLanAdapter != g.Configuration.nLanAdapter) {
228       if (!Config_SetLanAdapter (nLanAdapter))
229          return FALSE;
230       g.Configuration.nLanAdapter = nLanAdapter;
231    }
232
233   return TRUE;
234
235    
236 }
237
238 void Binding_OnCancel(HWND hDlg)
239 {
240    fFirstTime = TRUE;
241
242    if (lanainfo)
243    {
244      delete lanainfo;
245      lanainfo = NULL;
246    }
247
248    EndDialog(hDlg, IDCANCEL);
249 }
250
251
252 int GetAdapterNumber(TCHAR* n)
253 {
254   int index = 0;
255   while (_tcslen(lanainfo[index].lana_name) > 0)
256    {
257        if (_tcsncmp(lanainfo[index].lana_name, n, _tcslen(lanainfo[index].lana_name)) == 0)
258        {
259          return lanainfo[index].lana_number;
260        }
261        index++;
262     }
263
264   return -1;
265
266 }