/*
* Copyright (c) 2015 OpenSilk Productions LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package syncthing.api;
import com.google.gson.Gson;
import com.squareup.okhttp.ConnectionPool;
import com.squareup.okhttp.OkHttpClient;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import dagger.Module;
import dagger.Provides;
import retrofit.GsonConverterFactory;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
/**
* Created by drew on 4/11/15.
*/
@Module
public class SyncthingApiLongpollModule {
static final int LONGPOLL_CONNECT_TIMEOUT_MILLIS = 15 * 1000; // 15s
static final int LONGPOLL_READ_TIMEOUT_MILLIS = 3 * 60 * 1000; // 3m //20 * 1000; // 20s
static final int LONGPOLL_MAX_IDLE_CONNECTIONS = 2;
static final long LONGPOLL_KEEP_ALIVE_DURATION_MS = 5 * 60 * 1000; // 5 min
@Provides @SessionScope @Named("longpoll")
public SyncthingApi provideSyncthingApi(
Gson gson, OkHttpClient okClient, SyncthingApiConfig config
) {
OkHttpClient client = okClient.clone();
client.setConnectTimeout(LONGPOLL_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(LONGPOLL_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setSslSocketFactory(SyncthingSSLSocketFactory.create(config.getCACert()));
client.setHostnameVerifier(new NullHostNameVerifier());
client.interceptors().add(new SyncthingApiInterceptor(config));
Retrofit.Builder b = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.baseUrl(config.getBaseUrl());
if (BuildConfig.DEBUG) {
b.validateEagerly();
}
return b.build().create(SyncthingApi.class);
}
}