X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fvconn-ssl.c;h=2452bcea5d1908612492e1c6eb47414b064e2dc5;hb=d0632593feacc7942fa1650baf07e1e0b8dd1676;hp=01c826f966061f0738d60a03cd4b48e4cb60e5f9;hpb=78ff02708b11df94ac2cdf6fe82dc922758c7e30;p=openvswitch diff --git a/lib/vconn-ssl.c b/lib/vconn-ssl.c index 01c826f9..2452bcea 100644 --- a/lib/vconn-ssl.c +++ b/lib/vconn-ssl.c @@ -1,17 +1,17 @@ /* * Copyright (c) 2008, 2009 Nicira Networks. * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. + * Licensed 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: * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * 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. */ #include @@ -181,9 +181,11 @@ want_to_poll_events(int want) static int new_ssl_vconn(const char *name, int fd, enum session_type type, - enum ssl_state state, const struct sockaddr_in *sin, + enum ssl_state state, const struct sockaddr_in *remote, struct vconn **vconnp) { + struct sockaddr_in local; + socklen_t local_len = sizeof local; struct ssl_vconn *sslv; SSL *ssl = NULL; int on = 1; @@ -212,6 +214,12 @@ new_ssl_vconn(const char *name, int fd, enum session_type type, goto error; } + /* Get the local IP and port information */ + retval = getsockname(fd, (struct sockaddr *) &local, &local_len); + if (retval) { + memset(&local, 0, sizeof local); + } + /* Disable Nagle. */ retval = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof on); if (retval) { @@ -238,8 +246,11 @@ new_ssl_vconn(const char *name, int fd, enum session_type type, /* Create and return the ssl_vconn. */ sslv = xmalloc(sizeof *sslv); - vconn_init(&sslv->vconn, &ssl_vconn_class, EAGAIN, sin->sin_addr.s_addr, - name, true); + vconn_init(&sslv->vconn, &ssl_vconn_class, EAGAIN, name); + vconn_set_remote_ip(&sslv->vconn, remote->sin_addr.s_addr); + vconn_set_remote_port(&sslv->vconn, remote->sin_port); + vconn_set_local_ip(&sslv->vconn, local.sin_addr.s_addr); + vconn_set_local_port(&sslv->vconn, local.sin_port); sslv->state = state; sslv->type = type; sslv->fd = fd;