blob: 2198d21a9454860a19207991f5c1c565a73dacb0 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.as2.api;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.camel.component.as2.api.io.AS2BHttpClientConnection;
import org.apache.camel.component.as2.api.protocol.RequestAS2;
import org.apache.camel.component.as2.api.protocol.RequestMDN;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.impl.DefaultBHttpClientConnection;
import org.apache.http.protocol.HttpCoreContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpProcessorBuilder;
import org.apache.http.protocol.HttpRequestExecutor;
import org.apache.http.protocol.RequestConnControl;
import org.apache.http.protocol.RequestContent;
import org.apache.http.protocol.RequestDate;
import org.apache.http.protocol.RequestExpectContinue;
import org.apache.http.protocol.RequestTargetHost;
import org.apache.http.protocol.RequestUserAgent;
import org.apache.http.util.Args;
public class AS2ClientConnection {
private HttpHost targetHost;
private HttpProcessor httpProcessor;
private DefaultBHttpClientConnection httpConnection;
private String as2Version;
private String userAgent;
private String clientFqdn;
public AS2ClientConnection(String as2Version, String userAgent, String clientFqdn, String targetHostName, Integer targetPortNumber) throws UnknownHostException, IOException {
this.as2Version = Args.notNull(as2Version, "as2Version");
this.userAgent = Args.notNull(userAgent, "userAgent");
this.clientFqdn = Args.notNull(clientFqdn, "clientFqdn");
this.targetHost = new HttpHost(Args.notNull(targetHostName, "targetHostName"), Args.notNull(targetPortNumber, "targetPortNumber"));
// Build Processor
httpProcessor = HttpProcessorBuilder.create()
.add(new RequestAS2(as2Version, clientFqdn))
.add(new RequestMDN())
.add(new RequestTargetHost())
.add(new RequestUserAgent(this.userAgent))
.add(new RequestDate())
.add(new RequestContent(true))
.add(new RequestConnControl())
.add(new RequestExpectContinue(true)).build();
// Create Socket
Socket socket = new Socket(targetHost.getHostName(), targetHost.getPort());
// Create Connection
httpConnection = new AS2BHttpClientConnection(8 * 1024);
httpConnection.bind(socket);
}
public String getAs2Version() {
return as2Version;
}
public String getUserAgent() {
return userAgent;
}
public String getClientFqdn() {
return clientFqdn;
}
public HttpResponse send(HttpRequest request, HttpCoreContext httpContext) throws HttpException, IOException {
httpContext.setTargetHost(targetHost);
// Execute Request
HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
httpexecutor.preProcess(request, httpProcessor, httpContext);
HttpResponse response = httpexecutor.execute(request, httpConnection, httpContext);
httpexecutor.postProcess(response, httpProcessor, httpContext);
return response;
}
}