Handle SMS with UCS2 and binary userdata
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 85ad0ec..6290ce6 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -389,8 +389,8 @@
 	*smsp = sms->user_data_len;
 
 	/* generate TP-UD */
-	/* FIXME: Handle DSC of UCS2 or 8/bit default */
-	if (gsm338_get_sms_alphabet(sms->data_coding_scheme) == DCS_7BIT_DEFAULT) {
+	switch (gsm338_get_sms_alphabet(sms->data_coding_scheme)) {
+	case DCS_7BIT_DEFAULT:
 		octet_len = sms->user_data_len*7/8;
 		if (sms->user_data_len*7%8 != 0)
 			octet_len++;
@@ -398,6 +398,15 @@
 		 * (characters), we need amount of octets occupied */
 		smsp = msgb_put(msg, octet_len);
 		memcpy(smsp, sms->user_data, octet_len);
+		break;
+	case DCS_UCS2:
+	case DCS_8BIT_DATA:
+		smsp = msgb_put(msg, sms->user_data_len);
+		memcpy(smsp, sms->user_data, sms->user_data_len);
+		break;
+	default:
+		DEBUGP(DSMS, "Unhandled Data Coding Scheme: 0x%02X\n", sms->data_coding_scheme);
+		break;
 	}
 
 	return msg->len - old_msg_len;