Rename get_windows_interface_friendlyname() to
authorGuy Harris <guy@alum.mit.edu>
Sat, 24 Nov 2012 00:05:32 +0000 (00:05 -0000)
committerGuy Harris <guy@alum.mit.edu>
Sat, 24 Nov 2012 00:05:32 +0000 (00:05 -0000)
get_windows_interface_friendly_name(), and have it return the friendly
name on success and NULL on failure.

Get rid of the logging in get_windows_interface_friendly_name().

svn path=/trunk/; revision=46161

capture-pcap-util.c
capture_win_ifnames.c
capture_win_ifnames.h
ui/gtk/capture_if_details_dlg_win32.c

index 06eff2b06bc162beeaae8b25f7c347ab3f6b169e..e1ce888695595754f979d72bfb9cc55776d465bb 100644 (file)
@@ -71,7 +71,7 @@ if_info_new(const char *name, const char *description, gboolean loopback)
         * and the friendly name isn't returned by WinPcap.
         * Fetch it ourselves.
         */
-       get_windows_interface_friendlyname(name, &if_info->friendly_name);
+       if_info->friendly_name = get_windows_interface_friendly_name(name);
        if_info->vendor_description = g_strdup(description);
 #else
        /*
index 7c9a7ebcb44631dd92503918f33f4a3fe8a309d5..1687e4aa8408376384b527fa9206d8755e2af8e6 100644 (file)
@@ -66,33 +66,11 @@ gboolean IsWindowsVistaOrLater()
     }
     return FALSE;
 }
-/**********************************************************************************/
-/* The wireshark gui doesn't appear at this stage to support having logging messages
-* returned using g_log() before the interface list.
-* Below is a generic logging function that can be easily ripped out or configured to
-* redirect to g_log() if the behaviour changes in the future.
-*/
-static void ifnames_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, ...)
-{
-    char buf[16384];
-    va_list args;
-
-    if(log_level!=G_LOG_LEVEL_ERROR){
-        return;
-    }
-
-    va_start(args, format);
-    vsnprintf(buf, 16383, format, args);
-    va_end(args);
-
-    fprintf(stderr,"%s\r\n",buf);
 
-}
-
-#define g_log ifnames_log
 /**********************************************************************************/
 /* Get the Connection Name for the given GUID */
-static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **Name)
+static char *
+GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid)
 {
     HMODULE hIPHlpApi;
     HRESULT status;
@@ -100,23 +78,16 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **
     HRESULT hr;
     gboolean fallbackToUnpublishedApi=TRUE;
     gboolean haveInterfaceFriendlyName=FALSE;
-
-    /* check we have a parameter */
-    if(Name==NULL){
-        return -1;
-    }
+    int size;
+    char *name;
 
     /* Load the ip helper api DLL */
     hIPHlpApi = LoadLibrary(TEXT("iphlpapi.dll"));
     if (hIPHlpApi == NULL) {
         /* Load failed - DLL should always be available in XP+*/
-        g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-            "Failed to load iphlpapi.dll library for interface name lookups, errorcode=0x%08x\n", GetLastError());
-        return -1;
+        return NULL;
     }
 
-    g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Loaded iphlpapi.dll library for interface friendly name lookups");
-
     /* Need to convert an Interface GUID to the interface friendly name (e.g. "Local Area Connection")
     * The functions required to do this all reside within iphlpapi.dll
     * - The preferred approach is to use published API functions (Available since Windows Vista)
@@ -143,27 +114,15 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **
                     if(hr==NO_ERROR){
                         /* luid->friendly name success */
                         haveInterfaceFriendlyName=TRUE; /* success */
-                        g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
-                            "converted interface guid to friendly name.");
                     }else{
                         /* luid->friendly name failed */
                         fallbackToUnpublishedApi=FALSE;
-                        g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE,
-                            "ConvertInterfaceLuidToAlias failed to convert interface luid to a friendly name, LastErrorCode=0x%08x.", GetLastError());
                     }
                 }else{
                     fallbackToUnpublishedApi=FALSE;
-                    g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE,
-                        "ConvertInterfaceGuidToLuid failed to convert interface guid to a luid, LastErrorCode=0x%08x.", GetLastError());
                 }
 
-            }else{
-                g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-                    "Failed to find address of ConvertInterfaceLuidToAlias in iphlpapi.dll, LastErrorCode=0x%08x.", GetLastError());
             }
-        }else{
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-                "Failed to find address of ConvertInterfaceGuidToLuid in iphlpapi.dll, LastErrorCode=0x%08x.", GetLastError());
         }
     }
 
@@ -180,9 +139,6 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **
             wchar_t *p4=NULL, *p5=NULL;
             DWORD NameSize;
 
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
-                "Unpublished NhGetInterfaceNameFromGuid function located in iphlpapi.dll, looking up friendly name from guid");
-
             /* testing of nhGetInterfaceNameFromGuid indicates the unpublished API function expects the 3rd parameter
             * to be the available space in bytes (as compared to wchar's) available in the second parameter buffer
             * to receive the friendly name (in unicode format) including the space for the nul termination.*/
@@ -191,20 +147,10 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **
             /* do the guid->friendlyname lookup */
             status = Proc_nhGetInterfaceNameFromGuid(guid, wName, &NameSize, p4, p5);
 
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
-                "nhGetInterfaceNameFromGuidProc status =%d, p4=%d, p5=%d, namesize=%d\n", status, (int)p4, (int)p5, NameSize);
             if(status==0){
                 haveInterfaceFriendlyName=TRUE; /* success */
-                g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
-                    "Converted interface guid to friendly name.");
             }
-
-        }else{
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-                "Failed to locate unpublished NhGetInterfaceNameFromGuid function located in iphlpapi.dll, "
-                "for looking up interface friendly name, LastErrorCode=0x%08x.", GetLastError());
         }
-
     }
 
     /* we have finished with iphlpapi.dll - release it */
@@ -212,31 +158,22 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **
 
     if(!haveInterfaceFriendlyName){
         /* failed to get the friendly name, nothing further to do */
-        return -1;
+        return NULL;
     }
 
     /* Get the required buffer size, and then convert the string */
-    {
-        int size = WideCharToMultiByte(CP_UTF8, 0, wName, -1, NULL, 0, NULL, NULL);
-        char *name = (char *) g_malloc(size);
-        if (name == NULL){
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-                "Failed to allocate memory to convert format of interface friendly name, LastErrorCode=0x%08x.", GetLastError());
-            return -1;
-        }
-        size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, size, NULL, NULL);
-        if(size==0){
-            /* bytes written == 0, indicating some form of error*/
-            g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-                "Error converting format of interface friendly name, LastErrorCode=0x%08x.", GetLastError());
-            g_free(name);
-            return -1;
-        }
-        g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Friendly name is '%s'", name);
-
-        *Name = name;
+    size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, NULL, 0, NULL, NULL);
+    name=(char *) g_malloc(size);
+    if (name == NULL){
+        return NULL;
+    }
+    size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, size, NULL, NULL);
+    if(size==0){
+        /* bytes written == 0, indicating some form of error*/
+        g_free(name);
+        return NULL;
     }
-    return 0;
+    return name;
 }
 
 static int gethexdigit(const char *p)
@@ -291,23 +228,20 @@ static gboolean get4hexdigits(const char *p, WORD *w)
 /**********************************************************************************/
 /* returns the interface friendly name for a device name, if it is unable to
 * resolve the name, "" is returned */
-void get_windows_interface_friendlyname(/* IN */ const char *interface_devicename, /* OUT */char **interface_friendlyname)
+char *
+get_windows_interface_friendly_name(/* IN */ char *interface_devicename)
 {
     const char* guid_text;
     GUID guid;
     int i;
     int digit1, digit2;
 
-    g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "test, 1,2,3");
-
     /* ensure we can return a result */
     if(interface_friendlyname==NULL){
-        g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR,
-            "invalid interface_friendlyname parameter to get_windows_interface_friendlyname() function.");
-        return;
+        return NULL;
     }
     /* start on the basis we know nothing */
-    *interface_friendlyname=NULL;
+    interface_friendlyname=NULL;
 
     /* Extract the guid text from the interface device name */
     if(strncmp("\\Device\\NPF_", interface_devicename, 12)==0){
@@ -321,37 +255,37 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam
      * and use that to look up the interface to get its friendly name.
      */
     if(*guid_text != '{'){
-        return; /* Nope, not enclosed in {} */
+        return NULL; /* Nope, not enclosed in {} */
     }
     guid_text++;
     /* There must be 8 hex digits; if so, they go into guid.Data1 */
     if(!get8hexdigits(guid_text, &guid.Data1)){
-        return; /* nope, not 8 hex digits */
+        return NULL; /* nope, not 8 hex digits */
     }
     guid_text += 8;
     /* Now there must be a hyphen */
     if(*guid_text != '-'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
     guid_text++;
     /* There must be 4 hex digits; if so, they go into guid.Data2 */
     if(!get4hexdigits(guid_text, &guid.Data2)){
-        return; /* nope, not 4 hex digits */
+        return NULL; /* nope, not 4 hex digits */
     }
     guid_text += 4;
     /* Now there must be a hyphen */
     if(*guid_text != '-'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
     guid_text++;
     /* There must be 4 hex digits; if so, they go into guid.Data3 */
     if(!get4hexdigits(guid_text, &guid.Data3)){
-        return; /* nope, not 4 hex digits */
+        return NULL; /* nope, not 4 hex digits */
     }
     guid_text += 4;
     /* Now there must be a hyphen */
     if(*guid_text != '-'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
     guid_text++;
     /*
@@ -361,19 +295,19 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam
     for(i = 0; i < 2; i++){
         digit1 = gethexdigit(guid_text);
         if(digit1 == -1){
-            return; /* Not a hex digit */
+            return NULL; /* Not a hex digit */
         }
         guid_text++;
         digit2 = gethexdigit(guid_text);
         if(digit2 == -1){
-            return; /* Not a hex digit */
+            return NULL; /* Not a hex digit */
         }
         guid_text++;
         guid.Data4[i] = (digit1 << 4)|(digit2);
     }
     /* Now there must be a hyphen */
     if(*guid_text != '-'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
     guid_text++;
     /*
@@ -383,45 +317,30 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam
     for(i = 0; i < 6; i++){
         digit1 = gethexdigit(guid_text);
         if(digit1 == -1){
-            return; /* Not a hex digit */
+            return NULL; /* Not a hex digit */
         }
         guid_text++;
         digit2 = gethexdigit(guid_text);
         if(digit2 == -1){
-            return; /* Not a hex digit */
+            return NULL; /* Not a hex digit */
         }
         guid_text++;
         guid.Data4[i+2] = (digit1 << 4)|(digit2);
     }
     /* Now there must be a closing } */
     if(*guid_text != '}'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
     guid_text++;
     /* And that must be the end of the string */
     if(*guid_text != '\0'){
-        return; /* Nope */
+        return NULL; /* Nope */
     }
 
     /* guid okay, get the interface friendly name associated with the guid */
-    {
-        int r=GetInterfaceFriendlyNameFromDeviceGuid(&guid, interface_friendlyname);
-        if(r!=NO_ERROR){
-            /* A message has been logged by GetInterfaceFriendlyNameFromDeviceGuid() */
-            *interface_friendlyname=NULL; /* failed to get friendly name, ensure the ultimate result is NULL */
-            return;
-        }
-    }
-
-    /* success */
-    g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE,
-        "\nInterface %s => '%s'\n\n\n", interface_devicename, *interface_friendlyname);
-
-    return;
+    return GetInterfaceFriendlyNameFromDeviceGuid(&guid);
 }
 
-#undef g_log
-
 /**************************************************************************************/
 #endif
 
index 5b7d125e7100019247b148a22b474b4daf8496b5..faf1e2f7e994a9f80cc427096c6f82ede572c8b6 100644 (file)
@@ -26,6 +26,6 @@
 #ifndef CAPTURE_WIN_IFNAMES_H
 #define CAPTURE_WIN_IFNAMES_H
 
-void get_windows_interface_friendlyname(/* IN */ const char *interface_devicename, /* OUT */char **interface_friendlyname);
+char *get_windows_interface_friendly_name(/* IN */ char *interface_devicename);
 
 #endif
index f3886115fbe9817f9ac278930d3723714c588234..6f6988e2dc0a69edcdd65e72bdcc00d27ac0ed98 100644 (file)
@@ -1779,7 +1779,7 @@ capture_if_details_task_offload(GtkWidget *table, GtkWidget *main_vb, guint *row
 
 static int
 capture_if_details_general(GtkWidget *table, GtkWidget *main_vb, guint *row, LPADAPTER adapter, gchar *iface) {
-    gchar           *interface_friendlyname;
+    gchar           *interface_friendly_name;
     gchar           string_buff[DETAILS_STR_MAX];
     const gchar     *manuf_name;
     unsigned int    uint_value;
@@ -1800,10 +1800,10 @@ capture_if_details_general(GtkWidget *table, GtkWidget *main_vb, guint *row, LPA
     add_string_to_table(table, row, "Characteristics", "");
 
     /* OS friendly name - look it up from iface ("\Device\NPF_{11111111-2222-3333-4444-555555555555}") */
-    get_windows_interface_friendlyname(/* IN */ iface, /* OUT */&interface_friendlyname);
-    if(interface_friendlyname!=NULL){
-        add_string_to_table(table, row, "OS Friendly name", interface_friendlyname);
-        g_free(interface_friendlyname);
+    interface_friendly_name = get_windows_interface_friendly_name(/* IN */ iface);
+    if(interface_friendly_name!=NULL){
+        add_string_to_table(table, row, "OS Friendly name", interface_friendly_name);
+        g_free(interface_friendly_name);
     }
 
     /* Vendor description */