From 7518a29dce9a54c538a4803052cf7c9a83b2cca1 Mon Sep 17 00:00:00 2001
From: Daniel Drake <dsd@laptop.org>
Date: Thu, 24 Dec 2009 14:57:54 +0000
Subject: [PATCH 1/2] 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.
---
 extensions/deviceicon/network.py |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py
index dd1a70c..686ca96 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
+
+        fmt = _('%s\'s network').encode('utf-8')
+        extra_len = (len(fmt) - len('%s')) + len(color_suffix)
+        name_limit = 32 - extra_len
+
+        # 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 = fmt % nick
+        connection_name += color_suffix
 
         connection = network.find_connection(connection_name)
         if connection is None:
-- 
1.6.2.5

