| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2010  The Native Client Authors.  All rights reserved. | 2  * Copyright 2010  The Native Client Authors.  All rights reserved. | 
| 3  * Use of this source code is governed by a BSD-style license that can | 3  * Use of this source code is governed by a BSD-style license that can | 
| 4  * be found in the LICENSE file. | 4  * be found in the LICENSE file. | 
| 5  */ | 5  */ | 
| 6 | 6 | 
| 7 /* | 7 /* | 
| 8  * NaCl Service Runtime.  I/O Descriptor / Handle abstraction. | 8  * NaCl Service Runtime.  I/O Descriptor / Handle abstraction. | 
| 9  * Connection capabilities. | 9  * Connection capabilities. | 
| 10  */ | 10  */ | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 70 int NaClDescConnCapFdExternalize(struct NaClDesc          *vself, | 70 int NaClDescConnCapFdExternalize(struct NaClDesc          *vself, | 
| 71                                  struct NaClDescXferState *xfer) { | 71                                  struct NaClDescXferState *xfer) { | 
| 72   struct NaClDescConnCapFd    *self; | 72   struct NaClDescConnCapFd    *self; | 
| 73 | 73 | 
| 74   self = (struct NaClDescConnCapFd *) vself; | 74   self = (struct NaClDescConnCapFd *) vself; | 
| 75   *xfer->next_handle++ = self->connect_fd; | 75   *xfer->next_handle++ = self->connect_fd; | 
| 76 | 76 | 
| 77   return 0; | 77   return 0; | 
| 78 } | 78 } | 
| 79 | 79 | 
| 80 int NaClDescConnCapFdConnectAddr(struct NaClDesc          *vself, | 80 int NaClDescConnCapFdConnectAddr(struct NaClDesc *vself, | 
| 81                                  struct NaClDescEffector  *effp) { | 81                                  struct NaClDesc **result) { | 
| 82   struct NaClDescConnCapFd *self = (struct NaClDescConnCapFd *) vself; | 82   struct NaClDescConnCapFd *self = (struct NaClDescConnCapFd *) vself; | 
| 83   NaClHandle sock_pair[2]; | 83   NaClHandle sock_pair[2]; | 
| 84   struct NaClDescImcDesc *connected_socket; | 84   struct NaClDescImcDesc *connected_socket; | 
| 85   int retval; |  | 
| 86   char control_buf[CMSG_SPACE(sizeof(int))]; | 85   char control_buf[CMSG_SPACE(sizeof(int))]; | 
| 87   struct iovec iovec; | 86   struct iovec iovec; | 
| 88   struct msghdr connect_msg; | 87   struct msghdr connect_msg; | 
| 89   struct cmsghdr *cmsg; | 88   struct cmsghdr *cmsg; | 
| 90   int sent; | 89   int sent; | 
| 91 | 90 | 
| 92   if (NaClSocketPair(sock_pair) != 0) { | 91   if (NaClSocketPair(sock_pair) != 0) { | 
| 93     return -NACL_ABI_EMFILE; | 92     return -NACL_ABI_EMFILE; | 
| 94   } | 93   } | 
| 95 | 94 | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 118   } | 117   } | 
| 119 | 118 | 
| 120   connected_socket = malloc(sizeof(*connected_socket)); | 119   connected_socket = malloc(sizeof(*connected_socket)); | 
| 121   if (connected_socket == NULL || | 120   if (connected_socket == NULL || | 
| 122       !NaClDescImcDescCtor(connected_socket, sock_pair[1])) { | 121       !NaClDescImcDescCtor(connected_socket, sock_pair[1])) { | 
| 123     NaClClose(sock_pair[1]); | 122     NaClClose(sock_pair[1]); | 
| 124     free(connected_socket); | 123     free(connected_socket); | 
| 125     return -NACL_ABI_ENOMEM; | 124     return -NACL_ABI_ENOMEM; | 
| 126   } | 125   } | 
| 127 | 126 | 
| 128   retval = (*effp->vtbl->ReturnCreatedDesc)( | 127   *result = (struct NaClDesc *) connected_socket; | 
| 129       effp, (struct NaClDesc *) connected_socket); | 128   return 0; | 
| 130   if (retval < 0) { |  | 
| 131     /* connected_socket is fully constructed, so we cannot simply free |  | 
| 132        it at this point. */ |  | 
| 133     NaClDescUnref((struct NaClDesc *) connected_socket); |  | 
| 134   } |  | 
| 135   return retval; |  | 
| 136 } | 129 } | 
| 137 | 130 | 
| 138 int NaClDescConnCapFdAcceptConn(struct NaClDesc         *vself, | 131 int NaClDescConnCapFdAcceptConn(struct NaClDesc *vself, | 
| 139                                 struct NaClDescEffector *effp) { | 132                                 struct NaClDesc **result) { | 
| 140   UNREFERENCED_PARAMETER(vself); | 133   UNREFERENCED_PARAMETER(vself); | 
| 141   UNREFERENCED_PARAMETER(effp); | 134   UNREFERENCED_PARAMETER(result); | 
| 142 | 135 | 
| 143   NaClLog(LOG_ERROR, "NaClDescConnCapFdAcceptConn: not IMC\n"); | 136   NaClLog(LOG_ERROR, "NaClDescConnCapFdAcceptConn: not IMC\n"); | 
| 144   return -NACL_ABI_EINVAL; | 137   return -NACL_ABI_EINVAL; | 
| 145 } | 138 } | 
| 146 | 139 | 
| 147 struct NaClDescVtbl const kNaClDescConnCapFdVtbl = { | 140 struct NaClDescVtbl const kNaClDescConnCapFdVtbl = { | 
| 148   NaClDescConnCapFdDtor, | 141   NaClDescConnCapFdDtor, | 
| 149   NaClDescMapNotImplemented, | 142   NaClDescMapNotImplemented, | 
| 150   NaClDescUnmapUnsafeNotImplemented, | 143   NaClDescUnmapUnsafeNotImplemented, | 
| 151   NaClDescUnmapNotImplemented, | 144   NaClDescUnmapNotImplemented, | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 189   if (!NaClDescCtor(&conn_cap->base)) { | 182   if (!NaClDescCtor(&conn_cap->base)) { | 
| 190     free(conn_cap); | 183     free(conn_cap); | 
| 191     return -NACL_ABI_ENOMEM; | 184     return -NACL_ABI_ENOMEM; | 
| 192   } | 185   } | 
| 193   conn_cap->base.vtbl = &kNaClDescConnCapFdVtbl; | 186   conn_cap->base.vtbl = &kNaClDescConnCapFdVtbl; | 
| 194   conn_cap->connect_fd = *xfer->next_handle; | 187   conn_cap->connect_fd = *xfer->next_handle; | 
| 195   *xfer->next_handle++ = NACL_INVALID_HANDLE; | 188   *xfer->next_handle++ = NACL_INVALID_HANDLE; | 
| 196   *result = &conn_cap->base; | 189   *result = &conn_cap->base; | 
| 197   return 0; | 190   return 0; | 
| 198 } | 191 } | 
| OLD | NEW | 
|---|