• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (C) 2010 The Android Open Source Project
2 **
3 ** This software is licensed under the terms of the GNU General Public
4 ** License version 2, as published by the Free Software Foundation, and
5 ** may be copied, distributed, and modified under those terms.
6 **
7 ** This program is distributed in the hope that it will be useful,
8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 ** GNU General Public License for more details.
11 */
12 
13 /*
14  * Contains the UI-side implementation of the "core-ui-control" service that is
15  * part of the UI control protocol. Here we handle UI control commands received
16  * from the Core.
17  */
18 
19 #include "android/utils/debug.h"
20 #include "android/utils/panic.h"
21 #include "android/protocol/core-connection.h"
22 #include "android/protocol/attach-ui-impl.h"
23 
24 /* Descriptor for the UI-side of the "attach-ui" service. */
25 typedef struct AttachUIImpl {
26     /* Address of the Core's console socket. */
27     SockAddress     console_socket;
28 
29     /* Core connection established for this service. */
30     CoreConnection* core_connection;
31 
32     /* Socket descriptor for the UI service. */
33     int             sock;
34 } AttachUIImpl;
35 
36 /* One and only one AttachUIImpl instance. */
37 static AttachUIImpl  _attachUiImpl;
38 
39 SockAddress*
attachUiImpl_get_console_socket(void)40 attachUiImpl_get_console_socket(void)
41 {
42     return &_attachUiImpl.console_socket;
43 }
44 
45 int
attachUiImpl_create(SockAddress * console_socket)46 attachUiImpl_create(SockAddress* console_socket)
47 {
48     char* handshake = NULL;
49 
50     _attachUiImpl.console_socket = *console_socket;
51 
52     // Connect to the core-ui-control service.
53     _attachUiImpl.core_connection =
54         core_connection_create_and_switch(console_socket, "attach-UI",
55                                           &handshake);
56     if (_attachUiImpl.core_connection == NULL) {
57         derror("Unable to connect to the attach-UI service: %s\n",
58                errno_str);
59         return -1;
60     }
61 
62     fprintf(stdout, "UI is now attached to the core at %s.",
63             sock_address_to_string(console_socket));
64     if (handshake != NULL) {
65         if (handshake[0] != '\0') {
66             fprintf(stdout, " Handshake: %s", handshake);
67         }
68         free(handshake);
69     }
70     fprintf(stdout, "\n");
71 
72     return 0;
73 }
74 
75 void
attachUiImpl_destroy(void)76 attachUiImpl_destroy(void)
77 {
78     if (_attachUiImpl.core_connection != NULL) {
79         core_connection_close(_attachUiImpl.core_connection);
80         core_connection_free(_attachUiImpl.core_connection);
81         _attachUiImpl.core_connection = NULL;
82     }
83 }
84