gsm/gsm0480: refactor and expose gsm0480_parse_facility_ie()

This function can be used when there is only a part of GSM 04.80
message available - Facility IE, e.g. when a message is carried
over GSUP/MAP. Let's expose it.

Refactoring includes the following:

  - adding the 'gsm0480_' prefix;
  - correcting inverted return value;
  - cosmetic code style changes.

Change-Id: I623c39ffbe6cdee65eade8435a2faa04d0da193e
diff --git a/tests/ussd/ussd_test.c b/tests/ussd/ussd_test.c
index 23fd739..8025071 100644
--- a/tests/ussd/ussd_test.c
+++ b/tests/ussd/ussd_test.c
@@ -188,6 +188,43 @@
 	printf("\n");
 }
 
+static void test_parse_facility_ie(void)
+{
+	struct ss_request req;
+	uint16_t ie_len;
+	uint8_t *ie;
+	int rc;
+
+	printf("[i] Testing gsm0480_parse_facility_ie()\n");
+
+	/* Extract Facility IE from FACILITY message */
+	rc = gsm0480_extract_ie_by_tag((struct gsm48_hdr *) ussd_facility,
+		sizeof(ussd_facility), &ie, &ie_len, GSM0480_IE_FACILITY);
+	OSMO_ASSERT(rc == 0);
+	OSMO_ASSERT(ie != NULL && ie_len > 0);
+	printf("[?] FACILITY message with Facility IE "
+		"(len=%u): %s\n", ie_len, osmo_hexdump(ie, ie_len));
+
+	/* Attempt to decode */
+	memset(&req, 0x00, sizeof(req));
+	rc = gsm0480_parse_facility_ie(ie, ie_len, &req);
+	OSMO_ASSERT(rc == 0);
+
+	/* Verify expected vs decoded data */
+	printf("[?] InvokeID: expected 0x%02x, decoded 0x%02x\n",
+		0x01, req.invoke_id);
+	printf("[?] Operation code: expected 0x%02x, decoded 0x%02x\n",
+		0x3c, req.opcode);
+	printf("[?] Data Coding Scheme: expected 0x%02x, decoded 0x%02x\n",
+		0x0f, req.ussd_data_dcs);
+	printf("[?] Data length: expected 0x%02x, decoded 0x%02x\n",
+		0x01, req.ussd_data_len);
+	printf("[?] Data: expected %s, decoded %s\n", "32",
+		osmo_hexdump_nospc(req.ussd_data, req.ussd_data_len));
+
+	printf("\n");
+}
+
 int main(int argc, char **argv)
 {
 	struct ss_request req;
@@ -201,6 +238,9 @@
 	/* Test gsm0480_extract_ie_by_tag() */
 	test_extract_ie_by_tag();
 
+	/* Test gsm0480_parse_facility_ie() */
+	test_parse_facility_ie();
+
 	memset(&req, 0, sizeof(req));
 	gsm0480_decode_ss_request((struct gsm48_hdr *) ussd_request,
 		sizeof(ussd_request), &req);