| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2008 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /* | 7 /* |
| 8 * NaCl service library. a primitive rpc library | 8 * NaCl service library. a primitive rpc library |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 NaClSrpcArg out_carray; | 28 NaClSrpcArg out_carray; |
| 29 NaClSrpcArg* outs[2]; | 29 NaClSrpcArg* outs[2]; |
| 30 NaClSrpcService* tmp_service = NULL; | 30 NaClSrpcService* tmp_service = NULL; |
| 31 NaClSrpcService* service = NULL; | 31 NaClSrpcService* service = NULL; |
| 32 NaClSrpcHandlerDesc basic_services[] = { { NULL, NULL } }; | 32 NaClSrpcHandlerDesc basic_services[] = { { NULL, NULL } }; |
| 33 | 33 |
| 34 /* Set up the output parameters for service discovery. */ | 34 /* Set up the output parameters for service discovery. */ |
| 35 outs[0] = &out_carray; | 35 outs[0] = &out_carray; |
| 36 outs[1] = NULL; | 36 outs[1] = NULL; |
| 37 out_carray.tag = NACL_SRPC_ARG_TYPE_CHAR_ARRAY; | 37 out_carray.tag = NACL_SRPC_ARG_TYPE_CHAR_ARRAY; |
| 38 out_carray.u.caval.carr = NULL; | 38 out_carray.arrays.carr = NULL; |
| 39 /* Set up the basic service descriptor to make the service discovery call. */ | 39 /* Set up the basic service descriptor to make the service discovery call. */ |
| 40 tmp_service = (NaClSrpcService*) malloc(sizeof(*tmp_service)); | 40 tmp_service = (NaClSrpcService*) malloc(sizeof(*tmp_service)); |
| 41 if (NULL == tmp_service) { | 41 if (NULL == tmp_service) { |
| 42 goto cleanup; | 42 goto cleanup; |
| 43 } | 43 } |
| 44 if (!NaClSrpcServiceHandlerCtor(tmp_service, basic_services)) { | 44 if (!NaClSrpcServiceHandlerCtor(tmp_service, basic_services)) { |
| 45 goto cleanup; | 45 goto cleanup; |
| 46 } | 46 } |
| 47 channel->client = tmp_service; | 47 channel->client = tmp_service; |
| 48 /* Build the argument values for invoking service discovery */ | 48 /* Build the argument values for invoking service discovery */ |
| 49 outs[0] = &out_carray; | 49 outs[0] = &out_carray; |
| 50 outs[1] = NULL; | 50 outs[1] = NULL; |
| 51 out_carray.tag = NACL_SRPC_ARG_TYPE_CHAR_ARRAY; | 51 out_carray.tag = NACL_SRPC_ARG_TYPE_CHAR_ARRAY; |
| 52 out_carray.u.caval.count = NACL_SRPC_MAX_SERVICE_DISCOVERY_CHARS; | 52 out_carray.u.count = NACL_SRPC_MAX_SERVICE_DISCOVERY_CHARS; |
| 53 out_carray.u.caval.carr = calloc(NACL_SRPC_MAX_SERVICE_DISCOVERY_CHARS, 1); | 53 out_carray.arrays.carr = calloc(NACL_SRPC_MAX_SERVICE_DISCOVERY_CHARS, 1); |
| 54 if (NULL == out_carray.u.caval.carr) { | 54 if (NULL == out_carray.arrays.carr) { |
| 55 goto cleanup; | 55 goto cleanup; |
| 56 } | 56 } |
| 57 /* Invoke service discovery, getting description string */ | 57 /* Invoke service discovery, getting description string */ |
| 58 if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeV(channel, 0, ins, outs)) { | 58 if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeV(channel, 0, ins, outs)) { |
| 59 goto cleanup; | 59 goto cleanup; |
| 60 } | 60 } |
| 61 /* Clean up the temporary service. */ | 61 /* Clean up the temporary service. */ |
| 62 NaClSrpcServiceDtor(tmp_service); | 62 NaClSrpcServiceDtor(tmp_service); |
| 63 free(tmp_service); | 63 free(tmp_service); |
| 64 tmp_service = NULL; | 64 tmp_service = NULL; |
| 65 /* Allocate the real service. */ | 65 /* Allocate the real service. */ |
| 66 service = (NaClSrpcService*) malloc(sizeof(*service)); | 66 service = (NaClSrpcService*) malloc(sizeof(*service)); |
| 67 if (NULL == service) { | 67 if (NULL == service) { |
| 68 goto cleanup; | 68 goto cleanup; |
| 69 } | 69 } |
| 70 /* Build the real service from the resulting string. */ | 70 /* Build the real service from the resulting string. */ |
| 71 if (!NaClSrpcServiceStringCtor(service, out_carray.u.caval.carr)) { | 71 if (!NaClSrpcServiceStringCtor(service, out_carray.arrays.carr)) { |
| 72 goto cleanup; | 72 goto cleanup; |
| 73 } | 73 } |
| 74 channel->client = service; | 74 channel->client = service; |
| 75 /* Free the service string */ | 75 /* Free the service string */ |
| 76 free(out_carray.u.caval.carr); | 76 free(out_carray.arrays.carr); |
| 77 /* Return success */ | 77 /* Return success */ |
| 78 return 1; | 78 return 1; |
| 79 | 79 |
| 80 cleanup: | 80 cleanup: |
| 81 free(service); | 81 free(service); |
| 82 free(out_carray.u.caval.carr); | 82 free(out_carray.arrays.carr); |
| 83 NaClSrpcServiceDtor(tmp_service); | 83 NaClSrpcServiceDtor(tmp_service); |
| 84 free(tmp_service); | 84 free(tmp_service); |
| 85 return 0; | 85 return 0; |
| 86 } | 86 } |
| 87 | 87 |
| 88 /* | 88 /* |
| 89 * The constructors and destructor. | 89 * The constructors and destructor. |
| 90 */ | 90 */ |
| 91 | 91 |
| 92 /* | 92 /* |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 /* | 166 /* |
| 167 * A standalone SRPC server is not a subprocess of the browser or | 167 * A standalone SRPC server is not a subprocess of the browser or |
| 168 * sel_universal. As this is a mode used for testing, the parent environment | 168 * sel_universal. As this is a mode used for testing, the parent environment |
| 169 * must set the following variable to indicate that fact. | 169 * must set the following variable to indicate that fact. |
| 170 */ | 170 */ |
| 171 const char kSrpcStandalone[] = "NACL_SRPC_STANDALONE"; | 171 const char kSrpcStandalone[] = "NACL_SRPC_STANDALONE"; |
| 172 | 172 |
| 173 int NaClSrpcIsStandalone() { | 173 int NaClSrpcIsStandalone() { |
| 174 return (NULL != getenv(kSrpcStandalone)); | 174 return (NULL != getenv(kSrpcStandalone)); |
| 175 } | 175 } |
| OLD | NEW |