diff --git a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java index f15234f23f84aa180a12147f34f20b18f536c74b..5bfb87066a743981a20aa16dfef09acff79312cd 100644 --- a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java +++ b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectModule.java @@ -93,6 +93,13 @@ public class AdobeConnectModule extends AbstractSpringModule implements ConfigOn private String createMeetingImmediately; @Value("${vc.adobe.login.compatibility.mode:false}") private String loginCompatibilityMode; + + @Value("${vc.http.connect.timeout:30000}") + private int httpConnectTimeout; + @Value("${vc.http.connect.request.timeout:30000}") + private int httpConnectRequestTimeout; + @Value("${vc.http.connect.socket.timeout:30000}") + private int httpSocketTimeout; @Autowired public AdobeConnectModule(CoordinatorManager coordinatorManager) { @@ -343,4 +350,16 @@ public class AdobeConnectModule extends AbstractSpringModule implements ConfigOn public boolean isLoginCompatibilityMode() { return "true".equals(loginCompatibilityMode); } + + public int getHttpConnectTimeout() { + return httpConnectTimeout; + } + + public int getHttpConnectRequestTimeout() { + return httpConnectRequestTimeout; + } + + public int getHttpSocketTimeout() { + return httpSocketTimeout; + } } diff --git a/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java b/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java index f5f6ec4da7c4904079462928690a4809f4c997df..2d655fd8f5ef3b47d4c0d9ffec65999ffe69b3bd 100644 --- a/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java +++ b/src/main/java/org/olat/modules/adobeconnect/manager/AbstractAdobeConnectProvider.java @@ -31,7 +31,6 @@ import javax.ws.rs.core.UriBuilder; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.config.RequestConfig.Builder; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; @@ -39,6 +38,7 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import org.apache.logging.log4j.Logger; +import org.olat.core.commons.persistence.DB; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.core.util.i18n.I18nModule; @@ -82,6 +82,8 @@ public abstract class AbstractAdobeConnectProvider implements AdobeConnectSPI { private String adminFolderScoId; private BreezeSession currentSession; + @Autowired + private DB dbInstance; @Autowired protected AdobeConnectModule adobeConnectModule; @@ -633,10 +635,12 @@ public abstract class AbstractAdobeConnectProvider implements AdobeConnectSPI { } private CloseableHttpClient buildHttpClient() { + dbInstance.commit();// free connection + RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT) - .setConnectTimeout(10000) - .setConnectionRequestTimeout(10000) - .setSocketTimeout(20000) + .setConnectTimeout(adobeConnectModule.getHttpConnectTimeout()) + .setConnectionRequestTimeout(adobeConnectModule.getHttpConnectRequestTimeout()) + .setSocketTimeout(adobeConnectModule.getHttpSocketTimeout()) .build(); return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build(); } diff --git a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java index 4012847b407e31a7508289500a836915d25276e1..c709e80df3e1d231f41d65b5547504ff071f1a15 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java +++ b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonModule.java @@ -81,6 +81,12 @@ public class BigBlueButtonModule extends AbstractSpringModule implements ConfigO @Value("${vc.bigbluebutton.user.bandwidth.requirement:0.4}") private Double userBandwidhtRequirement; + @Value("${vc.http.connect.timeout:30000}") + private int httpConnectTimeout; + @Value("${vc.http.connect.request.timeout:30000}") + private int httpConnectRequestTimeout; + @Value("${vc.http.connect.socket.timeout:30000}") + private int httpSocketTimeout; @Autowired public BigBlueButtonModule(CoordinatorManager coordinatorManager) { @@ -281,5 +287,17 @@ public class BigBlueButtonModule extends AbstractSpringModule implements ConfigO public void setAdhocMeetingEnabled(boolean adhocMeetingEnabled) { this.adhocMeetingEnabled = Boolean.toString(adhocMeetingEnabled); setStringProperty(PROP_ADHOC_MEETING, this.adhocMeetingEnabled, true); - } + } + + public int getHttpConnectTimeout() { + return httpConnectTimeout; + } + + public int getHttpConnectRequestTimeout() { + return httpConnectRequestTimeout; + } + + public int getHttpSocketTimeout() { + return httpSocketTimeout; + } } diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java index 20027db1dd2ae999d48140b3a8a0bc72f7390cf9..2fc0003221e9b720b92a6fb289c98bc29a6893ed 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java @@ -32,6 +32,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; @@ -59,6 +60,7 @@ import org.olat.group.DeletableGroupData; import org.olat.modules.bigbluebutton.BigBlueButtonManager; import org.olat.modules.bigbluebutton.BigBlueButtonMeeting; import org.olat.modules.bigbluebutton.BigBlueButtonMeetingTemplate; +import org.olat.modules.bigbluebutton.BigBlueButtonModule; import org.olat.modules.bigbluebutton.BigBlueButtonRecording; import org.olat.modules.bigbluebutton.BigBlueButtonServer; import org.olat.modules.bigbluebutton.BigBlueButtonTemplatePermissions; @@ -103,6 +105,8 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, @Autowired private BusinessGroupService businessGroupService; @Autowired + private BigBlueButtonModule bigBlueButtonModule; + @Autowired private BigBlueButtonServerDAO bigBlueButtonServerDao; @Autowired private BigBlueButtonMeetingDAO bigBlueButtonMeetingDao; @@ -841,10 +845,19 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, } protected Document sendRequest(BigBlueButtonUriBuilder builder, BigBlueButtonErrors errors) { + dbInstance.commit(); + URI uri = builder.build(); HttpGet get = new HttpGet(uri); + RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT) + .setConnectTimeout(bigBlueButtonModule.getHttpConnectTimeout()) + .setConnectionRequestTimeout(bigBlueButtonModule.getHttpConnectRequestTimeout()) + .setSocketTimeout(bigBlueButtonModule.getHttpSocketTimeout()) + .build(); try(CloseableHttpClient httpClient = HttpClientBuilder.create() - .disableAutomaticRetries().build(); + .setDefaultRequestConfig(requestConfig) + .disableAutomaticRetries() + .build(); CloseableHttpResponse response = httpClient.execute(get)) { int statusCode = response.getStatusLine().getStatusCode(); log.debug("Status code of: {} {}", uri, statusCode); diff --git a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java index 6b60b62d1ac9d160ed14547b1c911857e0f79abe..191515710c96c93de877b60acf8c365c4db92ed0 100644 --- a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java +++ b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingModule.java @@ -51,6 +51,13 @@ public class GoToMeetingModule extends AbstractSpringModule implements ConfigOnO @Value("${vc.gotomeetings.timezone.id:null}") private String goToTimeZoneId; + @Value("${vc.http.connect.timeout:30000}") + private int httpConnectTimeout; + @Value("${vc.http.connect.request.timeout:30000}") + private int httpConnectRequestTimeout; + @Value("${vc.http.connect.socket.timeout:30000}") + private int httpSocketTimeout; + @Autowired public GoToMeetingModule(CoordinatorManager coordinatorManager) { super(coordinatorManager); @@ -122,5 +129,15 @@ public class GoToMeetingModule extends AbstractSpringModule implements ConfigOnO setStringProperty(GOTO_TIMEZONEID, goToTimeZoneId, true); } - + public int getHttpConnectTimeout() { + return httpConnectTimeout; + } + + public int getHttpConnectRequestTimeout() { + return httpConnectRequestTimeout; + } + + public int getHttpSocketTimeout() { + return httpSocketTimeout; + } } diff --git a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java index 705e1d7e349a0eb6550a38ed72a633ed5c3ba5df..539772e781e501d7bb81a93506f31b46c4b8d1bb 100644 --- a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java +++ b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java @@ -27,6 +27,7 @@ import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpDelete; @@ -161,7 +162,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { RepositoryEntry resourceOwner, String subIdentifier, BusinessGroup businessGroup, GoToError error) { GoToMeeting scheduledMeeting = null; - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings"; HttpPost post = new HttpPost(url); decorateWithAccessToken(post, organizer); @@ -172,7 +173,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { String objectStr = trainingJson.toString(); post.setEntity(new StringEntity(objectStr, ContentType.APPLICATION_JSON)); - GoToResponse response = execute(httpClient, post); + GoToResponse response = execute(post); int status = response.status(); if(status == 201) {//created String trainingKey = response.content(); @@ -215,7 +216,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } private void updateStartEnd(GoToMeetingImpl meeting, Date start, Date end, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/times"; @@ -225,7 +226,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { String payload = GoToJsonUtil.trainingTimes(goToMeetingModule.getGoToTimeZoneId(), start, end).toString(); put.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON)); - GoToResponse response = execute(httpClient, put); + GoToResponse response = execute(put); int status = response.status(); if(status == 200) {//created meeting.setStartDate(start); @@ -239,7 +240,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } private void updateNameDescription(GoToMeetingImpl meeting, GoToTrainingG2T training, String name, String description, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/nameDescription"; @@ -253,7 +254,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { String payload = GoToJsonUtil.trainingNameDescription(name, description).toString(); put.setEntity(new StringEntity(payload, ContentType.APPLICATION_JSON)); - GoToResponse response = execute(httpClient, put); + GoToResponse response = execute(put); int status = response.status(); if(status == 204) {//created meeting.setName(name); @@ -273,7 +274,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { public GoToRegistrant registerTraining(GoToMeeting meeting, Identity trainee, GoToError error) { GoToRegistrant registrant = registrantDao.getRegistrant(meeting, trainee); if(registrant == null) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/registrants"; @@ -283,7 +284,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { String traineeJson = GoToJsonUtil.registrant(trainee).toString(); post.setEntity(new StringEntity(traineeJson, ContentType.APPLICATION_JSON)); - GoToResponse response = execute(httpClient, post); + GoToResponse response = execute(post); int status = response.status(); if(status == 201) {//created String content = response.content(); @@ -310,14 +311,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } private GoToRegistrantG2T getRegistrant(String registrantKey, GoToMeeting meeting, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey() + "/registrants/" + registrantKey; HttpGet get = new HttpGet(url); decorateWithAccessToken(get, organizer); - GoToResponse response = execute(httpClient, get); + GoToResponse response = execute(get); if(response.status() == 200) { String content = response.content(); return GoToJsonUtil.parseAddRegistrant(content); @@ -345,13 +346,13 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } catch (Exception e) { log.error("", e); } finally { - log.error(method + " return " + status + ": " + responseString); + log.error("{} return {}: {}", method, status, responseString); } } private void logGoToError(String method, int status, String responseString, GoToError error) { error.setErrorCode(status); - log.error(method + " return " + status + ": " + responseString); + log.error("{} return {}: {}", method, status, responseString); } @Override @@ -387,14 +388,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } private GoToTrainingG2T getTraining(GoToMeeting meeting, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey(); HttpGet get = new HttpGet(url); decorateWithAccessToken(get, organizer); - GoToResponse response = execute(httpClient, get); + GoToResponse response = execute(get); int status = response.status(); if(status == 200) {//deleted String content = response.content(); @@ -411,14 +412,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { @Override public String startTraining(GoToMeeting meeting, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/trainings/" + meeting.getMeetingKey() + "/start"; HttpGet get = new HttpGet(url); decorateWithAccessToken(get, organizer); - GoToResponse response = execute(httpClient, get); + GoToResponse response = execute(get); int status = response.status(); if(status == 200) {//deleted String content = response.content(); @@ -445,14 +446,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { @Override public List<GoToRecordingsG2T> getRecordings(GoToMeeting meeting, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/trainings/" + meeting.getMeetingKey() + "/recordings"; HttpGet get = new HttpGet(url); decorateWithAccessToken(get, organizer); - GoToResponse response = execute(httpClient, get); + GoToResponse response = execute(get); int status = response.status(); if(status == 200) {//deleted String content = response.content(); @@ -481,14 +482,14 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } private boolean deleteTraining(GoToMeeting meeting, GoToError error) { - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { GoToOrganizer organizer = meeting.getOrganizer(); String url = gotoTrainingUrl + "/organizers/" + organizer.getOrganizerKey() + "/trainings/" + meeting.getMeetingKey(); HttpDelete delete = new HttpDelete(url); decorateWithAccessToken(delete, organizer); - GoToResponse response = execute(httpClient, delete); + GoToResponse response = execute(delete); int status = response.status(); if(status == 204) {//deleted return true; @@ -500,7 +501,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { error.setError(errorVo.getErrorCode()); error.setDescription(errorVo.getDescription()); } else { - log.error("deleteTraining return " + status + ": " + content); + log.error("deleteTraining return {}: {}", status, content); } } else { logGoToError("deleteTraining", response, error); @@ -532,7 +533,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { public boolean refreshToken(GoToOrganizer organizer) { GoToOrganizer reloadedOrganizer = organizerDao.loadOrganizerForUpdate(organizer); boolean success = false; - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { HttpPost post = new HttpPost(tokenUrl); post.addHeader("Accept", "application/json"); @@ -545,7 +546,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { urlParameters.add(new BasicNameValuePair("refresh_token", reloadedOrganizer.getRefreshToken())); post.setEntity(new UrlEncodedFormEntity(urlParameters)); - GoToResponse response = execute(httpClient, post); + GoToResponse response = execute(post); if(response.status() < 400) { GoToOrganizerG2T org = GoToJsonUtil.parseToken(response.content()); organizerDao.updateOrganizer(reloadedOrganizer, org.getAccessToken(), org.getRefreshToken(), org.getExpiresIn()); @@ -574,7 +575,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { */ public GoToOrganizerG2T login(String username, String password, GoToError error) { GoToOrganizerG2T organizer = null; - try(CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + try { HttpPost post = new HttpPost(tokenUrl); post.addHeader("Accept", "application/json"); @@ -588,7 +589,7 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { urlParameters.add(new BasicNameValuePair("password", password)); post.setEntity(new UrlEncodedFormEntity(urlParameters)); - GoToResponse response = execute(httpClient, post); + GoToResponse response = execute(post); if(response.status() < 400) { organizer = GoToJsonUtil.parseToken(response.content()); } else { @@ -640,8 +641,18 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { return new Date().after(cal.getTime()); } - private GoToResponse execute(CloseableHttpClient httpClient, HttpUriRequest request) { - try(CloseableHttpResponse response = httpClient.execute(request)) { + private GoToResponse execute(HttpUriRequest request) { + dbInstance.commit();// free connection + + RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT) + .setConnectTimeout(goToMeetingModule.getHttpConnectTimeout()) + .setConnectionRequestTimeout(goToMeetingModule.getHttpConnectRequestTimeout()) + .setSocketTimeout(goToMeetingModule.getHttpSocketTimeout()) + .build(); + + try(CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build(); + + CloseableHttpResponse response = httpClient.execute(request)) { int status = response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); String content; diff --git a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java index 3ec6350148b128c80410cf962d817c74041d66b4..29a77d46cea7429eb3a2ee8023eb3ecb1879b2ed 100644 --- a/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java +++ b/src/main/java/org/olat/modules/openmeetings/manager/OpenMeetingsManagerImpl.java @@ -33,6 +33,7 @@ import javax.annotation.PostConstruct; import javax.ws.rs.core.UriBuilder; import javax.xml.ws.BindingProvider; +import org.apache.logging.log4j.Logger; import org.apache.openmeetings.axis.services.GetRoomsWithCurrentUsersByListAndType; import org.apache.openmeetings.axis.services.RoomService; import org.apache.openmeetings.axis.services.RoomServicePortType; @@ -43,11 +44,11 @@ import org.apache.openmeetings.axis.services.xsd.RoomUser; import org.apache.openmeetings.db.dto.record.xsd.RecordingDTO; import org.apache.openmeetings.db.dto.room.xsd.RoomDTO; import org.apache.openmeetings.db.entity.server.xsd.Sessiondata; +import org.olat.core.commons.persistence.DB; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.UserConstants; -import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.core.util.WebappHelper; @@ -78,6 +79,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel private static final Logger log = Tracing.createLoggerFor(OpenMeetingsManagerImpl.class); + @Autowired + private DB dbInstance; @Autowired private OpenMeetingsDAO openMeetingsDao; @Autowired @@ -718,6 +721,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel } private final RoomServicePortType getRoomWebService() { + dbInstance.commit();// free connection before an HTTP call + RoomService ss = new RoomService(); RoomServicePortType port = ss.getRoomServiceHttpSoap11Endpoint(); String endPoint = getOpenMeetingsEndPoint() + "RoomService?wsdl"; @@ -726,6 +731,8 @@ public class OpenMeetingsManagerImpl implements OpenMeetingsManager, UserDataDel } private final UserServicePortType getUserWebService() { + dbInstance.commit();// free connection before an HTTP call + UserService ss = new UserService(); UserServicePortType port = ss.getUserServiceHttpSoap11Endpoint(); String endPoint = getOpenMeetingsEndPoint() + "UserService?wsdl"; diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 31ab172215fa656806790c128cbf5727310b6fad..7a50c266ca0dfc6666add8370001793e76d084c9 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -1527,6 +1527,11 @@ vc.bigbluebutton.daysToKeep= vc.bigbluebutton.secret= vc.bigbluebutton.shared.secret= +# HTTP connection generic settings in milliseconds +vc.http.connect.timeout=30000 +vc.http.connect.request.timeout=30000 +vc.http.connect.socket.timeout=30000 + ######################################## # Options for card2brain ########################################