summary refs log tree commit diff
path: root/libnm/nm-libnm-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm/nm-libnm-utils.c')
-rw-r--r--libnm/nm-libnm-utils.c591
1 files changed, 54 insertions, 537 deletions
diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c
index 36219065..fbbfe2c5 100644
--- a/libnm/nm-libnm-utils.c
+++ b/libnm/nm-libnm-utils.c
@@ -16,7 +16,7 @@
  * Boston, MA 02110-1301 USA.
  *
  * Copyright 2007 - 2008 Novell, Inc.
- * Copyright 2007 - 2018 Red Hat, Inc.
+ * Copyright 2007 - 2017 Red Hat, Inc.
  */
 
 #include "nm-default.h"
@@ -25,14 +25,52 @@
 
 /*****************************************************************************/
 
-static char *
-_fixup_string (const char *desc,
-               const char *const *ignored_phrases,
-               const char *const *ignored_words,
-               gboolean square_brackets_sensible)
+char *
+nm_utils_fixup_desc_string (const char *desc)
 {
+	static const char *const IGNORED_PHRASES[] = {
+		"Multiprotocol MAC/baseband processor",
+		"Wireless LAN Controller",
+		"Wireless LAN Adapter",
+		"Wireless Adapter",
+		"Network Connection",
+		"Wireless Cardbus Adapter",
+		"Wireless CardBus Adapter",
+		"54 Mbps Wireless PC Card",
+		"Wireless PC Card",
+		"Wireless PC",
+		"PC Card with XJACK(r) Antenna",
+		"Wireless cardbus",
+		"Wireless LAN PC Card",
+		"Technology Group Ltd.",
+		"Communication S.p.A.",
+		"Business Mobile Networks BV",
+		"Mobile Broadband Minicard Composite Device",
+		"Mobile Communications AB",
+		"(PC-Suite Mode)",
+	};
+	static const char *const IGNORED_WORDS[] = {
+		"Semiconductor",
+		"Components",
+		"Corporation",
+		"Communications",
+		"Company",
+		"Corp.",
+		"Corp",
+		"Co.",
+		"Inc.",
+		"Inc",
+		"Incorporated",
+		"Ltd.",
+		"Limited.",
+		"Intel?",
+		"chipset",
+		"adapter",
+		"[hex]",
+		"NDIS",
+		"Module",
+	};
 	char *desc_full;
-	gboolean in_paren = FALSE;
 	char *p, *q;
 	int i;
 
@@ -50,23 +88,18 @@ _fixup_string (const char *desc,
 		p = q + 1;
 	}
 
-	/* replace '_', ',', ASCII control characters and parentheses, with space. */
+	/* replace '_', ',', and ASCII controll characters with space. */
 	for (p = desc_full; p[0]; p++) {
-		if (*p == '(')
-			in_paren = TRUE;
 		if (   NM_IN_SET (*p, '_', ',')
-		    || *p < ' '
-		    || in_paren)
+		    || *p < ' ')
 			*p = ' ';
-		if (*p == ')')
-			in_paren = FALSE;
 	}
 
 	/* Attempt to shorten ID by ignoring certain phrases */
-	for (i = 0; ignored_phrases[i]; i++) {
-		p = strstr (desc_full, ignored_phrases[i]);
+	for (i = 0; i < G_N_ELEMENTS (IGNORED_PHRASES); i++) {
+		p = strstr (desc_full, IGNORED_PHRASES[i]);
 		if (p) {
-			const char *eow = &p[strlen (ignored_phrases[i])];
+			const char *eow = &p[strlen (IGNORED_PHRASES[i])];
 
 			/* require that the phrase is delimited by space, or
 			 * at the beginning or end of the description. */
@@ -79,7 +112,7 @@ _fixup_string (const char *desc,
 	/* Attempt to shorten ID by ignoring certain individual words.
 	 * - word-split the description at spaces
 	 * - coalesce multiple spaces
-	 * - skip over ignored_words */
+	 * - skip over IGNORED_WORDS */
 	p = desc_full;
 	q = desc_full;
 	for (;;) {
@@ -98,7 +131,9 @@ _fixup_string (const char *desc,
 		if (eow)
 			*eow = '\0';
 
-		if (nm_utils_strv_find_first ((char **) ignored_words, -1, p) >= 0)
+		if (nm_utils_strv_find_first ((char **) IGNORED_WORDS,
+		                              G_N_ELEMENTS (IGNORED_WORDS),
+		                              p) >= 0)
 			goto next;
 
 		l = strlen (p);
@@ -117,529 +152,11 @@ next:
 
 	*q++ = '\0';
 
-	p = strchr (desc_full, '[');
-	if (p == desc_full) {
-		/* All we're left with is in square brackets.
-		 * Always prefer that to a blank string.*/
-		square_brackets_sensible = TRUE;
-	}
-	if (square_brackets_sensible) {
-		/* If there's a [<string>] that survived the substitution, then the string
-		 * is a short form that is generally preferrable. */
-		q = strchr (desc_full, ']');
-		if (p && q > p) {
-			p++;
-			memmove (desc_full, p, q - p);
-			desc_full[q - p] = '\0';
-		}
-	} else {
-		/* [<string>] sometimes contains the preferred human-readable name, but
-		 * mostly it's utterly useless. Sigh. Drop it. */
-		if (p) {
-			if (p > desc_full && p[-1] == ' ')
-				p--;
-			*p = '\0';
-		}
-	}
-
 	if (!desc_full[0]) {
 		g_free (desc_full);
 		return NULL;
 	}
 
-	return desc_full;
-}
-
-char *
-nm_utils_fixup_vendor_string (const char *desc)
-{
-	static const char *const IGNORED_PHRASES[] = {
-		"Access Systems",
-		"Business Mobile Networks BV",
-		"Communications & Multimedia",
-		"Company of Japan",
-		"Computer Co.",
-		"Computer Corp.",
-		"Computer Corporation",
-		"Computer Inc.",
-		"Computer, Inc.",
-		"Information and Communication Products",
-		"Macao Commercial Offshore",
-		"Mobile Phones",
-		"(M) Son",
-		"Multimedia Internet Technology",
-		"Technology Group Ltd.",
-		"Wireless Networks",
-		"Wireless Solutions",
-		NULL,
-	};
-	static const char *const IGNORED_WORDS[] = {
-		"AB",
-		"AG",
-		"A/S",
-		"ASA",
-		"B.V.",
-		"Chips",
-		"Co.",
-		"Co",
-		"Communications",
-		"Components",
-		"Computers",
-		"Computertechnik",
-		"corp.",
-		"Corp.",
-		"Corp",
-		"Corporation",
-		"Design",
-		"Electronics",
-		"Enterprise",
-		"Enterprises",
-		"Europe",
-		"GmbH",
-		"Hardware",
-		"[hex]",
-		"Holdings",
-		"Inc.",
-		"Inc",
-		"INC.",
-		"Incorporated",
-		"Instruments",
-		"International",
-		"Intl.",
-		"Labs",
-		"Limited.",
-		"Limited",
-		"Ltd.",
-		"Ltd",
-		"Microelectronics",
-		"Microsystems",
-		"MSM",
-		"Multimedia",
-		"Networks",
-		"Norway",
-		"Optical",
-		"PCS",
-		"Semiconductor",
-		"Systems",
-		"Systemtechnik",
-		"Techcenter",
-		"Technik",
-		"Technologies",
-		"Technology",
-		"TECHNOLOGY",
-		"Telephonics",
-		"USA",
-		"WCDMA",
-		NULL,
-	};
-	char *desc_full;
-	char *p;
-
-	desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, TRUE);
-	if (!desc_full)
-		return NULL;
-
-	/* Chop off everything after a slash. */
-	for (p = desc_full; *p; p++) {
-		if ((p[0] == ' ' && p[1] == '/') || p[0] == '/') {
-			p[0] = '\0';
-			break;
-		}
-	}
-
-	nm_assert (g_utf8_validate (desc_full, -1, NULL));
-
-	return desc_full;
-}
-
-char *
-nm_utils_fixup_product_string (const char *desc)
-{
-	static const char *const IGNORED_PHRASES[] = {
-		"100/10 MBit",
-		"10/100 Mbps",
-		"1.0 GbE",
-		"10 GbE",
-		"10 Gigabit",
-		"10 Mbps",
-		"1/10 Gigabit",
-		"150 Mbps",
-		"2.5 GbE",
-		"54 Mbps",
-		"Attached Port",
-		"+ BT",
-		"\"CDC Subset\"",
-		"CE Media Processor",
-		"Controller Area Network",
-		"Converged Network",
-		"DEC-Tulip compatible",
-		"Dish Adapter",
-		"Double 108 Mbps",
-		"Dual Band",
-		"Dual Port",
-		"Embedded UTP",
-		"Ethernet Connection",
-		"Ethernet Pro 100",
-		"Express Module",
-		"Fabric Adapter",
-		"Fast Ethernet",
-		"for 10GBASE-T" ,
-		"for 10GbE backplane" ,
-		"for 10GbE QSFP+" ,
-		"for 10GbE SFP+" ,
-		"for 1GbE",
-		"for 20GbE backplane" ,
-		"for 25GbE backplane" ,
-		"for 25GbE SFP28" ,
-		"for 40GbE backplane" ,
-		"for 40GbE QSFP+" ,
-		"G Adapter",
-		"Gigabit Desktop Network",
-		"Gigabit Ethernet",
-		"Gigabit or",
-		"Host Interface",
-		"Host Virtual Interface",
-		"IEEE 802.11a/b/g",
-		"IEEE 802.11g",
-		"IEEE 802.11G",
-		"IEEE 802.11n",
-		"MAC + PHY",
-		"Mini Card",
-		"Mini Wireless",
-		"multicore SoC",
-		"Multi Function",
-		"N Draft 11n Wireless",
-		"Network Connection",
-		"Network Everywhere",
-		"N Wireless",
-		"N+ Wireless",
-		"OCT To Fast Ethernet Converter",
-		"PC Card",
-		"PCI Express",
-		"Platform Controller Hub",
-		"Plus Bluetooth",
-		"Quad Gigabit",
-		"rev 1",
-		"rev 17",
-		"rev 2",
-		"rev A",
-		"rev B",
-		"rev F",
-		"TO Ethernet",
-		"Turbo Wireless Adapter",
-		"Unified Wire",
-		"USB 1.1",
-		"USB 2.0",
-		"Virtual media for",
-		"WiFi Link",
-		"+ WiMAX",
-		"WiMAX/WiFi Link",
-		"Wireless G",
-		"Wireless G+",
-		"Wireless Lan",
-		"Wireless Mini adapter",
-		"Wireless Mini Adapter",
-		"Wireless N",
-		"with 1000-BASE-T interface",
-		"with CX4 copper interface",
-		"with Range Amplifier",
-		"with SR-XFP optical interface",
-		"w/ Upgradable Antenna",
-		NULL,
-	};
-	static const char *const IGNORED_WORDS[] = {
-		"1000BaseSX",
-		"1000BASE-T",
-		"1000Base-ZX",
-		"100/10M",
-		"100baseFx",
-		"100Base-MII",
-		"100Base-T",
-		"100BaseT4",
-		"100Base-TX",
-		"100BaseTX",
-		"100GbE",
-		"100Mbps",
-		"100MBps",
-		"10/100",
-		"10/100/1000",
-		"10/100/1000Base-T",
-		"10/100/1000BASE-T",
-		"10/100BaseT",
-		"10/100baseTX",
-		"10/100BaseTX",
-		"10/100/BNC",
-		"10/100M",
-		"10/20-Gigabit",
-		"10/25/40/50GbE",
-		"10/40G",
-		"10base-FL",
-		"10BaseT",
-		"10BASE-T",
-		"10G",
-		"10Gb",
-		"10Gb/25Gb",
-		"10Gb/25Gb/40Gb/50Gb",
-		"10Gbase-T",
-		"10GBase-T",
-		"10GBASE-T",
-		"10GbE",
-		"10Gbps",
-		"10-Giga",
-		"10-Gigabit",
-		"10mbps",
-		"10Mbps",
-		"1/10GbE",
-		"1/10-Gigabit",
-		"11b/g/n",
-		"11g",
-		"150Mbps",
-		"16Gbps/10Gbps",
-		"1GbE",
-		"1x2:2",
-		"20GbE",
-		"25Gb",
-		"25GbE",
-		"2-Port",
-		"2x3:3",
-		"3G",
-		"3G/4G",
-		"3x3:3",
-		"40GbE",
-		"4G",
-		"54g",
-		"54M",
-		"54Mbps",
-		"56k",
-		"5G",
-		"802.11",
-		"802.11a/b/g",
-		"802.11abg",
-		"802.11a/b/g/n",
-		"802.11abgn",
-		"802.11ac",
-		"802.11ad",
-		"802.11a/g",
-		"802.11b",
-		"802.11b/g",
-		"802.11bg",
-		"802.11b/g/n",
-		"802.11bgn",
-		"802.11b/g/n-draft",
-		"802.11g",
-		"802.11n",
-		"802.11N",
-		"802.11n/b/g",
-		"802.11ng",
-		"802AIN",
-		"802UIG-1",
-		"adapter",
-		"Adapter",
-		"adaptor",
-		"ADSL",
-		"Basic",
-		"CAN-Bus",
-		"card",
-		"Card",
-		"Cardbus",
-		"CardBus",
-		"CDMA",
-		"CNA",
-		"Composite",
-		"controller",
-		"Controller",
-		"Copper",
-		"DB",
-		"Desktop",
-		"device",
-		"Device",
-		"dongle",
-		"driver",
-		"Dual-band",
-		"Dual-Protocol",
-		"EISA",
-		"Enhanced",
-		"ethernet.",
-		"ethernet",
-		"Ethernet",
-		"Ethernet/RNDIS",
-		"ExpressModule",
-		"family",
-		"Family",
-		"Fast/Gigabit",
-		"Fiber",
-		"gigabit",
-		"Gigabit",
-		"G-NIC",
-		"Hi-Gain",
-		"Hi-Speed",
-		"HSDPA",
-		"HSUPA",
-		"integrated",
-		"Integrated",
-		"interface",
-		"LAN",
-		"LAN+Winmodem",
-		"Laptop",
-		"LTE",
-		"LTE/UMTS/GSM",
-		"MAC",
-		"Micro",
-		"Mini-Card",
-		"Mini-USB",
-		"misprogrammed",
-		"modem",
-		"Modem",
-		"Modem/Networkcard",
-		"Module",
-		"Multimode",
-		"Multithreaded",
-		"Name:",
-		"net",
-		"network",
-		"Network",
-		"n/g/b",
-		"NIC",
-		"Notebook",
-		"OEM",
-		"PCI",
-		"PCI64",
-		"PCIe",
-		"PCI-E",
-		"PCI-Express",
-		"PCI-X",
-		"PCMCIA",
-		"PDA",
-		"PnP",
-		"RDMA",
-		"RJ-45",
-		"Series",
-		"Server",
-		"SoC",
-		"Switch",
-		"Technologies",
-		"TOE",
-		"USB",
-		"USB2.0",
-		"USB/Ethernet",
-		"UTP",
-		"UTP/Coax",
-		"v1",
-		"v1.1",
-		"v2",
-		"V2.0",
-		"v3",
-		"v4",
-		"wifi",
-		"Wi-Fi",
-		"WiFi",
-		"wireless",
-		"Wireless",
-		"Wireless-150N",
-		"Wireless-300N",
-		"Wireless-G",
-		"Wireless-N",
-		"WLAN",
-		NULL,
-	};
-	char *desc_full;
-	char *p;
-
-	desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, FALSE);
-	if (!desc_full)
-		return NULL;
-
-	/* Chop off everything after a '-'. */
-	for (p = desc_full; *p; p++) {
-		if (p[0] == ' ' && p[1] == '-' && p[2] == ' ') {
-			p[0] = '\0';
-			break;
-		}
-	}
-
 	nm_assert (g_utf8_validate (desc_full, -1, NULL));
-
 	return desc_full;
 }
-
-#if WITH_FAKE_TYPELIBS
-
-/*
- * Here we register empty "NMClient" and "NetworkManager" GIR modules as soon
- * as we are loaded (if gnome-introspection is being used). This prevents the
- * real modules from being loaded because they would in turn load libnm-glib
- * and abort() and crash.
- *
- * For the high level languages that utilize GIR the crash is highly inconvenient
- * while the inability to resolve any methods and attributes is potentially
- * recoverable.
- */
-
-#include <girepository.h>
-
-GResource *typelibs_get_resource (void);
-void typelibs_register_resource (void);
-
-static void __attribute__((constructor))
-_nm_libnm_utils_init (void)
-{
-	GITypelib *typelib;
-	GBytes *data;
-	const char *namespace;
-	GModule *self;
-	GITypelib *(*_g_typelib_new_from_const_memory) (const guint8 *memory,
-	                                                gsize len,
-	                                                GError **error) = NULL;
-	const char *(*_g_irepository_load_typelib) (GIRepository *repository,
-	                                            GITypelib *typelib,
-	                                            GIRepositoryLoadFlags flags,
-	                                            GError **error) = NULL;
-	const char *names[] = { "/org/freedesktop/libnm/fake-typelib/NetworkManager.typelib",
-	                        "/org/freedesktop/libnm/fake-typelib/NMClient.typelib" };
-	int i;
-
-	self = g_module_open (NULL, 0);
-	if (!self)
-		return;
-	g_module_symbol (self, "g_typelib_new_from_const_memory",
-	                 (gpointer *) &_g_typelib_new_from_const_memory);
-	if (_g_typelib_new_from_const_memory) {
-		g_module_symbol (self, "g_irepository_load_typelib",
-		                 (gpointer *) &_g_irepository_load_typelib);
-	}
-	g_module_close (self);
-
-	if (!_g_typelib_new_from_const_memory || !_g_irepository_load_typelib)
-		return;
-
-	typelibs_register_resource ();
-
-	for (i = 0; i < 2; i++) {
-		gs_free_error GError *error = NULL;
-
-		data = g_resource_lookup_data (typelibs_get_resource (),
-		                               names[i],
-		                               G_RESOURCE_LOOKUP_FLAGS_NONE,
-		                               &error);
-		if (!data) {
-			g_warning ("Fake typelib %s could not be loaded: %s", names[i], error->message);
-			return;
-		}
-
-		typelib = _g_typelib_new_from_const_memory (g_bytes_get_data (data, NULL),
-		                                            g_bytes_get_size (data),
-		                                            &error);
-		if (!typelib) {
-			g_warning ("Could not create fake typelib instance %s: %s", names[i], error->message);
-			return;
-		}
-
-		namespace = _g_irepository_load_typelib (NULL, typelib, 0, &error);
-		if (!namespace) {
-			g_warning ("Could not load fake typelib %s: %s", names[i], error->message);
-			return;
-		}
-	}
-}
-
-#endif /* WITH_FAKE_TYPELIBS */