push-notification: Accept push from any origin
authorAlfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
Mon, 7 Sep 2015 09:58:15 +0000 (11:58 +0200)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 8 Sep 2015 14:14:03 +0000 (09:14 -0500)
Accept push notifications regardless of the origin port, as some
operators do not insert there the WAP connectionless session service
port, and use random values instead.

plugins/push-notification.c

index f6ca365ae62b5be2cb8b01ea379ab0c175165541..ff388d9e2fcda411195d93c76372c8afff51446d 100644 (file)
@@ -41,7 +41,7 @@
 #define PUSH_NOTIFICATION_INTERFACE "org.ofono.PushNotification"
 #define AGENT_INTERFACE "org.ofono.PushNotificationAgent"
 
-#define WAP_PUSH_SRC_PORT 9200
+#define WAP_PUSH_SRC_PORT -1
 #define WAP_PUSH_DST_PORT 2948
 
 static unsigned int modemwatch_id;
@@ -50,21 +50,16 @@ struct push_notification {
        struct ofono_modem *modem;
        struct ofono_sms *sms;
        struct sms_agent *agent;
-       unsigned int push_watch[2];
+       unsigned int push_watch;
 };
 
 static void agent_exited(void *userdata)
 {
        struct push_notification *pn = userdata;
 
-       if (pn->push_watch[0] > 0) {
-               __ofono_sms_datagram_watch_remove(pn->sms, pn->push_watch[0]);
-               pn->push_watch[0] = 0;
-       }
-
-       if (pn->push_watch[1] > 0) {
-               __ofono_sms_datagram_watch_remove(pn->sms, pn->push_watch[1]);
-               pn->push_watch[1] = 0;
+       if (pn->push_watch > 0) {
+               __ofono_sms_datagram_watch_remove(pn->sms, pn->push_watch);
+               pn->push_watch = 0;
        }
 
        pn->agent = NULL;
@@ -113,17 +108,12 @@ static DBusMessage *push_notification_register_agent(DBusConnection *conn,
 
        sms_agent_set_removed_notify(pn->agent, agent_exited, pn);
 
-       pn->push_watch[0] = __ofono_sms_datagram_watch_add(pn->sms,
+       pn->push_watch = __ofono_sms_datagram_watch_add(pn->sms,
                                                        push_received,
                                                        WAP_PUSH_DST_PORT,
                                                        WAP_PUSH_SRC_PORT,
                                                        pn, NULL);
 
-       pn->push_watch[1] = __ofono_sms_datagram_watch_add(pn->sms,
-                                                       push_received,
-                                                       WAP_PUSH_DST_PORT,
-                                                       0, pn, NULL);
-
        return dbus_message_new_method_return(msg);
 }
 
@@ -166,8 +156,7 @@ static void push_notification_cleanup(gpointer user)
        DBG("%p", pn);
 
        /* The push watch was already cleaned up */
-       pn->push_watch[0] = 0;
-       pn->push_watch[1] = 0;
+       pn->push_watch = 0;
        pn->sms = NULL;
 
        sms_agent_free(pn->agent);