~ubuntu-branches/ubuntu/raring/eucalyptus/raring

« back to all changes in this revision

Viewing changes to clc/modules/wsstack/src/main/java/com/eucalyptus/ws/client/NioClient.java

  • Committer: Package Import Robot
  • Author(s): Brian Thomason
  • Date: 2011-11-29 13:17:52 UTC
  • mfrom: (1.2.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 185.
  • Revision ID: package-import@ubuntu.com-20111129131752-rq31al3ntutv2vvl
Tags: upstream-3.0.999beta1
Import upstream version 3.0.999beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*******************************************************************************
2
 
*Copyright (c) 2009  Eucalyptus Systems, Inc.
3
 
4
 
*  This program is free software: you can redistribute it and/or modify
5
 
*  it under the terms of the GNU General Public License as published by
6
 
*  the Free Software Foundation, only version 3 of the License.
7
 
8
 
9
 
*  This file is distributed in the hope that it will be useful, but WITHOUT
10
 
*  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
 
*  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
 
*  for more details.
13
 
14
 
*  You should have received a copy of the GNU General Public License along
15
 
*  with this program.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
 
*  Please contact Eucalyptus Systems, Inc., 130 Castilian
18
 
*  Dr., Goleta, CA 93101 USA or visit <http://www.eucalyptus.com/licenses/>
19
 
*  if you need additional information or have any questions.
20
 
21
 
*  This file may incorporate work covered under the following copyright and
22
 
*  permission notice:
23
 
24
 
*    Software License Agreement (BSD License)
25
 
26
 
*    Copyright (c) 2008, Regents of the University of California
27
 
*    All rights reserved.
28
 
29
 
*    Redistribution and use of this software in source and binary forms, with
30
 
*    or without modification, are permitted provided that the following
31
 
*    conditions are met:
32
 
33
 
*      Redistributions of source code must retain the above copyright notice,
34
 
*      this list of conditions and the following disclaimer.
35
 
36
 
*      Redistributions in binary form must reproduce the above copyright
37
 
*      notice, this list of conditions and the following disclaimer in the
38
 
*      documentation and/or other materials provided with the distribution.
39
 
40
 
*    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
41
 
*    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
42
 
*    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
43
 
*    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
44
 
*    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45
 
*    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
46
 
*    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
47
 
*    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
48
 
*    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
49
 
*    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
50
 
*    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
51
 
*    THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
52
 
*    LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
53
 
*    SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
54
 
*    IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
55
 
*    BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
56
 
*    THE REGENTS’ DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
57
 
*    OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
58
 
*    WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
59
 
*    ANY SUCH LICENSES OR RIGHTS.
60
 
*******************************************************************************/
61
 
/*
62
 
 * Author: chris grzegorczyk <grze@eucalyptus.com>
63
 
 */
64
 
package com.eucalyptus.ws.client;
65
 
 
66
 
import java.net.InetSocketAddress;
67
 
 
68
 
import org.apache.log4j.Logger;
69
 
import org.jboss.netty.channel.Channel;
70
 
import org.jboss.netty.channel.ChannelFuture;
71
 
import org.jboss.netty.channel.ChannelFutureListener;
72
 
import org.jboss.netty.channel.Channels;
73
 
import org.jboss.netty.handler.codec.http.HttpMethod;
74
 
import org.jboss.netty.handler.codec.http.HttpRequest;
75
 
import org.jboss.netty.handler.codec.http.HttpVersion;
76
 
 
77
 
import com.eucalyptus.http.MappingHttpRequest;
78
 
import com.eucalyptus.ws.Client;
79
 
import com.eucalyptus.ws.client.pipeline.NioClientPipeline;
80
 
import com.eucalyptus.ws.handlers.ResponseHandler;
81
 
import com.eucalyptus.ws.util.ChannelUtil;
82
 
 
83
 
import edu.ucsb.eucalyptus.msgs.BaseMessage;
84
 
 
85
 
public class NioClient implements Client {
86
 
  private static Logger LOG = Logger.getLogger( NioClient.class );
87
 
 
88
 
  private NioBootstrap clientBootstrap;
89
 
 
90
 
  private String hostname;
91
 
  private int port;
92
 
  private String servicePath;
93
 
  private InetSocketAddress remoteAddr;
94
 
  private ResponseHandler responseHandler;
95
 
  private ChannelFuture connectFuture;
96
 
  public NioClient( String hostname, int port, String servicePath, NioClientPipeline clientPipeline ) {
97
 
    this.clientBootstrap = ChannelUtil.getClientBootstrap( clientPipeline );
98
 
    this.remoteAddr = new InetSocketAddress( hostname, port );
99
 
    this.hostname = hostname;
100
 
    this.port = port;
101
 
    this.servicePath = servicePath;
102
 
    this.responseHandler = clientPipeline.getHandler( );
103
 
    this.connectFuture = this.clientBootstrap.connect( this.remoteAddr );
104
 
  }
105
 
  
106
 
  public void write( HttpRequest httpRequest ) throws Exception {
107
 
    this.connectFuture.addListener( ChannelUtil.WRITE( httpRequest ) );
108
 
  }
109
 
  
110
 
  @Override
111
 
  public BaseMessage send( final BaseMessage msg ) throws Exception {
112
 
    HttpRequest request = new MappingHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.POST, this.hostname, this.port, this.servicePath, msg );
113
 
    this.write( request );
114
 
    BaseMessage response = this.responseHandler.getResponse();
115
 
    return response;
116
 
  }
117
 
 
118
 
  @Override
119
 
  public void dispatch( final BaseMessage msg ) throws Exception {
120
 
    HttpRequest request = new MappingHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.POST, this.hostname, this.port, this.servicePath, msg );
121
 
    this.write( request );
122
 
    BaseMessage response = this.responseHandler.getResponse();
123
 
  }
124
 
 
125
 
  @Override
126
 
  public String getUri() {
127
 
    return "http://"+this.hostname+":"+this.port+(servicePath.startsWith( "/" )?"":"?")+servicePath;
128
 
  }
129
 
 
130
 
  public String getHostname( ) {
131
 
    return hostname;
132
 
  }
133
 
 
134
 
  public int getPort( ) {
135
 
    return port;
136
 
  }
137
 
 
138
 
  public String getServicePath( ) {
139
 
    return servicePath;
140
 
  }
141
 
 
142
 
}