static gboolean test_init( Test* test, const MMSConfig* config, const TestDesc* desc) { gboolean ok = FALSE; GError* error = NULL; const char* dir = desc->name; char* ni = g_strconcat(DATA_DIR, dir, "/", desc->ind_file, NULL); memset(test, 0, sizeof(*test)); test->config = config; test->notification_ind = g_mapped_file_new(ni, FALSE, &error); if (test->notification_ind) { test->desc = desc; test->cm = mms_connman_test_new(); test->handler = mms_handler_test_new(); test->disp = mms_dispatcher_new(config, test->cm, test->handler); test->loop = g_main_loop_new(NULL, FALSE); test->timeout_id = g_timeout_add_seconds(10, test_timeout, test); test->delegate.fn_done = test_done; mms_dispatcher_set_delegate(test->disp, &test->delegate); test->id = g_strdup(mms_handler_test_send_new(test->handler, "IMSI")); mms_handler_message_sent(test->handler, test->id, desc->mmsid); test->ret = RET_ERR; ok = TRUE; } else { MMS_ERR("%s", MMS_ERRMSG(error)); g_error_free(error); } g_free(ni); return ok; }
static void mms_task_send_done( MMSTaskHttp* http, const char* path, SoupStatus status) { MMSPdu* pdu = NULL; MMS_SEND_STATE state = MMS_SEND_STATE_SEND_ERROR; const char* msgid = NULL; const char* details = NULL; if (SOUP_STATUS_IS_SUCCESSFUL(status)) { /* Decode the result */ GError* error = NULL; GMappedFile* map = g_mapped_file_new(path, FALSE, &error); if (map) { const void* data = g_mapped_file_get_contents(map); const gsize len = g_mapped_file_get_length(map); pdu = g_new0(MMSPdu, 1); if (mms_message_decode(data, len, pdu)) { if (pdu && pdu->type == MMS_MESSAGE_TYPE_SEND_CONF) { if (pdu->sc.rsp_status == MMS_MESSAGE_RSP_STATUS_OK) { if (pdu->sc.msgid && pdu->sc.msgid[0]) { msgid = pdu->sc.msgid; MMS_INFO("Message ID %s", pdu->sc.msgid); } else { MMS_ERR("Missing Message-ID"); } } else { MMS_ERR("MMSC responded with %u", pdu->sc.rsp_status); details = pdu->sc.rsp_text; switch (pdu->sc.rsp_status) { case MMS_MESSAGE_RSP_STATUS_ERR_SERVICE_DENIED: case MMS_MESSAGE_RSP_STATUS_ERR_CONTENT_NOT_ACCEPTED: case MMS_MESSAGE_RSP_STATUS_ERR_UNSUPPORTED_MESSAGE: case MMS_MESSAGE_RSP_STATUS_ERR_PERM_SERVICE_DENIED: case MMS_MESSAGE_RSP_STATUS_ERR_PERM_LACK_OF_PREPAID: case MMS_MESSAGE_RSP_STATUS_ERR_PERM_CONTENT_NOT_ACCEPTED: state = MMS_SEND_STATE_REFUSED; break; default: break; } } } else { MMS_ERR("Unexpected response from MMSC"); } } else { MMS_ERR("Failed to parse MMSC response"); } g_mapped_file_unref(map); } else { MMS_ERR("%s", MMS_ERRMSG(error)); g_error_free(error); } } if (msgid) { mms_handler_message_sent(http->task.handler, http->task.id, msgid); } else { mms_handler_message_send_state_changed(http->task.handler, http->task.id, state, details); } if (pdu) mms_message_free(pdu); }