From 839970e6bad870e5c00bb065d949019c7fffccda Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Thu, 24 Dec 2009 14:57:54 +0000 Subject: Truncate ad-hoc network name to not exceed the SSID limit (#1604) Fixes breakage where you could not create an ad-hoc network if your sugar name is longer than 6 characters. --- (limited to 'extensions') diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py index dd1a70c..2776f0a 100644 --- a/extensions/deviceicon/network.py +++ b/extensions/deviceicon/network.py @@ -21,6 +21,7 @@ import logging import hashlib import socket import struct +import re import gtk import gobject @@ -409,10 +410,27 @@ class WirelessDeviceView(ToolButton): break def __create_connection_cb(self, palette, data=None): + """Create an 802.11 IBSS network. + + The user's color is encoded at the end of the network name. The network + name is truncated so that it does not exceed the 32 byte SSID limit. + """ client = gconf.client_get_default() - nick = client.get_string('/desktop/sugar/user/nick') + nick = client.get_string('/desktop/sugar/user/nick').decode('utf-8') color = client.get_string('/desktop/sugar/user/color') - connection_name = _('%s\'s network %s') % (nick, color) + color_suffix = ' %s' % color + + format = _('%s\'s network').encode('utf-8') + extra_length = (len(format) - len('%s')) + len(color_suffix) + name_limit = 32 - extra_length + + # truncate the nick and use a regex to drop any partial characters + # at the end + nick = nick.encode('utf-8')[:name_limit] + nick = re.sub("([\xf6-\xf7][\x80-\xbf]{0,2}|[\xe0-\xef][\x80-\xbf]{0,1}|[\xc0-\xdf])$", '', nick) + + connection_name = format % nick + connection_name += color_suffix connection = network.find_connection(connection_name) if connection is None: -- cgit v0.9.1