public void doSignup(
      String username, String password, String email, final LocativeNetworkingCallback callback) {
    String token = null;
    try {
      token = AeSimpleSHA1.SHA1(username + ":" + password + "%" + email);
      Log.d(Constants.LOG, "Token: " + token);
    } catch (Exception e) {
      Log.e(Constants.LOG, "Caught Exception: " + e);
    }

    mService.signup(
        username,
        password,
        email,
        token,
        new Callback<String>() {
          @Override
          public void success(String s, Response response) {
            Log.d(Constants.LOG, "Signup Success: " + s);
            callback.onSignupFinished(true, false);
          }

          @Override
          public void failure(RetrofitError error) {
            Log.d(Constants.LOG, "Signup Error: " + error);
            callback.onSignupFinished(false, error.getResponse().getStatus() == 409);
          }
        });
  }
  public void doLogin(String username, String password, final LocativeNetworkingCallback callback) {
    mService.login(
        username,
        password,
        Constants.API_ORIGIN,
        new Callback<String>() {

          @Override
          public void success(String string, Response response) {
            Log.d(Constants.LOG, "Login Success: " + string);
            String sessionId = null;
            try {
              JSONObject json = new JSONObject(string);
              sessionId = json.getString("success");
            } catch (Exception e) {
              Log.e(Constants.LOG, e.getMessage(), e);
            } finally {
              callback.onLoginFinished(sessionId != null && sessionId.length() > 0, sessionId);
            }
          }

          @Override
          public void failure(RetrofitError error) {
            Log.d(Constants.LOG, "Login Error: " + error);
            callback.onLoginFinished(false, null);
          }
        });
  }
  public void doDispatchFencelog(
      String sessionId, Fencelog fencelog, final LocativeNetworkingCallback callback) {
    mService.dispatchFencelog(
        sessionId,
        fencelog.longitude,
        fencelog.latitude,
        fencelog.locationId,
        fencelog.httpUrl,
        fencelog.httpMethod,
        fencelog.httpResponseCode,
        fencelog.httpResponse,
        fencelog.eventType.apiName,
        fencelog.fenceType,
        fencelog.origin,
        new Callback<String>() {
          @Override
          public void success(String s, Response response) {
            if (callback != null) {
              callback.onDispatchFencelogFinished(true);
            }
          }

          @Override
          public void failure(RetrofitError error) {
            if (callback != null) {
              callback.onDispatchFencelogFinished(false);
            }
          }
        });
  }
  public void getFenceLogs(String sessionId, final LocativeNetworkingCallback callback) {
    mService.getFencelogs(
        sessionId,
        new Callback<String>() {
          @Override
          public void success(String s, Response response) {
            callback.onGetFencelogsFinished(FENCELOG_CONVERTER.makeList(mParser.parse(s)));
          }

          @Override
          public void failure(RetrofitError error) {}
        });
  }
  public void getGeofences(String sessionId, final LocativeNetworkingCallback callback) {
    mService.getGeofences(
        sessionId,
        new Callback<String>() {
          @Override
          public void success(String s, Response response) {
            JsonElement json = mParser.parse(s);
            callback.onGetGeoFencesFinished(GEOFENCE_CONVERTER.makeList(json));
          }

          @Override
          public void failure(RetrofitError error) {}
        });
  }
  public void doCheckSession(String sessionId, final LocativeNetworkingCallback callback) {
    mService.checkSession(
        sessionId,
        new Callback<String>() {
          @Override
          public void success(String s, Response response) {
            callback.onCheckSessionFinished(true);
          }

          @Override
          public void failure(RetrofitError error) {
            callback.onCheckSessionFinished(false);
          }
        });
  }