qemu-char: convert stdio backend to data-driven creation
[sdk/emulator/qemu.git] / qemu-char.c
1 /*
2  * QEMU System Emulator
3  *
4  * Copyright (c) 2003-2008 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include "qemu-common.h"
25 #include "monitor/monitor.h"
26 #include "sysemu/sysemu.h"
27 #include "qemu/error-report.h"
28 #include "qemu/timer.h"
29 #include "sysemu/char.h"
30 #include "hw/usb.h"
31 #include "qmp-commands.h"
32 #include "qapi/qmp-input-visitor.h"
33 #include "qapi/qmp-output-visitor.h"
34 #include "qapi-visit.h"
35
36 #include <unistd.h>
37 #include <fcntl.h>
38 #include <time.h>
39 #include <errno.h>
40 #include <sys/time.h>
41 #include <zlib.h>
42
43 #ifndef _WIN32
44 #include <sys/times.h>
45 #include <sys/wait.h>
46 #include <termios.h>
47 #include <sys/mman.h>
48 #include <sys/ioctl.h>
49 #include <sys/resource.h>
50 #include <sys/socket.h>
51 #include <netinet/in.h>
52 #include <net/if.h>
53 #include <arpa/inet.h>
54 #include <netdb.h>
55 #include <sys/select.h>
56 #ifdef CONFIG_BSD
57 #include <sys/stat.h>
58 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
59 #include <dev/ppbus/ppi.h>
60 #include <dev/ppbus/ppbconf.h>
61 #elif defined(__DragonFly__)
62 #include <dev/misc/ppi/ppi.h>
63 #include <bus/ppbus/ppbconf.h>
64 #endif
65 #else
66 #ifdef __linux__
67 #include <linux/ppdev.h>
68 #include <linux/parport.h>
69 #endif
70 #ifdef __sun__
71 #include <sys/stat.h>
72 #include <sys/ethernet.h>
73 #include <sys/sockio.h>
74 #include <netinet/arp.h>
75 #include <netinet/in.h>
76 #include <netinet/in_systm.h>
77 #include <netinet/ip.h>
78 #include <netinet/ip_icmp.h> // must come after ip.h
79 #include <netinet/udp.h>
80 #include <netinet/tcp.h>
81 #endif
82 #endif
83 #endif
84
85 #include "qemu/sockets.h"
86 #include "ui/qemu-spice.h"
87
88 #define READ_BUF_LEN 4096
89 #define READ_RETRIES 10
90 #define CHR_MAX_FILENAME_SIZE 256
91 #define TCP_MAX_FDS 16
92
93 /***********************************************************/
94 /* Socket address helpers */
95 static void qapi_copy_SocketAddress(SocketAddress **p_dest,
96                                     SocketAddress *src)
97 {
98     QmpOutputVisitor *qov;
99     QmpInputVisitor *qiv;
100     Visitor *ov, *iv;
101     QObject *obj;
102
103     *p_dest = NULL;
104
105     qov = qmp_output_visitor_new();
106     ov = qmp_output_get_visitor(qov);
107     visit_type_SocketAddress(ov, &src, NULL, &error_abort);
108     obj = qmp_output_get_qobject(qov);
109     qmp_output_visitor_cleanup(qov);
110     if (!obj) {
111         return;
112     }
113
114     qiv = qmp_input_visitor_new(obj);
115     iv = qmp_input_get_visitor(qiv);
116     visit_type_SocketAddress(iv, p_dest, NULL, &error_abort);
117     qmp_input_visitor_cleanup(qiv);
118     qobject_decref(obj);
119 }
120
121 static int SocketAddress_to_str(char *dest, int max_len,
122                                 const char *prefix, SocketAddress *addr,
123                                 bool is_listen, bool is_telnet)
124 {
125     switch (addr->kind) {
126     case SOCKET_ADDRESS_KIND_INET:
127         return snprintf(dest, max_len, "%s%s:%s:%s%s", prefix,
128                         is_telnet ? "telnet" : "tcp", addr->inet->host,
129                         addr->inet->port, is_listen ? ",server" : "");
130         break;
131     case SOCKET_ADDRESS_KIND_UNIX:
132         return snprintf(dest, max_len, "%sunix:%s%s", prefix,
133                         addr->q_unix->path, is_listen ? ",server" : "");
134         break;
135     case SOCKET_ADDRESS_KIND_FD:
136         return snprintf(dest, max_len, "%sfd:%s%s", prefix, addr->fd->str,
137                         is_listen ? ",server" : "");
138         break;
139     default:
140         abort();
141     }
142 }
143
144 static int sockaddr_to_str(char *dest, int max_len,
145                            struct sockaddr_storage *ss, socklen_t ss_len,
146                            struct sockaddr_storage *ps, socklen_t ps_len,
147                            bool is_listen, bool is_telnet)
148 {
149     char shost[NI_MAXHOST], sserv[NI_MAXSERV];
150     char phost[NI_MAXHOST], pserv[NI_MAXSERV];
151     const char *left = "", *right = "";
152
153     switch (ss->ss_family) {
154 #ifndef _WIN32
155     case AF_UNIX:
156         return snprintf(dest, max_len, "unix:%s%s",
157                         ((struct sockaddr_un *)(ss))->sun_path,
158                         is_listen ? ",server" : "");
159 #endif
160     case AF_INET6:
161         left  = "[";
162         right = "]";
163         /* fall through */
164     case AF_INET:
165         getnameinfo((struct sockaddr *) ss, ss_len, shost, sizeof(shost),
166                     sserv, sizeof(sserv), NI_NUMERICHOST | NI_NUMERICSERV);
167         getnameinfo((struct sockaddr *) ps, ps_len, phost, sizeof(phost),
168                     pserv, sizeof(pserv), NI_NUMERICHOST | NI_NUMERICSERV);
169         return snprintf(dest, max_len, "%s:%s%s%s:%s%s <-> %s%s%s:%s",
170                         is_telnet ? "telnet" : "tcp",
171                         left, shost, right, sserv,
172                         is_listen ? ",server" : "",
173                         left, phost, right, pserv);
174
175     default:
176         return snprintf(dest, max_len, "unknown");
177     }
178 }
179
180 /***********************************************************/
181 /* character device */
182
183 static QTAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
184     QTAILQ_HEAD_INITIALIZER(chardevs);
185
186 CharDriverState *qemu_chr_alloc(void)
187 {
188     CharDriverState *chr = g_malloc0(sizeof(CharDriverState));
189     qemu_mutex_init(&chr->chr_write_lock);
190     return chr;
191 }
192
193 void qemu_chr_be_event(CharDriverState *s, int event)
194 {
195     /* Keep track if the char device is open */
196     switch (event) {
197         case CHR_EVENT_OPENED:
198             s->be_open = 1;
199             break;
200         case CHR_EVENT_CLOSED:
201             s->be_open = 0;
202             break;
203     }
204
205     if (!s->chr_event)
206         return;
207     s->chr_event(s->handler_opaque, event);
208 }
209
210 void qemu_chr_be_generic_open(CharDriverState *s)
211 {
212     qemu_chr_be_event(s, CHR_EVENT_OPENED);
213 }
214
215 int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len)
216 {
217     int ret;
218
219     qemu_mutex_lock(&s->chr_write_lock);
220     ret = s->chr_write(s, buf, len);
221     qemu_mutex_unlock(&s->chr_write_lock);
222     return ret;
223 }
224
225 int qemu_chr_fe_write_all(CharDriverState *s, const uint8_t *buf, int len)
226 {
227     int offset = 0;
228     int res = 0;
229
230     qemu_mutex_lock(&s->chr_write_lock);
231     while (offset < len) {
232         do {
233             res = s->chr_write(s, buf + offset, len - offset);
234             if (res == -1 && errno == EAGAIN) {
235                 g_usleep(100);
236             }
237         } while (res == -1 && errno == EAGAIN);
238
239         if (res <= 0) {
240             break;
241         }
242
243         offset += res;
244     }
245     qemu_mutex_unlock(&s->chr_write_lock);
246
247     if (res < 0) {
248         return res;
249     }
250     return offset;
251 }
252
253 int qemu_chr_fe_read_all(CharDriverState *s, uint8_t *buf, int len)
254 {
255     int offset = 0, counter = 10;
256     int res;
257
258     if (!s->chr_sync_read) {
259         return 0;
260     }
261
262     while (offset < len) {
263         do {
264             res = s->chr_sync_read(s, buf + offset, len - offset);
265             if (res == -1 && errno == EAGAIN) {
266                 g_usleep(100);
267             }
268         } while (res == -1 && errno == EAGAIN);
269
270         if (res == 0) {
271             break;
272         }
273
274         if (res < 0) {
275             return res;
276         }
277
278         offset += res;
279
280         if (!counter--) {
281             break;
282         }
283     }
284
285     return offset;
286 }
287
288 int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg)
289 {
290     if (!s->chr_ioctl)
291         return -ENOTSUP;
292     return s->chr_ioctl(s, cmd, arg);
293 }
294
295 int qemu_chr_be_can_write(CharDriverState *s)
296 {
297     if (!s->chr_can_read)
298         return 0;
299     return s->chr_can_read(s->handler_opaque);
300 }
301
302 void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len)
303 {
304     if (s->chr_read) {
305         s->chr_read(s->handler_opaque, buf, len);
306     }
307 }
308
309 int qemu_chr_fe_get_msgfd(CharDriverState *s)
310 {
311     int fd;
312     return (qemu_chr_fe_get_msgfds(s, &fd, 1) == 1) ? fd : -1;
313 }
314
315 int qemu_chr_fe_get_msgfds(CharDriverState *s, int *fds, int len)
316 {
317     return s->get_msgfds ? s->get_msgfds(s, fds, len) : -1;
318 }
319
320 int qemu_chr_fe_set_msgfds(CharDriverState *s, int *fds, int num)
321 {
322     return s->set_msgfds ? s->set_msgfds(s, fds, num) : -1;
323 }
324
325 int qemu_chr_add_client(CharDriverState *s, int fd)
326 {
327     return s->chr_add_client ? s->chr_add_client(s, fd) : -1;
328 }
329
330 void qemu_chr_accept_input(CharDriverState *s)
331 {
332     if (s->chr_accept_input)
333         s->chr_accept_input(s);
334     qemu_notify_event();
335 }
336
337 void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
338 {
339     char buf[READ_BUF_LEN];
340     va_list ap;
341     va_start(ap, fmt);
342     vsnprintf(buf, sizeof(buf), fmt, ap);
343     qemu_chr_fe_write(s, (uint8_t *)buf, strlen(buf));
344     va_end(ap);
345 }
346
347 static void remove_fd_in_watch(CharDriverState *chr);
348
349 void qemu_chr_add_handlers(CharDriverState *s,
350                            IOCanReadHandler *fd_can_read,
351                            IOReadHandler *fd_read,
352                            IOEventHandler *fd_event,
353                            void *opaque)
354 {
355     int fe_open;
356
357     if (!opaque && !fd_can_read && !fd_read && !fd_event) {
358         fe_open = 0;
359         remove_fd_in_watch(s);
360     } else {
361         fe_open = 1;
362     }
363     s->chr_can_read = fd_can_read;
364     s->chr_read = fd_read;
365     s->chr_event = fd_event;
366     s->handler_opaque = opaque;
367     if (fe_open && s->chr_update_read_handler)
368         s->chr_update_read_handler(s);
369
370     if (!s->explicit_fe_open) {
371         qemu_chr_fe_set_open(s, fe_open);
372     }
373
374     /* We're connecting to an already opened device, so let's make sure we
375        also get the open event */
376     if (fe_open && s->be_open) {
377         qemu_chr_be_generic_open(s);
378     }
379 }
380
381 static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
382 {
383     return len;
384 }
385
386 static CharDriverState *qemu_chr_open_null(const char *id,
387                                            ChardevBackend *backend,
388                                            ChardevReturn *ret,
389                                            Error **errp)
390 {
391     CharDriverState *chr;
392
393     chr = qemu_chr_alloc();
394     chr->chr_write = null_chr_write;
395     chr->explicit_be_open = true;
396     return chr;
397 }
398
399 /* MUX driver for serial I/O splitting */
400 #define MAX_MUX 4
401 #define MUX_BUFFER_SIZE 32      /* Must be a power of 2.  */
402 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
403 typedef struct {
404     IOCanReadHandler *chr_can_read[MAX_MUX];
405     IOReadHandler *chr_read[MAX_MUX];
406     IOEventHandler *chr_event[MAX_MUX];
407     void *ext_opaque[MAX_MUX];
408     CharDriverState *drv;
409     int focus;
410     int mux_cnt;
411     int term_got_escape;
412     int max_size;
413     /* Intermediate input buffer allows to catch escape sequences even if the
414        currently active device is not accepting any input - but only until it
415        is full as well. */
416     unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE];
417     int prod[MAX_MUX];
418     int cons[MAX_MUX];
419     int timestamps;
420
421     /* Protected by the CharDriverState chr_write_lock.  */
422     int linestart;
423     int64_t timestamps_start;
424 } MuxDriver;
425
426
427 /* Called with chr_write_lock held.  */
428 static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
429 {
430     MuxDriver *d = chr->opaque;
431     int ret;
432     if (!d->timestamps) {
433         ret = qemu_chr_fe_write(d->drv, buf, len);
434     } else {
435         int i;
436
437         ret = 0;
438         for (i = 0; i < len; i++) {
439             if (d->linestart) {
440                 char buf1[64];
441                 int64_t ti;
442                 int secs;
443
444                 ti = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
445                 if (d->timestamps_start == -1)
446                     d->timestamps_start = ti;
447                 ti -= d->timestamps_start;
448                 secs = ti / 1000;
449                 snprintf(buf1, sizeof(buf1),
450                          "[%02d:%02d:%02d.%03d] ",
451                          secs / 3600,
452                          (secs / 60) % 60,
453                          secs % 60,
454                          (int)(ti % 1000));
455                 qemu_chr_fe_write(d->drv, (uint8_t *)buf1, strlen(buf1));
456                 d->linestart = 0;
457             }
458             ret += qemu_chr_fe_write(d->drv, buf+i, 1);
459             if (buf[i] == '\n') {
460                 d->linestart = 1;
461             }
462         }
463     }
464     return ret;
465 }
466
467 static const char * const mux_help[] = {
468     "% h    print this help\n\r",
469     "% x    exit emulator\n\r",
470     "% s    save disk data back to file (if -snapshot)\n\r",
471     "% t    toggle console timestamps\n\r",
472     "% b    send break (magic sysrq)\n\r",
473     "% c    switch between console and monitor\n\r",
474     "% %  sends %\n\r",
475     NULL
476 };
477
478 int term_escape_char = 0x01; /* ctrl-a is used for escape */
479 static void mux_print_help(CharDriverState *chr)
480 {
481     int i, j;
482     char ebuf[15] = "Escape-Char";
483     char cbuf[50] = "\n\r";
484
485     if (term_escape_char > 0 && term_escape_char < 26) {
486         snprintf(cbuf, sizeof(cbuf), "\n\r");
487         snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
488     } else {
489         snprintf(cbuf, sizeof(cbuf),
490                  "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
491                  term_escape_char);
492     }
493     qemu_chr_fe_write(chr, (uint8_t *)cbuf, strlen(cbuf));
494     for (i = 0; mux_help[i] != NULL; i++) {
495         for (j=0; mux_help[i][j] != '\0'; j++) {
496             if (mux_help[i][j] == '%')
497                 qemu_chr_fe_write(chr, (uint8_t *)ebuf, strlen(ebuf));
498             else
499                 qemu_chr_fe_write(chr, (uint8_t *)&mux_help[i][j], 1);
500         }
501     }
502 }
503
504 static void mux_chr_send_event(MuxDriver *d, int mux_nr, int event)
505 {
506     if (d->chr_event[mux_nr])
507         d->chr_event[mux_nr](d->ext_opaque[mux_nr], event);
508 }
509
510 static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
511 {
512     if (d->term_got_escape) {
513         d->term_got_escape = 0;
514         if (ch == term_escape_char)
515             goto send_char;
516         switch(ch) {
517         case '?':
518         case 'h':
519             mux_print_help(chr);
520             break;
521         case 'x':
522             {
523                  const char *term =  "QEMU: Terminated\n\r";
524                  qemu_chr_fe_write(chr, (uint8_t *)term, strlen(term));
525                  exit(0);
526                  break;
527             }
528         case 's':
529             bdrv_commit_all();
530             break;
531         case 'b':
532             qemu_chr_be_event(chr, CHR_EVENT_BREAK);
533             break;
534         case 'c':
535             /* Switch to the next registered device */
536             mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
537             d->focus++;
538             if (d->focus >= d->mux_cnt)
539                 d->focus = 0;
540             mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
541             break;
542         case 't':
543             d->timestamps = !d->timestamps;
544             d->timestamps_start = -1;
545             d->linestart = 0;
546             break;
547         }
548     } else if (ch == term_escape_char) {
549         d->term_got_escape = 1;
550     } else {
551     send_char:
552         return 1;
553     }
554     return 0;
555 }
556
557 static void mux_chr_accept_input(CharDriverState *chr)
558 {
559     MuxDriver *d = chr->opaque;
560     int m = d->focus;
561
562     while (d->prod[m] != d->cons[m] &&
563            d->chr_can_read[m] &&
564            d->chr_can_read[m](d->ext_opaque[m])) {
565         d->chr_read[m](d->ext_opaque[m],
566                        &d->buffer[m][d->cons[m]++ & MUX_BUFFER_MASK], 1);
567     }
568 }
569
570 static int mux_chr_can_read(void *opaque)
571 {
572     CharDriverState *chr = opaque;
573     MuxDriver *d = chr->opaque;
574     int m = d->focus;
575
576     if ((d->prod[m] - d->cons[m]) < MUX_BUFFER_SIZE)
577         return 1;
578     if (d->chr_can_read[m])
579         return d->chr_can_read[m](d->ext_opaque[m]);
580     return 0;
581 }
582
583 static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
584 {
585     CharDriverState *chr = opaque;
586     MuxDriver *d = chr->opaque;
587     int m = d->focus;
588     int i;
589
590     mux_chr_accept_input (opaque);
591
592     for(i = 0; i < size; i++)
593         if (mux_proc_byte(chr, d, buf[i])) {
594             if (d->prod[m] == d->cons[m] &&
595                 d->chr_can_read[m] &&
596                 d->chr_can_read[m](d->ext_opaque[m]))
597                 d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
598             else
599                 d->buffer[m][d->prod[m]++ & MUX_BUFFER_MASK] = buf[i];
600         }
601 }
602
603 static void mux_chr_event(void *opaque, int event)
604 {
605     CharDriverState *chr = opaque;
606     MuxDriver *d = chr->opaque;
607     int i;
608
609     /* Send the event to all registered listeners */
610     for (i = 0; i < d->mux_cnt; i++)
611         mux_chr_send_event(d, i, event);
612 }
613
614 static void mux_chr_update_read_handler(CharDriverState *chr)
615 {
616     MuxDriver *d = chr->opaque;
617
618     if (d->mux_cnt >= MAX_MUX) {
619         fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
620         return;
621     }
622     d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
623     d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
624     d->chr_read[d->mux_cnt] = chr->chr_read;
625     d->chr_event[d->mux_cnt] = chr->chr_event;
626     /* Fix up the real driver with mux routines */
627     if (d->mux_cnt == 0) {
628         qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
629                               mux_chr_event, chr);
630     }
631     if (d->focus != -1) {
632         mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
633     }
634     d->focus = d->mux_cnt;
635     d->mux_cnt++;
636     mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
637 }
638
639 static bool muxes_realized;
640
641 /**
642  * Called after processing of default and command-line-specified
643  * chardevs to deliver CHR_EVENT_OPENED events to any FEs attached
644  * to a mux chardev. This is done here to ensure that
645  * output/prompts/banners are only displayed for the FE that has
646  * focus when initial command-line processing/machine init is
647  * completed.
648  *
649  * After this point, any new FE attached to any new or existing
650  * mux will receive CHR_EVENT_OPENED notifications for the BE
651  * immediately.
652  */
653 static void muxes_realize_done(Notifier *notifier, void *unused)
654 {
655     CharDriverState *chr;
656
657     QTAILQ_FOREACH(chr, &chardevs, next) {
658         if (chr->is_mux) {
659             MuxDriver *d = chr->opaque;
660             int i;
661
662             /* send OPENED to all already-attached FEs */
663             for (i = 0; i < d->mux_cnt; i++) {
664                 mux_chr_send_event(d, i, CHR_EVENT_OPENED);
665             }
666             /* mark mux as OPENED so any new FEs will immediately receive
667              * OPENED event
668              */
669             qemu_chr_be_generic_open(chr);
670         }
671     }
672     muxes_realized = true;
673 }
674
675 static Notifier muxes_realize_notify = {
676     .notify = muxes_realize_done,
677 };
678
679 static GSource *mux_chr_add_watch(CharDriverState *s, GIOCondition cond)
680 {
681     MuxDriver *d = s->opaque;
682     return d->drv->chr_add_watch(d->drv, cond);
683 }
684
685 static CharDriverState *qemu_chr_open_mux(const char *id,
686                                           ChardevBackend *backend,
687                                           ChardevReturn *ret, Error **errp)
688 {
689     ChardevMux *mux = backend->mux;
690     CharDriverState *chr, *drv;
691     MuxDriver *d;
692
693     drv = qemu_chr_find(mux->chardev);
694     if (drv == NULL) {
695         error_setg(errp, "mux: base chardev %s not found", mux->chardev);
696         return NULL;
697     }
698
699     chr = qemu_chr_alloc();
700     d = g_new0(MuxDriver, 1);
701
702     chr->opaque = d;
703     d->drv = drv;
704     d->focus = -1;
705     chr->chr_write = mux_chr_write;
706     chr->chr_update_read_handler = mux_chr_update_read_handler;
707     chr->chr_accept_input = mux_chr_accept_input;
708     /* Frontend guest-open / -close notification is not support with muxes */
709     chr->chr_set_fe_open = NULL;
710     if (drv->chr_add_watch) {
711         chr->chr_add_watch = mux_chr_add_watch;
712     }
713     /* only default to opened state if we've realized the initial
714      * set of muxes
715      */
716     chr->explicit_be_open = muxes_realized ? 0 : 1;
717     chr->is_mux = 1;
718
719     return chr;
720 }
721
722
723 #ifdef _WIN32
724 int send_all(int fd, const void *buf, int len1)
725 {
726     int ret, len;
727
728     len = len1;
729     while (len > 0) {
730         ret = send(fd, buf, len, 0);
731         if (ret < 0) {
732             errno = WSAGetLastError();
733             if (errno != WSAEWOULDBLOCK) {
734                 return -1;
735             }
736         } else if (ret == 0) {
737             break;
738         } else {
739             buf += ret;
740             len -= ret;
741         }
742     }
743     return len1 - len;
744 }
745
746 #else
747
748 int send_all(int fd, const void *_buf, int len1)
749 {
750     int ret, len;
751     const uint8_t *buf = _buf;
752
753     len = len1;
754     while (len > 0) {
755         ret = write(fd, buf, len);
756         if (ret < 0) {
757             if (errno != EINTR && errno != EAGAIN)
758                 return -1;
759         } else if (ret == 0) {
760             break;
761         } else {
762             buf += ret;
763             len -= ret;
764         }
765     }
766     return len1 - len;
767 }
768
769 int recv_all(int fd, void *_buf, int len1, bool single_read)
770 {
771     int ret, len;
772     uint8_t *buf = _buf;
773
774     len = len1;
775     while ((len > 0) && (ret = read(fd, buf, len)) != 0) {
776         if (ret < 0) {
777             if (errno != EINTR && errno != EAGAIN) {
778                 return -1;
779             }
780             continue;
781         } else {
782             if (single_read) {
783                 return ret;
784             }
785             buf += ret;
786             len -= ret;
787         }
788     }
789     return len1 - len;
790 }
791
792 #endif /* !_WIN32 */
793
794 typedef struct IOWatchPoll
795 {
796     GSource parent;
797
798     GIOChannel *channel;
799     GSource *src;
800
801     IOCanReadHandler *fd_can_read;
802     GSourceFunc fd_read;
803     void *opaque;
804 } IOWatchPoll;
805
806 static IOWatchPoll *io_watch_poll_from_source(GSource *source)
807 {
808     return container_of(source, IOWatchPoll, parent);
809 }
810
811 static gboolean io_watch_poll_prepare(GSource *source, gint *timeout_)
812 {
813     IOWatchPoll *iwp = io_watch_poll_from_source(source);
814     bool now_active = iwp->fd_can_read(iwp->opaque) > 0;
815     bool was_active = iwp->src != NULL;
816     if (was_active == now_active) {
817         return FALSE;
818     }
819
820     if (now_active) {
821         iwp->src = g_io_create_watch(iwp->channel,
822                                      G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL);
823         g_source_set_callback(iwp->src, iwp->fd_read, iwp->opaque, NULL);
824         g_source_attach(iwp->src, NULL);
825     } else {
826         g_source_destroy(iwp->src);
827         g_source_unref(iwp->src);
828         iwp->src = NULL;
829     }
830     return FALSE;
831 }
832
833 static gboolean io_watch_poll_check(GSource *source)
834 {
835     return FALSE;
836 }
837
838 static gboolean io_watch_poll_dispatch(GSource *source, GSourceFunc callback,
839                                        gpointer user_data)
840 {
841     abort();
842 }
843
844 static void io_watch_poll_finalize(GSource *source)
845 {
846     /* Due to a glib bug, removing the last reference to a source
847      * inside a finalize callback causes recursive locking (and a
848      * deadlock).  This is not a problem inside other callbacks,
849      * including dispatch callbacks, so we call io_remove_watch_poll
850      * to remove this source.  At this point, iwp->src must
851      * be NULL, or we would leak it.
852      *
853      * This would be solved much more elegantly by child sources,
854      * but we support older glib versions that do not have them.
855      */
856     IOWatchPoll *iwp = io_watch_poll_from_source(source);
857     assert(iwp->src == NULL);
858 }
859
860 static GSourceFuncs io_watch_poll_funcs = {
861     .prepare = io_watch_poll_prepare,
862     .check = io_watch_poll_check,
863     .dispatch = io_watch_poll_dispatch,
864     .finalize = io_watch_poll_finalize,
865 };
866
867 /* Can only be used for read */
868 static guint io_add_watch_poll(GIOChannel *channel,
869                                IOCanReadHandler *fd_can_read,
870                                GIOFunc fd_read,
871                                gpointer user_data)
872 {
873     IOWatchPoll *iwp;
874     int tag;
875
876     iwp = (IOWatchPoll *) g_source_new(&io_watch_poll_funcs, sizeof(IOWatchPoll));
877     iwp->fd_can_read = fd_can_read;
878     iwp->opaque = user_data;
879     iwp->channel = channel;
880     iwp->fd_read = (GSourceFunc) fd_read;
881     iwp->src = NULL;
882
883     tag = g_source_attach(&iwp->parent, NULL);
884     g_source_unref(&iwp->parent);
885     return tag;
886 }
887
888 static void io_remove_watch_poll(guint tag)
889 {
890     GSource *source;
891     IOWatchPoll *iwp;
892
893     g_return_if_fail (tag > 0);
894
895     source = g_main_context_find_source_by_id(NULL, tag);
896     g_return_if_fail (source != NULL);
897
898     iwp = io_watch_poll_from_source(source);
899     if (iwp->src) {
900         g_source_destroy(iwp->src);
901         g_source_unref(iwp->src);
902         iwp->src = NULL;
903     }
904     g_source_destroy(&iwp->parent);
905 }
906
907 static void remove_fd_in_watch(CharDriverState *chr)
908 {
909     if (chr->fd_in_tag) {
910         io_remove_watch_poll(chr->fd_in_tag);
911         chr->fd_in_tag = 0;
912     }
913 }
914
915 #ifndef _WIN32
916 static GIOChannel *io_channel_from_fd(int fd)
917 {
918     GIOChannel *chan;
919
920     if (fd == -1) {
921         return NULL;
922     }
923
924     chan = g_io_channel_unix_new(fd);
925
926     g_io_channel_set_encoding(chan, NULL, NULL);
927     g_io_channel_set_buffered(chan, FALSE);
928
929     return chan;
930 }
931 #endif
932
933 static GIOChannel *io_channel_from_socket(int fd)
934 {
935     GIOChannel *chan;
936
937     if (fd == -1) {
938         return NULL;
939     }
940
941 #ifdef _WIN32
942     chan = g_io_channel_win32_new_socket(fd);
943 #else
944     chan = g_io_channel_unix_new(fd);
945 #endif
946
947     g_io_channel_set_encoding(chan, NULL, NULL);
948     g_io_channel_set_buffered(chan, FALSE);
949
950     return chan;
951 }
952
953 static int io_channel_send(GIOChannel *fd, const void *buf, size_t len)
954 {
955     size_t offset = 0;
956     GIOStatus status = G_IO_STATUS_NORMAL;
957
958     while (offset < len && status == G_IO_STATUS_NORMAL) {
959         gsize bytes_written = 0;
960
961         status = g_io_channel_write_chars(fd, buf + offset, len - offset,
962                                           &bytes_written, NULL);
963         offset += bytes_written;
964     }
965
966     if (offset > 0) {
967         return offset;
968     }
969     switch (status) {
970     case G_IO_STATUS_NORMAL:
971         g_assert(len == 0);
972         return 0;
973     case G_IO_STATUS_AGAIN:
974         errno = EAGAIN;
975         return -1;
976     default:
977         break;
978     }
979     errno = EINVAL;
980     return -1;
981 }
982
983 #ifndef _WIN32
984
985 typedef struct FDCharDriver {
986     CharDriverState *chr;
987     GIOChannel *fd_in, *fd_out;
988     int max_size;
989 } FDCharDriver;
990
991 /* Called with chr_write_lock held.  */
992 static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
993 {
994     FDCharDriver *s = chr->opaque;
995     
996     return io_channel_send(s->fd_out, buf, len);
997 }
998
999 static gboolean fd_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
1000 {
1001     CharDriverState *chr = opaque;
1002     FDCharDriver *s = chr->opaque;
1003     int len;
1004     uint8_t buf[READ_BUF_LEN];
1005     GIOStatus status;
1006     gsize bytes_read;
1007
1008     len = sizeof(buf);
1009     if (len > s->max_size) {
1010         len = s->max_size;
1011     }
1012     if (len == 0) {
1013         return TRUE;
1014     }
1015
1016     status = g_io_channel_read_chars(chan, (gchar *)buf,
1017                                      len, &bytes_read, NULL);
1018     if (status == G_IO_STATUS_EOF) {
1019         remove_fd_in_watch(chr);
1020         qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1021         return FALSE;
1022     }
1023     if (status == G_IO_STATUS_NORMAL) {
1024         qemu_chr_be_write(chr, buf, bytes_read);
1025     }
1026
1027     return TRUE;
1028 }
1029
1030 static int fd_chr_read_poll(void *opaque)
1031 {
1032     CharDriverState *chr = opaque;
1033     FDCharDriver *s = chr->opaque;
1034
1035     s->max_size = qemu_chr_be_can_write(chr);
1036     return s->max_size;
1037 }
1038
1039 static GSource *fd_chr_add_watch(CharDriverState *chr, GIOCondition cond)
1040 {
1041     FDCharDriver *s = chr->opaque;
1042     return g_io_create_watch(s->fd_out, cond);
1043 }
1044
1045 static void fd_chr_update_read_handler(CharDriverState *chr)
1046 {
1047     FDCharDriver *s = chr->opaque;
1048
1049     remove_fd_in_watch(chr);
1050     if (s->fd_in) {
1051         chr->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll,
1052                                            fd_chr_read, chr);
1053     }
1054 }
1055
1056 static void fd_chr_close(struct CharDriverState *chr)
1057 {
1058     FDCharDriver *s = chr->opaque;
1059
1060     remove_fd_in_watch(chr);
1061     if (s->fd_in) {
1062         g_io_channel_unref(s->fd_in);
1063     }
1064     if (s->fd_out) {
1065         g_io_channel_unref(s->fd_out);
1066     }
1067
1068     g_free(s);
1069     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1070 }
1071
1072 /* open a character device to a unix fd */
1073 static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
1074 {
1075     CharDriverState *chr;
1076     FDCharDriver *s;
1077
1078     chr = qemu_chr_alloc();
1079     s = g_new0(FDCharDriver, 1);
1080     s->fd_in = io_channel_from_fd(fd_in);
1081     s->fd_out = io_channel_from_fd(fd_out);
1082     qemu_set_nonblock(fd_out);
1083     s->chr = chr;
1084     chr->opaque = s;
1085     chr->chr_add_watch = fd_chr_add_watch;
1086     chr->chr_write = fd_chr_write;
1087     chr->chr_update_read_handler = fd_chr_update_read_handler;
1088     chr->chr_close = fd_chr_close;
1089
1090     return chr;
1091 }
1092
1093 static CharDriverState *qemu_chr_open_pipe(const char *id,
1094                                            ChardevBackend *backend,
1095                                            ChardevReturn *ret,
1096                                            Error **errp)
1097 {
1098     ChardevHostdev *opts = backend->pipe;
1099     int fd_in, fd_out;
1100     char filename_in[CHR_MAX_FILENAME_SIZE];
1101     char filename_out[CHR_MAX_FILENAME_SIZE];
1102     const char *filename = opts->device;
1103
1104     snprintf(filename_in, CHR_MAX_FILENAME_SIZE, "%s.in", filename);
1105     snprintf(filename_out, CHR_MAX_FILENAME_SIZE, "%s.out", filename);
1106     TFR(fd_in = qemu_open(filename_in, O_RDWR | O_BINARY));
1107     TFR(fd_out = qemu_open(filename_out, O_RDWR | O_BINARY));
1108     if (fd_in < 0 || fd_out < 0) {
1109         if (fd_in >= 0)
1110             close(fd_in);
1111         if (fd_out >= 0)
1112             close(fd_out);
1113         TFR(fd_in = fd_out = qemu_open(filename, O_RDWR | O_BINARY));
1114         if (fd_in < 0) {
1115             error_setg_file_open(errp, errno, filename);
1116             return NULL;
1117         }
1118     }
1119     return qemu_chr_open_fd(fd_in, fd_out);
1120 }
1121
1122 /* init terminal so that we can grab keys */
1123 static struct termios oldtty;
1124 static int old_fd0_flags;
1125 static bool stdio_in_use;
1126 static bool stdio_allow_signal;
1127 static bool stdio_echo_state;
1128
1129 static void qemu_chr_set_echo_stdio(CharDriverState *chr, bool echo);
1130
1131 static void term_exit(void)
1132 {
1133     tcsetattr (0, TCSANOW, &oldtty);
1134     fcntl(0, F_SETFL, old_fd0_flags);
1135 }
1136
1137 static void term_stdio_handler(int sig)
1138 {
1139     /* restore echo after resume from suspend. */
1140     qemu_chr_set_echo_stdio(NULL, stdio_echo_state);
1141 }
1142
1143 static void qemu_chr_set_echo_stdio(CharDriverState *chr, bool echo)
1144 {
1145     struct termios tty;
1146
1147     stdio_echo_state = echo;
1148     tty = oldtty;
1149     if (!echo) {
1150         tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1151                           |INLCR|IGNCR|ICRNL|IXON);
1152         tty.c_oflag |= OPOST;
1153         tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
1154         tty.c_cflag &= ~(CSIZE|PARENB);
1155         tty.c_cflag |= CS8;
1156         tty.c_cc[VMIN] = 1;
1157         tty.c_cc[VTIME] = 0;
1158     }
1159     if (!stdio_allow_signal)
1160         tty.c_lflag &= ~ISIG;
1161
1162     tcsetattr (0, TCSANOW, &tty);
1163 }
1164
1165 static void qemu_chr_close_stdio(struct CharDriverState *chr)
1166 {
1167     term_exit();
1168     fd_chr_close(chr);
1169 }
1170
1171 static CharDriverState *qemu_chr_open_stdio(const char *id,
1172                                             ChardevBackend *backend,
1173                                             ChardevReturn *ret,
1174                                             Error **errp)
1175 {
1176     ChardevStdio *opts = backend->stdio;
1177     CharDriverState *chr;
1178     struct sigaction act;
1179
1180     if (is_daemonized()) {
1181         error_setg(errp, "cannot use stdio with -daemonize");
1182         return NULL;
1183     }
1184
1185     if (stdio_in_use) {
1186         error_setg(errp, "cannot use stdio by multiple character devices");
1187         return NULL;
1188     }
1189
1190     stdio_in_use = true;
1191     old_fd0_flags = fcntl(0, F_GETFL);
1192     tcgetattr(0, &oldtty);
1193     qemu_set_nonblock(0);
1194     atexit(term_exit);
1195
1196     memset(&act, 0, sizeof(act));
1197     act.sa_handler = term_stdio_handler;
1198     sigaction(SIGCONT, &act, NULL);
1199
1200     chr = qemu_chr_open_fd(0, 1);
1201     chr->chr_close = qemu_chr_close_stdio;
1202     chr->chr_set_echo = qemu_chr_set_echo_stdio;
1203     if (opts->has_signal) {
1204         stdio_allow_signal = opts->signal;
1205     }
1206     qemu_chr_fe_set_echo(chr, false);
1207
1208     return chr;
1209 }
1210
1211 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
1212     || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
1213     || defined(__GLIBC__)
1214
1215 #define HAVE_CHARDEV_SERIAL 1
1216 #define HAVE_CHARDEV_PTY 1
1217
1218 typedef struct {
1219     GIOChannel *fd;
1220     int read_bytes;
1221
1222     /* Protected by the CharDriverState chr_write_lock.  */
1223     int connected;
1224     guint timer_tag;
1225     guint open_tag;
1226 } PtyCharDriver;
1227
1228 static void pty_chr_update_read_handler_locked(CharDriverState *chr);
1229 static void pty_chr_state(CharDriverState *chr, int connected);
1230
1231 static gboolean pty_chr_timer(gpointer opaque)
1232 {
1233     struct CharDriverState *chr = opaque;
1234     PtyCharDriver *s = chr->opaque;
1235
1236     qemu_mutex_lock(&chr->chr_write_lock);
1237     s->timer_tag = 0;
1238     s->open_tag = 0;
1239     if (!s->connected) {
1240         /* Next poll ... */
1241         pty_chr_update_read_handler_locked(chr);
1242     }
1243     qemu_mutex_unlock(&chr->chr_write_lock);
1244     return FALSE;
1245 }
1246
1247 /* Called with chr_write_lock held.  */
1248 static void pty_chr_rearm_timer(CharDriverState *chr, int ms)
1249 {
1250     PtyCharDriver *s = chr->opaque;
1251
1252     if (s->timer_tag) {
1253         g_source_remove(s->timer_tag);
1254         s->timer_tag = 0;
1255     }
1256
1257     if (ms == 1000) {
1258         s->timer_tag = g_timeout_add_seconds(1, pty_chr_timer, chr);
1259     } else {
1260         s->timer_tag = g_timeout_add(ms, pty_chr_timer, chr);
1261     }
1262 }
1263
1264 /* Called with chr_write_lock held.  */
1265 static void pty_chr_update_read_handler_locked(CharDriverState *chr)
1266 {
1267     PtyCharDriver *s = chr->opaque;
1268     GPollFD pfd;
1269
1270     pfd.fd = g_io_channel_unix_get_fd(s->fd);
1271     pfd.events = G_IO_OUT;
1272     pfd.revents = 0;
1273     g_poll(&pfd, 1, 0);
1274     if (pfd.revents & G_IO_HUP) {
1275         pty_chr_state(chr, 0);
1276     } else {
1277         pty_chr_state(chr, 1);
1278     }
1279 }
1280
1281 static void pty_chr_update_read_handler(CharDriverState *chr)
1282 {
1283     qemu_mutex_lock(&chr->chr_write_lock);
1284     pty_chr_update_read_handler_locked(chr);
1285     qemu_mutex_unlock(&chr->chr_write_lock);
1286 }
1287
1288 /* Called with chr_write_lock held.  */
1289 static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1290 {
1291     PtyCharDriver *s = chr->opaque;
1292
1293     if (!s->connected) {
1294         /* guest sends data, check for (re-)connect */
1295         pty_chr_update_read_handler_locked(chr);
1296         if (!s->connected) {
1297             return 0;
1298         }
1299     }
1300     return io_channel_send(s->fd, buf, len);
1301 }
1302
1303 static GSource *pty_chr_add_watch(CharDriverState *chr, GIOCondition cond)
1304 {
1305     PtyCharDriver *s = chr->opaque;
1306     if (!s->connected) {
1307         return NULL;
1308     }
1309     return g_io_create_watch(s->fd, cond);
1310 }
1311
1312 static int pty_chr_read_poll(void *opaque)
1313 {
1314     CharDriverState *chr = opaque;
1315     PtyCharDriver *s = chr->opaque;
1316
1317     s->read_bytes = qemu_chr_be_can_write(chr);
1318     return s->read_bytes;
1319 }
1320
1321 static gboolean pty_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
1322 {
1323     CharDriverState *chr = opaque;
1324     PtyCharDriver *s = chr->opaque;
1325     gsize size, len;
1326     uint8_t buf[READ_BUF_LEN];
1327     GIOStatus status;
1328
1329     len = sizeof(buf);
1330     if (len > s->read_bytes)
1331         len = s->read_bytes;
1332     if (len == 0) {
1333         return TRUE;
1334     }
1335     status = g_io_channel_read_chars(s->fd, (gchar *)buf, len, &size, NULL);
1336     if (status != G_IO_STATUS_NORMAL) {
1337         pty_chr_state(chr, 0);
1338         return FALSE;
1339     } else {
1340         pty_chr_state(chr, 1);
1341         qemu_chr_be_write(chr, buf, size);
1342     }
1343     return TRUE;
1344 }
1345
1346 static gboolean qemu_chr_be_generic_open_func(gpointer opaque)
1347 {
1348     CharDriverState *chr = opaque;
1349     PtyCharDriver *s = chr->opaque;
1350
1351     s->open_tag = 0;
1352     qemu_chr_be_generic_open(chr);
1353     return FALSE;
1354 }
1355
1356 /* Called with chr_write_lock held.  */
1357 static void pty_chr_state(CharDriverState *chr, int connected)
1358 {
1359     PtyCharDriver *s = chr->opaque;
1360
1361     if (!connected) {
1362         if (s->open_tag) {
1363             g_source_remove(s->open_tag);
1364             s->open_tag = 0;
1365         }
1366         remove_fd_in_watch(chr);
1367         s->connected = 0;
1368         /* (re-)connect poll interval for idle guests: once per second.
1369          * We check more frequently in case the guests sends data to
1370          * the virtual device linked to our pty. */
1371         pty_chr_rearm_timer(chr, 1000);
1372     } else {
1373         if (s->timer_tag) {
1374             g_source_remove(s->timer_tag);
1375             s->timer_tag = 0;
1376         }
1377         if (!s->connected) {
1378             g_assert(s->open_tag == 0);
1379             s->connected = 1;
1380             s->open_tag = g_idle_add(qemu_chr_be_generic_open_func, chr);
1381         }
1382         if (!chr->fd_in_tag) {
1383             chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll,
1384                                                pty_chr_read, chr);
1385         }
1386     }
1387 }
1388
1389 static void pty_chr_close(struct CharDriverState *chr)
1390 {
1391     PtyCharDriver *s = chr->opaque;
1392     int fd;
1393
1394     qemu_mutex_lock(&chr->chr_write_lock);
1395     pty_chr_state(chr, 0);
1396     fd = g_io_channel_unix_get_fd(s->fd);
1397     g_io_channel_unref(s->fd);
1398     close(fd);
1399     if (s->timer_tag) {
1400         g_source_remove(s->timer_tag);
1401         s->timer_tag = 0;
1402     }
1403     qemu_mutex_unlock(&chr->chr_write_lock);
1404     g_free(s);
1405     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1406 }
1407
1408 static CharDriverState *qemu_chr_open_pty(const char *id,
1409                                           ChardevBackend *backend,
1410                                           ChardevReturn *ret,
1411                                           Error **errp)
1412 {
1413     CharDriverState *chr;
1414     PtyCharDriver *s;
1415     int master_fd, slave_fd;
1416     char pty_name[PATH_MAX];
1417
1418     master_fd = qemu_openpty_raw(&slave_fd, pty_name);
1419     if (master_fd < 0) {
1420         error_setg_errno(errp, errno, "Failed to create PTY");
1421         return NULL;
1422     }
1423
1424     close(slave_fd);
1425     qemu_set_nonblock(master_fd);
1426
1427     chr = qemu_chr_alloc();
1428
1429     chr->filename = g_strdup_printf("pty:%s", pty_name);
1430     ret->pty = g_strdup(pty_name);
1431     ret->has_pty = true;
1432
1433     fprintf(stderr, "char device redirected to %s (label %s)\n",
1434             pty_name, id);
1435
1436     s = g_new0(PtyCharDriver, 1);
1437     chr->opaque = s;
1438     chr->chr_write = pty_chr_write;
1439     chr->chr_update_read_handler = pty_chr_update_read_handler;
1440     chr->chr_close = pty_chr_close;
1441     chr->chr_add_watch = pty_chr_add_watch;
1442     chr->explicit_be_open = true;
1443
1444     s->fd = io_channel_from_fd(master_fd);
1445     s->timer_tag = 0;
1446
1447     return chr;
1448 }
1449
1450 static void tty_serial_init(int fd, int speed,
1451                             int parity, int data_bits, int stop_bits)
1452 {
1453     struct termios tty;
1454     speed_t spd;
1455
1456 #if 0
1457     printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
1458            speed, parity, data_bits, stop_bits);
1459 #endif
1460     tcgetattr (fd, &tty);
1461
1462 #define check_speed(val) if (speed <= val) { spd = B##val; break; }
1463     speed = speed * 10 / 11;
1464     do {
1465         check_speed(50);
1466         check_speed(75);
1467         check_speed(110);
1468         check_speed(134);
1469         check_speed(150);
1470         check_speed(200);
1471         check_speed(300);
1472         check_speed(600);
1473         check_speed(1200);
1474         check_speed(1800);
1475         check_speed(2400);
1476         check_speed(4800);
1477         check_speed(9600);
1478         check_speed(19200);
1479         check_speed(38400);
1480         /* Non-Posix values follow. They may be unsupported on some systems. */
1481         check_speed(57600);
1482         check_speed(115200);
1483 #ifdef B230400
1484         check_speed(230400);
1485 #endif
1486 #ifdef B460800
1487         check_speed(460800);
1488 #endif
1489 #ifdef B500000
1490         check_speed(500000);
1491 #endif
1492 #ifdef B576000
1493         check_speed(576000);
1494 #endif
1495 #ifdef B921600
1496         check_speed(921600);
1497 #endif
1498 #ifdef B1000000
1499         check_speed(1000000);
1500 #endif
1501 #ifdef B1152000
1502         check_speed(1152000);
1503 #endif
1504 #ifdef B1500000
1505         check_speed(1500000);
1506 #endif
1507 #ifdef B2000000
1508         check_speed(2000000);
1509 #endif
1510 #ifdef B2500000
1511         check_speed(2500000);
1512 #endif
1513 #ifdef B3000000
1514         check_speed(3000000);
1515 #endif
1516 #ifdef B3500000
1517         check_speed(3500000);
1518 #endif
1519 #ifdef B4000000
1520         check_speed(4000000);
1521 #endif
1522         spd = B115200;
1523     } while (0);
1524
1525     cfsetispeed(&tty, spd);
1526     cfsetospeed(&tty, spd);
1527
1528     tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1529                           |INLCR|IGNCR|ICRNL|IXON);
1530     tty.c_oflag |= OPOST;
1531     tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
1532     tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
1533     switch(data_bits) {
1534     default:
1535     case 8:
1536         tty.c_cflag |= CS8;
1537         break;
1538     case 7:
1539         tty.c_cflag |= CS7;
1540         break;
1541     case 6:
1542         tty.c_cflag |= CS6;
1543         break;
1544     case 5:
1545         tty.c_cflag |= CS5;
1546         break;
1547     }
1548     switch(parity) {
1549     default:
1550     case 'N':
1551         break;
1552     case 'E':
1553         tty.c_cflag |= PARENB;
1554         break;
1555     case 'O':
1556         tty.c_cflag |= PARENB | PARODD;
1557         break;
1558     }
1559     if (stop_bits == 2)
1560         tty.c_cflag |= CSTOPB;
1561
1562     tcsetattr (fd, TCSANOW, &tty);
1563 }
1564
1565 static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
1566 {
1567     FDCharDriver *s = chr->opaque;
1568
1569     switch(cmd) {
1570     case CHR_IOCTL_SERIAL_SET_PARAMS:
1571         {
1572             QEMUSerialSetParams *ssp = arg;
1573             tty_serial_init(g_io_channel_unix_get_fd(s->fd_in),
1574                             ssp->speed, ssp->parity,
1575                             ssp->data_bits, ssp->stop_bits);
1576         }
1577         break;
1578     case CHR_IOCTL_SERIAL_SET_BREAK:
1579         {
1580             int enable = *(int *)arg;
1581             if (enable) {
1582                 tcsendbreak(g_io_channel_unix_get_fd(s->fd_in), 1);
1583             }
1584         }
1585         break;
1586     case CHR_IOCTL_SERIAL_GET_TIOCM:
1587         {
1588             int sarg = 0;
1589             int *targ = (int *)arg;
1590             ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &sarg);
1591             *targ = 0;
1592             if (sarg & TIOCM_CTS)
1593                 *targ |= CHR_TIOCM_CTS;
1594             if (sarg & TIOCM_CAR)
1595                 *targ |= CHR_TIOCM_CAR;
1596             if (sarg & TIOCM_DSR)
1597                 *targ |= CHR_TIOCM_DSR;
1598             if (sarg & TIOCM_RI)
1599                 *targ |= CHR_TIOCM_RI;
1600             if (sarg & TIOCM_DTR)
1601                 *targ |= CHR_TIOCM_DTR;
1602             if (sarg & TIOCM_RTS)
1603                 *targ |= CHR_TIOCM_RTS;
1604         }
1605         break;
1606     case CHR_IOCTL_SERIAL_SET_TIOCM:
1607         {
1608             int sarg = *(int *)arg;
1609             int targ = 0;
1610             ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &targ);
1611             targ &= ~(CHR_TIOCM_CTS | CHR_TIOCM_CAR | CHR_TIOCM_DSR
1612                      | CHR_TIOCM_RI | CHR_TIOCM_DTR | CHR_TIOCM_RTS);
1613             if (sarg & CHR_TIOCM_CTS)
1614                 targ |= TIOCM_CTS;
1615             if (sarg & CHR_TIOCM_CAR)
1616                 targ |= TIOCM_CAR;
1617             if (sarg & CHR_TIOCM_DSR)
1618                 targ |= TIOCM_DSR;
1619             if (sarg & CHR_TIOCM_RI)
1620                 targ |= TIOCM_RI;
1621             if (sarg & CHR_TIOCM_DTR)
1622                 targ |= TIOCM_DTR;
1623             if (sarg & CHR_TIOCM_RTS)
1624                 targ |= TIOCM_RTS;
1625             ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMSET, &targ);
1626         }
1627         break;
1628     default:
1629         return -ENOTSUP;
1630     }
1631     return 0;
1632 }
1633
1634 static void qemu_chr_close_tty(CharDriverState *chr)
1635 {
1636     FDCharDriver *s = chr->opaque;
1637     int fd = -1;
1638
1639     if (s) {
1640         fd = g_io_channel_unix_get_fd(s->fd_in);
1641     }
1642
1643     fd_chr_close(chr);
1644
1645     if (fd >= 0) {
1646         close(fd);
1647     }
1648 }
1649
1650 static CharDriverState *qemu_chr_open_tty_fd(int fd)
1651 {
1652     CharDriverState *chr;
1653
1654     tty_serial_init(fd, 115200, 'N', 8, 1);
1655     chr = qemu_chr_open_fd(fd, fd);
1656     chr->chr_ioctl = tty_serial_ioctl;
1657     chr->chr_close = qemu_chr_close_tty;
1658     return chr;
1659 }
1660 #endif /* __linux__ || __sun__ */
1661
1662 #if defined(__linux__)
1663
1664 #define HAVE_CHARDEV_PARPORT 1
1665
1666 typedef struct {
1667     int fd;
1668     int mode;
1669 } ParallelCharDriver;
1670
1671 static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
1672 {
1673     if (s->mode != mode) {
1674         int m = mode;
1675         if (ioctl(s->fd, PPSETMODE, &m) < 0)
1676             return 0;
1677         s->mode = mode;
1678     }
1679     return 1;
1680 }
1681
1682 static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1683 {
1684     ParallelCharDriver *drv = chr->opaque;
1685     int fd = drv->fd;
1686     uint8_t b;
1687
1688     switch(cmd) {
1689     case CHR_IOCTL_PP_READ_DATA:
1690         if (ioctl(fd, PPRDATA, &b) < 0)
1691             return -ENOTSUP;
1692         *(uint8_t *)arg = b;
1693         break;
1694     case CHR_IOCTL_PP_WRITE_DATA:
1695         b = *(uint8_t *)arg;
1696         if (ioctl(fd, PPWDATA, &b) < 0)
1697             return -ENOTSUP;
1698         break;
1699     case CHR_IOCTL_PP_READ_CONTROL:
1700         if (ioctl(fd, PPRCONTROL, &b) < 0)
1701             return -ENOTSUP;
1702         /* Linux gives only the lowest bits, and no way to know data
1703            direction! For better compatibility set the fixed upper
1704            bits. */
1705         *(uint8_t *)arg = b | 0xc0;
1706         break;
1707     case CHR_IOCTL_PP_WRITE_CONTROL:
1708         b = *(uint8_t *)arg;
1709         if (ioctl(fd, PPWCONTROL, &b) < 0)
1710             return -ENOTSUP;
1711         break;
1712     case CHR_IOCTL_PP_READ_STATUS:
1713         if (ioctl(fd, PPRSTATUS, &b) < 0)
1714             return -ENOTSUP;
1715         *(uint8_t *)arg = b;
1716         break;
1717     case CHR_IOCTL_PP_DATA_DIR:
1718         if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
1719             return -ENOTSUP;
1720         break;
1721     case CHR_IOCTL_PP_EPP_READ_ADDR:
1722         if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1723             struct ParallelIOArg *parg = arg;
1724             int n = read(fd, parg->buffer, parg->count);
1725             if (n != parg->count) {
1726                 return -EIO;
1727             }
1728         }
1729         break;
1730     case CHR_IOCTL_PP_EPP_READ:
1731         if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1732             struct ParallelIOArg *parg = arg;
1733             int n = read(fd, parg->buffer, parg->count);
1734             if (n != parg->count) {
1735                 return -EIO;
1736             }
1737         }
1738         break;
1739     case CHR_IOCTL_PP_EPP_WRITE_ADDR:
1740         if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1741             struct ParallelIOArg *parg = arg;
1742             int n = write(fd, parg->buffer, parg->count);
1743             if (n != parg->count) {
1744                 return -EIO;
1745             }
1746         }
1747         break;
1748     case CHR_IOCTL_PP_EPP_WRITE:
1749         if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1750             struct ParallelIOArg *parg = arg;
1751             int n = write(fd, parg->buffer, parg->count);
1752             if (n != parg->count) {
1753                 return -EIO;
1754             }
1755         }
1756         break;
1757     default:
1758         return -ENOTSUP;
1759     }
1760     return 0;
1761 }
1762
1763 static void pp_close(CharDriverState *chr)
1764 {
1765     ParallelCharDriver *drv = chr->opaque;
1766     int fd = drv->fd;
1767
1768     pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
1769     ioctl(fd, PPRELEASE);
1770     close(fd);
1771     g_free(drv);
1772     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1773 }
1774
1775 static CharDriverState *qemu_chr_open_pp_fd(int fd, Error **errp)
1776 {
1777     CharDriverState *chr;
1778     ParallelCharDriver *drv;
1779
1780     if (ioctl(fd, PPCLAIM) < 0) {
1781         error_setg_errno(errp, errno, "not a parallel port");
1782         close(fd);
1783         return NULL;
1784     }
1785
1786     drv = g_new0(ParallelCharDriver, 1);
1787     drv->fd = fd;
1788     drv->mode = IEEE1284_MODE_COMPAT;
1789
1790     chr = qemu_chr_alloc();
1791     chr->chr_write = null_chr_write;
1792     chr->chr_ioctl = pp_ioctl;
1793     chr->chr_close = pp_close;
1794     chr->opaque = drv;
1795
1796     return chr;
1797 }
1798 #endif /* __linux__ */
1799
1800 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
1801
1802 #define HAVE_CHARDEV_PARPORT 1
1803
1804 static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1805 {
1806     int fd = (int)(intptr_t)chr->opaque;
1807     uint8_t b;
1808
1809     switch(cmd) {
1810     case CHR_IOCTL_PP_READ_DATA:
1811         if (ioctl(fd, PPIGDATA, &b) < 0)
1812             return -ENOTSUP;
1813         *(uint8_t *)arg = b;
1814         break;
1815     case CHR_IOCTL_PP_WRITE_DATA:
1816         b = *(uint8_t *)arg;
1817         if (ioctl(fd, PPISDATA, &b) < 0)
1818             return -ENOTSUP;
1819         break;
1820     case CHR_IOCTL_PP_READ_CONTROL:
1821         if (ioctl(fd, PPIGCTRL, &b) < 0)
1822             return -ENOTSUP;
1823         *(uint8_t *)arg = b;
1824         break;
1825     case CHR_IOCTL_PP_WRITE_CONTROL:
1826         b = *(uint8_t *)arg;
1827         if (ioctl(fd, PPISCTRL, &b) < 0)
1828             return -ENOTSUP;
1829         break;
1830     case CHR_IOCTL_PP_READ_STATUS:
1831         if (ioctl(fd, PPIGSTATUS, &b) < 0)
1832             return -ENOTSUP;
1833         *(uint8_t *)arg = b;
1834         break;
1835     default:
1836         return -ENOTSUP;
1837     }
1838     return 0;
1839 }
1840
1841 static CharDriverState *qemu_chr_open_pp_fd(int fd, Error **errp)
1842 {
1843     CharDriverState *chr;
1844
1845     chr = qemu_chr_alloc();
1846     chr->opaque = (void *)(intptr_t)fd;
1847     chr->chr_write = null_chr_write;
1848     chr->chr_ioctl = pp_ioctl;
1849     chr->explicit_be_open = true;
1850     return chr;
1851 }
1852 #endif
1853
1854 #else /* _WIN32 */
1855
1856 #define HAVE_CHARDEV_SERIAL 1
1857
1858 typedef struct {
1859     int max_size;
1860     HANDLE hcom, hrecv, hsend;
1861     OVERLAPPED orecv;
1862     BOOL fpipe;
1863     DWORD len;
1864
1865     /* Protected by the CharDriverState chr_write_lock.  */
1866     OVERLAPPED osend;
1867 } WinCharState;
1868
1869 typedef struct {
1870     HANDLE  hStdIn;
1871     HANDLE  hInputReadyEvent;
1872     HANDLE  hInputDoneEvent;
1873     HANDLE  hInputThread;
1874     uint8_t win_stdio_buf;
1875 } WinStdioCharState;
1876
1877 #define NSENDBUF 2048
1878 #define NRECVBUF 2048
1879 #define MAXCONNECT 1
1880 #define NTIMEOUT 5000
1881
1882 static int win_chr_poll(void *opaque);
1883 static int win_chr_pipe_poll(void *opaque);
1884
1885 static void win_chr_close(CharDriverState *chr)
1886 {
1887     WinCharState *s = chr->opaque;
1888
1889     if (s->hsend) {
1890         CloseHandle(s->hsend);
1891         s->hsend = NULL;
1892     }
1893     if (s->hrecv) {
1894         CloseHandle(s->hrecv);
1895         s->hrecv = NULL;
1896     }
1897     if (s->hcom) {
1898         CloseHandle(s->hcom);
1899         s->hcom = NULL;
1900     }
1901     if (s->fpipe)
1902         qemu_del_polling_cb(win_chr_pipe_poll, chr);
1903     else
1904         qemu_del_polling_cb(win_chr_poll, chr);
1905
1906     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1907 }
1908
1909 static int win_chr_init(CharDriverState *chr, const char *filename, Error **errp)
1910 {
1911     WinCharState *s = chr->opaque;
1912     COMMCONFIG comcfg;
1913     COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
1914     COMSTAT comstat;
1915     DWORD size;
1916     DWORD err;
1917
1918     s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1919     if (!s->hsend) {
1920         error_setg(errp, "Failed CreateEvent");
1921         goto fail;
1922     }
1923     s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1924     if (!s->hrecv) {
1925         error_setg(errp, "Failed CreateEvent");
1926         goto fail;
1927     }
1928
1929     s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
1930                       OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
1931     if (s->hcom == INVALID_HANDLE_VALUE) {
1932         error_setg(errp, "Failed CreateFile (%lu)", GetLastError());
1933         s->hcom = NULL;
1934         goto fail;
1935     }
1936
1937     if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
1938         error_setg(errp, "Failed SetupComm");
1939         goto fail;
1940     }
1941
1942     ZeroMemory(&comcfg, sizeof(COMMCONFIG));
1943     size = sizeof(COMMCONFIG);
1944     GetDefaultCommConfig(filename, &comcfg, &size);
1945     comcfg.dcb.DCBlength = sizeof(DCB);
1946     CommConfigDialog(filename, NULL, &comcfg);
1947
1948     if (!SetCommState(s->hcom, &comcfg.dcb)) {
1949         error_setg(errp, "Failed SetCommState");
1950         goto fail;
1951     }
1952
1953     if (!SetCommMask(s->hcom, EV_ERR)) {
1954         error_setg(errp, "Failed SetCommMask");
1955         goto fail;
1956     }
1957
1958     cto.ReadIntervalTimeout = MAXDWORD;
1959     if (!SetCommTimeouts(s->hcom, &cto)) {
1960         error_setg(errp, "Failed SetCommTimeouts");
1961         goto fail;
1962     }
1963
1964     if (!ClearCommError(s->hcom, &err, &comstat)) {
1965         error_setg(errp, "Failed ClearCommError");
1966         goto fail;
1967     }
1968     qemu_add_polling_cb(win_chr_poll, chr);
1969     return 0;
1970
1971  fail:
1972     win_chr_close(chr);
1973     return -1;
1974 }
1975
1976 /* Called with chr_write_lock held.  */
1977 static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
1978 {
1979     WinCharState *s = chr->opaque;
1980     DWORD len, ret, size, err;
1981
1982     len = len1;
1983     ZeroMemory(&s->osend, sizeof(s->osend));
1984     s->osend.hEvent = s->hsend;
1985     while (len > 0) {
1986         if (s->hsend)
1987             ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
1988         else
1989             ret = WriteFile(s->hcom, buf, len, &size, NULL);
1990         if (!ret) {
1991             err = GetLastError();
1992             if (err == ERROR_IO_PENDING) {
1993                 ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
1994                 if (ret) {
1995                     buf += size;
1996                     len -= size;
1997                 } else {
1998                     break;
1999                 }
2000             } else {
2001                 break;
2002             }
2003         } else {
2004             buf += size;
2005             len -= size;
2006         }
2007     }
2008     return len1 - len;
2009 }
2010
2011 static int win_chr_read_poll(CharDriverState *chr)
2012 {
2013     WinCharState *s = chr->opaque;
2014
2015     s->max_size = qemu_chr_be_can_write(chr);
2016     return s->max_size;
2017 }
2018
2019 static void win_chr_readfile(CharDriverState *chr)
2020 {
2021     WinCharState *s = chr->opaque;
2022     int ret, err;
2023     uint8_t buf[READ_BUF_LEN];
2024     DWORD size;
2025
2026     ZeroMemory(&s->orecv, sizeof(s->orecv));
2027     s->orecv.hEvent = s->hrecv;
2028     ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
2029     if (!ret) {
2030         err = GetLastError();
2031         if (err == ERROR_IO_PENDING) {
2032             ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
2033         }
2034     }
2035
2036     if (size > 0) {
2037         qemu_chr_be_write(chr, buf, size);
2038     }
2039 }
2040
2041 static void win_chr_read(CharDriverState *chr)
2042 {
2043     WinCharState *s = chr->opaque;
2044
2045     if (s->len > s->max_size)
2046         s->len = s->max_size;
2047     if (s->len == 0)
2048         return;
2049
2050     win_chr_readfile(chr);
2051 }
2052
2053 static int win_chr_poll(void *opaque)
2054 {
2055     CharDriverState *chr = opaque;
2056     WinCharState *s = chr->opaque;
2057     COMSTAT status;
2058     DWORD comerr;
2059
2060     ClearCommError(s->hcom, &comerr, &status);
2061     if (status.cbInQue > 0) {
2062         s->len = status.cbInQue;
2063         win_chr_read_poll(chr);
2064         win_chr_read(chr);
2065         return 1;
2066     }
2067     return 0;
2068 }
2069
2070 static CharDriverState *qemu_chr_open_win_path(const char *filename,
2071                                                Error **errp)
2072 {
2073     CharDriverState *chr;
2074     WinCharState *s;
2075
2076     chr = qemu_chr_alloc();
2077     s = g_new0(WinCharState, 1);
2078     chr->opaque = s;
2079     chr->chr_write = win_chr_write;
2080     chr->chr_close = win_chr_close;
2081
2082     if (win_chr_init(chr, filename, errp) < 0) {
2083         g_free(s);
2084         g_free(chr);
2085         return NULL;
2086     }
2087     return chr;
2088 }
2089
2090 static int win_chr_pipe_poll(void *opaque)
2091 {
2092     CharDriverState *chr = opaque;
2093     WinCharState *s = chr->opaque;
2094     DWORD size;
2095
2096     PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
2097     if (size > 0) {
2098         s->len = size;
2099         win_chr_read_poll(chr);
2100         win_chr_read(chr);
2101         return 1;
2102     }
2103     return 0;
2104 }
2105
2106 static int win_chr_pipe_init(CharDriverState *chr, const char *filename,
2107                              Error **errp)
2108 {
2109     WinCharState *s = chr->opaque;
2110     OVERLAPPED ov;
2111     int ret;
2112     DWORD size;
2113     char openname[CHR_MAX_FILENAME_SIZE];
2114
2115     s->fpipe = TRUE;
2116
2117     s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
2118     if (!s->hsend) {
2119         error_setg(errp, "Failed CreateEvent");
2120         goto fail;
2121     }
2122     s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
2123     if (!s->hrecv) {
2124         error_setg(errp, "Failed CreateEvent");
2125         goto fail;
2126     }
2127
2128     snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
2129     s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
2130                               PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
2131                               PIPE_WAIT,
2132                               MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
2133     if (s->hcom == INVALID_HANDLE_VALUE) {
2134         error_setg(errp, "Failed CreateNamedPipe (%lu)", GetLastError());
2135         s->hcom = NULL;
2136         goto fail;
2137     }
2138
2139     ZeroMemory(&ov, sizeof(ov));
2140     ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
2141     ret = ConnectNamedPipe(s->hcom, &ov);
2142     if (ret) {
2143         error_setg(errp, "Failed ConnectNamedPipe");
2144         goto fail;
2145     }
2146
2147     ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
2148     if (!ret) {
2149         error_setg(errp, "Failed GetOverlappedResult");
2150         if (ov.hEvent) {
2151             CloseHandle(ov.hEvent);
2152             ov.hEvent = NULL;
2153         }
2154         goto fail;
2155     }
2156
2157     if (ov.hEvent) {
2158         CloseHandle(ov.hEvent);
2159         ov.hEvent = NULL;
2160     }
2161     qemu_add_polling_cb(win_chr_pipe_poll, chr);
2162     return 0;
2163
2164  fail:
2165     win_chr_close(chr);
2166     return -1;
2167 }
2168
2169
2170 static CharDriverState *qemu_chr_open_pipe(const char *id,
2171                                            ChardevBackend *backend,
2172                                            ChardevReturn *ret,
2173                                            Error **errp)
2174 {
2175     ChardevHostdev *opts = backend->pipe;
2176     const char *filename = opts->device;
2177     CharDriverState *chr;
2178     WinCharState *s;
2179
2180     chr = qemu_chr_alloc();
2181     s = g_new0(WinCharState, 1);
2182     chr->opaque = s;
2183     chr->chr_write = win_chr_write;
2184     chr->chr_close = win_chr_close;
2185
2186     if (win_chr_pipe_init(chr, filename, errp) < 0) {
2187         g_free(s);
2188         g_free(chr);
2189         return NULL;
2190     }
2191     return chr;
2192 }
2193
2194 static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
2195 {
2196     CharDriverState *chr;
2197     WinCharState *s;
2198
2199     chr = qemu_chr_alloc();
2200     s = g_new0(WinCharState, 1);
2201     s->hcom = fd_out;
2202     chr->opaque = s;
2203     chr->chr_write = win_chr_write;
2204     return chr;
2205 }
2206
2207 static CharDriverState *qemu_chr_open_win_con(void)
2208 {
2209     return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
2210 }
2211
2212 static int win_stdio_write(CharDriverState *chr, const uint8_t *buf, int len)
2213 {
2214     HANDLE  hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
2215     DWORD   dwSize;
2216     int     len1;
2217
2218     len1 = len;
2219
2220     while (len1 > 0) {
2221         if (!WriteFile(hStdOut, buf, len1, &dwSize, NULL)) {
2222             break;
2223         }
2224         buf  += dwSize;
2225         len1 -= dwSize;
2226     }
2227
2228     return len - len1;
2229 }
2230
2231 static void win_stdio_wait_func(void *opaque)
2232 {
2233     CharDriverState   *chr   = opaque;
2234     WinStdioCharState *stdio = chr->opaque;
2235     INPUT_RECORD       buf[4];
2236     int                ret;
2237     DWORD              dwSize;
2238     int                i;
2239
2240     ret = ReadConsoleInput(stdio->hStdIn, buf, ARRAY_SIZE(buf), &dwSize);
2241
2242     if (!ret) {
2243         /* Avoid error storm */
2244         qemu_del_wait_object(stdio->hStdIn, NULL, NULL);
2245         return;
2246     }
2247
2248     for (i = 0; i < dwSize; i++) {
2249         KEY_EVENT_RECORD *kev = &buf[i].Event.KeyEvent;
2250
2251         if (buf[i].EventType == KEY_EVENT && kev->bKeyDown) {
2252             int j;
2253             if (kev->uChar.AsciiChar != 0) {
2254                 for (j = 0; j < kev->wRepeatCount; j++) {
2255                     if (qemu_chr_be_can_write(chr)) {
2256                         uint8_t c = kev->uChar.AsciiChar;
2257                         qemu_chr_be_write(chr, &c, 1);
2258                     }
2259                 }
2260             }
2261         }
2262     }
2263 }
2264
2265 static DWORD WINAPI win_stdio_thread(LPVOID param)
2266 {
2267     CharDriverState   *chr   = param;
2268     WinStdioCharState *stdio = chr->opaque;
2269     int                ret;
2270     DWORD              dwSize;
2271
2272     while (1) {
2273
2274         /* Wait for one byte */
2275         ret = ReadFile(stdio->hStdIn, &stdio->win_stdio_buf, 1, &dwSize, NULL);
2276
2277         /* Exit in case of error, continue if nothing read */
2278         if (!ret) {
2279             break;
2280         }
2281         if (!dwSize) {
2282             continue;
2283         }
2284
2285         /* Some terminal emulator returns \r\n for Enter, just pass \n */
2286         if (stdio->win_stdio_buf == '\r') {
2287             continue;
2288         }
2289
2290         /* Signal the main thread and wait until the byte was eaten */
2291         if (!SetEvent(stdio->hInputReadyEvent)) {
2292             break;
2293         }
2294         if (WaitForSingleObject(stdio->hInputDoneEvent, INFINITE)
2295             != WAIT_OBJECT_0) {
2296             break;
2297         }
2298     }
2299
2300     qemu_del_wait_object(stdio->hInputReadyEvent, NULL, NULL);
2301     return 0;
2302 }
2303
2304 static void win_stdio_thread_wait_func(void *opaque)
2305 {
2306     CharDriverState   *chr   = opaque;
2307     WinStdioCharState *stdio = chr->opaque;
2308
2309     if (qemu_chr_be_can_write(chr)) {
2310         qemu_chr_be_write(chr, &stdio->win_stdio_buf, 1);
2311     }
2312
2313     SetEvent(stdio->hInputDoneEvent);
2314 }
2315
2316 static void qemu_chr_set_echo_win_stdio(CharDriverState *chr, bool echo)
2317 {
2318     WinStdioCharState *stdio  = chr->opaque;
2319     DWORD              dwMode = 0;
2320
2321     GetConsoleMode(stdio->hStdIn, &dwMode);
2322
2323     if (echo) {
2324         SetConsoleMode(stdio->hStdIn, dwMode | ENABLE_ECHO_INPUT);
2325     } else {
2326         SetConsoleMode(stdio->hStdIn, dwMode & ~ENABLE_ECHO_INPUT);
2327     }
2328 }
2329
2330 static void win_stdio_close(CharDriverState *chr)
2331 {
2332     WinStdioCharState *stdio = chr->opaque;
2333
2334     if (stdio->hInputReadyEvent != INVALID_HANDLE_VALUE) {
2335         CloseHandle(stdio->hInputReadyEvent);
2336     }
2337     if (stdio->hInputDoneEvent != INVALID_HANDLE_VALUE) {
2338         CloseHandle(stdio->hInputDoneEvent);
2339     }
2340     if (stdio->hInputThread != INVALID_HANDLE_VALUE) {
2341         TerminateThread(stdio->hInputThread, 0);
2342     }
2343
2344     g_free(chr->opaque);
2345     g_free(chr);
2346 }
2347
2348 static CharDriverState *qemu_chr_open_stdio(const char *id,
2349                                             ChardevBackend *backend,
2350                                             ChardevReturn *ret,
2351                                             Error **errp)
2352 {
2353     CharDriverState   *chr;
2354     WinStdioCharState *stdio;
2355     DWORD              dwMode;
2356     int                is_console = 0;
2357
2358     chr   = qemu_chr_alloc();
2359     stdio = g_new0(WinStdioCharState, 1);
2360
2361     stdio->hStdIn = GetStdHandle(STD_INPUT_HANDLE);
2362     if (stdio->hStdIn == INVALID_HANDLE_VALUE) {
2363         error_setg(errp, "cannot open stdio: invalid handle");
2364         return NULL;
2365     }
2366
2367     is_console = GetConsoleMode(stdio->hStdIn, &dwMode) != 0;
2368
2369     chr->opaque    = stdio;
2370     chr->chr_write = win_stdio_write;
2371     chr->chr_close = win_stdio_close;
2372
2373     if (is_console) {
2374         if (qemu_add_wait_object(stdio->hStdIn,
2375                                  win_stdio_wait_func, chr)) {
2376             error_setg(errp, "qemu_add_wait_object: failed");
2377             goto err1;
2378         }
2379     } else {
2380         DWORD   dwId;
2381             
2382         stdio->hInputReadyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
2383         stdio->hInputDoneEvent  = CreateEvent(NULL, FALSE, FALSE, NULL);
2384         if (stdio->hInputReadyEvent == INVALID_HANDLE_VALUE
2385             || stdio->hInputDoneEvent == INVALID_HANDLE_VALUE) {
2386             error_setg(errp, "cannot create event");
2387             goto err2;
2388         }
2389         if (qemu_add_wait_object(stdio->hInputReadyEvent,
2390                                  win_stdio_thread_wait_func, chr)) {
2391             error_setg(errp, "qemu_add_wait_object: failed");
2392             goto err2;
2393         }
2394         stdio->hInputThread     = CreateThread(NULL, 0, win_stdio_thread,
2395                                                chr, 0, &dwId);
2396
2397         if (stdio->hInputThread == INVALID_HANDLE_VALUE) {
2398             error_setg(errp, "cannot create stdio thread");
2399             goto err3;
2400         }
2401     }
2402
2403     dwMode |= ENABLE_LINE_INPUT;
2404
2405     if (is_console) {
2406         /* set the terminal in raw mode */
2407         /* ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS */
2408         dwMode |= ENABLE_PROCESSED_INPUT;
2409     }
2410
2411     SetConsoleMode(stdio->hStdIn, dwMode);
2412
2413     chr->chr_set_echo = qemu_chr_set_echo_win_stdio;
2414     qemu_chr_fe_set_echo(chr, false);
2415
2416     return chr;
2417
2418 err3:
2419     qemu_del_wait_object(stdio->hInputReadyEvent, NULL, NULL);
2420 err2:
2421     CloseHandle(stdio->hInputReadyEvent);
2422     CloseHandle(stdio->hInputDoneEvent);
2423 err1:
2424     qemu_del_wait_object(stdio->hStdIn, NULL, NULL);
2425     return NULL;
2426 }
2427 #endif /* !_WIN32 */
2428
2429
2430 /***********************************************************/
2431 /* UDP Net console */
2432
2433 typedef struct {
2434     int fd;
2435     GIOChannel *chan;
2436     uint8_t buf[READ_BUF_LEN];
2437     int bufcnt;
2438     int bufptr;
2439     int max_size;
2440 } NetCharDriver;
2441
2442 /* Called with chr_write_lock held.  */
2443 static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2444 {
2445     NetCharDriver *s = chr->opaque;
2446     gsize bytes_written;
2447     GIOStatus status;
2448
2449     status = g_io_channel_write_chars(s->chan, (const gchar *)buf, len, &bytes_written, NULL);
2450     if (status == G_IO_STATUS_EOF) {
2451         return 0;
2452     } else if (status != G_IO_STATUS_NORMAL) {
2453         return -1;
2454     }
2455
2456     return bytes_written;
2457 }
2458
2459 static int udp_chr_read_poll(void *opaque)
2460 {
2461     CharDriverState *chr = opaque;
2462     NetCharDriver *s = chr->opaque;
2463
2464     s->max_size = qemu_chr_be_can_write(chr);
2465
2466     /* If there were any stray characters in the queue process them
2467      * first
2468      */
2469     while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2470         qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2471         s->bufptr++;
2472         s->max_size = qemu_chr_be_can_write(chr);
2473     }
2474     return s->max_size;
2475 }
2476
2477 static gboolean udp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2478 {
2479     CharDriverState *chr = opaque;
2480     NetCharDriver *s = chr->opaque;
2481     gsize bytes_read = 0;
2482     GIOStatus status;
2483
2484     if (s->max_size == 0) {
2485         return TRUE;
2486     }
2487     status = g_io_channel_read_chars(s->chan, (gchar *)s->buf, sizeof(s->buf),
2488                                      &bytes_read, NULL);
2489     s->bufcnt = bytes_read;
2490     s->bufptr = s->bufcnt;
2491     if (status != G_IO_STATUS_NORMAL) {
2492         remove_fd_in_watch(chr);
2493         return FALSE;
2494     }
2495
2496     s->bufptr = 0;
2497     while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2498         qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2499         s->bufptr++;
2500         s->max_size = qemu_chr_be_can_write(chr);
2501     }
2502
2503     return TRUE;
2504 }
2505
2506 static void udp_chr_update_read_handler(CharDriverState *chr)
2507 {
2508     NetCharDriver *s = chr->opaque;
2509
2510     remove_fd_in_watch(chr);
2511     if (s->chan) {
2512         chr->fd_in_tag = io_add_watch_poll(s->chan, udp_chr_read_poll,
2513                                            udp_chr_read, chr);
2514     }
2515 }
2516
2517 static void udp_chr_close(CharDriverState *chr)
2518 {
2519     NetCharDriver *s = chr->opaque;
2520
2521     remove_fd_in_watch(chr);
2522     if (s->chan) {
2523         g_io_channel_unref(s->chan);
2524         closesocket(s->fd);
2525     }
2526     g_free(s);
2527     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2528 }
2529
2530 static CharDriverState *qemu_chr_open_udp_fd(int fd)
2531 {
2532     CharDriverState *chr = NULL;
2533     NetCharDriver *s = NULL;
2534
2535     chr = qemu_chr_alloc();
2536     s = g_new0(NetCharDriver, 1);
2537
2538     s->fd = fd;
2539     s->chan = io_channel_from_socket(s->fd);
2540     s->bufcnt = 0;
2541     s->bufptr = 0;
2542     chr->opaque = s;
2543     chr->chr_write = udp_chr_write;
2544     chr->chr_update_read_handler = udp_chr_update_read_handler;
2545     chr->chr_close = udp_chr_close;
2546     /* be isn't opened until we get a connection */
2547     chr->explicit_be_open = true;
2548     return chr;
2549 }
2550
2551 /***********************************************************/
2552 /* TCP Net console */
2553
2554 typedef struct {
2555
2556     GIOChannel *chan, *listen_chan;
2557     guint listen_tag;
2558     int fd, listen_fd;
2559     int connected;
2560     int max_size;
2561     int do_telnetopt;
2562     int do_nodelay;
2563     int is_unix;
2564     int *read_msgfds;
2565     int read_msgfds_num;
2566     int *write_msgfds;
2567     int write_msgfds_num;
2568
2569     SocketAddress *addr;
2570     bool is_listen;
2571     bool is_telnet;
2572
2573     guint reconnect_timer;
2574     int64_t reconnect_time;
2575     bool connect_err_reported;
2576 } TCPCharDriver;
2577
2578 static gboolean socket_reconnect_timeout(gpointer opaque);
2579
2580 static void qemu_chr_socket_restart_timer(CharDriverState *chr)
2581 {
2582     TCPCharDriver *s = chr->opaque;
2583     assert(s->connected == 0);
2584     s->reconnect_timer = g_timeout_add_seconds(s->reconnect_time,
2585                                                socket_reconnect_timeout, chr);
2586 }
2587
2588 static void check_report_connect_error(CharDriverState *chr,
2589                                        Error *err)
2590 {
2591     TCPCharDriver *s = chr->opaque;
2592
2593     if (!s->connect_err_reported) {
2594         error_report("Unable to connect character device %s: %s",
2595                      chr->label, error_get_pretty(err));
2596         s->connect_err_reported = true;
2597     }
2598     qemu_chr_socket_restart_timer(chr);
2599 }
2600
2601 static gboolean tcp_chr_accept(GIOChannel *chan, GIOCondition cond, void *opaque);
2602
2603 #ifndef _WIN32
2604 static int unix_send_msgfds(CharDriverState *chr, const uint8_t *buf, int len)
2605 {
2606     TCPCharDriver *s = chr->opaque;
2607     struct msghdr msgh;
2608     struct iovec iov;
2609     int r;
2610
2611     size_t fd_size = s->write_msgfds_num * sizeof(int);
2612     char control[CMSG_SPACE(fd_size)];
2613     struct cmsghdr *cmsg;
2614
2615     memset(&msgh, 0, sizeof(msgh));
2616     memset(control, 0, sizeof(control));
2617
2618     /* set the payload */
2619     iov.iov_base = (uint8_t *) buf;
2620     iov.iov_len = len;
2621
2622     msgh.msg_iov = &iov;
2623     msgh.msg_iovlen = 1;
2624
2625     msgh.msg_control = control;
2626     msgh.msg_controllen = sizeof(control);
2627
2628     cmsg = CMSG_FIRSTHDR(&msgh);
2629
2630     cmsg->cmsg_len = CMSG_LEN(fd_size);
2631     cmsg->cmsg_level = SOL_SOCKET;
2632     cmsg->cmsg_type = SCM_RIGHTS;
2633     memcpy(CMSG_DATA(cmsg), s->write_msgfds, fd_size);
2634
2635     do {
2636         r = sendmsg(s->fd, &msgh, 0);
2637     } while (r < 0 && errno == EINTR);
2638
2639     /* free the written msgfds, no matter what */
2640     if (s->write_msgfds_num) {
2641         g_free(s->write_msgfds);
2642         s->write_msgfds = 0;
2643         s->write_msgfds_num = 0;
2644     }
2645
2646     return r;
2647 }
2648 #endif
2649
2650 /* Called with chr_write_lock held.  */
2651 static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2652 {
2653     TCPCharDriver *s = chr->opaque;
2654     if (s->connected) {
2655 #ifndef _WIN32
2656         if (s->is_unix && s->write_msgfds_num) {
2657             return unix_send_msgfds(chr, buf, len);
2658         } else
2659 #endif
2660         {
2661             return io_channel_send(s->chan, buf, len);
2662         }
2663     } else {
2664         /* XXX: indicate an error ? */
2665         return len;
2666     }
2667 }
2668
2669 static int tcp_chr_read_poll(void *opaque)
2670 {
2671     CharDriverState *chr = opaque;
2672     TCPCharDriver *s = chr->opaque;
2673     if (!s->connected)
2674         return 0;
2675     s->max_size = qemu_chr_be_can_write(chr);
2676     return s->max_size;
2677 }
2678
2679 #define IAC 255
2680 #define IAC_BREAK 243
2681 static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
2682                                       TCPCharDriver *s,
2683                                       uint8_t *buf, int *size)
2684 {
2685     /* Handle any telnet client's basic IAC options to satisfy char by
2686      * char mode with no echo.  All IAC options will be removed from
2687      * the buf and the do_telnetopt variable will be used to track the
2688      * state of the width of the IAC information.
2689      *
2690      * IAC commands come in sets of 3 bytes with the exception of the
2691      * "IAC BREAK" command and the double IAC.
2692      */
2693
2694     int i;
2695     int j = 0;
2696
2697     for (i = 0; i < *size; i++) {
2698         if (s->do_telnetopt > 1) {
2699             if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
2700                 /* Double IAC means send an IAC */
2701                 if (j != i)
2702                     buf[j] = buf[i];
2703                 j++;
2704                 s->do_telnetopt = 1;
2705             } else {
2706                 if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
2707                     /* Handle IAC break commands by sending a serial break */
2708                     qemu_chr_be_event(chr, CHR_EVENT_BREAK);
2709                     s->do_telnetopt++;
2710                 }
2711                 s->do_telnetopt++;
2712             }
2713             if (s->do_telnetopt >= 4) {
2714                 s->do_telnetopt = 1;
2715             }
2716         } else {
2717             if ((unsigned char)buf[i] == IAC) {
2718                 s->do_telnetopt = 2;
2719             } else {
2720                 if (j != i)
2721                     buf[j] = buf[i];
2722                 j++;
2723             }
2724         }
2725     }
2726     *size = j;
2727 }
2728
2729 static int tcp_get_msgfds(CharDriverState *chr, int *fds, int num)
2730 {
2731     TCPCharDriver *s = chr->opaque;
2732     int to_copy = (s->read_msgfds_num < num) ? s->read_msgfds_num : num;
2733
2734     assert(num <= TCP_MAX_FDS);
2735
2736     if (to_copy) {
2737         int i;
2738
2739         memcpy(fds, s->read_msgfds, to_copy * sizeof(int));
2740
2741         /* Close unused fds */
2742         for (i = to_copy; i < s->read_msgfds_num; i++) {
2743             close(s->read_msgfds[i]);
2744         }
2745
2746         g_free(s->read_msgfds);
2747         s->read_msgfds = 0;
2748         s->read_msgfds_num = 0;
2749     }
2750
2751     return to_copy;
2752 }
2753
2754 static int tcp_set_msgfds(CharDriverState *chr, int *fds, int num)
2755 {
2756     TCPCharDriver *s = chr->opaque;
2757
2758     /* clear old pending fd array */
2759     g_free(s->write_msgfds);
2760
2761     if (num) {
2762         s->write_msgfds = g_new(int, num);
2763         memcpy(s->write_msgfds, fds, num * sizeof(int));
2764     }
2765
2766     s->write_msgfds_num = num;
2767
2768     return 0;
2769 }
2770
2771 #ifndef _WIN32
2772 static void unix_process_msgfd(CharDriverState *chr, struct msghdr *msg)
2773 {
2774     TCPCharDriver *s = chr->opaque;
2775     struct cmsghdr *cmsg;
2776
2777     for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
2778         int fd_size, i;
2779
2780         if (cmsg->cmsg_len < CMSG_LEN(sizeof(int)) ||
2781             cmsg->cmsg_level != SOL_SOCKET ||
2782             cmsg->cmsg_type != SCM_RIGHTS) {
2783             continue;
2784         }
2785
2786         fd_size = cmsg->cmsg_len - CMSG_LEN(0);
2787
2788         if (!fd_size) {
2789             continue;
2790         }
2791
2792         /* close and clean read_msgfds */
2793         for (i = 0; i < s->read_msgfds_num; i++) {
2794             close(s->read_msgfds[i]);
2795         }
2796
2797         if (s->read_msgfds_num) {
2798             g_free(s->read_msgfds);
2799         }
2800
2801         s->read_msgfds_num = fd_size / sizeof(int);
2802         s->read_msgfds = g_malloc(fd_size);
2803         memcpy(s->read_msgfds, CMSG_DATA(cmsg), fd_size);
2804
2805         for (i = 0; i < s->read_msgfds_num; i++) {
2806             int fd = s->read_msgfds[i];
2807             if (fd < 0) {
2808                 continue;
2809             }
2810
2811             /* O_NONBLOCK is preserved across SCM_RIGHTS so reset it */
2812             qemu_set_block(fd);
2813
2814     #ifndef MSG_CMSG_CLOEXEC
2815             qemu_set_cloexec(fd);
2816     #endif
2817         }
2818     }
2819 }
2820
2821 static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2822 {
2823     TCPCharDriver *s = chr->opaque;
2824     struct msghdr msg = { NULL, };
2825     struct iovec iov[1];
2826     union {
2827         struct cmsghdr cmsg;
2828         char control[CMSG_SPACE(sizeof(int) * TCP_MAX_FDS)];
2829     } msg_control;
2830     int flags = 0;
2831     ssize_t ret;
2832
2833     iov[0].iov_base = buf;
2834     iov[0].iov_len = len;
2835
2836     msg.msg_iov = iov;
2837     msg.msg_iovlen = 1;
2838     msg.msg_control = &msg_control;
2839     msg.msg_controllen = sizeof(msg_control);
2840
2841 #ifdef MSG_CMSG_CLOEXEC
2842     flags |= MSG_CMSG_CLOEXEC;
2843 #endif
2844     do {
2845         ret = recvmsg(s->fd, &msg, flags);
2846     } while (ret == -1 && errno == EINTR);
2847
2848     if (ret > 0 && s->is_unix) {
2849         unix_process_msgfd(chr, &msg);
2850     }
2851
2852     return ret;
2853 }
2854 #else
2855 static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2856 {
2857     TCPCharDriver *s = chr->opaque;
2858     ssize_t ret;
2859
2860     do {
2861         ret = qemu_recv(s->fd, buf, len, 0);
2862     } while (ret == -1 && socket_error() == EINTR);
2863
2864     return ret;
2865 }
2866 #endif
2867
2868 static GSource *tcp_chr_add_watch(CharDriverState *chr, GIOCondition cond)
2869 {
2870     TCPCharDriver *s = chr->opaque;
2871     return g_io_create_watch(s->chan, cond);
2872 }
2873
2874 static void tcp_chr_disconnect(CharDriverState *chr)
2875 {
2876     TCPCharDriver *s = chr->opaque;
2877
2878     s->connected = 0;
2879     if (s->listen_chan) {
2880         s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN,
2881                                        tcp_chr_accept, chr);
2882     }
2883     remove_fd_in_watch(chr);
2884     g_io_channel_unref(s->chan);
2885     s->chan = NULL;
2886     closesocket(s->fd);
2887     s->fd = -1;
2888     SocketAddress_to_str(chr->filename, CHR_MAX_FILENAME_SIZE,
2889                          "disconnected:", s->addr, s->is_listen, s->is_telnet);
2890     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2891     if (s->reconnect_time) {
2892         qemu_chr_socket_restart_timer(chr);
2893     }
2894 }
2895
2896 static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2897 {
2898     CharDriverState *chr = opaque;
2899     TCPCharDriver *s = chr->opaque;
2900     uint8_t buf[READ_BUF_LEN];
2901     int len, size;
2902
2903     if (!s->connected || s->max_size <= 0) {
2904         return TRUE;
2905     }
2906     len = sizeof(buf);
2907     if (len > s->max_size)
2908         len = s->max_size;
2909     size = tcp_chr_recv(chr, (void *)buf, len);
2910     if (size == 0 ||
2911         (size < 0 &&
2912          socket_error() != EAGAIN && socket_error() != EWOULDBLOCK)) {
2913         /* connection closed */
2914         tcp_chr_disconnect(chr);
2915     } else if (size > 0) {
2916         if (s->do_telnetopt)
2917             tcp_chr_process_IAC_bytes(chr, s, buf, &size);
2918         if (size > 0)
2919             qemu_chr_be_write(chr, buf, size);
2920     }
2921
2922     return TRUE;
2923 }
2924
2925 static int tcp_chr_sync_read(CharDriverState *chr, const uint8_t *buf, int len)
2926 {
2927     TCPCharDriver *s = chr->opaque;
2928     int size;
2929
2930     if (!s->connected) {
2931         return 0;
2932     }
2933
2934     size = tcp_chr_recv(chr, (void *) buf, len);
2935     if (size == 0) {
2936         /* connection closed */
2937         tcp_chr_disconnect(chr);
2938     }
2939
2940     return size;
2941 }
2942
2943 #ifndef _WIN32
2944 CharDriverState *qemu_chr_open_eventfd(int eventfd)
2945 {
2946     CharDriverState *chr = qemu_chr_open_fd(eventfd, eventfd);
2947
2948     if (chr) {
2949         chr->avail_connections = 1;
2950     }
2951
2952     return chr;
2953 }
2954 #endif
2955
2956 static void tcp_chr_connect(void *opaque)
2957 {
2958     CharDriverState *chr = opaque;
2959     TCPCharDriver *s = chr->opaque;
2960     struct sockaddr_storage ss, ps;
2961     socklen_t ss_len = sizeof(ss), ps_len = sizeof(ps);
2962
2963     memset(&ss, 0, ss_len);
2964     if (getsockname(s->fd, (struct sockaddr *) &ss, &ss_len) != 0) {
2965         snprintf(chr->filename, CHR_MAX_FILENAME_SIZE,
2966                  "Error in getsockname: %s\n", strerror(errno));
2967     } else if (getpeername(s->fd, (struct sockaddr *) &ps, &ps_len) != 0) {
2968         snprintf(chr->filename, CHR_MAX_FILENAME_SIZE,
2969                  "Error in getpeername: %s\n", strerror(errno));
2970     } else {
2971         sockaddr_to_str(chr->filename, CHR_MAX_FILENAME_SIZE,
2972                         &ss, ss_len, &ps, ps_len,
2973                         s->is_listen, s->is_telnet);
2974     }
2975
2976     s->connected = 1;
2977     if (s->chan) {
2978         chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll,
2979                                            tcp_chr_read, chr);
2980     }
2981     qemu_chr_be_generic_open(chr);
2982 }
2983
2984 static void tcp_chr_update_read_handler(CharDriverState *chr)
2985 {
2986     TCPCharDriver *s = chr->opaque;
2987
2988     remove_fd_in_watch(chr);
2989     if (s->chan) {
2990         chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll,
2991                                            tcp_chr_read, chr);
2992     }
2993 }
2994
2995 #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
2996 static void tcp_chr_telnet_init(int fd)
2997 {
2998     char buf[3];
2999     /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
3000     IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
3001     send(fd, (char *)buf, 3, 0);
3002     IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
3003     send(fd, (char *)buf, 3, 0);
3004     IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
3005     send(fd, (char *)buf, 3, 0);
3006     IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
3007     send(fd, (char *)buf, 3, 0);
3008 }
3009
3010 static int tcp_chr_add_client(CharDriverState *chr, int fd)
3011 {
3012     TCPCharDriver *s = chr->opaque;
3013     if (s->fd != -1)
3014         return -1;
3015
3016     qemu_set_nonblock(fd);
3017     if (s->do_nodelay)
3018         socket_set_nodelay(fd);
3019     s->fd = fd;
3020     s->chan = io_channel_from_socket(fd);
3021     if (s->listen_tag) {
3022         g_source_remove(s->listen_tag);
3023         s->listen_tag = 0;
3024     }
3025     tcp_chr_connect(chr);
3026
3027     return 0;
3028 }
3029
3030 static gboolean tcp_chr_accept(GIOChannel *channel, GIOCondition cond, void *opaque)
3031 {
3032     CharDriverState *chr = opaque;
3033     TCPCharDriver *s = chr->opaque;
3034     struct sockaddr_in saddr;
3035 #ifndef _WIN32
3036     struct sockaddr_un uaddr;
3037 #endif
3038     struct sockaddr *addr;
3039     socklen_t len;
3040     int fd;
3041
3042     for(;;) {
3043 #ifndef _WIN32
3044         if (s->is_unix) {
3045             len = sizeof(uaddr);
3046             addr = (struct sockaddr *)&uaddr;
3047         } else
3048 #endif
3049         {
3050             len = sizeof(saddr);
3051             addr = (struct sockaddr *)&saddr;
3052         }
3053         fd = qemu_accept(s->listen_fd, addr, &len);
3054         if (fd < 0 && errno != EINTR) {
3055             s->listen_tag = 0;
3056             return FALSE;
3057         } else if (fd >= 0) {
3058             if (s->do_telnetopt)
3059                 tcp_chr_telnet_init(fd);
3060             break;
3061         }
3062     }
3063     if (tcp_chr_add_client(chr, fd) < 0)
3064         close(fd);
3065
3066     return TRUE;
3067 }
3068
3069 static void tcp_chr_close(CharDriverState *chr)
3070 {
3071     TCPCharDriver *s = chr->opaque;
3072     int i;
3073
3074     if (s->reconnect_timer) {
3075         g_source_remove(s->reconnect_timer);
3076         s->reconnect_timer = 0;
3077     }
3078     qapi_free_SocketAddress(s->addr);
3079     if (s->fd >= 0) {
3080         remove_fd_in_watch(chr);
3081         if (s->chan) {
3082             g_io_channel_unref(s->chan);
3083         }
3084         closesocket(s->fd);
3085     }
3086     if (s->listen_fd >= 0) {
3087         if (s->listen_tag) {
3088             g_source_remove(s->listen_tag);
3089             s->listen_tag = 0;
3090         }
3091         if (s->listen_chan) {
3092             g_io_channel_unref(s->listen_chan);
3093         }
3094         closesocket(s->listen_fd);
3095     }
3096     if (s->read_msgfds_num) {
3097         for (i = 0; i < s->read_msgfds_num; i++) {
3098             close(s->read_msgfds[i]);
3099         }
3100         g_free(s->read_msgfds);
3101     }
3102     if (s->write_msgfds_num) {
3103         g_free(s->write_msgfds);
3104     }
3105     g_free(s);
3106     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
3107 }
3108
3109 static void qemu_chr_finish_socket_connection(CharDriverState *chr, int fd)
3110 {
3111     TCPCharDriver *s = chr->opaque;
3112
3113     if (s->is_listen) {
3114         s->listen_fd = fd;
3115         s->listen_chan = io_channel_from_socket(s->listen_fd);
3116         s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN,
3117                                        tcp_chr_accept, chr);
3118     } else {
3119         s->connected = 1;
3120         s->fd = fd;
3121         socket_set_nodelay(fd);
3122         s->chan = io_channel_from_socket(s->fd);
3123         tcp_chr_connect(chr);
3124     }
3125 }
3126
3127 static void qemu_chr_socket_connected(int fd, Error *err, void *opaque)
3128 {
3129     CharDriverState *chr = opaque;
3130     TCPCharDriver *s = chr->opaque;
3131
3132     if (fd < 0) {
3133         check_report_connect_error(chr, err);
3134         return;
3135     }
3136
3137     s->connect_err_reported = false;
3138     qemu_chr_finish_socket_connection(chr, fd);
3139 }
3140
3141 static bool qemu_chr_open_socket_fd(CharDriverState *chr, Error **errp)
3142 {
3143     TCPCharDriver *s = chr->opaque;
3144     int fd;
3145
3146     if (s->is_listen) {
3147         fd = socket_listen(s->addr, errp);
3148     } else if (s->reconnect_time) {
3149         fd = socket_connect(s->addr, errp, qemu_chr_socket_connected, chr);
3150         return fd >= 0;
3151     } else {
3152         fd = socket_connect(s->addr, errp, NULL, NULL);
3153     }
3154     if (fd < 0) {
3155         return false;
3156     }
3157
3158     qemu_chr_finish_socket_connection(chr, fd);
3159     return true;
3160 }
3161
3162 /*********************************************************/
3163 /* Ring buffer chardev */
3164
3165 typedef struct {
3166     size_t size;
3167     size_t prod;
3168     size_t cons;
3169     uint8_t *cbuf;
3170 } RingBufCharDriver;
3171
3172 static size_t ringbuf_count(const CharDriverState *chr)
3173 {
3174     const RingBufCharDriver *d = chr->opaque;
3175
3176     return d->prod - d->cons;
3177 }
3178
3179 /* Called with chr_write_lock held.  */
3180 static int ringbuf_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
3181 {
3182     RingBufCharDriver *d = chr->opaque;
3183     int i;
3184
3185     if (!buf || (len < 0)) {
3186         return -1;
3187     }
3188
3189     for (i = 0; i < len; i++ ) {
3190         d->cbuf[d->prod++ & (d->size - 1)] = buf[i];
3191         if (d->prod - d->cons > d->size) {
3192             d->cons = d->prod - d->size;
3193         }
3194     }
3195
3196     return 0;
3197 }
3198
3199 static int ringbuf_chr_read(CharDriverState *chr, uint8_t *buf, int len)
3200 {
3201     RingBufCharDriver *d = chr->opaque;
3202     int i;
3203
3204     qemu_mutex_lock(&chr->chr_write_lock);
3205     for (i = 0; i < len && d->cons != d->prod; i++) {
3206         buf[i] = d->cbuf[d->cons++ & (d->size - 1)];
3207     }
3208     qemu_mutex_unlock(&chr->chr_write_lock);
3209
3210     return i;
3211 }
3212
3213 static void ringbuf_chr_close(struct CharDriverState *chr)
3214 {
3215     RingBufCharDriver *d = chr->opaque;
3216
3217     g_free(d->cbuf);
3218     g_free(d);
3219     chr->opaque = NULL;
3220 }
3221
3222 static CharDriverState *qemu_chr_open_ringbuf(ChardevRingbuf *opts,
3223                                               Error **errp)
3224 {
3225     CharDriverState *chr;
3226     RingBufCharDriver *d;
3227
3228     chr = qemu_chr_alloc();
3229     d = g_malloc(sizeof(*d));
3230
3231     d->size = opts->has_size ? opts->size : 65536;
3232
3233     /* The size must be power of 2 */
3234     if (d->size & (d->size - 1)) {
3235         error_setg(errp, "size of ringbuf chardev must be power of two");
3236         goto fail;
3237     }
3238
3239     d->prod = 0;
3240     d->cons = 0;
3241     d->cbuf = g_malloc0(d->size);
3242
3243     chr->opaque = d;
3244     chr->chr_write = ringbuf_chr_write;
3245     chr->chr_close = ringbuf_chr_close;
3246
3247     return chr;
3248
3249 fail:
3250     g_free(d);
3251     g_free(chr);
3252     return NULL;
3253 }
3254
3255 bool chr_is_ringbuf(const CharDriverState *chr)
3256 {
3257     return chr->chr_write == ringbuf_chr_write;
3258 }
3259
3260 void qmp_ringbuf_write(const char *device, const char *data,
3261                        bool has_format, enum DataFormat format,
3262                        Error **errp)
3263 {
3264     CharDriverState *chr;
3265     const uint8_t *write_data;
3266     int ret;
3267     gsize write_count;
3268
3269     chr = qemu_chr_find(device);
3270     if (!chr) {
3271         error_setg(errp, "Device '%s' not found", device);
3272         return;
3273     }
3274
3275     if (!chr_is_ringbuf(chr)) {
3276         error_setg(errp,"%s is not a ringbuf device", device);
3277         return;
3278     }
3279
3280     if (has_format && (format == DATA_FORMAT_BASE64)) {
3281         write_data = g_base64_decode(data, &write_count);
3282     } else {
3283         write_data = (uint8_t *)data;
3284         write_count = strlen(data);
3285     }
3286
3287     ret = ringbuf_chr_write(chr, write_data, write_count);
3288
3289     if (write_data != (uint8_t *)data) {
3290         g_free((void *)write_data);
3291     }
3292
3293     if (ret < 0) {
3294         error_setg(errp, "Failed to write to device %s", device);
3295         return;
3296     }
3297 }
3298
3299 char *qmp_ringbuf_read(const char *device, int64_t size,
3300                        bool has_format, enum DataFormat format,
3301                        Error **errp)
3302 {
3303     CharDriverState *chr;
3304     uint8_t *read_data;
3305     size_t count;
3306     char *data;
3307
3308     chr = qemu_chr_find(device);
3309     if (!chr) {
3310         error_setg(errp, "Device '%s' not found", device);
3311         return NULL;
3312     }
3313
3314     if (!chr_is_ringbuf(chr)) {
3315         error_setg(errp,"%s is not a ringbuf device", device);
3316         return NULL;
3317     }
3318
3319     if (size <= 0) {
3320         error_setg(errp, "size must be greater than zero");
3321         return NULL;
3322     }
3323
3324     count = ringbuf_count(chr);
3325     size = size > count ? count : size;
3326     read_data = g_malloc(size + 1);
3327
3328     ringbuf_chr_read(chr, read_data, size);
3329
3330     if (has_format && (format == DATA_FORMAT_BASE64)) {
3331         data = g_base64_encode(read_data, size);
3332         g_free(read_data);
3333     } else {
3334         /*
3335          * FIXME should read only complete, valid UTF-8 characters up
3336          * to @size bytes.  Invalid sequences should be replaced by a
3337          * suitable replacement character.  Except when (and only
3338          * when) ring buffer lost characters since last read, initial
3339          * continuation characters should be dropped.
3340          */
3341         read_data[size] = 0;
3342         data = (char *)read_data;
3343     }
3344
3345     return data;
3346 }
3347
3348 QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
3349 {
3350     char host[65], port[33], width[8], height[8];
3351     int pos;
3352     const char *p;
3353     QemuOpts *opts;
3354     Error *local_err = NULL;
3355
3356     opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
3357     if (local_err) {
3358         error_report_err(local_err);
3359         return NULL;
3360     }
3361
3362     if (strstart(filename, "mon:", &p)) {
3363         filename = p;
3364         qemu_opt_set(opts, "mux", "on", &error_abort);
3365         if (strcmp(filename, "stdio") == 0) {
3366             /* Monitor is muxed to stdio: do not exit on Ctrl+C by default
3367              * but pass it to the guest.  Handle this only for compat syntax,
3368              * for -chardev syntax we have special option for this.
3369              * This is what -nographic did, redirecting+muxing serial+monitor
3370              * to stdio causing Ctrl+C to be passed to guest. */
3371             qemu_opt_set(opts, "signal", "off", &error_abort);
3372         }
3373     }
3374
3375     if (strcmp(filename, "null")    == 0 ||
3376         strcmp(filename, "pty")     == 0 ||
3377         strcmp(filename, "msmouse") == 0 ||
3378         strcmp(filename, "braille") == 0 ||
3379         strcmp(filename, "testdev") == 0 ||
3380         strcmp(filename, "stdio")   == 0) {
3381         qemu_opt_set(opts, "backend", filename, &error_abort);
3382         return opts;
3383     }
3384     if (strstart(filename, "vc", &p)) {
3385         qemu_opt_set(opts, "backend", "vc", &error_abort);
3386         if (*p == ':') {
3387             if (sscanf(p+1, "%7[0-9]x%7[0-9]", width, height) == 2) {
3388                 /* pixels */
3389                 qemu_opt_set(opts, "width", width, &error_abort);
3390                 qemu_opt_set(opts, "height", height, &error_abort);
3391             } else if (sscanf(p+1, "%7[0-9]Cx%7[0-9]C", width, height) == 2) {
3392                 /* chars */
3393                 qemu_opt_set(opts, "cols", width, &error_abort);
3394                 qemu_opt_set(opts, "rows", height, &error_abort);
3395             } else {
3396                 goto fail;
3397             }
3398         }
3399         return opts;
3400     }
3401     if (strcmp(filename, "con:") == 0) {
3402         qemu_opt_set(opts, "backend", "console", &error_abort);
3403         return opts;
3404     }
3405     if (strstart(filename, "COM", NULL)) {
3406         qemu_opt_set(opts, "backend", "serial", &error_abort);
3407         qemu_opt_set(opts, "path", filename, &error_abort);
3408         return opts;
3409     }
3410     if (strstart(filename, "file:", &p)) {
3411         qemu_opt_set(opts, "backend", "file", &error_abort);
3412         qemu_opt_set(opts, "path", p, &error_abort);
3413         return opts;
3414     }
3415     if (strstart(filename, "pipe:", &p)) {
3416         qemu_opt_set(opts, "backend", "pipe", &error_abort);
3417         qemu_opt_set(opts, "path", p, &error_abort);
3418         return opts;
3419     }
3420     if (strstart(filename, "tcp:", &p) ||
3421         strstart(filename, "telnet:", &p)) {
3422         if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
3423             host[0] = 0;
3424             if (sscanf(p, ":%32[^,]%n", port, &pos) < 1)
3425                 goto fail;
3426         }
3427         qemu_opt_set(opts, "backend", "socket", &error_abort);
3428         qemu_opt_set(opts, "host", host, &error_abort);
3429         qemu_opt_set(opts, "port", port, &error_abort);
3430         if (p[pos] == ',') {
3431             qemu_opts_do_parse(opts, p+pos+1, NULL, &local_err);
3432             if (local_err) {
3433                 error_report_err(local_err);
3434                 goto fail;
3435             }
3436         }
3437         if (strstart(filename, "telnet:", &p))
3438             qemu_opt_set(opts, "telnet", "on", &error_abort);
3439         return opts;
3440     }
3441     if (strstart(filename, "udp:", &p)) {
3442         qemu_opt_set(opts, "backend", "udp", &error_abort);
3443         if (sscanf(p, "%64[^:]:%32[^@,]%n", host, port, &pos) < 2) {
3444             host[0] = 0;
3445             if (sscanf(p, ":%32[^@,]%n", port, &pos) < 1) {
3446                 goto fail;
3447             }
3448         }
3449         qemu_opt_set(opts, "host", host, &error_abort);
3450         qemu_opt_set(opts, "port", port, &error_abort);
3451         if (p[pos] == '@') {
3452             p += pos + 1;
3453             if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
3454                 host[0] = 0;
3455                 if (sscanf(p, ":%32[^,]%n", port, &pos) < 1) {
3456                     goto fail;
3457                 }
3458             }
3459             qemu_opt_set(opts, "localaddr", host, &error_abort);
3460             qemu_opt_set(opts, "localport", port, &error_abort);
3461         }
3462         return opts;
3463     }
3464     if (strstart(filename, "unix:", &p)) {
3465         qemu_opt_set(opts, "backend", "socket", &error_abort);
3466         qemu_opts_do_parse(opts, p, "path", &local_err);
3467         if (local_err) {
3468             error_report_err(local_err);
3469             goto fail;
3470         }
3471         return opts;
3472     }
3473     if (strstart(filename, "/dev/parport", NULL) ||
3474         strstart(filename, "/dev/ppi", NULL)) {
3475         qemu_opt_set(opts, "backend", "parport", &error_abort);
3476         qemu_opt_set(opts, "path", filename, &error_abort);
3477         return opts;
3478     }
3479     if (strstart(filename, "/dev/", NULL)) {
3480         qemu_opt_set(opts, "backend", "tty", &error_abort);
3481         qemu_opt_set(opts, "path", filename, &error_abort);
3482         return opts;
3483     }
3484
3485 fail:
3486     qemu_opts_del(opts);
3487     return NULL;
3488 }
3489
3490 static void qemu_chr_parse_file_out(QemuOpts *opts, ChardevBackend *backend,
3491                                     Error **errp)
3492 {
3493     const char *path = qemu_opt_get(opts, "path");
3494
3495     if (path == NULL) {
3496         error_setg(errp, "chardev: file: no filename given");
3497         return;
3498     }
3499     backend->file = g_new0(ChardevFile, 1);
3500     backend->file->out = g_strdup(path);
3501 }
3502
3503 static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
3504                                  Error **errp)
3505 {
3506     backend->stdio = g_new0(ChardevStdio, 1);
3507     backend->stdio->has_signal = true;
3508     backend->stdio->signal = qemu_opt_get_bool(opts, "signal", true);
3509 }
3510
3511 #ifdef HAVE_CHARDEV_SERIAL
3512 static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
3513                                   Error **errp)
3514 {
3515     const char *device = qemu_opt_get(opts, "path");
3516
3517     if (device == NULL) {
3518         error_setg(errp, "chardev: serial/tty: no device path given");
3519         return;
3520     }
3521     backend->serial = g_new0(ChardevHostdev, 1);
3522     backend->serial->device = g_strdup(device);
3523 }
3524 #endif
3525
3526 #ifdef HAVE_CHARDEV_PARPORT
3527 static void qemu_chr_parse_parallel(QemuOpts *opts, ChardevBackend *backend,
3528                                     Error **errp)
3529 {
3530     const char *device = qemu_opt_get(opts, "path");
3531
3532     if (device == NULL) {
3533         error_setg(errp, "chardev: parallel: no device path given");
3534         return;
3535     }
3536     backend->parallel = g_new0(ChardevHostdev, 1);
3537     backend->parallel->device = g_strdup(device);
3538 }
3539 #endif
3540
3541 static void qemu_chr_parse_pipe(QemuOpts *opts, ChardevBackend *backend,
3542                                 Error **errp)
3543 {
3544     const char *device = qemu_opt_get(opts, "path");
3545
3546     if (device == NULL) {
3547         error_setg(errp, "chardev: pipe: no device path given");
3548         return;
3549     }
3550     backend->pipe = g_new0(ChardevHostdev, 1);
3551     backend->pipe->device = g_strdup(device);
3552 }
3553
3554 static void qemu_chr_parse_ringbuf(QemuOpts *opts, ChardevBackend *backend,
3555                                    Error **errp)
3556 {
3557     int val;
3558
3559     backend->ringbuf = g_new0(ChardevRingbuf, 1);
3560
3561     val = qemu_opt_get_size(opts, "size", 0);
3562     if (val != 0) {
3563         backend->ringbuf->has_size = true;
3564         backend->ringbuf->size = val;
3565     }
3566 }
3567
3568 static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend,
3569                                Error **errp)
3570 {
3571     const char *chardev = qemu_opt_get(opts, "chardev");
3572
3573     if (chardev == NULL) {
3574         error_setg(errp, "chardev: mux: no chardev given");
3575         return;
3576     }
3577     backend->mux = g_new0(ChardevMux, 1);
3578     backend->mux->chardev = g_strdup(chardev);
3579 }
3580
3581 static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
3582                                   Error **errp)
3583 {
3584     bool is_listen      = qemu_opt_get_bool(opts, "server", false);
3585     bool is_waitconnect = is_listen && qemu_opt_get_bool(opts, "wait", true);
3586     bool is_telnet      = qemu_opt_get_bool(opts, "telnet", false);
3587     bool do_nodelay     = !qemu_opt_get_bool(opts, "delay", true);
3588     int64_t reconnect   = qemu_opt_get_number(opts, "reconnect", 0);
3589     const char *path = qemu_opt_get(opts, "path");
3590     const char *host = qemu_opt_get(opts, "host");
3591     const char *port = qemu_opt_get(opts, "port");
3592     SocketAddress *addr;
3593
3594     if (!path) {
3595         if (!host) {
3596             error_setg(errp, "chardev: socket: no host given");
3597             return;
3598         }
3599         if (!port) {
3600             error_setg(errp, "chardev: socket: no port given");
3601             return;
3602         }
3603     }
3604
3605     backend->socket = g_new0(ChardevSocket, 1);
3606
3607     backend->socket->has_nodelay = true;
3608     backend->socket->nodelay = do_nodelay;
3609     backend->socket->has_server = true;
3610     backend->socket->server = is_listen;
3611     backend->socket->has_telnet = true;
3612     backend->socket->telnet = is_telnet;
3613     backend->socket->has_wait = true;
3614     backend->socket->wait = is_waitconnect;
3615     backend->socket->has_reconnect = true;
3616     backend->socket->reconnect = reconnect;
3617
3618     addr = g_new0(SocketAddress, 1);
3619     if (path) {
3620         addr->kind = SOCKET_ADDRESS_KIND_UNIX;
3621         addr->q_unix = g_new0(UnixSocketAddress, 1);
3622         addr->q_unix->path = g_strdup(path);
3623     } else {
3624         addr->kind = SOCKET_ADDRESS_KIND_INET;
3625         addr->inet = g_new0(InetSocketAddress, 1);
3626         addr->inet->host = g_strdup(host);
3627         addr->inet->port = g_strdup(port);
3628         addr->inet->has_to = qemu_opt_get(opts, "to");
3629         addr->inet->to = qemu_opt_get_number(opts, "to", 0);
3630         addr->inet->has_ipv4 = qemu_opt_get(opts, "ipv4");
3631         addr->inet->ipv4 = qemu_opt_get_bool(opts, "ipv4", 0);
3632         addr->inet->has_ipv6 = qemu_opt_get(opts, "ipv6");
3633         addr->inet->ipv6 = qemu_opt_get_bool(opts, "ipv6", 0);
3634     }
3635     backend->socket->addr = addr;
3636 }
3637
3638 static void qemu_chr_parse_udp(QemuOpts *opts, ChardevBackend *backend,
3639                                Error **errp)
3640 {
3641     const char *host = qemu_opt_get(opts, "host");
3642     const char *port = qemu_opt_get(opts, "port");
3643     const char *localaddr = qemu_opt_get(opts, "localaddr");
3644     const char *localport = qemu_opt_get(opts, "localport");
3645     bool has_local = false;
3646     SocketAddress *addr;
3647
3648     if (host == NULL || strlen(host) == 0) {
3649         host = "localhost";
3650     }
3651     if (port == NULL || strlen(port) == 0) {
3652         error_setg(errp, "chardev: udp: remote port not specified");
3653         return;
3654     }
3655     if (localport == NULL || strlen(localport) == 0) {
3656         localport = "0";
3657     } else {
3658         has_local = true;
3659     }
3660     if (localaddr == NULL || strlen(localaddr) == 0) {
3661         localaddr = "";
3662     } else {
3663         has_local = true;
3664     }
3665
3666     backend->udp = g_new0(ChardevUdp, 1);
3667
3668     addr = g_new0(SocketAddress, 1);
3669     addr->kind = SOCKET_ADDRESS_KIND_INET;
3670     addr->inet = g_new0(InetSocketAddress, 1);
3671     addr->inet->host = g_strdup(host);
3672     addr->inet->port = g_strdup(port);
3673     addr->inet->has_ipv4 = qemu_opt_get(opts, "ipv4");
3674     addr->inet->ipv4 = qemu_opt_get_bool(opts, "ipv4", 0);
3675     addr->inet->has_ipv6 = qemu_opt_get(opts, "ipv6");
3676     addr->inet->ipv6 = qemu_opt_get_bool(opts, "ipv6", 0);
3677     backend->udp->remote = addr;
3678
3679     if (has_local) {
3680         backend->udp->has_local = true;
3681         addr = g_new0(SocketAddress, 1);
3682         addr->kind = SOCKET_ADDRESS_KIND_INET;
3683         addr->inet = g_new0(InetSocketAddress, 1);
3684         addr->inet->host = g_strdup(localaddr);
3685         addr->inet->port = g_strdup(localport);
3686         backend->udp->local = addr;
3687     }
3688 }
3689
3690 typedef struct CharDriver {
3691     const char *name;
3692     ChardevBackendKind kind;
3693     void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
3694     CharDriverState *(*create)(const char *id, ChardevBackend *backend,
3695                                ChardevReturn *ret, Error **errp);
3696 } CharDriver;
3697
3698 static GSList *backends;
3699
3700 void register_char_driver(const char *name, ChardevBackendKind kind,
3701         void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp),
3702         CharDriverState *(*create)(const char *id, ChardevBackend *backend,
3703                                    ChardevReturn *ret, Error **errp))
3704 {
3705     CharDriver *s;
3706
3707     s = g_malloc0(sizeof(*s));
3708     s->name = g_strdup(name);
3709     s->kind = kind;
3710     s->parse = parse;
3711     s->create = create;
3712
3713     backends = g_slist_append(backends, s);
3714 }
3715
3716 CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
3717                                     void (*init)(struct CharDriverState *s),
3718                                     Error **errp)
3719 {
3720     Error *local_err = NULL;
3721     CharDriver *cd;
3722     CharDriverState *chr;
3723     GSList *i;
3724     ChardevReturn *ret = NULL;
3725     ChardevBackend *backend;
3726     const char *id = qemu_opts_id(opts);
3727     char *bid = NULL;
3728
3729     if (id == NULL) {
3730         error_setg(errp, "chardev: no id specified");
3731         goto err;
3732     }
3733
3734     if (qemu_opt_get(opts, "backend") == NULL) {
3735         error_setg(errp, "chardev: \"%s\" missing backend",
3736                    qemu_opts_id(opts));
3737         goto err;
3738     }
3739     for (i = backends; i; i = i->next) {
3740         cd = i->data;
3741
3742         if (strcmp(cd->name, qemu_opt_get(opts, "backend")) == 0) {
3743             break;
3744         }
3745     }
3746     if (i == NULL) {
3747         error_setg(errp, "chardev: backend \"%s\" not found",
3748                    qemu_opt_get(opts, "backend"));
3749         goto err;
3750     }
3751
3752     backend = g_new0(ChardevBackend, 1);
3753
3754     if (qemu_opt_get_bool(opts, "mux", 0)) {
3755         bid = g_strdup_printf("%s-base", id);
3756     }
3757
3758     chr = NULL;
3759     backend->kind = cd->kind;
3760     if (cd->parse) {
3761         cd->parse(opts, backend, &local_err);
3762         if (local_err) {
3763             error_propagate(errp, local_err);
3764             goto qapi_out;
3765         }
3766     }
3767     ret = qmp_chardev_add(bid ? bid : id, backend, errp);
3768     if (!ret) {
3769         goto qapi_out;
3770     }
3771
3772     if (bid) {
3773         qapi_free_ChardevBackend(backend);
3774         qapi_free_ChardevReturn(ret);
3775         backend = g_new0(ChardevBackend, 1);
3776         backend->mux = g_new0(ChardevMux, 1);
3777         backend->kind = CHARDEV_BACKEND_KIND_MUX;
3778         backend->mux->chardev = g_strdup(bid);
3779         ret = qmp_chardev_add(id, backend, errp);
3780         if (!ret) {
3781             chr = qemu_chr_find(bid);
3782             qemu_chr_delete(chr);
3783             chr = NULL;
3784             goto qapi_out;
3785         }
3786     }
3787
3788     chr = qemu_chr_find(id);
3789     chr->opts = opts;
3790
3791 qapi_out:
3792     qapi_free_ChardevBackend(backend);
3793     qapi_free_ChardevReturn(ret);
3794     g_free(bid);
3795     return chr;
3796
3797 err:
3798     qemu_opts_del(opts);
3799     return NULL;
3800 }
3801
3802 CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
3803 {
3804     const char *p;
3805     CharDriverState *chr;
3806     QemuOpts *opts;
3807     Error *err = NULL;
3808
3809     if (strstart(filename, "chardev:", &p)) {
3810         return qemu_chr_find(p);
3811     }
3812
3813     opts = qemu_chr_parse_compat(label, filename);
3814     if (!opts)
3815         return NULL;
3816
3817     chr = qemu_chr_new_from_opts(opts, init, &err);
3818     if (err) {
3819         error_report_err(err);
3820     }
3821     if (chr && qemu_opt_get_bool(opts, "mux", 0)) {
3822         qemu_chr_fe_claim_no_fail(chr);
3823         monitor_init(chr, MONITOR_USE_READLINE);
3824     }
3825     return chr;
3826 }
3827
3828 void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo)
3829 {
3830     if (chr->chr_set_echo) {
3831         chr->chr_set_echo(chr, echo);
3832     }
3833 }
3834
3835 void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open)
3836 {
3837     if (chr->fe_open == fe_open) {
3838         return;
3839     }
3840     chr->fe_open = fe_open;
3841     if (chr->chr_set_fe_open) {
3842         chr->chr_set_fe_open(chr, fe_open);
3843     }
3844 }
3845
3846 void qemu_chr_fe_event(struct CharDriverState *chr, int event)
3847 {
3848     if (chr->chr_fe_event) {
3849         chr->chr_fe_event(chr, event);
3850     }
3851 }
3852
3853 int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond,
3854                           GIOFunc func, void *user_data)
3855 {
3856     GSource *src;
3857     guint tag;
3858
3859     if (s->chr_add_watch == NULL) {
3860         return -ENOSYS;
3861     }
3862
3863     src = s->chr_add_watch(s, cond);
3864     if (!src) {
3865         return -EINVAL;
3866     }
3867
3868     g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
3869     tag = g_source_attach(src, NULL);
3870     g_source_unref(src);
3871
3872     return tag;
3873 }
3874
3875 int qemu_chr_fe_claim(CharDriverState *s)
3876 {
3877     if (s->avail_connections < 1) {
3878         return -1;
3879     }
3880     s->avail_connections--;
3881     return 0;
3882 }
3883
3884 void qemu_chr_fe_claim_no_fail(CharDriverState *s)
3885 {
3886     if (qemu_chr_fe_claim(s) != 0) {
3887         fprintf(stderr, "%s: error chardev \"%s\" already used\n",
3888                 __func__, s->label);
3889         exit(1);
3890     }
3891 }
3892
3893 void qemu_chr_fe_release(CharDriverState *s)
3894 {
3895     s->avail_connections++;
3896 }
3897
3898 void qemu_chr_delete(CharDriverState *chr)
3899 {
3900     QTAILQ_REMOVE(&chardevs, chr, next);
3901     if (chr->chr_close) {
3902         chr->chr_close(chr);
3903     }
3904     g_free(chr->filename);
3905     g_free(chr->label);
3906     qemu_opts_del(chr->opts);
3907     g_free(chr);
3908 }
3909
3910 ChardevInfoList *qmp_query_chardev(Error **errp)
3911 {
3912     ChardevInfoList *chr_list = NULL;
3913     CharDriverState *chr;
3914
3915     QTAILQ_FOREACH(chr, &chardevs, next) {
3916         ChardevInfoList *info = g_malloc0(sizeof(*info));
3917         info->value = g_malloc0(sizeof(*info->value));
3918         info->value->label = g_strdup(chr->label);
3919         info->value->filename = g_strdup(chr->filename);
3920         info->value->frontend_open = chr->fe_open;
3921
3922         info->next = chr_list;
3923         chr_list = info;
3924     }
3925
3926     return chr_list;
3927 }
3928
3929 ChardevBackendInfoList *qmp_query_chardev_backends(Error **errp)
3930 {
3931     ChardevBackendInfoList *backend_list = NULL;
3932     CharDriver *c = NULL;
3933     GSList *i = NULL;
3934
3935     for (i = backends; i; i = i->next) {
3936         ChardevBackendInfoList *info = g_malloc0(sizeof(*info));
3937         c = i->data;
3938         info->value = g_malloc0(sizeof(*info->value));
3939         info->value->name = g_strdup(c->name);
3940
3941         info->next = backend_list;
3942         backend_list = info;
3943     }
3944
3945     return backend_list;
3946 }
3947
3948 CharDriverState *qemu_chr_find(const char *name)
3949 {
3950     CharDriverState *chr;
3951
3952     QTAILQ_FOREACH(chr, &chardevs, next) {
3953         if (strcmp(chr->label, name) != 0)
3954             continue;
3955         return chr;
3956     }
3957     return NULL;
3958 }
3959
3960 /* Get a character (serial) device interface.  */
3961 CharDriverState *qemu_char_get_next_serial(void)
3962 {
3963     static int next_serial;
3964     CharDriverState *chr;
3965
3966     /* FIXME: This function needs to go away: use chardev properties!  */
3967
3968     while (next_serial < MAX_SERIAL_PORTS && serial_hds[next_serial]) {
3969         chr = serial_hds[next_serial++];
3970         qemu_chr_fe_claim_no_fail(chr);
3971         return chr;
3972     }
3973     return NULL;
3974 }
3975
3976 QemuOptsList qemu_chardev_opts = {
3977     .name = "chardev",
3978     .implied_opt_name = "backend",
3979     .head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
3980     .desc = {
3981         {
3982             .name = "backend",
3983             .type = QEMU_OPT_STRING,
3984         },{
3985             .name = "path",
3986             .type = QEMU_OPT_STRING,
3987         },{
3988             .name = "host",
3989             .type = QEMU_OPT_STRING,
3990         },{
3991             .name = "port",
3992             .type = QEMU_OPT_STRING,
3993         },{
3994             .name = "localaddr",
3995             .type = QEMU_OPT_STRING,
3996         },{
3997             .name = "localport",
3998             .type = QEMU_OPT_STRING,
3999         },{
4000             .name = "to",
4001             .type = QEMU_OPT_NUMBER,
4002         },{
4003             .name = "ipv4",
4004             .type = QEMU_OPT_BOOL,
4005         },{
4006             .name = "ipv6",
4007             .type = QEMU_OPT_BOOL,
4008         },{
4009             .name = "wait",
4010             .type = QEMU_OPT_BOOL,
4011         },{
4012             .name = "server",
4013             .type = QEMU_OPT_BOOL,
4014         },{
4015             .name = "delay",
4016             .type = QEMU_OPT_BOOL,
4017         },{
4018             .name = "reconnect",
4019             .type = QEMU_OPT_NUMBER,
4020         },{
4021             .name = "telnet",
4022             .type = QEMU_OPT_BOOL,
4023         },{
4024             .name = "width",
4025             .type = QEMU_OPT_NUMBER,
4026         },{
4027             .name = "height",
4028             .type = QEMU_OPT_NUMBER,
4029         },{
4030             .name = "cols",
4031             .type = QEMU_OPT_NUMBER,
4032         },{
4033             .name = "rows",
4034             .type = QEMU_OPT_NUMBER,
4035         },{
4036             .name = "mux",
4037             .type = QEMU_OPT_BOOL,
4038         },{
4039             .name = "signal",
4040             .type = QEMU_OPT_BOOL,
4041         },{
4042             .name = "name",
4043             .type = QEMU_OPT_STRING,
4044         },{
4045             .name = "debug",
4046             .type = QEMU_OPT_NUMBER,
4047         },{
4048             .name = "size",
4049             .type = QEMU_OPT_SIZE,
4050         },{
4051             .name = "chardev",
4052             .type = QEMU_OPT_STRING,
4053         },
4054         { /* end of list */ }
4055     },
4056 };
4057
4058 #ifdef _WIN32
4059
4060 static CharDriverState *qmp_chardev_open_file(const char *id,
4061                                               ChardevBackend *backend,
4062                                               ChardevReturn *ret,
4063                                               Error **errp)
4064 {
4065     ChardevFile *file = backend->file;
4066     HANDLE out;
4067
4068     if (file->has_in) {
4069         error_setg(errp, "input file not supported");
4070         return NULL;
4071     }
4072
4073     out = CreateFile(file->out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
4074                      OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
4075     if (out == INVALID_HANDLE_VALUE) {
4076         error_setg(errp, "open %s failed", file->out);
4077         return NULL;
4078     }
4079     return qemu_chr_open_win_file(out);
4080 }
4081
4082 static CharDriverState *qmp_chardev_open_serial(const char *id,
4083                                                 ChardevBackend *backend,
4084                                                 ChardevReturn *ret,
4085                                                 Error **errp)
4086 {
4087     ChardevHostdev *serial = backend->serial;
4088     return qemu_chr_open_win_path(serial->device, errp);
4089 }
4090
4091 #else /* WIN32 */
4092
4093 static int qmp_chardev_open_file_source(char *src, int flags,
4094                                         Error **errp)
4095 {
4096     int fd = -1;
4097
4098     TFR(fd = qemu_open(src, flags, 0666));
4099     if (fd == -1) {
4100         error_setg_file_open(errp, errno, src);
4101     }
4102     return fd;
4103 }
4104
4105 static CharDriverState *qmp_chardev_open_file(const char *id,
4106                                               ChardevBackend *backend,
4107                                               ChardevReturn *ret,
4108                                               Error **errp)
4109 {
4110     ChardevFile *file = backend->file;
4111     int flags, in = -1, out;
4112
4113     flags = O_WRONLY | O_TRUNC | O_CREAT | O_BINARY;
4114     out = qmp_chardev_open_file_source(file->out, flags, errp);
4115     if (out < 0) {
4116         return NULL;
4117     }
4118
4119     if (file->has_in) {
4120         flags = O_RDONLY;
4121         in = qmp_chardev_open_file_source(file->in, flags, errp);
4122         if (in < 0) {
4123             qemu_close(out);
4124             return NULL;
4125         }
4126     }
4127
4128     return qemu_chr_open_fd(in, out);
4129 }
4130
4131 #ifdef HAVE_CHARDEV_SERIAL
4132 static CharDriverState *qmp_chardev_open_serial(const char *id,
4133                                                 ChardevBackend *backend,
4134                                                 ChardevReturn *ret,
4135                                                 Error **errp)
4136 {
4137     ChardevHostdev *serial = backend->serial;
4138     int fd;
4139
4140     fd = qmp_chardev_open_file_source(serial->device, O_RDWR, errp);
4141     if (fd < 0) {
4142         return NULL;
4143     }
4144     qemu_set_nonblock(fd);
4145     return qemu_chr_open_tty_fd(fd);
4146 }
4147 #endif
4148
4149 #ifdef HAVE_CHARDEV_PARPORT
4150 static CharDriverState *qmp_chardev_open_parallel(const char *id,
4151                                                   ChardevBackend *backend,
4152                                                   ChardevReturn *ret,
4153                                                   Error **errp)
4154 {
4155     ChardevHostdev *parallel = backend->parallel;
4156     int fd;
4157
4158     fd = qmp_chardev_open_file_source(parallel->device, O_RDWR, errp);
4159     if (fd < 0) {
4160         return NULL;
4161     }
4162     return qemu_chr_open_pp_fd(fd, errp);
4163 }
4164 #endif
4165
4166 #endif /* WIN32 */
4167
4168 static void socket_try_connect(CharDriverState *chr)
4169 {
4170     Error *err = NULL;
4171
4172     if (!qemu_chr_open_socket_fd(chr, &err)) {
4173         check_report_connect_error(chr, err);
4174     }
4175 }
4176
4177 static gboolean socket_reconnect_timeout(gpointer opaque)
4178 {
4179     CharDriverState *chr = opaque;
4180     TCPCharDriver *s = chr->opaque;
4181
4182     s->reconnect_timer = 0;
4183
4184     if (chr->be_open) {
4185         return false;
4186     }
4187
4188     socket_try_connect(chr);
4189
4190     return false;
4191 }
4192
4193 static CharDriverState *qmp_chardev_open_socket(const char *id,
4194                                                 ChardevBackend *backend,
4195                                                 ChardevReturn *ret,
4196                                                 Error **errp)
4197 {
4198     CharDriverState *chr;
4199     TCPCharDriver *s;
4200     ChardevSocket *sock = backend->socket;
4201     SocketAddress *addr = sock->addr;
4202     bool do_nodelay     = sock->has_nodelay ? sock->nodelay : false;
4203     bool is_listen      = sock->has_server  ? sock->server  : true;
4204     bool is_telnet      = sock->has_telnet  ? sock->telnet  : false;
4205     bool is_waitconnect = sock->has_wait    ? sock->wait    : false;
4206     int64_t reconnect   = sock->has_reconnect ? sock->reconnect : 0;
4207
4208     chr = qemu_chr_alloc();
4209     s = g_new0(TCPCharDriver, 1);
4210
4211     s->fd = -1;
4212     s->listen_fd = -1;
4213     s->is_unix = addr->kind == SOCKET_ADDRESS_KIND_UNIX;
4214     s->is_listen = is_listen;
4215     s->is_telnet = is_telnet;
4216     s->do_nodelay = do_nodelay;
4217     qapi_copy_SocketAddress(&s->addr, sock->addr);
4218
4219     chr->opaque = s;
4220     chr->chr_write = tcp_chr_write;
4221     chr->chr_sync_read = tcp_chr_sync_read;
4222     chr->chr_close = tcp_chr_close;
4223     chr->get_msgfds = tcp_get_msgfds;
4224     chr->set_msgfds = tcp_set_msgfds;
4225     chr->chr_add_client = tcp_chr_add_client;
4226     chr->chr_add_watch = tcp_chr_add_watch;
4227     chr->chr_update_read_handler = tcp_chr_update_read_handler;
4228     /* be isn't opened until we get a connection */
4229     chr->explicit_be_open = true;
4230
4231     chr->filename = g_malloc(CHR_MAX_FILENAME_SIZE);
4232     SocketAddress_to_str(chr->filename, CHR_MAX_FILENAME_SIZE, "disconnected:",
4233                          addr, is_listen, is_telnet);
4234
4235     if (is_listen) {
4236         if (is_telnet) {
4237             s->do_telnetopt = 1;
4238         }
4239     } else if (reconnect > 0) {
4240         s->reconnect_time = reconnect;
4241     }
4242
4243     if (s->reconnect_time) {
4244         socket_try_connect(chr);
4245     } else if (!qemu_chr_open_socket_fd(chr, errp)) {
4246         g_free(s);
4247         g_free(chr->filename);
4248         g_free(chr);
4249         return NULL;
4250     }
4251
4252     if (is_listen && is_waitconnect) {
4253         fprintf(stderr, "QEMU waiting for connection on: %s\n",
4254                 chr->filename);
4255         tcp_chr_accept(s->listen_chan, G_IO_IN, chr);
4256         qemu_set_nonblock(s->listen_fd);
4257     }
4258
4259     return chr;
4260 }
4261
4262 static CharDriverState *qmp_chardev_open_udp(const char *id,
4263                                              ChardevBackend *backend,
4264                                              ChardevReturn *ret,
4265                                              Error **errp)
4266 {
4267     ChardevUdp *udp = backend->udp;
4268     int fd;
4269
4270     fd = socket_dgram(udp->remote, udp->local, errp);
4271     if (fd < 0) {
4272         return NULL;
4273     }
4274     return qemu_chr_open_udp_fd(fd);
4275 }
4276
4277 ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
4278                                Error **errp)
4279 {
4280     ChardevReturn *ret = g_new0(ChardevReturn, 1);
4281     CharDriverState *chr = NULL;
4282     Error *local_err = NULL;
4283     GSList *i;
4284     CharDriver *cd;
4285
4286     chr = qemu_chr_find(id);
4287     if (chr) {
4288         error_setg(errp, "Chardev '%s' already exists", id);
4289         g_free(ret);
4290         return NULL;
4291     }
4292
4293     for (i = backends; i; i = i->next) {
4294         cd = i->data;
4295
4296         if (cd->kind == backend->kind && cd->create) {
4297             chr = cd->create(id, backend, ret, &local_err);
4298             if (local_err) {
4299                 error_propagate(errp, local_err);
4300                 goto out_error;
4301             }
4302             break;
4303         }
4304     }
4305
4306     if (chr == NULL) {
4307         switch (backend->kind) {
4308         case CHARDEV_BACKEND_KIND_FILE:
4309             abort();
4310             break;
4311         case CHARDEV_BACKEND_KIND_SERIAL:
4312             abort();
4313             break;
4314         case CHARDEV_BACKEND_KIND_PARALLEL:
4315             abort();
4316             break;
4317         case CHARDEV_BACKEND_KIND_PIPE:
4318             abort();
4319             break;
4320         case CHARDEV_BACKEND_KIND_SOCKET:
4321             abort();
4322             break;
4323         case CHARDEV_BACKEND_KIND_UDP:
4324             abort();
4325             break;
4326         case CHARDEV_BACKEND_KIND_PTY:
4327             abort();
4328             break;
4329         case CHARDEV_BACKEND_KIND_NULL:
4330             abort();
4331             break;
4332         case CHARDEV_BACKEND_KIND_MUX:
4333             abort();
4334             break;
4335         case CHARDEV_BACKEND_KIND_MSMOUSE:
4336             abort();
4337             break;
4338         case CHARDEV_BACKEND_KIND_BRAILLE:
4339             abort();
4340             break;
4341         case CHARDEV_BACKEND_KIND_TESTDEV:
4342             abort();
4343             break;
4344         case CHARDEV_BACKEND_KIND_STDIO:
4345             abort();
4346             break;
4347 #ifdef _WIN32
4348         case CHARDEV_BACKEND_KIND_CONSOLE:
4349             chr = qemu_chr_open_win_con();
4350             break;
4351 #endif
4352 #ifdef CONFIG_SPICE
4353         case CHARDEV_BACKEND_KIND_SPICEVMC:
4354             chr = qemu_chr_open_spice_vmc(backend->spicevmc->type);
4355             break;
4356         case CHARDEV_BACKEND_KIND_SPICEPORT:
4357             chr = qemu_chr_open_spice_port(backend->spiceport->fqdn);
4358             break;
4359 #endif
4360         case CHARDEV_BACKEND_KIND_VC:
4361             chr = vc_init(backend->vc);
4362             break;
4363         case CHARDEV_BACKEND_KIND_RINGBUF:
4364         case CHARDEV_BACKEND_KIND_MEMORY:
4365             chr = qemu_chr_open_ringbuf(backend->ringbuf, &local_err);
4366             break;
4367         default:
4368             error_setg(errp, "unknown chardev backend (%d)", backend->kind);
4369             goto out_error;
4370         }
4371
4372         /*
4373          * Character backend open hasn't been fully converted to the Error
4374          * API.  Some opens fail without setting an error.  Set a generic
4375          * error then.
4376          * TODO full conversion to Error API
4377          */
4378         if (chr == NULL) {
4379             if (local_err) {
4380                 error_propagate(errp, local_err);
4381             } else {
4382                 error_setg(errp, "Failed to create chardev");
4383             }
4384             goto out_error;
4385         }
4386     }
4387
4388     chr->label = g_strdup(id);
4389     chr->avail_connections =
4390         (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
4391     if (!chr->filename) {
4392         chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
4393     }
4394     if (!chr->explicit_be_open) {
4395         qemu_chr_be_event(chr, CHR_EVENT_OPENED);
4396     }
4397     QTAILQ_INSERT_TAIL(&chardevs, chr, next);
4398     return ret;
4399
4400 out_error:
4401     g_free(ret);
4402     return NULL;
4403 }
4404
4405 void qmp_chardev_remove(const char *id, Error **errp)
4406 {
4407     CharDriverState *chr;
4408
4409     chr = qemu_chr_find(id);
4410     if (chr == NULL) {
4411         error_setg(errp, "Chardev '%s' not found", id);
4412         return;
4413     }
4414     if (chr->chr_can_read || chr->chr_read ||
4415         chr->chr_event || chr->handler_opaque) {
4416         error_setg(errp, "Chardev '%s' is busy", id);
4417         return;
4418     }
4419     qemu_chr_delete(chr);
4420 }
4421
4422 static void register_types(void)
4423 {
4424     register_char_driver("null", CHARDEV_BACKEND_KIND_NULL, NULL,
4425                          qemu_chr_open_null);
4426     register_char_driver("socket", CHARDEV_BACKEND_KIND_SOCKET,
4427                          qemu_chr_parse_socket, qmp_chardev_open_socket);
4428     register_char_driver("udp", CHARDEV_BACKEND_KIND_UDP, qemu_chr_parse_udp,
4429                          qmp_chardev_open_udp);
4430     register_char_driver("ringbuf", CHARDEV_BACKEND_KIND_RINGBUF,
4431                          qemu_chr_parse_ringbuf, NULL);
4432     register_char_driver("file", CHARDEV_BACKEND_KIND_FILE,
4433                          qemu_chr_parse_file_out, qmp_chardev_open_file);
4434     register_char_driver("stdio", CHARDEV_BACKEND_KIND_STDIO,
4435                          qemu_chr_parse_stdio, qemu_chr_open_stdio);
4436 #if defined HAVE_CHARDEV_SERIAL
4437     register_char_driver("serial", CHARDEV_BACKEND_KIND_SERIAL,
4438                          qemu_chr_parse_serial, qmp_chardev_open_serial);
4439     register_char_driver("tty", CHARDEV_BACKEND_KIND_SERIAL,
4440                          qemu_chr_parse_serial, qmp_chardev_open_serial);
4441 #endif
4442 #ifdef HAVE_CHARDEV_PARPORT
4443     register_char_driver("parallel", CHARDEV_BACKEND_KIND_PARALLEL,
4444                          qemu_chr_parse_parallel, qmp_chardev_open_parallel);
4445     register_char_driver("parport", CHARDEV_BACKEND_KIND_PARALLEL,
4446                          qemu_chr_parse_parallel, qmp_chardev_open_parallel);
4447 #endif
4448 #ifdef HAVE_CHARDEV_PTY
4449     register_char_driver("pty", CHARDEV_BACKEND_KIND_PTY, NULL,
4450                          qemu_chr_open_pty);
4451 #endif
4452     register_char_driver("console", CHARDEV_BACKEND_KIND_CONSOLE, NULL,
4453                          NULL);
4454     register_char_driver("pipe", CHARDEV_BACKEND_KIND_PIPE,
4455                          qemu_chr_parse_pipe, qemu_chr_open_pipe);
4456     register_char_driver("mux", CHARDEV_BACKEND_KIND_MUX, qemu_chr_parse_mux,
4457                          qemu_chr_open_mux);
4458     /* Bug-compatibility: */
4459     register_char_driver("memory", CHARDEV_BACKEND_KIND_MEMORY,
4460                          qemu_chr_parse_ringbuf, NULL);
4461     /* this must be done after machine init, since we register FEs with muxes
4462      * as part of realize functions like serial_isa_realizefn when -nographic
4463      * is specified
4464      */
4465     qemu_add_machine_init_done_notifier(&muxes_realize_notify);
4466 }
4467
4468 type_init(register_types);