diff --git a/appengine/c2dm/com/google/android/c2dm/server/C2DMConfig.java b/appengine/c2dm/com/google/android/c2dm/server/C2DMConfig.java index 1d59471..47af749 100644 --- a/appengine/c2dm/com/google/android/c2dm/server/C2DMConfig.java +++ b/appengine/c2dm/com/google/android/c2dm/server/C2DMConfig.java @@ -35,6 +35,12 @@ public final class C2DMConfig { @Persistent private String authToken; + public static final String DATAMESSAGING_SEND_ENDPOINT = + "https://android.clients.google.com/c2dm/send"; + + @Persistent + private String c2dmUrl; + public String getAuthToken() { return (authToken == null) ? "" : authToken; } @@ -46,4 +52,16 @@ public final class C2DMConfig { public void setKey(Key key) { this.key = key; } + + public void setC2DMUrl(String url) { + this.c2dmUrl = url; + } + + public String getC2DMUrl() { + if (c2dmUrl == null) { + return DATAMESSAGING_SEND_ENDPOINT; + } else { + return c2dmUrl; + } + } } \ No newline at end of file diff --git a/appengine/c2dm/com/google/android/c2dm/server/C2DMConfigLoader.java b/appengine/c2dm/com/google/android/c2dm/server/C2DMConfigLoader.java index c1120bd..219bda0 100644 --- a/appengine/c2dm/com/google/android/c2dm/server/C2DMConfigLoader.java +++ b/appengine/c2dm/com/google/android/c2dm/server/C2DMConfigLoader.java @@ -38,6 +38,7 @@ class C2DMConfigLoader { private static final Logger log = Logger.getLogger(C2DMConfigLoader.class.getName()); String currentToken; + String c2dmUrl; C2DMConfigLoader(PersistenceManagerFactory pmf) { this.PMF = pmf; @@ -69,10 +70,9 @@ class C2DMConfigLoader { } /** - * Return the auth token. + * Return the auth token from the database. Should be called + * only if the old token expired. * - * It'll first memcache, if not found will use the database. - * * @return */ public String getToken() { @@ -82,6 +82,13 @@ class C2DMConfigLoader { return currentToken; } + public String getC2DMUrl() { + if (c2dmUrl == null) { + c2dmUrl = getDataMessagingConfig().getC2DMUrl(); + } + return c2dmUrl; + } + public C2DMConfig getDataMessagingConfig() { PersistenceManager pm = PMF.getPersistenceManager(); try { diff --git a/appengine/c2dm/com/google/android/c2dm/server/C2DMessaging.java b/appengine/c2dm/com/google/android/c2dm/server/C2DMessaging.java index 0ab4f72..186f7dd 100644 --- a/appengine/c2dm/com/google/android/c2dm/server/C2DMessaging.java +++ b/appengine/c2dm/com/google/android/c2dm/server/C2DMessaging.java @@ -44,10 +44,7 @@ import com.google.appengine.api.labs.taskqueue.TaskOptions; @SuppressWarnings("serial") public class C2DMessaging { private static final String UPDATE_CLIENT_AUTH = "Update-Client-Auth"; - - public static final String DATAMESSAGING_SEND_ENDPOINT = - "https://android.clients.google.com/c2dm/send"; - + private static final Logger log = Logger.getLogger(C2DMessaging.class.getName()); public static final String PARAM_REGISTRATION_ID = "registration_id"; @@ -141,8 +138,8 @@ public class C2DMessaging { byte[] postData = postDataBuilder.toString().getBytes(UTF8); // Hit the dm URL. - URL url = new URL(DATAMESSAGING_SEND_ENDPOINT); - + URL url = new URL(serverConfig.getC2DMUrl()); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setUseCaches(false); @@ -185,8 +182,9 @@ public class C2DMessaging { // return non-success error codes, this is not explicitly implemented here. // If we weren't using App Engine, we'd need to manually implement this. if (responseLine == null || responseLine.equals("")) { - log.info("Got " + responseCode + " response from Google datamessaging endpoint."); - throw new IOException("Got empty response from Google datamessaging endpoint."); + log.info("Got " + responseCode + + " response from Google AC2DM endpoint."); + throw new IOException("Got empty response from Google AC2DM endpoint."); } String[] responseParts = responseLine.split("=", 2);