From 98727fc4a050d4b6ba052ff8873c0b63236f851f Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Wed, 26 Sep 2007 20:34:08 +0000 Subject: [PATCH] - generate the netcard status information and populate the dialog with it - patch by Gregor Brunmar svn path=/trunk/; revision=29219 --- reactos/dll/cpl/ncpa/lang/bg-BG.rc | 12 + reactos/dll/cpl/ncpa/lang/cs-CZ.rc | 12 + reactos/dll/cpl/ncpa/lang/da-DK.rc | 12 + reactos/dll/cpl/ncpa/lang/de-DE.rc | 12 + reactos/dll/cpl/ncpa/lang/el-GR.rc | 12 + reactos/dll/cpl/ncpa/lang/en-US.rc | 12 + reactos/dll/cpl/ncpa/lang/es-ES.rc | 12 + reactos/dll/cpl/ncpa/lang/fr-FR.rc | 12 + reactos/dll/cpl/ncpa/lang/hu-HU.rc | 12 + reactos/dll/cpl/ncpa/lang/id-ID.rc | 12 + reactos/dll/cpl/ncpa/lang/it-IT.rc | 12 + reactos/dll/cpl/ncpa/lang/ja-JP.rc | 12 + reactos/dll/cpl/ncpa/lang/nb-NO.rc | 12 + reactos/dll/cpl/ncpa/lang/nl-NL.rc | 13 + reactos/dll/cpl/ncpa/lang/pl-PL.rc | 12 + reactos/dll/cpl/ncpa/lang/ru-RU.rc | 12 + reactos/dll/cpl/ncpa/lang/sv-SE.rc | 12 + reactos/dll/cpl/ncpa/lang/uk-UA.rc | 12 + reactos/dll/cpl/ncpa/ncpa.c | 493 ++++++++++++++++++++++------- reactos/dll/cpl/ncpa/ncpa.h | 10 + reactos/dll/cpl/ncpa/resource.h | 12 + 21 files changed, 619 insertions(+), 113 deletions(-) diff --git a/reactos/dll/cpl/ncpa/lang/bg-BG.rc b/reactos/dll/cpl/ncpa/lang/bg-BG.rc index fadc1909cfd..7643194328d 100644 --- a/reactos/dll/cpl/ncpa/lang/bg-BG.rc +++ b/reactos/dll/cpl/ncpa/lang/bg-BG.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Свойства", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Изключване", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -119,4 +122,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Недостиг на памет" IDS_CANNOT_SAVE_CHANGES "Съхраняването на направените от вас настройки е невъзможно" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc index ece0a378f34..5c4f3d4df55 100644 --- a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc +++ b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Vlastnosti", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Zakбzat", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/da-DK.rc b/reactos/dll/cpl/ncpa/lang/da-DK.rc index 40e30380457..80f3f4ffa39 100644 --- a/reactos/dll/cpl/ncpa/lang/da-DK.rc +++ b/reactos/dll/cpl/ncpa/lang/da-DK.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 134, 115, 44, 8 PUSHBUTTON "&Egenskaber", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Deaktiver", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/de-DE.rc b/reactos/dll/cpl/ncpa/lang/de-DE.rc index d714b59c332..c7444cce620 100644 --- a/reactos/dll/cpl/ncpa/lang/de-DE.rc +++ b/reactos/dll/cpl/ncpa/lang/de-DE.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "E&igenschaften", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Deaktivieren", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -119,4 +122,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Property sheet kann nicht erstellt werden" IDS_OUT_OF_MEMORY "Nicht genug Arbeitsspeicher" IDS_CANNOT_SAVE_CHANGES "Дnderungen kцnnen nicht gespeichert werden" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/el-GR.rc b/reactos/dll/cpl/ncpa/lang/el-GR.rc index 69161d339fd..41a82883fb3 100644 --- a/reactos/dll/cpl/ncpa/lang/el-GR.rc +++ b/reactos/dll/cpl/ncpa/lang/el-GR.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Йдйьфзфет", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&БренесгпрпЯзуз", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -119,4 +122,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Ден Юфбн дхнбфЮ з брпиЮкехуз фщн бллбгюн убт" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/en-US.rc b/reactos/dll/cpl/ncpa/lang/en-US.rc index efc2daef1c3..06c212d1ecc 100644 --- a/reactos/dll/cpl/ncpa/lang/en-US.rc +++ b/reactos/dll/cpl/ncpa/lang/en-US.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Properties", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Disable", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -119,4 +122,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/es-ES.rc b/reactos/dll/cpl/ncpa/lang/es-ES.rc index 117f1581ae7..3dde557857f 100644 --- a/reactos/dll/cpl/ncpa/lang/es-ES.rc +++ b/reactos/dll/cpl/ncpa/lang/es-ES.rc @@ -56,6 +56,9 @@ BEGIN RTEXT "00.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Propiedades", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Desabilitar", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -125,4 +128,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/fr-FR.rc b/reactos/dll/cpl/ncpa/lang/fr-FR.rc index c8bd5376386..51bfd69f9f9 100644 --- a/reactos/dll/cpl/ncpa/lang/fr-FR.rc +++ b/reactos/dll/cpl/ncpa/lang/fr-FR.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Propriйtйs", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Dйsactiver", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Impossible de crйer la page de propriйtйs" IDS_OUT_OF_MEMORY "Plus de mйmoire" IDS_CANNOT_SAVE_CHANGES "Impossible de sauvegarder les changements" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/hu-HU.rc b/reactos/dll/cpl/ncpa/lang/hu-HU.rc index 3aa1d249e8d..ac9cfcf2a2a 100644 --- a/reactos/dll/cpl/ncpa/lang/hu-HU.rc +++ b/reactos/dll/cpl/ncpa/lang/hu-HU.rc @@ -53,6 +53,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Tulajdonsбgok", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Letiltбs", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -121,4 +124,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/id-ID.rc b/reactos/dll/cpl/ncpa/lang/id-ID.rc index dd9f62b1bb8..4885c2c272f 100644 --- a/reactos/dll/cpl/ncpa/lang/id-ID.rc +++ b/reactos/dll/cpl/ncpa/lang/id-ID.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Properti", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Dimatikan", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Tidak bisa membuat lembar properti" IDS_OUT_OF_MEMORY "Kekurangan memori" IDS_CANNOT_SAVE_CHANGES "Tidak bisa menyimpan perubahan yang anda buat" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/it-IT.rc b/reactos/dll/cpl/ncpa/lang/it-IT.rc index 94bd6ada1bc..d3eb290c56c 100644 --- a/reactos/dll/cpl/ncpa/lang/it-IT.rc +++ b/reactos/dll/cpl/ncpa/lang/it-IT.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Proprietа", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Disabilita", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Impossibile creare la pagina delle proprietа" IDS_OUT_OF_MEMORY "Memoria esaurita" IDS_CANNOT_SAVE_CHANGES "Impossibile salvare le modifiche effettuate" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/ja-JP.rc b/reactos/dll/cpl/ncpa/lang/ja-JP.rc index e2e8398981e..f718fb4d879 100644 --- a/reactos/dll/cpl/ncpa/lang/ja-JP.rc +++ b/reactos/dll/cpl/ncpa/lang/ja-JP.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "ѓvѓЌѓpѓeѓB(&P)", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "–іЊш‚Й‚·‚й(&D)", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/nb-NO.rc b/reactos/dll/cpl/ncpa/lang/nb-NO.rc index b3551160981..705964baf4e 100644 --- a/reactos/dll/cpl/ncpa/lang/nb-NO.rc +++ b/reactos/dll/cpl/ncpa/lang/nb-NO.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Properties", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Disable", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -119,4 +122,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/nl-NL.rc b/reactos/dll/cpl/ncpa/lang/nl-NL.rc index ce05dda6c01..b5608d1f5cd 100644 --- a/reactos/dll/cpl/ncpa/lang/nl-NL.rc +++ b/reactos/dll/cpl/ncpa/lang/nl-NL.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Eigenschappen", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Uitschakelen", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,5 +123,15 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END + diff --git a/reactos/dll/cpl/ncpa/lang/pl-PL.rc b/reactos/dll/cpl/ncpa/lang/pl-PL.rc index a5fb6aaa455..1c5e7150d07 100644 --- a/reactos/dll/cpl/ncpa/lang/pl-PL.rc +++ b/reactos/dll/cpl/ncpa/lang/pl-PL.rc @@ -54,6 +54,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Wіaњciwoњci", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Odі№cz", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -116,4 +119,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Nie moїna utworzyж przegl№du ustawieс" IDS_OUT_OF_MEMORY "Brak wolnej pamiкci" IDS_CANNOT_SAVE_CHANGES "Nie moїna zapisaж dokonanych zmian!" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/ru-RU.rc b/reactos/dll/cpl/ncpa/lang/ru-RU.rc index 18ca583659b..a927653a18c 100644 --- a/reactos/dll/cpl/ncpa/lang/ru-RU.rc +++ b/reactos/dll/cpl/ncpa/lang/ru-RU.rc @@ -52,6 +52,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Свойства", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Отключить", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -120,4 +123,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Невозможно создать лист настроек" IDS_OUT_OF_MEMORY "Память переполнена" IDS_CANNOT_SAVE_CHANGES "Невозможно сохранить сделанные изменения" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/sv-SE.rc b/reactos/dll/cpl/ncpa/lang/sv-SE.rc index 255edab73cf..e3c6919292f 100644 --- a/reactos/dll/cpl/ncpa/lang/sv-SE.rc +++ b/reactos/dll/cpl/ncpa/lang/sv-SE.rc @@ -54,6 +54,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "&Egenskaper", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "&Inaktivera", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -122,4 +125,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" IDS_OUT_OF_MEMORY "Out of memory" IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/lang/uk-UA.rc b/reactos/dll/cpl/ncpa/lang/uk-UA.rc index 1e48b0d62e9..14f4f674ebd 100644 --- a/reactos/dll/cpl/ncpa/lang/uk-UA.rc +++ b/reactos/dll/cpl/ncpa/lang/uk-UA.rc @@ -60,6 +60,9 @@ BEGIN RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 PUSHBUTTON "Влас&тивості", IDC_PROPERTIES, 10, 150, 50, 14 PUSHBUTTON "Ви&мкнути", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 END IDD_CARDSUPPORT DIALOG DISCARDABLE 0, 0, 200,180 @@ -128,4 +131,13 @@ BEGIN IDS_CANNOT_CREATE_PROPSHEET "Неможливо створити вікно властивостей" IDS_OUT_OF_MEMORY "Недостатньо пам'яті" IDS_CANNOT_SAVE_CHANGES "Неможливо зберегти внесені зміни" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "No WAN adapter found" + IDS_STATUS_DISCONNECTED "Disconnected" + IDS_STATUS_CONNECTING "Connecting" + IDS_STATUS_CONNECTED "Connected" + IDS_STATUS_OPERATIONAL "Connected" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d day %s" + IDS_DURATION_DAYS "%d days %s" END diff --git a/reactos/dll/cpl/ncpa/ncpa.c b/reactos/dll/cpl/ncpa/ncpa.c index 20f029d1c8d..637e0b1d213 100644 --- a/reactos/dll/cpl/ncpa/ncpa.c +++ b/reactos/dll/cpl/ncpa/ncpa.c @@ -243,22 +243,27 @@ NICPropertyProtocolCallback(void *pCookie,HKEY hBaseKey,TCHAR *tpszSubKey) static INT_PTR CALLBACK NICPropertyPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - PROPSHEETPAGE *pPage = (PROPSHEETPAGE *)GetWindowLongPtr(hwndDlg,GWL_USERDATA); + PGLOBAL_NCPA_DATA pGlobalData = (PGLOBAL_NCPA_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + switch(uMsg) { case WM_INITDIALOG: { - TCHAR *tpszCfgInstanceID; DWORD dwType,dwSize; TCHAR tpszSubKey[MAX_PATH]; TCHAR tpszDisplayName[MAX_PATH]; HKEY hKey; - pPage = (PROPSHEETPAGE *)lParam; - tpszCfgInstanceID = (TCHAR*)pPage->lParam; - if(!FindNICClassKeyForCfgInstance(tpszCfgInstanceID,tpszSubKey)) + + pGlobalData = (PGLOBAL_NCPA_DATA)((LPPROPSHEETPAGE)lParam)->lParam; + if (pGlobalData == NULL) + return FALSE; + + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); + + if(!FindNICClassKeyForCfgInstance(pGlobalData->CurrentAdapterName, tpszSubKey)) { MessageBox(hwndDlg,_T("NIC Entry not found"),_T("Registry error"),MB_ICONSTOP); - MessageBox(hwndDlg,tpszCfgInstanceID,tpszSubKey,MB_ICONSTOP); + MessageBox(hwndDlg,pGlobalData->CurrentAdapterName,tpszSubKey,MB_ICONSTOP); } if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,tpszSubKey,0,KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS) @@ -272,7 +277,6 @@ NICPropertyPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) SetDlgItemText(hwndDlg,IDC_NETCARDNAME,tpszDisplayName); EnableWindow(GetDlgItem(hwndDlg,IDC_CONFIGURE),FALSE); - SetWindowLongPtr(hwndDlg,GWL_USERDATA,(DWORD_PTR)lParam); //SetDlgItemTextA(hwndDlg,IDC_NETCARDNAME,Info[pPage->lParam].Description); EnumRegKeys(NICPropertyProtocolCallback,hwndDlg,HKEY_LOCAL_MACHINE,_T("System\\CurrentControlSet\\Control\\Network\\{4D36E975-E325-11CE-BFC1-08002BE10318}")); @@ -312,62 +316,14 @@ NICPropertyPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) // drop though case IDC_PROPERTIES: { - TCHAR *tpszSubKey = NULL; - TCHAR tpszNDIKey[MAX_PATH]; - TCHAR tpszClsIDText[MAX_PATH]; - TCHAR *tpszTCPIPClsID = _T("{A907657F-6FDF-11D0-8EFB-00C04FD912B2}"); - HKEY hNDIKey; - DWORD dwType,dwSize; - HWND hListBox = GetDlgItem(hwndDlg,IDC_COMPONENTSLIST); - int iListBoxIndex = (int) SendMessage(hListBox,LB_GETCURSEL,0,0); - if(iListBoxIndex != LB_ERR) - tpszSubKey = (TCHAR*)SendMessage(hListBox,LB_GETITEMDATA,iListBoxIndex,0); - if(!tpszSubKey) - break; - _stprintf(tpszNDIKey,_T("%s\\Ndi"),tpszSubKey); - - RegOpenKeyEx(HKEY_LOCAL_MACHINE,tpszNDIKey,0,KEY_QUERY_VALUE,&hNDIKey); - dwSize = sizeof(tpszClsIDText); - if(RegQueryValueEx(hNDIKey,_T("ClsId"),NULL,&dwType,(BYTE*)tpszClsIDText,&dwSize)!= ERROR_SUCCESS || dwType != REG_SZ) - ;//return; - RegCloseKey(hNDIKey); - - if(_tcscmp(tpszTCPIPClsID,tpszClsIDText)==0) + if(pGlobalData->pCurrentAdapterInfo) { - IP_ADAPTER_INFO Adapters[64]; - IP_ADAPTER_INFO *pAdapter; - TCHAR *tpszCfgInstanceID; - ULONG ulSize = sizeof(Adapters); - memset(&Adapters,0x00,sizeof(Adapters)); - if(GetAdaptersInfo(Adapters,&ulSize)!=ERROR_SUCCESS) - break;; - pAdapter = Adapters; - tpszCfgInstanceID = (TCHAR*)pPage->lParam; - while(pAdapter) - { - TCHAR tpszAdapterName[MAX_PATH]; - swprintf(tpszAdapterName,L"%S",pAdapter->AdapterName); - DPRINT("IPHLPAPI returned: %S\n", tpszAdapterName); - if(_tcscmp(tpszAdapterName,tpszCfgInstanceID)==0) - { - DisplayTCPIPProperties(hwndDlg,pAdapter); - break; - } else - { - DPRINT("... which is not the TCPIP property sheet\n"); - } - pAdapter = pAdapter->Next; - if(!pAdapter) - { - MessageBox(NULL,_T("If you see this, then the IPHLPAPI.DLL probably needs more work because GetAdaptersInfo did not return the expected data."),_T("Error"),MB_ICONSTOP); - } - } - - } else - { - MessageBox(NULL,_T("This control panel is incomplete.\r\nUsually, the \"Notify Object\" for this Network component should be invoked here. Reactos lacks the infrastructure to do this right now.\r\n- C++\r\n- DDK Headers for notify objects\r\n- clean header structure, that allow Windows-Compatible COM C++ Code"),_T("Error"),MB_ICONSTOP); + DisplayTCPIPProperties(hwndDlg, pGlobalData->pCurrentAdapterInfo); } - + else + { + MessageBox(NULL,_T("If you see this, then the IPHLPAPI.DLL probably needs more work because GetAdaptersInfo did not return the expected data."),_T("Error"),MB_ICONSTOP); + } } break; } @@ -378,7 +334,7 @@ NICPropertyPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) static void -DisplayNICProperties(HWND hParent,TCHAR *tpszCfgInstanceID) +DisplayNICProperties(HWND hParent, GLOBAL_NCPA_DATA* pGlobalData) { PROPSHEETPAGE psp[1]; PROPSHEETHEADER psh; @@ -387,6 +343,13 @@ DisplayNICProperties(HWND hParent,TCHAR *tpszCfgInstanceID) DWORD dwType = REG_SZ; TCHAR tpszName[MAX_PATH]; DWORD dwSize = sizeof(tpszName); + TCHAR tpszCfgInstanceID[MAX_ADAPTER_NAME_LENGTH]; + +#ifndef _UNICODE + WideCharToMultiByte(CP_UTF8, 0, pGlobalData->CurrentAdapterName, -1, tpszCfgInstanceID, MAX_ADAPTER_NAME_LENGTH, 0, 0); +#else + wcscpy(tpszCfgInstanceID, pGlobalData->CurrentAdapterName); +#endif // Get the "Name" for this Connection _stprintf(tpszSubKey,_T("System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection"),tpszCfgInstanceID); @@ -412,21 +375,286 @@ DisplayNICProperties(HWND hParent,TCHAR *tpszCfgInstanceID) psh.pfnCallback = NULL; - InitPropSheetPage(&psp[0], IDD_NETPROPERTIES, NICPropertyPageProc,(LPARAM)tpszCfgInstanceID); + InitPropSheetPage(&psp[0], IDD_NETPROPERTIES, NICPropertyPageProc, (LPARAM)pGlobalData); PropertySheet(&psh); return; } +void RefreshNICInfo(HWND hwndDlg, PGLOBAL_NCPA_DATA pGlobalData) +{ + ULONG BufferSize; + DWORD ErrRet = 0; + + if (pGlobalData->pFirstAdapterInfo) + HeapFree(GetProcessHeap(), 0, pGlobalData->pFirstAdapterInfo); + + BufferSize = sizeof(IP_ADAPTER_INFO); + pGlobalData->pFirstAdapterInfo = (PIP_ADAPTER_INFO) HeapAlloc(GetProcessHeap(), 0, BufferSize); + + if (GetAdaptersInfo(pGlobalData->pFirstAdapterInfo, &BufferSize) == ERROR_BUFFER_OVERFLOW) + { + HeapFree(GetProcessHeap(), 0, pGlobalData->pFirstAdapterInfo); + pGlobalData->pFirstAdapterInfo = (PIP_ADAPTER_INFO) HeapAlloc(GetProcessHeap(), 0, BufferSize); + } + + if ((ErrRet = GetAdaptersInfo(pGlobalData->pFirstAdapterInfo, &BufferSize)) != NO_ERROR) + { + MessageBox(hwndDlg, _T("error adapterinfo") ,_T("ncpa.cpl"),MB_ICONSTOP); + + if (pGlobalData->pFirstAdapterInfo) + HeapFree(GetProcessHeap(), 0, pGlobalData->pFirstAdapterInfo); + } +} + +void UpdateCurrentAdapterInfo(HWND hwndDlg, PGLOBAL_NCPA_DATA pGlobalData) +{ + PIP_INTERFACE_INFO pInfo; + ULONG BufferSize = 0; + DWORD dwRetVal = 0; + + if (!pGlobalData->pCurrentAdapterInfo) + return; + + BufferSize = sizeof(IP_INTERFACE_INFO); + pInfo = (PIP_INTERFACE_INFO) HeapAlloc(GetProcessHeap(), 0, BufferSize); + if (ERROR_INSUFFICIENT_BUFFER == GetInterfaceInfo(pInfo, &BufferSize)) + { + HeapFree(GetProcessHeap(), 0, pInfo); + pInfo = (PIP_INTERFACE_INFO) HeapAlloc(GetProcessHeap(), 0, BufferSize); + } + + dwRetVal = GetInterfaceInfo(pInfo, &BufferSize); + if (NO_ERROR == dwRetVal) + { + DWORD i; + + for (i = 0; i < pInfo->NumAdapters; i++) + { + if (0 == wcscmp(pGlobalData->CurrentAdapterName, pInfo->Adapter[i].Name)) + { + if (pInfo->Adapter[i].Index != pGlobalData->pCurrentAdapterInfo->Index) + { + RefreshNICInfo(hwndDlg, pGlobalData); + + pGlobalData->pCurrentAdapterInfo = pGlobalData->pFirstAdapterInfo; + while (pGlobalData->pCurrentAdapterInfo) + { + if (pGlobalData->pCurrentAdapterInfo->Index == pInfo->Adapter[i].Index) + return; + + pGlobalData->pCurrentAdapterInfo = pGlobalData->pCurrentAdapterInfo->Next; + } + } + } + } + } + else if (ERROR_NO_DATA == dwRetVal) + DPRINT("There are no network adapters with IPv4 enabled on the local system\n"); + else + DPRINT1("GetInterfaceInfo failed.\n"); +} + +static VOID +UpdateNICStatusData(HWND hwndDlg, PGLOBAL_NCPA_DATA pGlobalData) +{ + DWORD dwRet = NO_ERROR; + + if (pGlobalData->pCurrentAdapterInfo) + { + if (NULL == pGlobalData->pIfTable) + { + pGlobalData->IfTableSize = sizeof(MIB_IFTABLE); + pGlobalData->pIfTable = (PMIB_IFTABLE)HeapAlloc(GetProcessHeap(), 0, pGlobalData->IfTableSize); + if (NULL == pGlobalData->pIfTable) + { + static BOOL firstError = TRUE; + if (firstError) + { + firstError = FALSE; + DPRINT1("Out of memory - could not allocate MIB_IFTABLE(1)"); + return; + } + } + } + + /* Call GetIfTable once to see if we have a large enough buffer */ + dwRet = GetIfTable(pGlobalData->pIfTable, &pGlobalData->IfTableSize, FALSE); + if (ERROR_INSUFFICIENT_BUFFER == dwRet) + { + HeapFree(GetProcessHeap(), 0, pGlobalData->pIfTable); + + pGlobalData->pIfTable = (PMIB_IFTABLE)HeapAlloc(GetProcessHeap(), 0, pGlobalData->IfTableSize); + if (NULL == pGlobalData->pIfTable) + { + static BOOL firstError = TRUE; + if (firstError) + { + firstError = FALSE; + DPRINT1("Out of memory - could not allocate MIB_IFTABLE(2)"); + } + + pGlobalData->IfTableSize = 0; + return; + } + + dwRet = GetIfTable(pGlobalData->pIfTable, &pGlobalData->IfTableSize, FALSE); + if (NO_ERROR != dwRet) + { + HeapFree(GetProcessHeap(), 0, pGlobalData->pIfTable); + pGlobalData->pIfTable = NULL; + pGlobalData->IfTableSize = 0; + return; + } + } + } + + if (NO_ERROR == dwRet) + { + DWORD i; + DWORD PktsOut = 0; + DWORD PktsIn = 0; + DWORD Mbps = 0; + DWORD OperStatus = IF_OPER_STATUS_DISCONNECTED; + PMIB_IFROW pIfRow = NULL; + TCHAR Buffer[256], LocBuffer[256]; + SYSTEMTIME TimeConnected; + + memset(&TimeConnected, 0, sizeof(TimeConnected)); + + if (pGlobalData->pCurrentAdapterInfo) + { + UpdateCurrentAdapterInfo(hwndDlg, pGlobalData); + + for (i = 0; i < pGlobalData->pIfTable->dwNumEntries; i++) + { + pIfRow = (PMIB_IFROW)&pGlobalData->pIfTable->table[i]; + + if (pIfRow->dwIndex == pGlobalData->pCurrentAdapterInfo->Index) + { + DWORD DurationSeconds; + SYSTEMTIME SystemTime; + FILETIME SystemFileTime; + ULARGE_INTEGER LargeSystemTime; + + PktsOut = pIfRow->dwOutUcastPkts; + PktsIn = pIfRow->dwInUcastPkts; + Mbps = pIfRow->dwSpeed; + OperStatus = pIfRow->dwOperStatus; + + /* TODO: For some unknown reason, this doesn't correspond to the Windows duration */ + GetSystemTime(&SystemTime); + SystemTimeToFileTime(&SystemTime, &SystemFileTime); + LargeSystemTime = *(ULARGE_INTEGER *)&SystemFileTime; + LargeSystemTime.QuadPart /= 100000ULL; + DurationSeconds = ((LargeSystemTime.LowPart - pIfRow->dwLastChange) / 100); + TimeConnected.wSecond = (DurationSeconds % 60); + TimeConnected.wMinute = (DurationSeconds / 60) % 60; + TimeConnected.wHour = (DurationSeconds / (60 * 60)) % 24; + TimeConnected.wDay = DurationSeconds / (60 * 60 * 24); + + break; + } + } + } + + _stprintf(Buffer, L"%u", PktsOut); + GetNumberFormat(LOCALE_USER_DEFAULT, 0, Buffer, NULL, LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])); + SendDlgItemMessage(hwndDlg, IDC_SEND, WM_SETTEXT, 0, (LPARAM)LocBuffer); + + _stprintf(Buffer, L"%u", PktsIn); + GetNumberFormat(LOCALE_USER_DEFAULT, 0, Buffer, NULL, LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])); + SendDlgItemMessage(hwndDlg, IDC_RECEIVED, WM_SETTEXT, 0, (LPARAM)LocBuffer); + + switch (OperStatus) + { + case IF_OPER_STATUS_NON_OPERATIONAL: + OperStatus = IDS_STATUS_NON_OPERATIONAL; + break; + + case IF_OPER_STATUS_UNREACHABLE: + OperStatus = IDS_STATUS_UNREACHABLE; + break; + + case IF_OPER_STATUS_DISCONNECTED: + OperStatus = IDS_STATUS_DISCONNECTED; + break; + + case IF_OPER_STATUS_CONNECTING: + OperStatus = IDS_STATUS_CONNECTING; + break; + + case IF_OPER_STATUS_CONNECTED: + OperStatus = IDS_STATUS_CONNECTED; + break; + + case IF_OPER_STATUS_OPERATIONAL: + /* TODO: Find sub status, waiting for DHCP address, etc. */ + OperStatus = IDS_STATUS_OPERATIONAL; + break; + + default: + DPRINT1("Unknown operation status: %d\n", OperStatus); + OperStatus = IDS_STATUS_OPERATIONAL; + break; + } + LoadString(hApplet, OperStatus, LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])); + SendDlgItemMessage(hwndDlg, IDC_STATUS, WM_SETTEXT, 0, (LPARAM)LocBuffer); + + GetTimeFormat(LOCALE_USER_DEFAULT, 0, &TimeConnected, L"HH':'mm':'ss", LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])); + if (0 == TimeConnected.wDay) + { + SendDlgItemMessage(hwndDlg, IDC_DURATION, WM_SETTEXT, 0, (LPARAM)LocBuffer); + } + else + { + TCHAR DayBuffer[256]; + if (1 == TimeConnected.wDay) + { + LoadString(hApplet, IDS_DURATION_DAY, DayBuffer, sizeof(DayBuffer) / sizeof(DayBuffer[0])); + } + else + { + LoadString(hApplet, IDS_DURATION_DAYS, DayBuffer, sizeof(DayBuffer) / sizeof(DayBuffer[0])); + } + _sntprintf(Buffer, 256, DayBuffer, TimeConnected.wDay, LocBuffer); + SendDlgItemMessage(hwndDlg, IDC_DURATION, WM_SETTEXT, 0, (LPARAM)Buffer); + } + + LoadString(hApplet, IDS_SPEED_MBPS, LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])); + _sntprintf(Buffer, 256, LocBuffer, Mbps / 1000000); + SendDlgItemMessage(hwndDlg, IDC_SPEED, WM_SETTEXT, 0, (LPARAM)Buffer); + } + else + { + static BOOL firstError = TRUE; + if (firstError) + { + firstError = FALSE; + DPRINT1("GetIfTable failed with error code: %d\n", dwRet); + return; + } + } +} + static INT_PTR CALLBACK NICStatusPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { + PGLOBAL_NCPA_DATA pGlobalData; + pGlobalData = (PGLOBAL_NCPA_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + switch(uMsg) { case WM_INITDIALOG: { - PROPSHEETPAGE *psp= (PROPSHEETPAGE *)lParam; + pGlobalData = (PGLOBAL_NCPA_DATA)((LPPROPSHEETPAGE)lParam)->lParam; + if (pGlobalData == NULL) + return FALSE; + + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); + EnableWindow(GetDlgItem(hwndDlg,IDC_ENDISABLE),FALSE); - SetWindowLongPtr(hwndDlg,DWL_USER,(DWORD_PTR)psp->lParam); + pGlobalData->hStatsUpdateTimer = SetTimer(hwndDlg, 1, 1000, NULL); + UpdateNICStatusData(hwndDlg, pGlobalData); } break; case WM_COMMAND: @@ -434,13 +662,29 @@ NICStatusPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case IDC_PROPERTIES: { - TCHAR *tpszCfgInstance; - tpszCfgInstance = (TCHAR*)GetWindowLong(hwndDlg,DWL_USER); - DisplayNICProperties(hwndDlg,tpszCfgInstance); + DisplayNICProperties(hwndDlg, pGlobalData); } break; } break; + case WM_TIMER: + { + UpdateNICStatusData(hwndDlg, pGlobalData); + } + break; + case WM_DESTROY: + { + KillTimer(hwndDlg, pGlobalData->hStatsUpdateTimer); + pGlobalData->hStatsUpdateTimer = 0; + + if (pGlobalData->pIfTable) + { + HeapFree(GetProcessHeap(), 0, pGlobalData->pIfTable); + pGlobalData->pIfTable = NULL; + pGlobalData->IfTableSize = 0; + } + } + break; } return FALSE; } @@ -448,57 +692,36 @@ NICStatusPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) static INT_PTR CALLBACK NICSupportPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - + PGLOBAL_NCPA_DATA pGlobalData; + pGlobalData = (PGLOBAL_NCPA_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + switch(uMsg) { case WM_INITDIALOG: - { - TCHAR Buffer[64]; - - PIP_ADAPTER_INFO pAdapterInfo = NULL; - ULONG adaptOutBufLen; - - DWORD ErrRet = 0; - - pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); - adaptOutBufLen = sizeof(IP_ADAPTER_INFO); - - if (GetAdaptersInfo( pAdapterInfo, &adaptOutBufLen) == ERROR_BUFFER_OVERFLOW) - { - free(pAdapterInfo); - pAdapterInfo = (IP_ADAPTER_INFO *) malloc (adaptOutBufLen); - } - - if ((ErrRet = GetAdaptersInfo(pAdapterInfo, &adaptOutBufLen)) != NO_ERROR) - { - MessageBox(hwndDlg, _T("error adapterinfo") ,_T("ncpa.cpl"),MB_ICONSTOP); - - if (pAdapterInfo) free(pAdapterInfo); + { + pGlobalData = (PGLOBAL_NCPA_DATA)((LPPROPSHEETPAGE)lParam)->lParam; + if (pGlobalData == NULL) return FALSE; - } - - if (pAdapterInfo) - { - /*FIXME: select the correct adapter info!!*/ - - if (pAdapterInfo->DhcpEnabled) + + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); + + if (pGlobalData->pCurrentAdapterInfo) + { + TCHAR Buffer[64]; + + if (pGlobalData->pCurrentAdapterInfo->DhcpEnabled) LoadString(hApplet, IDS_ASSIGNED_DHCP, Buffer, sizeof(Buffer) / sizeof(TCHAR)); else LoadString(hApplet, IDS_ASSIGNED_MANUAL, Buffer, sizeof(Buffer) / sizeof(TCHAR)); SendDlgItemMessage(hwndDlg, IDC_DETAILSTYPE, WM_SETTEXT, 0, (LPARAM)Buffer); - _stprintf(Buffer, _T("%S"), pAdapterInfo->IpAddressList.IpAddress.String); + _stprintf(Buffer, _T("%S"), pGlobalData->pCurrentAdapterInfo->IpAddressList.IpAddress.String); SendDlgItemMessage(hwndDlg, IDC_DETAILSIP, WM_SETTEXT, 0, (LPARAM)Buffer); - _stprintf(Buffer, _T("%S"), pAdapterInfo->IpAddressList.IpMask.String); + _stprintf(Buffer, _T("%S"), pGlobalData->pCurrentAdapterInfo->IpAddressList.IpMask.String); SendDlgItemMessage(hwndDlg, IDC_DETAILSSUBNET, WM_SETTEXT, 0, (LPARAM)Buffer); - _stprintf(Buffer, _T("%S"), pAdapterInfo->GatewayList.IpAddress.String); + _stprintf(Buffer, _T("%S"), pGlobalData->pCurrentAdapterInfo->GatewayList.IpAddress.String); SendDlgItemMessage(hwndDlg, IDC_DETAILSGATEWAY, WM_SETTEXT, 0, (LPARAM)Buffer); - - free(pAdapterInfo); - } - - - + } } break; case WM_COMMAND: @@ -530,6 +753,17 @@ DisplayNICStatus(HWND hParent,TCHAR *tpszCfgInstanceID) DWORD dwType = REG_SZ; TCHAR tpszName[MAX_PATH]; DWORD dwSize = sizeof(tpszName); + PGLOBAL_NCPA_DATA pGlobalData; + PIP_ADAPTER_INFO pInfo; + WCHAR wcsAdapterName[MAX_ADAPTER_NAME]; + + pGlobalData = (PGLOBAL_NCPA_DATA)GetWindowLongPtr(hParent, DWLP_USER); + +#ifndef _UNICODE + MultiByteToWideChar(CP_UTF8, 0, tpszCfgInstanceID, -1, pGlobalData->CurrentAdapterName, MAX_ADAPTER_NAME); +#else + wcscpy(pGlobalData->CurrentAdapterName, tpszCfgInstanceID); +#endif // Get the "Name" for this Connection _stprintf(tpszSubKey,_T("System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection"),tpszCfgInstanceID); @@ -555,9 +789,25 @@ DisplayNICStatus(HWND hParent,TCHAR *tpszCfgInstanceID) psh.nStartPage = 0; psh.ppsp = psp; psh.pfnCallback = NULL; - - InitPropSheetPage(&psp[0], IDD_CARDPROPERTIES, NICStatusPageProc, (LPARAM)tpszCfgInstanceID); - InitPropSheetPage(&psp[1], IDD_CARDSUPPORT, NICSupportPageProc, (LPARAM)tpszCfgInstanceID); + + RefreshNICInfo(hParent, pGlobalData); + + pGlobalData->pCurrentAdapterInfo = NULL; + pInfo = pGlobalData->pFirstAdapterInfo; + while (pInfo) + { + MultiByteToWideChar(CP_UTF8, 0, pInfo->AdapterName, -1, wcsAdapterName, MAX_ADAPTER_NAME); + if (0 == wcscmp(wcsAdapterName, pGlobalData->CurrentAdapterName)) + { + pGlobalData->pCurrentAdapterInfo = pInfo; + break; + } + + pInfo = pInfo->Next; + } + + InitPropSheetPage(&psp[0], IDD_CARDPROPERTIES, NICStatusPageProc, (LPARAM)pGlobalData); + InitPropSheetPage(&psp[1], IDD_CARDSUPPORT, NICSupportPageProc, (LPARAM)pGlobalData); PropertySheet(&psh); return; @@ -682,9 +932,15 @@ NetworkPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: { + PGLOBAL_NCPA_DATA pGlobalData = (PGLOBAL_NCPA_DATA)((LPPROPSHEETPAGE)lParam)->lParam; + if (pGlobalData == NULL) + return FALSE; + + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); + EnableWindow(GetDlgItem(hwndDlg,IDC_ADD),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_REMOVE),FALSE); - + EnumAdapters(hwndDlg); SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_SETCURSEL,0,0); } @@ -738,12 +994,18 @@ NetworkPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) static LONG CALLBACK DisplayApplet(VOID) { + PGLOBAL_NCPA_DATA pGlobalData; PROPSHEETPAGE psp[1]; PROPSHEETHEADER psh = {0}; TCHAR Caption[1024]; + int Ret; LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR)); + pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_NCPA_DATA)); + if (pGlobalData == NULL) + return 0; + psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE; psh.hwndParent = NULL; @@ -755,9 +1017,13 @@ DisplayApplet(VOID) psh.ppsp = psp; psh.pfnCallback = NULL; - InitPropSheetPage(&psp[0], IDD_PROPPAGENETWORK, NetworkPageProc,0); + InitPropSheetPage(&psp[0], IDD_PROPPAGENETWORK, NetworkPageProc, (LPARAM)pGlobalData); - return (LONG)(PropertySheet(&psh) != -1); + Ret = PropertySheet(&psh); + + HeapFree(GetProcessHeap(), 0, pGlobalData); + + return (LONG)(Ret != -1); } /* Control Panel Callback */ @@ -814,3 +1080,4 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved) } + diff --git a/reactos/dll/cpl/ncpa/ncpa.h b/reactos/dll/cpl/ncpa/ncpa.h index 4d947706051..e1489c5a581 100644 --- a/reactos/dll/cpl/ncpa/ncpa.h +++ b/reactos/dll/cpl/ncpa/ncpa.h @@ -11,6 +11,16 @@ typedef struct CPLAPPLET_PROC AppletProc; } APPLET, *PAPPLET; +typedef struct +{ + WCHAR CurrentAdapterName[MAX_ADAPTER_NAME]; + UINT_PTR hStatsUpdateTimer; + PMIB_IFTABLE pIfTable; + DWORD IfTableSize; + PIP_ADAPTER_INFO pFirstAdapterInfo; + PIP_ADAPTER_INFO pCurrentAdapterInfo; +} GLOBAL_NCPA_DATA, *PGLOBAL_NCPA_DATA; + extern HINSTANCE hApplet; extern ULONG DbgPrint(PCCH Fmt, ...); diff --git a/reactos/dll/cpl/ncpa/resource.h b/reactos/dll/cpl/ncpa/resource.h index 9ab13f93619..f2c04b1aea4 100644 --- a/reactos/dll/cpl/ncpa/resource.h +++ b/reactos/dll/cpl/ncpa/resource.h @@ -35,6 +35,15 @@ #define IDS_CANNOT_CREATE_PROPSHEET 3005 #define IDS_OUT_OF_MEMORY 3006 #define IDS_CANNOT_SAVE_CHANGES 3007 +#define IDS_STATUS_NON_OPERATIONAL 4001 +#define IDS_STATUS_UNREACHABLE 4002 +#define IDS_STATUS_DISCONNECTED 4003 +#define IDS_STATUS_CONNECTING 4004 +#define IDS_STATUS_CONNECTED 4005 +#define IDS_STATUS_OPERATIONAL 4006 +#define IDS_SPEED_MBPS 4007 +#define IDS_DURATION_DAY 4008 +#define IDS_DURATION_DAYS 4009 /* controls */ @@ -69,6 +78,9 @@ #define IDC_DETAILSTYPE 127 #define IDC_DETAILSSUBNET 128 #define IDC_DETAILSGATEWAY 129 +#define IDC_STATUS 130 +#define IDC_DURATION 131 +#define IDC_SPEED 132 #endif /* __CPL_RESOURCE_H */ /* EOF */