static void test_serialize_assembly(void) { unsigned char pdu[176]; long pdu_len; struct sms sms; struct sms_assembly *assembly = sms_assembly_new("1234"); guint16 ref; guint8 max; guint8 seq; GSList *l; decode_hex_own_buf(assembly_pdu1, -1, &pdu_len, 0, pdu); sms_decode(pdu, pdu_len, FALSE, assembly_pdu_len1, &sms); sms_extract_concatenation(&sms, &ref, &max, &seq); l = sms_assembly_add_fragment(assembly, &sms, time(NULL), &sms.deliver.oaddr, ref, max, seq); if (g_test_verbose()) { g_print("Ref: %u\n", ref); g_print("Max: %u\n", max); g_print("From: %s\n", sms_address_to_string(&sms.deliver.oaddr)); } g_assert(g_slist_length(assembly->assembly_list) == 1); g_assert(l == NULL); decode_hex_own_buf(assembly_pdu2, -1, &pdu_len, 0, pdu); sms_decode(pdu, pdu_len, FALSE, assembly_pdu_len2, &sms); sms_extract_concatenation(&sms, &ref, &max, &seq); l = sms_assembly_add_fragment(assembly, &sms, time(NULL), &sms.deliver.oaddr, ref, max, seq); g_assert(l == NULL); sms_assembly_free(assembly); assembly = sms_assembly_new("1234"); decode_hex_own_buf(assembly_pdu3, -1, &pdu_len, 0, pdu); sms_decode(pdu, pdu_len, FALSE, assembly_pdu_len3, &sms); sms_extract_concatenation(&sms, &ref, &max, &seq); l = sms_assembly_add_fragment(assembly, &sms, time(NULL), &sms.deliver.oaddr, ref, max, seq); g_assert(l != NULL); sms_assembly_free(assembly); }
static void handle_deliver(struct ofono_sms *sms, const struct sms *incoming) { GSList *l; guint16 ref; guint8 max; guint8 seq; DBG(""); if (sms_extract_concatenation(incoming, &ref, &max, &seq)) { GSList *sms_list; if (sms->assembly == NULL) return; sms_list = sms_assembly_add_fragment(sms->assembly, incoming, time(NULL), &incoming->deliver.oaddr, ref, max, seq); if (sms_list == NULL) return; sms_dispatch(sms, sms_list); g_slist_foreach(sms_list, (GFunc) g_free, NULL); g_slist_free(sms_list); return; } l = g_slist_append(NULL, (void *) incoming); sms_dispatch(sms, l); g_slist_free(l); }