Statistics
| Branch: | Revision:

root / qemu-char.c @ 26c60614

History | View | Annotate | Download (93.2 kB)

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 "ui/console.h"
27
#include "sysemu/sysemu.h"
28
#include "qemu/timer.h"
29
#include "char/char.h"
30
#include "hw/usb.h"
31
#include "hw/baum.h"
32
#include "hw/msmouse.h"
33
#include "qmp-commands.h"
34

    
35
#include <unistd.h>
36
#include <fcntl.h>
37
#include <time.h>
38
#include <errno.h>
39
#include <sys/time.h>
40
#include <zlib.h>
41

    
42
#ifndef _WIN32
43
#include <sys/times.h>
44
#include <sys/wait.h>
45
#include <termios.h>
46
#include <sys/mman.h>
47
#include <sys/ioctl.h>
48
#include <sys/resource.h>
49
#include <sys/socket.h>
50
#include <netinet/in.h>
51
#include <net/if.h>
52
#include <arpa/inet.h>
53
#include <dirent.h>
54
#include <netdb.h>
55
#include <sys/select.h>
56
#ifdef CONFIG_BSD
57
#include <sys/stat.h>
58
#if defined(__GLIBC__)
59
#include <pty.h>
60
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
61
#include <libutil.h>
62
#else
63
#include <util.h>
64
#endif
65
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
66
#include <dev/ppbus/ppi.h>
67
#include <dev/ppbus/ppbconf.h>
68
#elif defined(__DragonFly__)
69
#include <dev/misc/ppi/ppi.h>
70
#include <bus/ppbus/ppbconf.h>
71
#endif
72
#else
73
#ifdef __linux__
74
#include <pty.h>
75

    
76
#include <linux/ppdev.h>
77
#include <linux/parport.h>
78
#endif
79
#ifdef __sun__
80
#include <sys/stat.h>
81
#include <sys/ethernet.h>
82
#include <sys/sockio.h>
83
#include <netinet/arp.h>
84
#include <netinet/in.h>
85
#include <netinet/in_systm.h>
86
#include <netinet/ip.h>
87
#include <netinet/ip_icmp.h> // must come after ip.h
88
#include <netinet/udp.h>
89
#include <netinet/tcp.h>
90
#include <net/if.h>
91
#include <syslog.h>
92
#include <stropts.h>
93
#endif
94
#endif
95
#endif
96

    
97
#include "qemu/sockets.h"
98
#include "ui/qemu-spice.h"
99

    
100
#define READ_BUF_LEN 4096
101

    
102
/***********************************************************/
103
/* character device */
104

    
105
static QTAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
106
    QTAILQ_HEAD_INITIALIZER(chardevs);
107

    
108
void qemu_chr_be_event(CharDriverState *s, int event)
109
{
110
    /* Keep track if the char device is open */
111
    switch (event) {
112
        case CHR_EVENT_OPENED:
113
            s->opened = 1;
114
            break;
115
        case CHR_EVENT_CLOSED:
116
            s->opened = 0;
117
            break;
118
    }
119

    
120
    if (!s->chr_event)
121
        return;
122
    s->chr_event(s->handler_opaque, event);
123
}
124

    
125
static gboolean qemu_chr_generic_open_bh(gpointer opaque)
126
{
127
    CharDriverState *s = opaque;
128
    qemu_chr_be_event(s, CHR_EVENT_OPENED);
129
    s->idle_tag = 0;
130
    return FALSE;
131
}
132

    
133
void qemu_chr_generic_open(CharDriverState *s)
134
{
135
    if (s->idle_tag == 0) {
136
        s->idle_tag = g_idle_add(qemu_chr_generic_open_bh, s);
137
    }
138
}
139

    
140
int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len)
141
{
142
    return s->chr_write(s, buf, len);
143
}
144

    
145
int qemu_chr_fe_ioctl(CharDriverState *s, int cmd, void *arg)
146
{
147
    if (!s->chr_ioctl)
148
        return -ENOTSUP;
149
    return s->chr_ioctl(s, cmd, arg);
150
}
151

    
152
int qemu_chr_be_can_write(CharDriverState *s)
153
{
154
    if (!s->chr_can_read)
155
        return 0;
156
    return s->chr_can_read(s->handler_opaque);
157
}
158

    
159
void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len)
160
{
161
    if (s->chr_read) {
162
        s->chr_read(s->handler_opaque, buf, len);
163
    }
164
}
165

    
166
int qemu_chr_fe_get_msgfd(CharDriverState *s)
167
{
168
    return s->get_msgfd ? s->get_msgfd(s) : -1;
169
}
170

    
171
int qemu_chr_add_client(CharDriverState *s, int fd)
172
{
173
    return s->chr_add_client ? s->chr_add_client(s, fd) : -1;
174
}
175

    
176
void qemu_chr_accept_input(CharDriverState *s)
177
{
178
    if (s->chr_accept_input)
179
        s->chr_accept_input(s);
180
    qemu_notify_event();
181
}
182

    
183
void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
184
{
185
    char buf[READ_BUF_LEN];
186
    va_list ap;
187
    va_start(ap, fmt);
188
    vsnprintf(buf, sizeof(buf), fmt, ap);
189
    qemu_chr_fe_write(s, (uint8_t *)buf, strlen(buf));
190
    va_end(ap);
191
}
192

    
193
void qemu_chr_add_handlers(CharDriverState *s,
194
                           IOCanReadHandler *fd_can_read,
195
                           IOReadHandler *fd_read,
196
                           IOEventHandler *fd_event,
197
                           void *opaque)
198
{
199
    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
200
        /* chr driver being released. */
201
        ++s->avail_connections;
202
    }
203
    s->chr_can_read = fd_can_read;
204
    s->chr_read = fd_read;
205
    s->chr_event = fd_event;
206
    s->handler_opaque = opaque;
207
    if (s->chr_update_read_handler)
208
        s->chr_update_read_handler(s);
209

    
210
    /* We're connecting to an already opened device, so let's make sure we
211
       also get the open event */
212
    if (s->opened) {
213
        qemu_chr_generic_open(s);
214
    }
215
}
216

    
217
static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
218
{
219
    return len;
220
}
221

    
222
static CharDriverState *qemu_chr_open_null(QemuOpts *opts)
223
{
224
    CharDriverState *chr;
225

    
226
    chr = g_malloc0(sizeof(CharDriverState));
227
    chr->chr_write = null_chr_write;
228
    return chr;
229
}
230

    
231
/* MUX driver for serial I/O splitting */
232
#define MAX_MUX 4
233
#define MUX_BUFFER_SIZE 32        /* Must be a power of 2.  */
234
#define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
235
typedef struct {
236
    IOCanReadHandler *chr_can_read[MAX_MUX];
237
    IOReadHandler *chr_read[MAX_MUX];
238
    IOEventHandler *chr_event[MAX_MUX];
239
    void *ext_opaque[MAX_MUX];
240
    CharDriverState *drv;
241
    int focus;
242
    int mux_cnt;
243
    int term_got_escape;
244
    int max_size;
245
    /* Intermediate input buffer allows to catch escape sequences even if the
246
       currently active device is not accepting any input - but only until it
247
       is full as well. */
248
    unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE];
249
    int prod[MAX_MUX];
250
    int cons[MAX_MUX];
251
    int timestamps;
252
    int linestart;
253
    int64_t timestamps_start;
254
} MuxDriver;
255

    
256

    
257
static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
258
{
259
    MuxDriver *d = chr->opaque;
260
    int ret;
261
    if (!d->timestamps) {
262
        ret = d->drv->chr_write(d->drv, buf, len);
263
    } else {
264
        int i;
265

    
266
        ret = 0;
267
        for (i = 0; i < len; i++) {
268
            if (d->linestart) {
269
                char buf1[64];
270
                int64_t ti;
271
                int secs;
272

    
273
                ti = qemu_get_clock_ms(rt_clock);
274
                if (d->timestamps_start == -1)
275
                    d->timestamps_start = ti;
276
                ti -= d->timestamps_start;
277
                secs = ti / 1000;
278
                snprintf(buf1, sizeof(buf1),
279
                         "[%02d:%02d:%02d.%03d] ",
280
                         secs / 3600,
281
                         (secs / 60) % 60,
282
                         secs % 60,
283
                         (int)(ti % 1000));
284
                d->drv->chr_write(d->drv, (uint8_t *)buf1, strlen(buf1));
285
                d->linestart = 0;
286
            }
287
            ret += d->drv->chr_write(d->drv, buf+i, 1);
288
            if (buf[i] == '\n') {
289
                d->linestart = 1;
290
            }
291
        }
292
    }
293
    return ret;
294
}
295

    
296
static const char * const mux_help[] = {
297
    "% h    print this help\n\r",
298
    "% x    exit emulator\n\r",
299
    "% s    save disk data back to file (if -snapshot)\n\r",
300
    "% t    toggle console timestamps\n\r"
301
    "% b    send break (magic sysrq)\n\r",
302
    "% c    switch between console and monitor\n\r",
303
    "% %  sends %\n\r",
304
    NULL
305
};
306

    
307
int term_escape_char = 0x01; /* ctrl-a is used for escape */
308
static void mux_print_help(CharDriverState *chr)
309
{
310
    int i, j;
311
    char ebuf[15] = "Escape-Char";
312
    char cbuf[50] = "\n\r";
313

    
314
    if (term_escape_char > 0 && term_escape_char < 26) {
315
        snprintf(cbuf, sizeof(cbuf), "\n\r");
316
        snprintf(ebuf, sizeof(ebuf), "C-%c", term_escape_char - 1 + 'a');
317
    } else {
318
        snprintf(cbuf, sizeof(cbuf),
319
                 "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
320
                 term_escape_char);
321
    }
322
    chr->chr_write(chr, (uint8_t *)cbuf, strlen(cbuf));
323
    for (i = 0; mux_help[i] != NULL; i++) {
324
        for (j=0; mux_help[i][j] != '\0'; j++) {
325
            if (mux_help[i][j] == '%')
326
                chr->chr_write(chr, (uint8_t *)ebuf, strlen(ebuf));
327
            else
328
                chr->chr_write(chr, (uint8_t *)&mux_help[i][j], 1);
329
        }
330
    }
331
}
332

    
333
static void mux_chr_send_event(MuxDriver *d, int mux_nr, int event)
334
{
335
    if (d->chr_event[mux_nr])
336
        d->chr_event[mux_nr](d->ext_opaque[mux_nr], event);
337
}
338

    
339
static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
340
{
341
    if (d->term_got_escape) {
342
        d->term_got_escape = 0;
343
        if (ch == term_escape_char)
344
            goto send_char;
345
        switch(ch) {
346
        case '?':
347
        case 'h':
348
            mux_print_help(chr);
349
            break;
350
        case 'x':
351
            {
352
                 const char *term =  "QEMU: Terminated\n\r";
353
                 chr->chr_write(chr,(uint8_t *)term,strlen(term));
354
                 exit(0);
355
                 break;
356
            }
357
        case 's':
358
            bdrv_commit_all();
359
            break;
360
        case 'b':
361
            qemu_chr_be_event(chr, CHR_EVENT_BREAK);
362
            break;
363
        case 'c':
364
            /* Switch to the next registered device */
365
            mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
366
            d->focus++;
367
            if (d->focus >= d->mux_cnt)
368
                d->focus = 0;
369
            mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
370
            break;
371
        case 't':
372
            d->timestamps = !d->timestamps;
373
            d->timestamps_start = -1;
374
            d->linestart = 0;
375
            break;
376
        }
377
    } else if (ch == term_escape_char) {
378
        d->term_got_escape = 1;
379
    } else {
380
    send_char:
381
        return 1;
382
    }
383
    return 0;
384
}
385

    
386
static void mux_chr_accept_input(CharDriverState *chr)
387
{
388
    MuxDriver *d = chr->opaque;
389
    int m = d->focus;
390

    
391
    while (d->prod[m] != d->cons[m] &&
392
           d->chr_can_read[m] &&
393
           d->chr_can_read[m](d->ext_opaque[m])) {
394
        d->chr_read[m](d->ext_opaque[m],
395
                       &d->buffer[m][d->cons[m]++ & MUX_BUFFER_MASK], 1);
396
    }
397
}
398

    
399
static int mux_chr_can_read(void *opaque)
400
{
401
    CharDriverState *chr = opaque;
402
    MuxDriver *d = chr->opaque;
403
    int m = d->focus;
404

    
405
    if ((d->prod[m] - d->cons[m]) < MUX_BUFFER_SIZE)
406
        return 1;
407
    if (d->chr_can_read[m])
408
        return d->chr_can_read[m](d->ext_opaque[m]);
409
    return 0;
410
}
411

    
412
static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
413
{
414
    CharDriverState *chr = opaque;
415
    MuxDriver *d = chr->opaque;
416
    int m = d->focus;
417
    int i;
418

    
419
    mux_chr_accept_input (opaque);
420

    
421
    for(i = 0; i < size; i++)
422
        if (mux_proc_byte(chr, d, buf[i])) {
423
            if (d->prod[m] == d->cons[m] &&
424
                d->chr_can_read[m] &&
425
                d->chr_can_read[m](d->ext_opaque[m]))
426
                d->chr_read[m](d->ext_opaque[m], &buf[i], 1);
427
            else
428
                d->buffer[m][d->prod[m]++ & MUX_BUFFER_MASK] = buf[i];
429
        }
430
}
431

    
432
static void mux_chr_event(void *opaque, int event)
433
{
434
    CharDriverState *chr = opaque;
435
    MuxDriver *d = chr->opaque;
436
    int i;
437

    
438
    /* Send the event to all registered listeners */
439
    for (i = 0; i < d->mux_cnt; i++)
440
        mux_chr_send_event(d, i, event);
441
}
442

    
443
static void mux_chr_update_read_handler(CharDriverState *chr)
444
{
445
    MuxDriver *d = chr->opaque;
446

    
447
    if (d->mux_cnt >= MAX_MUX) {
448
        fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
449
        return;
450
    }
451
    d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
452
    d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
453
    d->chr_read[d->mux_cnt] = chr->chr_read;
454
    d->chr_event[d->mux_cnt] = chr->chr_event;
455
    /* Fix up the real driver with mux routines */
456
    if (d->mux_cnt == 0) {
457
        qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
458
                              mux_chr_event, chr);
459
    }
460
    if (d->focus != -1) {
461
        mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
462
    }
463
    d->focus = d->mux_cnt;
464
    d->mux_cnt++;
465
    mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
466
}
467

    
468
static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
469
{
470
    CharDriverState *chr;
471
    MuxDriver *d;
472

    
473
    chr = g_malloc0(sizeof(CharDriverState));
474
    d = g_malloc0(sizeof(MuxDriver));
475

    
476
    chr->opaque = d;
477
    d->drv = drv;
478
    d->focus = -1;
479
    chr->chr_write = mux_chr_write;
480
    chr->chr_update_read_handler = mux_chr_update_read_handler;
481
    chr->chr_accept_input = mux_chr_accept_input;
482
    /* Frontend guest-open / -close notification is not support with muxes */
483
    chr->chr_guest_open = NULL;
484
    chr->chr_guest_close = NULL;
485

    
486
    /* Muxes are always open on creation */
487
    qemu_chr_generic_open(chr);
488

    
489
    return chr;
490
}
491

    
492

    
493
#ifdef _WIN32
494
int send_all(int fd, const void *buf, int len1)
495
{
496
    int ret, len;
497

    
498
    len = len1;
499
    while (len > 0) {
500
        ret = send(fd, buf, len, 0);
501
        if (ret < 0) {
502
            errno = WSAGetLastError();
503
            if (errno != WSAEWOULDBLOCK) {
504
                return -1;
505
            }
506
        } else if (ret == 0) {
507
            break;
508
        } else {
509
            buf += ret;
510
            len -= ret;
511
        }
512
    }
513
    return len1 - len;
514
}
515

    
516
#else
517

    
518
int send_all(int fd, const void *_buf, int len1)
519
{
520
    int ret, len;
521
    const uint8_t *buf = _buf;
522

    
523
    len = len1;
524
    while (len > 0) {
525
        ret = write(fd, buf, len);
526
        if (ret < 0) {
527
            if (errno != EINTR && errno != EAGAIN)
528
                return -1;
529
        } else if (ret == 0) {
530
            break;
531
        } else {
532
            buf += ret;
533
            len -= ret;
534
        }
535
    }
536
    return len1 - len;
537
}
538
#endif /* !_WIN32 */
539

    
540
#ifndef _WIN32
541

    
542
typedef struct IOWatchPoll
543
{
544
    GSource *src;
545
    int max_size;
546

    
547
    IOCanReadHandler *fd_can_read;
548
    void *opaque;
549

    
550
    QTAILQ_ENTRY(IOWatchPoll) node;
551
} IOWatchPoll;
552

    
553
static QTAILQ_HEAD(, IOWatchPoll) io_watch_poll_list =
554
    QTAILQ_HEAD_INITIALIZER(io_watch_poll_list);
555

    
556
static IOWatchPoll *io_watch_poll_from_source(GSource *source)
557
{
558
    IOWatchPoll *i;
559

    
560
    QTAILQ_FOREACH(i, &io_watch_poll_list, node) {
561
        if (i->src == source) {
562
            return i;
563
        }
564
    }
565

    
566
    return NULL;
567
}
568

    
569
static gboolean io_watch_poll_prepare(GSource *source, gint *timeout_)
570
{
571
    IOWatchPoll *iwp = io_watch_poll_from_source(source);
572

    
573
    iwp->max_size = iwp->fd_can_read(iwp->opaque);
574
    if (iwp->max_size == 0) {
575
        return FALSE;
576
    }
577

    
578
    return g_io_watch_funcs.prepare(source, timeout_);
579
}
580

    
581
static gboolean io_watch_poll_check(GSource *source)
582
{
583
    IOWatchPoll *iwp = io_watch_poll_from_source(source);
584

    
585
    if (iwp->max_size == 0) {
586
        return FALSE;
587
    }
588

    
589
    return g_io_watch_funcs.check(source);
590
}
591

    
592
static gboolean io_watch_poll_dispatch(GSource *source, GSourceFunc callback,
593
                                       gpointer user_data)
594
{
595
    return g_io_watch_funcs.dispatch(source, callback, user_data);
596
}
597

    
598
static void io_watch_poll_finalize(GSource *source)
599
{
600
    IOWatchPoll *iwp = io_watch_poll_from_source(source);
601
    QTAILQ_REMOVE(&io_watch_poll_list, iwp, node);
602
    g_io_watch_funcs.finalize(source);
603
}
604

    
605
static GSourceFuncs io_watch_poll_funcs = {
606
    .prepare = io_watch_poll_prepare,
607
    .check = io_watch_poll_check,
608
    .dispatch = io_watch_poll_dispatch,
609
    .finalize = io_watch_poll_finalize,
610
};
611

    
612
/* Can only be used for read */
613
static guint io_add_watch_poll(GIOChannel *channel,
614
                               IOCanReadHandler *fd_can_read,
615
                               GIOFunc fd_read,
616
                               gpointer user_data)
617
{
618
    IOWatchPoll *iwp;
619
    GSource *src;
620
    guint tag;
621

    
622
    src = g_io_create_watch(channel, G_IO_IN | G_IO_ERR | G_IO_HUP);
623
    g_source_set_funcs(src, &io_watch_poll_funcs);
624
    g_source_set_callback(src, (GSourceFunc)fd_read, user_data, NULL);
625
    tag = g_source_attach(src, NULL);
626
    g_source_unref(src);
627

    
628
    iwp = g_malloc0(sizeof(*iwp));
629
    iwp->src = src;
630
    iwp->max_size = 0;
631
    iwp->fd_can_read = fd_can_read;
632
    iwp->opaque = user_data;
633

    
634
    QTAILQ_INSERT_HEAD(&io_watch_poll_list, iwp, node);
635

    
636
    return tag;
637
}
638

    
639
static GIOChannel *io_channel_from_fd(int fd)
640
{
641
    GIOChannel *chan;
642

    
643
    if (fd == -1) {
644
        return NULL;
645
    }
646

    
647
    chan = g_io_channel_unix_new(fd);
648

    
649
    g_io_channel_set_encoding(chan, NULL, NULL);
650
    g_io_channel_set_buffered(chan, FALSE);
651

    
652
    return chan;
653
}
654

    
655
static GIOChannel *io_channel_from_socket(int fd)
656
{
657
    GIOChannel *chan;
658

    
659
    if (fd == -1) {
660
        return NULL;
661
    }
662

    
663
#ifdef _WIN32
664
    chan = g_io_channel_win32_new_socket(fd);
665
#else
666
    chan = g_io_channel_unix_new(fd);
667
#endif
668

    
669
    g_io_channel_set_encoding(chan, NULL, NULL);
670
    g_io_channel_set_buffered(chan, FALSE);
671

    
672
    return chan;
673
}
674

    
675
static int io_channel_send_all(GIOChannel *fd, const void *_buf, int len1)
676
{
677
    GIOStatus status;
678
    gsize bytes_written;
679
    int len;
680
    const uint8_t *buf = _buf;
681

    
682
    len = len1;
683
    while (len > 0) {
684
        status = g_io_channel_write_chars(fd, (const gchar *)buf, len,
685
                                          &bytes_written, NULL);
686
        if (status != G_IO_STATUS_NORMAL) {
687
            if (status == G_IO_STATUS_AGAIN) {
688
                errno = EAGAIN;
689
                return -1;
690
            } else {
691
                errno = EINVAL;
692
                return -1;
693
            }
694
        } else if (status == G_IO_STATUS_EOF) {
695
            break;
696
        } else {
697
            buf += bytes_written;
698
            len -= bytes_written;
699
        }
700
    }
701
    return len1 - len;
702
}
703

    
704
typedef struct FDCharDriver {
705
    CharDriverState *chr;
706
    GIOChannel *fd_in, *fd_out;
707
    guint fd_in_tag;
708
    int max_size;
709
    QTAILQ_ENTRY(FDCharDriver) node;
710
} FDCharDriver;
711

    
712
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
713
{
714
    FDCharDriver *s = chr->opaque;
715
    
716
    return io_channel_send_all(s->fd_out, buf, len);
717
}
718

    
719
static gboolean fd_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
720
{
721
    CharDriverState *chr = opaque;
722
    FDCharDriver *s = chr->opaque;
723
    int len;
724
    uint8_t buf[READ_BUF_LEN];
725
    GIOStatus status;
726
    gsize bytes_read;
727

    
728
    len = sizeof(buf);
729
    if (len > s->max_size) {
730
        len = s->max_size;
731
    }
732
    if (len == 0) {
733
        return FALSE;
734
    }
735

    
736
    status = g_io_channel_read_chars(chan, (gchar *)buf,
737
                                     len, &bytes_read, NULL);
738
    if (status == G_IO_STATUS_EOF) {
739
        qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
740
        return FALSE;
741
    }
742
    if (status == G_IO_STATUS_NORMAL) {
743
        qemu_chr_be_write(chr, buf, bytes_read);
744
    }
745

    
746
    return TRUE;
747
}
748

    
749
static int fd_chr_read_poll(void *opaque)
750
{
751
    CharDriverState *chr = opaque;
752
    FDCharDriver *s = chr->opaque;
753

    
754
    s->max_size = qemu_chr_be_can_write(chr);
755
    return s->max_size;
756
}
757

    
758
static GSource *fd_chr_add_watch(CharDriverState *chr, GIOCondition cond)
759
{
760
    FDCharDriver *s = chr->opaque;
761
    return g_io_create_watch(s->fd_out, cond);
762
}
763

    
764
static void fd_chr_update_read_handler(CharDriverState *chr)
765
{
766
    FDCharDriver *s = chr->opaque;
767

    
768
    if (s->fd_in_tag) {
769
        g_source_remove(s->fd_in_tag);
770
    }
771

    
772
    if (s->fd_in) {
773
        s->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll, fd_chr_read, chr);
774
    }
775
}
776

    
777
static void fd_chr_close(struct CharDriverState *chr)
778
{
779
    FDCharDriver *s = chr->opaque;
780

    
781
    if (s->fd_in_tag) {
782
        g_source_remove(s->fd_in_tag);
783
        s->fd_in_tag = 0;
784
    }
785

    
786
    if (s->fd_in) {
787
        g_io_channel_unref(s->fd_in);
788
    }
789
    if (s->fd_out) {
790
        g_io_channel_unref(s->fd_out);
791
    }
792

    
793
    g_free(s);
794
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
795
}
796

    
797
/* open a character device to a unix fd */
798
static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
799
{
800
    CharDriverState *chr;
801
    FDCharDriver *s;
802

    
803
    chr = g_malloc0(sizeof(CharDriverState));
804
    s = g_malloc0(sizeof(FDCharDriver));
805
    s->fd_in = io_channel_from_fd(fd_in);
806
    s->fd_out = io_channel_from_fd(fd_out);
807
    fcntl(fd_out, F_SETFL, O_NONBLOCK);
808
    s->chr = chr;
809
    chr->opaque = s;
810
    chr->chr_add_watch = fd_chr_add_watch;
811
    chr->chr_write = fd_chr_write;
812
    chr->chr_update_read_handler = fd_chr_update_read_handler;
813
    chr->chr_close = fd_chr_close;
814

    
815
    qemu_chr_generic_open(chr);
816

    
817
    return chr;
818
}
819

    
820
static CharDriverState *qemu_chr_open_file_out(QemuOpts *opts)
821
{
822
    int fd_out;
823

    
824
    TFR(fd_out = qemu_open(qemu_opt_get(opts, "path"),
825
                      O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));
826
    if (fd_out < 0) {
827
        return NULL;
828
    }
829
    return qemu_chr_open_fd(-1, fd_out);
830
}
831

    
832
static CharDriverState *qemu_chr_open_pipe(QemuOpts *opts)
833
{
834
    int fd_in, fd_out;
835
    char filename_in[256], filename_out[256];
836
    const char *filename = qemu_opt_get(opts, "path");
837

    
838
    if (filename == NULL) {
839
        fprintf(stderr, "chardev: pipe: no filename given\n");
840
        return NULL;
841
    }
842

    
843
    snprintf(filename_in, 256, "%s.in", filename);
844
    snprintf(filename_out, 256, "%s.out", filename);
845
    TFR(fd_in = qemu_open(filename_in, O_RDWR | O_BINARY));
846
    TFR(fd_out = qemu_open(filename_out, O_RDWR | O_BINARY));
847
    if (fd_in < 0 || fd_out < 0) {
848
        if (fd_in >= 0)
849
            close(fd_in);
850
        if (fd_out >= 0)
851
            close(fd_out);
852
        TFR(fd_in = fd_out = qemu_open(filename, O_RDWR | O_BINARY));
853
        if (fd_in < 0) {
854
            return NULL;
855
        }
856
    }
857
    return qemu_chr_open_fd(fd_in, fd_out);
858
}
859

    
860
/* init terminal so that we can grab keys */
861
static struct termios oldtty;
862
static int old_fd0_flags;
863
static bool stdio_allow_signal;
864

    
865
static void term_exit(void)
866
{
867
    tcsetattr (0, TCSANOW, &oldtty);
868
    fcntl(0, F_SETFL, old_fd0_flags);
869
}
870

    
871
static void qemu_chr_set_echo_stdio(CharDriverState *chr, bool echo)
872
{
873
    struct termios tty;
874

    
875
    tty = oldtty;
876
    if (!echo) {
877
        tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
878
                          |INLCR|IGNCR|ICRNL|IXON);
879
        tty.c_oflag |= OPOST;
880
        tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
881
        tty.c_cflag &= ~(CSIZE|PARENB);
882
        tty.c_cflag |= CS8;
883
        tty.c_cc[VMIN] = 1;
884
        tty.c_cc[VTIME] = 0;
885
    }
886
    /* if graphical mode, we allow Ctrl-C handling */
887
    if (!stdio_allow_signal)
888
        tty.c_lflag &= ~ISIG;
889

    
890
    tcsetattr (0, TCSANOW, &tty);
891
}
892

    
893
static void qemu_chr_close_stdio(struct CharDriverState *chr)
894
{
895
    term_exit();
896
    fd_chr_close(chr);
897
}
898

    
899
static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts)
900
{
901
    CharDriverState *chr;
902

    
903
    if (is_daemonized()) {
904
        error_report("cannot use stdio with -daemonize");
905
        return NULL;
906
    }
907
    old_fd0_flags = fcntl(0, F_GETFL);
908
    tcgetattr (0, &oldtty);
909
    fcntl(0, F_SETFL, O_NONBLOCK);
910
    atexit(term_exit);
911

    
912
    chr = qemu_chr_open_fd(0, 1);
913
    chr->chr_close = qemu_chr_close_stdio;
914
    chr->chr_set_echo = qemu_chr_set_echo_stdio;
915
    stdio_allow_signal = qemu_opt_get_bool(opts, "signal",
916
                                           display_type != DT_NOGRAPHIC);
917
    qemu_chr_fe_set_echo(chr, false);
918

    
919
    return chr;
920
}
921

    
922
#ifdef __sun__
923
/* Once Solaris has openpty(), this is going to be removed. */
924
static int openpty(int *amaster, int *aslave, char *name,
925
                   struct termios *termp, struct winsize *winp)
926
{
927
        const char *slave;
928
        int mfd = -1, sfd = -1;
929

    
930
        *amaster = *aslave = -1;
931

    
932
        mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
933
        if (mfd < 0)
934
                goto err;
935

    
936
        if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
937
                goto err;
938

    
939
        if ((slave = ptsname(mfd)) == NULL)
940
                goto err;
941

    
942
        if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1)
943
                goto err;
944

    
945
        if (ioctl(sfd, I_PUSH, "ptem") == -1 ||
946
            (termp != NULL && tcgetattr(sfd, termp) < 0))
947
                goto err;
948

    
949
        if (amaster)
950
                *amaster = mfd;
951
        if (aslave)
952
                *aslave = sfd;
953
        if (winp)
954
                ioctl(sfd, TIOCSWINSZ, winp);
955

    
956
        return 0;
957

    
958
err:
959
        if (sfd != -1)
960
                close(sfd);
961
        close(mfd);
962
        return -1;
963
}
964

    
965
static void cfmakeraw (struct termios *termios_p)
966
{
967
        termios_p->c_iflag &=
968
                ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
969
        termios_p->c_oflag &= ~OPOST;
970
        termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
971
        termios_p->c_cflag &= ~(CSIZE|PARENB);
972
        termios_p->c_cflag |= CS8;
973

    
974
        termios_p->c_cc[VMIN] = 0;
975
        termios_p->c_cc[VTIME] = 0;
976
}
977
#endif
978

    
979
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
980
    || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
981
    || defined(__GLIBC__)
982

    
983
#define HAVE_CHARDEV_TTY 1
984

    
985
typedef struct {
986
    GIOChannel *fd;
987
    guint fd_tag;
988
    int connected;
989
    int polling;
990
    int read_bytes;
991
    guint timer_tag;
992
} PtyCharDriver;
993

    
994
static void pty_chr_update_read_handler(CharDriverState *chr);
995
static void pty_chr_state(CharDriverState *chr, int connected);
996

    
997
static gboolean pty_chr_timer(gpointer opaque)
998
{
999
    struct CharDriverState *chr = opaque;
1000
    PtyCharDriver *s = chr->opaque;
1001

    
1002
    if (s->connected) {
1003
        goto out;
1004
    }
1005
    if (s->polling) {
1006
        /* If we arrive here without polling being cleared due
1007
         * read returning -EIO, then we are (re-)connected */
1008
        pty_chr_state(chr, 1);
1009
        goto out;
1010
    }
1011

    
1012
    /* Next poll ... */
1013
    pty_chr_update_read_handler(chr);
1014

    
1015
out:
1016
    return FALSE;
1017
}
1018

    
1019
static void pty_chr_rearm_timer(CharDriverState *chr, int ms)
1020
{
1021
    PtyCharDriver *s = chr->opaque;
1022

    
1023
    if (s->timer_tag) {
1024
        g_source_remove(s->timer_tag);
1025
        s->timer_tag = 0;
1026
    }
1027

    
1028
    if (ms == 1000) {
1029
        s->timer_tag = g_timeout_add_seconds(1, pty_chr_timer, chr);
1030
    } else {
1031
        s->timer_tag = g_timeout_add(ms, pty_chr_timer, chr);
1032
    }
1033
}
1034

    
1035
static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
1036
{
1037
    PtyCharDriver *s = chr->opaque;
1038

    
1039
    if (!s->connected) {
1040
        /* guest sends data, check for (re-)connect */
1041
        pty_chr_update_read_handler(chr);
1042
        return 0;
1043
    }
1044
    return io_channel_send_all(s->fd, buf, len);
1045
}
1046

    
1047
static GSource *pty_chr_add_watch(CharDriverState *chr, GIOCondition cond)
1048
{
1049
    PtyCharDriver *s = chr->opaque;
1050
    return g_io_create_watch(s->fd, cond);
1051
}
1052

    
1053
static int pty_chr_read_poll(void *opaque)
1054
{
1055
    CharDriverState *chr = opaque;
1056
    PtyCharDriver *s = chr->opaque;
1057

    
1058
    s->read_bytes = qemu_chr_be_can_write(chr);
1059
    return s->read_bytes;
1060
}
1061

    
1062
static gboolean pty_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
1063
{
1064
    CharDriverState *chr = opaque;
1065
    PtyCharDriver *s = chr->opaque;
1066
    gsize size, len;
1067
    uint8_t buf[READ_BUF_LEN];
1068
    GIOStatus status;
1069

    
1070
    len = sizeof(buf);
1071
    if (len > s->read_bytes)
1072
        len = s->read_bytes;
1073
    if (len == 0)
1074
        return FALSE;
1075
    status = g_io_channel_read_chars(s->fd, (gchar *)buf, len, &size, NULL);
1076
    if (status != G_IO_STATUS_NORMAL) {
1077
        pty_chr_state(chr, 0);
1078
        return FALSE;
1079
    } else {
1080
        pty_chr_state(chr, 1);
1081
        qemu_chr_be_write(chr, buf, size);
1082
    }
1083
    return TRUE;
1084
}
1085

    
1086
static void pty_chr_update_read_handler(CharDriverState *chr)
1087
{
1088
    PtyCharDriver *s = chr->opaque;
1089

    
1090
    if (s->fd_tag) {
1091
        g_source_remove(s->fd_tag);
1092
    }
1093

    
1094
    s->fd_tag = io_add_watch_poll(s->fd, pty_chr_read_poll, pty_chr_read, chr);
1095
    s->polling = 1;
1096
    /*
1097
     * Short timeout here: just need wait long enougth that qemu makes
1098
     * it through the poll loop once.  When reconnected we want a
1099
     * short timeout so we notice it almost instantly.  Otherwise
1100
     * read() gives us -EIO instantly, making pty_chr_state() reset the
1101
     * timeout to the normal (much longer) poll interval before the
1102
     * timer triggers.
1103
     */
1104
    pty_chr_rearm_timer(chr, 10);
1105
}
1106

    
1107
static void pty_chr_state(CharDriverState *chr, int connected)
1108
{
1109
    PtyCharDriver *s = chr->opaque;
1110

    
1111
    if (!connected) {
1112
        g_source_remove(s->fd_tag);
1113
        s->fd_tag = 0;
1114
        s->connected = 0;
1115
        s->polling = 0;
1116
        /* (re-)connect poll interval for idle guests: once per second.
1117
         * We check more frequently in case the guests sends data to
1118
         * the virtual device linked to our pty. */
1119
        pty_chr_rearm_timer(chr, 1000);
1120
    } else {
1121
        if (!s->connected)
1122
            qemu_chr_generic_open(chr);
1123
        s->connected = 1;
1124
    }
1125
}
1126

    
1127

    
1128
static void pty_chr_close(struct CharDriverState *chr)
1129
{
1130
    PtyCharDriver *s = chr->opaque;
1131
    int fd;
1132

    
1133
    if (s->fd_tag) {
1134
        g_source_remove(s->fd_tag);
1135
    }
1136
    fd = g_io_channel_unix_get_fd(s->fd);
1137
    g_io_channel_unref(s->fd);
1138
    close(fd);
1139
    if (s->timer_tag) {
1140
        g_source_remove(s->timer_tag);
1141
    }
1142
    g_free(s);
1143
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1144
}
1145

    
1146
static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
1147
{
1148
    CharDriverState *chr;
1149
    PtyCharDriver *s;
1150
    struct termios tty;
1151
    const char *label;
1152
    int master_fd, slave_fd, len;
1153
#if defined(__OpenBSD__) || defined(__DragonFly__)
1154
    char pty_name[PATH_MAX];
1155
#define q_ptsname(x) pty_name
1156
#else
1157
    char *pty_name = NULL;
1158
#define q_ptsname(x) ptsname(x)
1159
#endif
1160

    
1161
    if (openpty(&master_fd, &slave_fd, pty_name, NULL, NULL) < 0) {
1162
        return NULL;
1163
    }
1164

    
1165
    /* Set raw attributes on the pty. */
1166
    tcgetattr(slave_fd, &tty);
1167
    cfmakeraw(&tty);
1168
    tcsetattr(slave_fd, TCSAFLUSH, &tty);
1169
    close(slave_fd);
1170

    
1171
    chr = g_malloc0(sizeof(CharDriverState));
1172

    
1173
    len = strlen(q_ptsname(master_fd)) + 5;
1174
    chr->filename = g_malloc(len);
1175
    snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd));
1176
    qemu_opt_set(opts, "path", q_ptsname(master_fd));
1177

    
1178
    label = qemu_opts_id(opts);
1179
    fprintf(stderr, "char device redirected to %s%s%s%s\n",
1180
            q_ptsname(master_fd),
1181
            label ? " (label " : "",
1182
            label ? label      : "",
1183
            label ? ")"        : "");
1184

    
1185
    s = g_malloc0(sizeof(PtyCharDriver));
1186
    chr->opaque = s;
1187
    chr->chr_write = pty_chr_write;
1188
    chr->chr_update_read_handler = pty_chr_update_read_handler;
1189
    chr->chr_close = pty_chr_close;
1190
    chr->chr_add_watch = pty_chr_add_watch;
1191

    
1192
    s->fd = io_channel_from_fd(master_fd);
1193
    s->timer_tag = 0;
1194

    
1195
    return chr;
1196
}
1197

    
1198
static void tty_serial_init(int fd, int speed,
1199
                            int parity, int data_bits, int stop_bits)
1200
{
1201
    struct termios tty;
1202
    speed_t spd;
1203

    
1204
#if 0
1205
    printf("tty_serial_init: speed=%d parity=%c data=%d stop=%d\n",
1206
           speed, parity, data_bits, stop_bits);
1207
#endif
1208
    tcgetattr (fd, &tty);
1209

    
1210
#define check_speed(val) if (speed <= val) { spd = B##val; break; }
1211
    speed = speed * 10 / 11;
1212
    do {
1213
        check_speed(50);
1214
        check_speed(75);
1215
        check_speed(110);
1216
        check_speed(134);
1217
        check_speed(150);
1218
        check_speed(200);
1219
        check_speed(300);
1220
        check_speed(600);
1221
        check_speed(1200);
1222
        check_speed(1800);
1223
        check_speed(2400);
1224
        check_speed(4800);
1225
        check_speed(9600);
1226
        check_speed(19200);
1227
        check_speed(38400);
1228
        /* Non-Posix values follow. They may be unsupported on some systems. */
1229
        check_speed(57600);
1230
        check_speed(115200);
1231
#ifdef B230400
1232
        check_speed(230400);
1233
#endif
1234
#ifdef B460800
1235
        check_speed(460800);
1236
#endif
1237
#ifdef B500000
1238
        check_speed(500000);
1239
#endif
1240
#ifdef B576000
1241
        check_speed(576000);
1242
#endif
1243
#ifdef B921600
1244
        check_speed(921600);
1245
#endif
1246
#ifdef B1000000
1247
        check_speed(1000000);
1248
#endif
1249
#ifdef B1152000
1250
        check_speed(1152000);
1251
#endif
1252
#ifdef B1500000
1253
        check_speed(1500000);
1254
#endif
1255
#ifdef B2000000
1256
        check_speed(2000000);
1257
#endif
1258
#ifdef B2500000
1259
        check_speed(2500000);
1260
#endif
1261
#ifdef B3000000
1262
        check_speed(3000000);
1263
#endif
1264
#ifdef B3500000
1265
        check_speed(3500000);
1266
#endif
1267
#ifdef B4000000
1268
        check_speed(4000000);
1269
#endif
1270
        spd = B115200;
1271
    } while (0);
1272

    
1273
    cfsetispeed(&tty, spd);
1274
    cfsetospeed(&tty, spd);
1275

    
1276
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
1277
                          |INLCR|IGNCR|ICRNL|IXON);
1278
    tty.c_oflag |= OPOST;
1279
    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN|ISIG);
1280
    tty.c_cflag &= ~(CSIZE|PARENB|PARODD|CRTSCTS|CSTOPB);
1281
    switch(data_bits) {
1282
    default:
1283
    case 8:
1284
        tty.c_cflag |= CS8;
1285
        break;
1286
    case 7:
1287
        tty.c_cflag |= CS7;
1288
        break;
1289
    case 6:
1290
        tty.c_cflag |= CS6;
1291
        break;
1292
    case 5:
1293
        tty.c_cflag |= CS5;
1294
        break;
1295
    }
1296
    switch(parity) {
1297
    default:
1298
    case 'N':
1299
        break;
1300
    case 'E':
1301
        tty.c_cflag |= PARENB;
1302
        break;
1303
    case 'O':
1304
        tty.c_cflag |= PARENB | PARODD;
1305
        break;
1306
    }
1307
    if (stop_bits == 2)
1308
        tty.c_cflag |= CSTOPB;
1309

    
1310
    tcsetattr (fd, TCSANOW, &tty);
1311
}
1312

    
1313
static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg)
1314
{
1315
    FDCharDriver *s = chr->opaque;
1316

    
1317
    switch(cmd) {
1318
    case CHR_IOCTL_SERIAL_SET_PARAMS:
1319
        {
1320
            QEMUSerialSetParams *ssp = arg;
1321
            tty_serial_init(g_io_channel_unix_get_fd(s->fd_in),
1322
                            ssp->speed, ssp->parity,
1323
                            ssp->data_bits, ssp->stop_bits);
1324
        }
1325
        break;
1326
    case CHR_IOCTL_SERIAL_SET_BREAK:
1327
        {
1328
            int enable = *(int *)arg;
1329
            if (enable) {
1330
                tcsendbreak(g_io_channel_unix_get_fd(s->fd_in), 1);
1331
            }
1332
        }
1333
        break;
1334
    case CHR_IOCTL_SERIAL_GET_TIOCM:
1335
        {
1336
            int sarg = 0;
1337
            int *targ = (int *)arg;
1338
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &sarg);
1339
            *targ = 0;
1340
            if (sarg & TIOCM_CTS)
1341
                *targ |= CHR_TIOCM_CTS;
1342
            if (sarg & TIOCM_CAR)
1343
                *targ |= CHR_TIOCM_CAR;
1344
            if (sarg & TIOCM_DSR)
1345
                *targ |= CHR_TIOCM_DSR;
1346
            if (sarg & TIOCM_RI)
1347
                *targ |= CHR_TIOCM_RI;
1348
            if (sarg & TIOCM_DTR)
1349
                *targ |= CHR_TIOCM_DTR;
1350
            if (sarg & TIOCM_RTS)
1351
                *targ |= CHR_TIOCM_RTS;
1352
        }
1353
        break;
1354
    case CHR_IOCTL_SERIAL_SET_TIOCM:
1355
        {
1356
            int sarg = *(int *)arg;
1357
            int targ = 0;
1358
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMGET, &targ);
1359
            targ &= ~(CHR_TIOCM_CTS | CHR_TIOCM_CAR | CHR_TIOCM_DSR
1360
                     | CHR_TIOCM_RI | CHR_TIOCM_DTR | CHR_TIOCM_RTS);
1361
            if (sarg & CHR_TIOCM_CTS)
1362
                targ |= TIOCM_CTS;
1363
            if (sarg & CHR_TIOCM_CAR)
1364
                targ |= TIOCM_CAR;
1365
            if (sarg & CHR_TIOCM_DSR)
1366
                targ |= TIOCM_DSR;
1367
            if (sarg & CHR_TIOCM_RI)
1368
                targ |= TIOCM_RI;
1369
            if (sarg & CHR_TIOCM_DTR)
1370
                targ |= TIOCM_DTR;
1371
            if (sarg & CHR_TIOCM_RTS)
1372
                targ |= TIOCM_RTS;
1373
            ioctl(g_io_channel_unix_get_fd(s->fd_in), TIOCMSET, &targ);
1374
        }
1375
        break;
1376
    default:
1377
        return -ENOTSUP;
1378
    }
1379
    return 0;
1380
}
1381

    
1382
static void qemu_chr_close_tty(CharDriverState *chr)
1383
{
1384
    FDCharDriver *s = chr->opaque;
1385
    int fd = -1;
1386

    
1387
    if (s) {
1388
        fd = g_io_channel_unix_get_fd(s->fd_in);
1389
    }
1390

    
1391
    fd_chr_close(chr);
1392

    
1393
    if (fd >= 0) {
1394
        close(fd);
1395
    }
1396
}
1397

    
1398
static CharDriverState *qemu_chr_open_tty_fd(int fd)
1399
{
1400
    CharDriverState *chr;
1401

    
1402
    tty_serial_init(fd, 115200, 'N', 8, 1);
1403
    chr = qemu_chr_open_fd(fd, fd);
1404
    chr->chr_ioctl = tty_serial_ioctl;
1405
    chr->chr_close = qemu_chr_close_tty;
1406
    return chr;
1407
}
1408

    
1409
static CharDriverState *qemu_chr_open_tty(QemuOpts *opts)
1410
{
1411
    const char *filename = qemu_opt_get(opts, "path");
1412
    int fd;
1413

    
1414
    TFR(fd = qemu_open(filename, O_RDWR | O_NONBLOCK));
1415
    if (fd < 0) {
1416
        return NULL;
1417
    }
1418
    return qemu_chr_open_tty_fd(fd);
1419
}
1420
#endif /* __linux__ || __sun__ */
1421

    
1422
#if defined(__linux__)
1423

    
1424
#define HAVE_CHARDEV_PARPORT 1
1425

    
1426
typedef struct {
1427
    int fd;
1428
    int mode;
1429
} ParallelCharDriver;
1430

    
1431
static int pp_hw_mode(ParallelCharDriver *s, uint16_t mode)
1432
{
1433
    if (s->mode != mode) {
1434
        int m = mode;
1435
        if (ioctl(s->fd, PPSETMODE, &m) < 0)
1436
            return 0;
1437
        s->mode = mode;
1438
    }
1439
    return 1;
1440
}
1441

    
1442
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1443
{
1444
    ParallelCharDriver *drv = chr->opaque;
1445
    int fd = drv->fd;
1446
    uint8_t b;
1447

    
1448
    switch(cmd) {
1449
    case CHR_IOCTL_PP_READ_DATA:
1450
        if (ioctl(fd, PPRDATA, &b) < 0)
1451
            return -ENOTSUP;
1452
        *(uint8_t *)arg = b;
1453
        break;
1454
    case CHR_IOCTL_PP_WRITE_DATA:
1455
        b = *(uint8_t *)arg;
1456
        if (ioctl(fd, PPWDATA, &b) < 0)
1457
            return -ENOTSUP;
1458
        break;
1459
    case CHR_IOCTL_PP_READ_CONTROL:
1460
        if (ioctl(fd, PPRCONTROL, &b) < 0)
1461
            return -ENOTSUP;
1462
        /* Linux gives only the lowest bits, and no way to know data
1463
           direction! For better compatibility set the fixed upper
1464
           bits. */
1465
        *(uint8_t *)arg = b | 0xc0;
1466
        break;
1467
    case CHR_IOCTL_PP_WRITE_CONTROL:
1468
        b = *(uint8_t *)arg;
1469
        if (ioctl(fd, PPWCONTROL, &b) < 0)
1470
            return -ENOTSUP;
1471
        break;
1472
    case CHR_IOCTL_PP_READ_STATUS:
1473
        if (ioctl(fd, PPRSTATUS, &b) < 0)
1474
            return -ENOTSUP;
1475
        *(uint8_t *)arg = b;
1476
        break;
1477
    case CHR_IOCTL_PP_DATA_DIR:
1478
        if (ioctl(fd, PPDATADIR, (int *)arg) < 0)
1479
            return -ENOTSUP;
1480
        break;
1481
    case CHR_IOCTL_PP_EPP_READ_ADDR:
1482
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1483
            struct ParallelIOArg *parg = arg;
1484
            int n = read(fd, parg->buffer, parg->count);
1485
            if (n != parg->count) {
1486
                return -EIO;
1487
            }
1488
        }
1489
        break;
1490
    case CHR_IOCTL_PP_EPP_READ:
1491
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1492
            struct ParallelIOArg *parg = arg;
1493
            int n = read(fd, parg->buffer, parg->count);
1494
            if (n != parg->count) {
1495
                return -EIO;
1496
            }
1497
        }
1498
        break;
1499
    case CHR_IOCTL_PP_EPP_WRITE_ADDR:
1500
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) {
1501
            struct ParallelIOArg *parg = arg;
1502
            int n = write(fd, parg->buffer, parg->count);
1503
            if (n != parg->count) {
1504
                return -EIO;
1505
            }
1506
        }
1507
        break;
1508
    case CHR_IOCTL_PP_EPP_WRITE:
1509
        if (pp_hw_mode(drv, IEEE1284_MODE_EPP)) {
1510
            struct ParallelIOArg *parg = arg;
1511
            int n = write(fd, parg->buffer, parg->count);
1512
            if (n != parg->count) {
1513
                return -EIO;
1514
            }
1515
        }
1516
        break;
1517
    default:
1518
        return -ENOTSUP;
1519
    }
1520
    return 0;
1521
}
1522

    
1523
static void pp_close(CharDriverState *chr)
1524
{
1525
    ParallelCharDriver *drv = chr->opaque;
1526
    int fd = drv->fd;
1527

    
1528
    pp_hw_mode(drv, IEEE1284_MODE_COMPAT);
1529
    ioctl(fd, PPRELEASE);
1530
    close(fd);
1531
    g_free(drv);
1532
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1533
}
1534

    
1535
static CharDriverState *qemu_chr_open_pp_fd(int fd)
1536
{
1537
    CharDriverState *chr;
1538
    ParallelCharDriver *drv;
1539

    
1540
    if (ioctl(fd, PPCLAIM) < 0) {
1541
        close(fd);
1542
        return NULL;
1543
    }
1544

    
1545
    drv = g_malloc0(sizeof(ParallelCharDriver));
1546
    drv->fd = fd;
1547
    drv->mode = IEEE1284_MODE_COMPAT;
1548

    
1549
    chr = g_malloc0(sizeof(CharDriverState));
1550
    chr->chr_write = null_chr_write;
1551
    chr->chr_ioctl = pp_ioctl;
1552
    chr->chr_close = pp_close;
1553
    chr->opaque = drv;
1554

    
1555
    qemu_chr_generic_open(chr);
1556

    
1557
    return chr;
1558
}
1559
#endif /* __linux__ */
1560

    
1561
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
1562

    
1563
#define HAVE_CHARDEV_PARPORT 1
1564

    
1565
static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
1566
{
1567
    int fd = (int)(intptr_t)chr->opaque;
1568
    uint8_t b;
1569

    
1570
    switch(cmd) {
1571
    case CHR_IOCTL_PP_READ_DATA:
1572
        if (ioctl(fd, PPIGDATA, &b) < 0)
1573
            return -ENOTSUP;
1574
        *(uint8_t *)arg = b;
1575
        break;
1576
    case CHR_IOCTL_PP_WRITE_DATA:
1577
        b = *(uint8_t *)arg;
1578
        if (ioctl(fd, PPISDATA, &b) < 0)
1579
            return -ENOTSUP;
1580
        break;
1581
    case CHR_IOCTL_PP_READ_CONTROL:
1582
        if (ioctl(fd, PPIGCTRL, &b) < 0)
1583
            return -ENOTSUP;
1584
        *(uint8_t *)arg = b;
1585
        break;
1586
    case CHR_IOCTL_PP_WRITE_CONTROL:
1587
        b = *(uint8_t *)arg;
1588
        if (ioctl(fd, PPISCTRL, &b) < 0)
1589
            return -ENOTSUP;
1590
        break;
1591
    case CHR_IOCTL_PP_READ_STATUS:
1592
        if (ioctl(fd, PPIGSTATUS, &b) < 0)
1593
            return -ENOTSUP;
1594
        *(uint8_t *)arg = b;
1595
        break;
1596
    default:
1597
        return -ENOTSUP;
1598
    }
1599
    return 0;
1600
}
1601

    
1602
static CharDriverState *qemu_chr_open_pp_fd(int fd)
1603
{
1604
    CharDriverState *chr;
1605

    
1606
    chr = g_malloc0(sizeof(CharDriverState));
1607
    chr->opaque = (void *)(intptr_t)fd;
1608
    chr->chr_write = null_chr_write;
1609
    chr->chr_ioctl = pp_ioctl;
1610
    return chr;
1611
}
1612
#endif
1613

    
1614
#else /* _WIN32 */
1615

    
1616
typedef struct {
1617
    int max_size;
1618
    HANDLE hcom, hrecv, hsend;
1619
    OVERLAPPED orecv, osend;
1620
    BOOL fpipe;
1621
    DWORD len;
1622
} WinCharState;
1623

    
1624
typedef struct {
1625
    HANDLE  hStdIn;
1626
    HANDLE  hInputReadyEvent;
1627
    HANDLE  hInputDoneEvent;
1628
    HANDLE  hInputThread;
1629
    uint8_t win_stdio_buf;
1630
} WinStdioCharState;
1631

    
1632
#define NSENDBUF 2048
1633
#define NRECVBUF 2048
1634
#define MAXCONNECT 1
1635
#define NTIMEOUT 5000
1636

    
1637
static int win_chr_poll(void *opaque);
1638
static int win_chr_pipe_poll(void *opaque);
1639

    
1640
static void win_chr_close(CharDriverState *chr)
1641
{
1642
    WinCharState *s = chr->opaque;
1643

    
1644
    if (s->hsend) {
1645
        CloseHandle(s->hsend);
1646
        s->hsend = NULL;
1647
    }
1648
    if (s->hrecv) {
1649
        CloseHandle(s->hrecv);
1650
        s->hrecv = NULL;
1651
    }
1652
    if (s->hcom) {
1653
        CloseHandle(s->hcom);
1654
        s->hcom = NULL;
1655
    }
1656
    if (s->fpipe)
1657
        qemu_del_polling_cb(win_chr_pipe_poll, chr);
1658
    else
1659
        qemu_del_polling_cb(win_chr_poll, chr);
1660

    
1661
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
1662
}
1663

    
1664
static int win_chr_init(CharDriverState *chr, const char *filename)
1665
{
1666
    WinCharState *s = chr->opaque;
1667
    COMMCONFIG comcfg;
1668
    COMMTIMEOUTS cto = { 0, 0, 0, 0, 0};
1669
    COMSTAT comstat;
1670
    DWORD size;
1671
    DWORD err;
1672

    
1673
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1674
    if (!s->hsend) {
1675
        fprintf(stderr, "Failed CreateEvent\n");
1676
        goto fail;
1677
    }
1678
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1679
    if (!s->hrecv) {
1680
        fprintf(stderr, "Failed CreateEvent\n");
1681
        goto fail;
1682
    }
1683

    
1684
    s->hcom = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL,
1685
                      OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
1686
    if (s->hcom == INVALID_HANDLE_VALUE) {
1687
        fprintf(stderr, "Failed CreateFile (%lu)\n", GetLastError());
1688
        s->hcom = NULL;
1689
        goto fail;
1690
    }
1691

    
1692
    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
1693
        fprintf(stderr, "Failed SetupComm\n");
1694
        goto fail;
1695
    }
1696

    
1697
    ZeroMemory(&comcfg, sizeof(COMMCONFIG));
1698
    size = sizeof(COMMCONFIG);
1699
    GetDefaultCommConfig(filename, &comcfg, &size);
1700
    comcfg.dcb.DCBlength = sizeof(DCB);
1701
    CommConfigDialog(filename, NULL, &comcfg);
1702

    
1703
    if (!SetCommState(s->hcom, &comcfg.dcb)) {
1704
        fprintf(stderr, "Failed SetCommState\n");
1705
        goto fail;
1706
    }
1707

    
1708
    if (!SetCommMask(s->hcom, EV_ERR)) {
1709
        fprintf(stderr, "Failed SetCommMask\n");
1710
        goto fail;
1711
    }
1712

    
1713
    cto.ReadIntervalTimeout = MAXDWORD;
1714
    if (!SetCommTimeouts(s->hcom, &cto)) {
1715
        fprintf(stderr, "Failed SetCommTimeouts\n");
1716
        goto fail;
1717
    }
1718

    
1719
    if (!ClearCommError(s->hcom, &err, &comstat)) {
1720
        fprintf(stderr, "Failed ClearCommError\n");
1721
        goto fail;
1722
    }
1723
    qemu_add_polling_cb(win_chr_poll, chr);
1724
    return 0;
1725

    
1726
 fail:
1727
    win_chr_close(chr);
1728
    return -1;
1729
}
1730

    
1731
static int win_chr_write(CharDriverState *chr, const uint8_t *buf, int len1)
1732
{
1733
    WinCharState *s = chr->opaque;
1734
    DWORD len, ret, size, err;
1735

    
1736
    len = len1;
1737
    ZeroMemory(&s->osend, sizeof(s->osend));
1738
    s->osend.hEvent = s->hsend;
1739
    while (len > 0) {
1740
        if (s->hsend)
1741
            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
1742
        else
1743
            ret = WriteFile(s->hcom, buf, len, &size, NULL);
1744
        if (!ret) {
1745
            err = GetLastError();
1746
            if (err == ERROR_IO_PENDING) {
1747
                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
1748
                if (ret) {
1749
                    buf += size;
1750
                    len -= size;
1751
                } else {
1752
                    break;
1753
                }
1754
            } else {
1755
                break;
1756
            }
1757
        } else {
1758
            buf += size;
1759
            len -= size;
1760
        }
1761
    }
1762
    return len1 - len;
1763
}
1764

    
1765
static int win_chr_read_poll(CharDriverState *chr)
1766
{
1767
    WinCharState *s = chr->opaque;
1768

    
1769
    s->max_size = qemu_chr_be_can_write(chr);
1770
    return s->max_size;
1771
}
1772

    
1773
static void win_chr_readfile(CharDriverState *chr)
1774
{
1775
    WinCharState *s = chr->opaque;
1776
    int ret, err;
1777
    uint8_t buf[READ_BUF_LEN];
1778
    DWORD size;
1779

    
1780
    ZeroMemory(&s->orecv, sizeof(s->orecv));
1781
    s->orecv.hEvent = s->hrecv;
1782
    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
1783
    if (!ret) {
1784
        err = GetLastError();
1785
        if (err == ERROR_IO_PENDING) {
1786
            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
1787
        }
1788
    }
1789

    
1790
    if (size > 0) {
1791
        qemu_chr_be_write(chr, buf, size);
1792
    }
1793
}
1794

    
1795
static void win_chr_read(CharDriverState *chr)
1796
{
1797
    WinCharState *s = chr->opaque;
1798

    
1799
    if (s->len > s->max_size)
1800
        s->len = s->max_size;
1801
    if (s->len == 0)
1802
        return;
1803

    
1804
    win_chr_readfile(chr);
1805
}
1806

    
1807
static int win_chr_poll(void *opaque)
1808
{
1809
    CharDriverState *chr = opaque;
1810
    WinCharState *s = chr->opaque;
1811
    COMSTAT status;
1812
    DWORD comerr;
1813

    
1814
    ClearCommError(s->hcom, &comerr, &status);
1815
    if (status.cbInQue > 0) {
1816
        s->len = status.cbInQue;
1817
        win_chr_read_poll(chr);
1818
        win_chr_read(chr);
1819
        return 1;
1820
    }
1821
    return 0;
1822
}
1823

    
1824
static CharDriverState *qemu_chr_open_win_path(const char *filename)
1825
{
1826
    CharDriverState *chr;
1827
    WinCharState *s;
1828

    
1829
    chr = g_malloc0(sizeof(CharDriverState));
1830
    s = g_malloc0(sizeof(WinCharState));
1831
    chr->opaque = s;
1832
    chr->chr_write = win_chr_write;
1833
    chr->chr_close = win_chr_close;
1834

    
1835
    if (win_chr_init(chr, filename) < 0) {
1836
        g_free(s);
1837
        g_free(chr);
1838
        return NULL;
1839
    }
1840
    qemu_chr_generic_open(chr);
1841
    return chr;
1842
}
1843

    
1844
static CharDriverState *qemu_chr_open_win(QemuOpts *opts)
1845
{
1846
    return qemu_chr_open_win_path(qemu_opt_get(opts, "path"));
1847
}
1848

    
1849
static int win_chr_pipe_poll(void *opaque)
1850
{
1851
    CharDriverState *chr = opaque;
1852
    WinCharState *s = chr->opaque;
1853
    DWORD size;
1854

    
1855
    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
1856
    if (size > 0) {
1857
        s->len = size;
1858
        win_chr_read_poll(chr);
1859
        win_chr_read(chr);
1860
        return 1;
1861
    }
1862
    return 0;
1863
}
1864

    
1865
static int win_chr_pipe_init(CharDriverState *chr, const char *filename)
1866
{
1867
    WinCharState *s = chr->opaque;
1868
    OVERLAPPED ov;
1869
    int ret;
1870
    DWORD size;
1871
    char openname[256];
1872

    
1873
    s->fpipe = TRUE;
1874

    
1875
    s->hsend = CreateEvent(NULL, TRUE, FALSE, NULL);
1876
    if (!s->hsend) {
1877
        fprintf(stderr, "Failed CreateEvent\n");
1878
        goto fail;
1879
    }
1880
    s->hrecv = CreateEvent(NULL, TRUE, FALSE, NULL);
1881
    if (!s->hrecv) {
1882
        fprintf(stderr, "Failed CreateEvent\n");
1883
        goto fail;
1884
    }
1885

    
1886
    snprintf(openname, sizeof(openname), "\\\\.\\pipe\\%s", filename);
1887
    s->hcom = CreateNamedPipe(openname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
1888
                              PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
1889
                              PIPE_WAIT,
1890
                              MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
1891
    if (s->hcom == INVALID_HANDLE_VALUE) {
1892
        fprintf(stderr, "Failed CreateNamedPipe (%lu)\n", GetLastError());
1893
        s->hcom = NULL;
1894
        goto fail;
1895
    }
1896

    
1897
    ZeroMemory(&ov, sizeof(ov));
1898
    ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
1899
    ret = ConnectNamedPipe(s->hcom, &ov);
1900
    if (ret) {
1901
        fprintf(stderr, "Failed ConnectNamedPipe\n");
1902
        goto fail;
1903
    }
1904

    
1905
    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
1906
    if (!ret) {
1907
        fprintf(stderr, "Failed GetOverlappedResult\n");
1908
        if (ov.hEvent) {
1909
            CloseHandle(ov.hEvent);
1910
            ov.hEvent = NULL;
1911
        }
1912
        goto fail;
1913
    }
1914

    
1915
    if (ov.hEvent) {
1916
        CloseHandle(ov.hEvent);
1917
        ov.hEvent = NULL;
1918
    }
1919
    qemu_add_polling_cb(win_chr_pipe_poll, chr);
1920
    return 0;
1921

    
1922
 fail:
1923
    win_chr_close(chr);
1924
    return -1;
1925
}
1926

    
1927

    
1928
static CharDriverState *qemu_chr_open_win_pipe(QemuOpts *opts)
1929
{
1930
    const char *filename = qemu_opt_get(opts, "path");
1931
    CharDriverState *chr;
1932
    WinCharState *s;
1933

    
1934
    chr = g_malloc0(sizeof(CharDriverState));
1935
    s = g_malloc0(sizeof(WinCharState));
1936
    chr->opaque = s;
1937
    chr->chr_write = win_chr_write;
1938
    chr->chr_close = win_chr_close;
1939

    
1940
    if (win_chr_pipe_init(chr, filename) < 0) {
1941
        g_free(s);
1942
        g_free(chr);
1943
        return NULL;
1944
    }
1945
    qemu_chr_generic_open(chr);
1946
    return chr;
1947
}
1948

    
1949
static CharDriverState *qemu_chr_open_win_file(HANDLE fd_out)
1950
{
1951
    CharDriverState *chr;
1952
    WinCharState *s;
1953

    
1954
    chr = g_malloc0(sizeof(CharDriverState));
1955
    s = g_malloc0(sizeof(WinCharState));
1956
    s->hcom = fd_out;
1957
    chr->opaque = s;
1958
    chr->chr_write = win_chr_write;
1959
    qemu_chr_generic_open(chr);
1960
    return chr;
1961
}
1962

    
1963
static CharDriverState *qemu_chr_open_win_con(QemuOpts *opts)
1964
{
1965
    return qemu_chr_open_win_file(GetStdHandle(STD_OUTPUT_HANDLE));
1966
}
1967

    
1968
static CharDriverState *qemu_chr_open_win_file_out(QemuOpts *opts)
1969
{
1970
    const char *file_out = qemu_opt_get(opts, "path");
1971
    HANDLE fd_out;
1972

    
1973
    fd_out = CreateFile(file_out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
1974
                        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
1975
    if (fd_out == INVALID_HANDLE_VALUE) {
1976
        return NULL;
1977
    }
1978

    
1979
    return qemu_chr_open_win_file(fd_out);
1980
}
1981

    
1982
static int win_stdio_write(CharDriverState *chr, const uint8_t *buf, int len)
1983
{
1984
    HANDLE  hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
1985
    DWORD   dwSize;
1986
    int     len1;
1987

    
1988
    len1 = len;
1989

    
1990
    while (len1 > 0) {
1991
        if (!WriteFile(hStdOut, buf, len1, &dwSize, NULL)) {
1992
            break;
1993
        }
1994
        buf  += dwSize;
1995
        len1 -= dwSize;
1996
    }
1997

    
1998
    return len - len1;
1999
}
2000

    
2001
static void win_stdio_wait_func(void *opaque)
2002
{
2003
    CharDriverState   *chr   = opaque;
2004
    WinStdioCharState *stdio = chr->opaque;
2005
    INPUT_RECORD       buf[4];
2006
    int                ret;
2007
    DWORD              dwSize;
2008
    int                i;
2009

    
2010
    ret = ReadConsoleInput(stdio->hStdIn, buf, sizeof(buf) / sizeof(*buf),
2011
                           &dwSize);
2012

    
2013
    if (!ret) {
2014
        /* Avoid error storm */
2015
        qemu_del_wait_object(stdio->hStdIn, NULL, NULL);
2016
        return;
2017
    }
2018

    
2019
    for (i = 0; i < dwSize; i++) {
2020
        KEY_EVENT_RECORD *kev = &buf[i].Event.KeyEvent;
2021

    
2022
        if (buf[i].EventType == KEY_EVENT && kev->bKeyDown) {
2023
            int j;
2024
            if (kev->uChar.AsciiChar != 0) {
2025
                for (j = 0; j < kev->wRepeatCount; j++) {
2026
                    if (qemu_chr_be_can_write(chr)) {
2027
                        uint8_t c = kev->uChar.AsciiChar;
2028
                        qemu_chr_be_write(chr, &c, 1);
2029
                    }
2030
                }
2031
            }
2032
        }
2033
    }
2034
}
2035

    
2036
static DWORD WINAPI win_stdio_thread(LPVOID param)
2037
{
2038
    CharDriverState   *chr   = param;
2039
    WinStdioCharState *stdio = chr->opaque;
2040
    int                ret;
2041
    DWORD              dwSize;
2042

    
2043
    while (1) {
2044

    
2045
        /* Wait for one byte */
2046
        ret = ReadFile(stdio->hStdIn, &stdio->win_stdio_buf, 1, &dwSize, NULL);
2047

    
2048
        /* Exit in case of error, continue if nothing read */
2049
        if (!ret) {
2050
            break;
2051
        }
2052
        if (!dwSize) {
2053
            continue;
2054
        }
2055

    
2056
        /* Some terminal emulator returns \r\n for Enter, just pass \n */
2057
        if (stdio->win_stdio_buf == '\r') {
2058
            continue;
2059
        }
2060

    
2061
        /* Signal the main thread and wait until the byte was eaten */
2062
        if (!SetEvent(stdio->hInputReadyEvent)) {
2063
            break;
2064
        }
2065
        if (WaitForSingleObject(stdio->hInputDoneEvent, INFINITE)
2066
            != WAIT_OBJECT_0) {
2067
            break;
2068
        }
2069
    }
2070

    
2071
    qemu_del_wait_object(stdio->hInputReadyEvent, NULL, NULL);
2072
    return 0;
2073
}
2074

    
2075
static void win_stdio_thread_wait_func(void *opaque)
2076
{
2077
    CharDriverState   *chr   = opaque;
2078
    WinStdioCharState *stdio = chr->opaque;
2079

    
2080
    if (qemu_chr_be_can_write(chr)) {
2081
        qemu_chr_be_write(chr, &stdio->win_stdio_buf, 1);
2082
    }
2083

    
2084
    SetEvent(stdio->hInputDoneEvent);
2085
}
2086

    
2087
static void qemu_chr_set_echo_win_stdio(CharDriverState *chr, bool echo)
2088
{
2089
    WinStdioCharState *stdio  = chr->opaque;
2090
    DWORD              dwMode = 0;
2091

    
2092
    GetConsoleMode(stdio->hStdIn, &dwMode);
2093

    
2094
    if (echo) {
2095
        SetConsoleMode(stdio->hStdIn, dwMode | ENABLE_ECHO_INPUT);
2096
    } else {
2097
        SetConsoleMode(stdio->hStdIn, dwMode & ~ENABLE_ECHO_INPUT);
2098
    }
2099
}
2100

    
2101
static void win_stdio_close(CharDriverState *chr)
2102
{
2103
    WinStdioCharState *stdio = chr->opaque;
2104

    
2105
    if (stdio->hInputReadyEvent != INVALID_HANDLE_VALUE) {
2106
        CloseHandle(stdio->hInputReadyEvent);
2107
    }
2108
    if (stdio->hInputDoneEvent != INVALID_HANDLE_VALUE) {
2109
        CloseHandle(stdio->hInputDoneEvent);
2110
    }
2111
    if (stdio->hInputThread != INVALID_HANDLE_VALUE) {
2112
        TerminateThread(stdio->hInputThread, 0);
2113
    }
2114

    
2115
    g_free(chr->opaque);
2116
    g_free(chr);
2117
}
2118

    
2119
static CharDriverState *qemu_chr_open_win_stdio(QemuOpts *opts)
2120
{
2121
    CharDriverState   *chr;
2122
    WinStdioCharState *stdio;
2123
    DWORD              dwMode;
2124
    int                is_console = 0;
2125

    
2126
    chr   = g_malloc0(sizeof(CharDriverState));
2127
    stdio = g_malloc0(sizeof(WinStdioCharState));
2128

    
2129
    stdio->hStdIn = GetStdHandle(STD_INPUT_HANDLE);
2130
    if (stdio->hStdIn == INVALID_HANDLE_VALUE) {
2131
        fprintf(stderr, "cannot open stdio: invalid handle\n");
2132
        exit(1);
2133
    }
2134

    
2135
    is_console = GetConsoleMode(stdio->hStdIn, &dwMode) != 0;
2136

    
2137
    chr->opaque    = stdio;
2138
    chr->chr_write = win_stdio_write;
2139
    chr->chr_close = win_stdio_close;
2140

    
2141
    if (is_console) {
2142
        if (qemu_add_wait_object(stdio->hStdIn,
2143
                                 win_stdio_wait_func, chr)) {
2144
            fprintf(stderr, "qemu_add_wait_object: failed\n");
2145
        }
2146
    } else {
2147
        DWORD   dwId;
2148
            
2149
        stdio->hInputReadyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
2150
        stdio->hInputDoneEvent  = CreateEvent(NULL, FALSE, FALSE, NULL);
2151
        stdio->hInputThread     = CreateThread(NULL, 0, win_stdio_thread,
2152
                                               chr, 0, &dwId);
2153

    
2154
        if (stdio->hInputThread == INVALID_HANDLE_VALUE
2155
            || stdio->hInputReadyEvent == INVALID_HANDLE_VALUE
2156
            || stdio->hInputDoneEvent == INVALID_HANDLE_VALUE) {
2157
            fprintf(stderr, "cannot create stdio thread or event\n");
2158
            exit(1);
2159
        }
2160
        if (qemu_add_wait_object(stdio->hInputReadyEvent,
2161
                                 win_stdio_thread_wait_func, chr)) {
2162
            fprintf(stderr, "qemu_add_wait_object: failed\n");
2163
        }
2164
    }
2165

    
2166
    dwMode |= ENABLE_LINE_INPUT;
2167

    
2168
    if (is_console) {
2169
        /* set the terminal in raw mode */
2170
        /* ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS */
2171
        dwMode |= ENABLE_PROCESSED_INPUT;
2172
    }
2173

    
2174
    SetConsoleMode(stdio->hStdIn, dwMode);
2175

    
2176
    chr->chr_set_echo = qemu_chr_set_echo_win_stdio;
2177
    qemu_chr_fe_set_echo(chr, false);
2178

    
2179
    return chr;
2180
}
2181
#endif /* !_WIN32 */
2182

    
2183
/***********************************************************/
2184
/* UDP Net console */
2185

    
2186
typedef struct {
2187
    int fd;
2188
    GIOChannel *chan;
2189
    guint tag;
2190
    uint8_t buf[READ_BUF_LEN];
2191
    int bufcnt;
2192
    int bufptr;
2193
    int max_size;
2194
} NetCharDriver;
2195

    
2196
static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2197
{
2198
    NetCharDriver *s = chr->opaque;
2199
    gsize bytes_written;
2200
    GIOStatus status;
2201

    
2202
    status = g_io_channel_write_chars(s->chan, (const gchar *)buf, len, &bytes_written, NULL);
2203
    if (status == G_IO_STATUS_EOF) {
2204
        return 0;
2205
    } else if (status != G_IO_STATUS_NORMAL) {
2206
        return -1;
2207
    }
2208

    
2209
    return bytes_written;
2210
}
2211

    
2212
static int udp_chr_read_poll(void *opaque)
2213
{
2214
    CharDriverState *chr = opaque;
2215
    NetCharDriver *s = chr->opaque;
2216

    
2217
    s->max_size = qemu_chr_be_can_write(chr);
2218

    
2219
    /* If there were any stray characters in the queue process them
2220
     * first
2221
     */
2222
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2223
        qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2224
        s->bufptr++;
2225
        s->max_size = qemu_chr_be_can_write(chr);
2226
    }
2227
    return s->max_size;
2228
}
2229

    
2230
static gboolean udp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2231
{
2232
    CharDriverState *chr = opaque;
2233
    NetCharDriver *s = chr->opaque;
2234
    gsize bytes_read = 0;
2235
    GIOStatus status;
2236

    
2237
    if (s->max_size == 0)
2238
        return FALSE;
2239
    status = g_io_channel_read_chars(s->chan, (gchar *)s->buf, sizeof(s->buf),
2240
                                     &bytes_read, NULL);
2241
    s->bufcnt = bytes_read;
2242
    s->bufptr = s->bufcnt;
2243
    if (status != G_IO_STATUS_NORMAL) {
2244
        return FALSE;
2245
    }
2246

    
2247
    s->bufptr = 0;
2248
    while (s->max_size > 0 && s->bufptr < s->bufcnt) {
2249
        qemu_chr_be_write(chr, &s->buf[s->bufptr], 1);
2250
        s->bufptr++;
2251
        s->max_size = qemu_chr_be_can_write(chr);
2252
    }
2253

    
2254
    return TRUE;
2255
}
2256

    
2257
static void udp_chr_update_read_handler(CharDriverState *chr)
2258
{
2259
    NetCharDriver *s = chr->opaque;
2260

    
2261
    if (s->tag) {
2262
        g_source_remove(s->tag);
2263
        s->tag = 0;
2264
    }
2265

    
2266
    if (s->chan) {
2267
        s->tag = io_add_watch_poll(s->chan, udp_chr_read_poll, udp_chr_read, chr);
2268
    }
2269
}
2270

    
2271
static void udp_chr_close(CharDriverState *chr)
2272
{
2273
    NetCharDriver *s = chr->opaque;
2274
    if (s->tag) {
2275
        g_source_remove(s->tag);
2276
    }
2277
    if (s->chan) {
2278
        g_io_channel_unref(s->chan);
2279
        closesocket(s->fd);
2280
    }
2281
    g_free(s);
2282
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2283
}
2284

    
2285
static CharDriverState *qemu_chr_open_udp(QemuOpts *opts)
2286
{
2287
    CharDriverState *chr = NULL;
2288
    NetCharDriver *s = NULL;
2289
    Error *local_err = NULL;
2290
    int fd = -1;
2291

    
2292
    chr = g_malloc0(sizeof(CharDriverState));
2293
    s = g_malloc0(sizeof(NetCharDriver));
2294

    
2295
    fd = inet_dgram_opts(opts, &local_err);
2296
    if (fd < 0) {
2297
        goto return_err;
2298
    }
2299

    
2300
    s->fd = fd;
2301
    s->chan = io_channel_from_socket(s->fd);
2302
    s->bufcnt = 0;
2303
    s->bufptr = 0;
2304
    chr->opaque = s;
2305
    chr->chr_write = udp_chr_write;
2306
    chr->chr_update_read_handler = udp_chr_update_read_handler;
2307
    chr->chr_close = udp_chr_close;
2308
    return chr;
2309

    
2310
return_err:
2311
    if (local_err) {
2312
        qerror_report_err(local_err);
2313
        error_free(local_err);
2314
    }
2315
    g_free(chr);
2316
    g_free(s);
2317
    if (fd >= 0) {
2318
        closesocket(fd);
2319
    }
2320
    return NULL;
2321
}
2322

    
2323
/***********************************************************/
2324
/* TCP Net console */
2325

    
2326
typedef struct {
2327

    
2328
    GIOChannel *chan, *listen_chan;
2329
    guint tag, listen_tag;
2330
    int fd, listen_fd;
2331
    int connected;
2332
    int max_size;
2333
    int do_telnetopt;
2334
    int do_nodelay;
2335
    int is_unix;
2336
    int msgfd;
2337
} TCPCharDriver;
2338

    
2339
static gboolean tcp_chr_accept(GIOChannel *chan, GIOCondition cond, void *opaque);
2340

    
2341
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2342
{
2343
    TCPCharDriver *s = chr->opaque;
2344
    if (s->connected) {
2345
        return io_channel_send_all(s->chan, buf, len);
2346
    } else {
2347
        /* XXX: indicate an error ? */
2348
        return len;
2349
    }
2350
}
2351

    
2352
static int tcp_chr_read_poll(void *opaque)
2353
{
2354
    CharDriverState *chr = opaque;
2355
    TCPCharDriver *s = chr->opaque;
2356
    if (!s->connected)
2357
        return 0;
2358
    s->max_size = qemu_chr_be_can_write(chr);
2359
    return s->max_size;
2360
}
2361

    
2362
#define IAC 255
2363
#define IAC_BREAK 243
2364
static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
2365
                                      TCPCharDriver *s,
2366
                                      uint8_t *buf, int *size)
2367
{
2368
    /* Handle any telnet client's basic IAC options to satisfy char by
2369
     * char mode with no echo.  All IAC options will be removed from
2370
     * the buf and the do_telnetopt variable will be used to track the
2371
     * state of the width of the IAC information.
2372
     *
2373
     * IAC commands come in sets of 3 bytes with the exception of the
2374
     * "IAC BREAK" command and the double IAC.
2375
     */
2376

    
2377
    int i;
2378
    int j = 0;
2379

    
2380
    for (i = 0; i < *size; i++) {
2381
        if (s->do_telnetopt > 1) {
2382
            if ((unsigned char)buf[i] == IAC && s->do_telnetopt == 2) {
2383
                /* Double IAC means send an IAC */
2384
                if (j != i)
2385
                    buf[j] = buf[i];
2386
                j++;
2387
                s->do_telnetopt = 1;
2388
            } else {
2389
                if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
2390
                    /* Handle IAC break commands by sending a serial break */
2391
                    qemu_chr_be_event(chr, CHR_EVENT_BREAK);
2392
                    s->do_telnetopt++;
2393
                }
2394
                s->do_telnetopt++;
2395
            }
2396
            if (s->do_telnetopt >= 4) {
2397
                s->do_telnetopt = 1;
2398
            }
2399
        } else {
2400
            if ((unsigned char)buf[i] == IAC) {
2401
                s->do_telnetopt = 2;
2402
            } else {
2403
                if (j != i)
2404
                    buf[j] = buf[i];
2405
                j++;
2406
            }
2407
        }
2408
    }
2409
    *size = j;
2410
}
2411

    
2412
static int tcp_get_msgfd(CharDriverState *chr)
2413
{
2414
    TCPCharDriver *s = chr->opaque;
2415
    int fd = s->msgfd;
2416
    s->msgfd = -1;
2417
    return fd;
2418
}
2419

    
2420
#ifndef _WIN32
2421
static void unix_process_msgfd(CharDriverState *chr, struct msghdr *msg)
2422
{
2423
    TCPCharDriver *s = chr->opaque;
2424
    struct cmsghdr *cmsg;
2425

    
2426
    for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
2427
        int fd;
2428

    
2429
        if (cmsg->cmsg_len != CMSG_LEN(sizeof(int)) ||
2430
            cmsg->cmsg_level != SOL_SOCKET ||
2431
            cmsg->cmsg_type != SCM_RIGHTS)
2432
            continue;
2433

    
2434
        fd = *((int *)CMSG_DATA(cmsg));
2435
        if (fd < 0)
2436
            continue;
2437

    
2438
#ifndef MSG_CMSG_CLOEXEC
2439
        qemu_set_cloexec(fd);
2440
#endif
2441
        if (s->msgfd != -1)
2442
            close(s->msgfd);
2443
        s->msgfd = fd;
2444
    }
2445
}
2446

    
2447
static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2448
{
2449
    TCPCharDriver *s = chr->opaque;
2450
    struct msghdr msg = { NULL, };
2451
    struct iovec iov[1];
2452
    union {
2453
        struct cmsghdr cmsg;
2454
        char control[CMSG_SPACE(sizeof(int))];
2455
    } msg_control;
2456
    int flags = 0;
2457
    ssize_t ret;
2458

    
2459
    iov[0].iov_base = buf;
2460
    iov[0].iov_len = len;
2461

    
2462
    msg.msg_iov = iov;
2463
    msg.msg_iovlen = 1;
2464
    msg.msg_control = &msg_control;
2465
    msg.msg_controllen = sizeof(msg_control);
2466

    
2467
#ifdef MSG_CMSG_CLOEXEC
2468
    flags |= MSG_CMSG_CLOEXEC;
2469
#endif
2470
    ret = recvmsg(s->fd, &msg, flags);
2471
    if (ret > 0 && s->is_unix) {
2472
        unix_process_msgfd(chr, &msg);
2473
    }
2474

    
2475
    return ret;
2476
}
2477
#else
2478
static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
2479
{
2480
    TCPCharDriver *s = chr->opaque;
2481
    return qemu_recv(s->fd, buf, len, 0);
2482
}
2483
#endif
2484

    
2485
static GSource *tcp_chr_add_watch(CharDriverState *chr, GIOCondition cond)
2486
{
2487
    TCPCharDriver *s = chr->opaque;
2488
    return g_io_create_watch(s->chan, cond);
2489
}
2490

    
2491
static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
2492
{
2493
    CharDriverState *chr = opaque;
2494
    TCPCharDriver *s = chr->opaque;
2495
    uint8_t buf[READ_BUF_LEN];
2496
    int len, size;
2497

    
2498
    if (!s->connected || s->max_size <= 0) {
2499
        return FALSE;
2500
    }
2501
    len = sizeof(buf);
2502
    if (len > s->max_size)
2503
        len = s->max_size;
2504
    size = tcp_chr_recv(chr, (void *)buf, len);
2505
    if (size == 0) {
2506
        /* connection closed */
2507
        s->connected = 0;
2508
        if (s->listen_chan) {
2509
            s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr);
2510
        }
2511
        g_source_remove(s->tag);
2512
        s->tag = 0;
2513
        g_io_channel_unref(s->chan);
2514
        s->chan = NULL;
2515
        closesocket(s->fd);
2516
        s->fd = -1;
2517
        qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2518
    } else if (size > 0) {
2519
        if (s->do_telnetopt)
2520
            tcp_chr_process_IAC_bytes(chr, s, buf, &size);
2521
        if (size > 0)
2522
            qemu_chr_be_write(chr, buf, size);
2523
    }
2524

    
2525
    return TRUE;
2526
}
2527

    
2528
#ifndef _WIN32
2529
CharDriverState *qemu_chr_open_eventfd(int eventfd)
2530
{
2531
    return qemu_chr_open_fd(eventfd, eventfd);
2532
}
2533
#endif
2534

    
2535
static void tcp_chr_connect(void *opaque)
2536
{
2537
    CharDriverState *chr = opaque;
2538
    TCPCharDriver *s = chr->opaque;
2539

    
2540
    s->connected = 1;
2541
    if (s->chan) {
2542
        s->tag = io_add_watch_poll(s->chan, tcp_chr_read_poll, tcp_chr_read, chr);
2543
    }
2544
    qemu_chr_generic_open(chr);
2545
}
2546

    
2547
#define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c;
2548
static void tcp_chr_telnet_init(int fd)
2549
{
2550
    char buf[3];
2551
    /* Send the telnet negotion to put telnet in binary, no echo, single char mode */
2552
    IACSET(buf, 0xff, 0xfb, 0x01);  /* IAC WILL ECHO */
2553
    send(fd, (char *)buf, 3, 0);
2554
    IACSET(buf, 0xff, 0xfb, 0x03);  /* IAC WILL Suppress go ahead */
2555
    send(fd, (char *)buf, 3, 0);
2556
    IACSET(buf, 0xff, 0xfb, 0x00);  /* IAC WILL Binary */
2557
    send(fd, (char *)buf, 3, 0);
2558
    IACSET(buf, 0xff, 0xfd, 0x00);  /* IAC DO Binary */
2559
    send(fd, (char *)buf, 3, 0);
2560
}
2561

    
2562
static int tcp_chr_add_client(CharDriverState *chr, int fd)
2563
{
2564
    TCPCharDriver *s = chr->opaque;
2565
    if (s->fd != -1)
2566
        return -1;
2567

    
2568
    socket_set_nonblock(fd);
2569
    if (s->do_nodelay)
2570
        socket_set_nodelay(fd);
2571
    s->fd = fd;
2572
    s->chan = io_channel_from_socket(fd);
2573
    g_source_remove(s->listen_tag);
2574
    s->listen_tag = 0;
2575
    tcp_chr_connect(chr);
2576

    
2577
    return 0;
2578
}
2579

    
2580
static gboolean tcp_chr_accept(GIOChannel *channel, GIOCondition cond, void *opaque)
2581
{
2582
    CharDriverState *chr = opaque;
2583
    TCPCharDriver *s = chr->opaque;
2584
    struct sockaddr_in saddr;
2585
#ifndef _WIN32
2586
    struct sockaddr_un uaddr;
2587
#endif
2588
    struct sockaddr *addr;
2589
    socklen_t len;
2590
    int fd;
2591

    
2592
    for(;;) {
2593
#ifndef _WIN32
2594
        if (s->is_unix) {
2595
            len = sizeof(uaddr);
2596
            addr = (struct sockaddr *)&uaddr;
2597
        } else
2598
#endif
2599
        {
2600
            len = sizeof(saddr);
2601
            addr = (struct sockaddr *)&saddr;
2602
        }
2603
        fd = qemu_accept(s->listen_fd, addr, &len);
2604
        if (fd < 0 && errno != EINTR) {
2605
            return FALSE;
2606
        } else if (fd >= 0) {
2607
            if (s->do_telnetopt)
2608
                tcp_chr_telnet_init(fd);
2609
            break;
2610
        }
2611
    }
2612
    if (tcp_chr_add_client(chr, fd) < 0)
2613
        close(fd);
2614

    
2615
    return TRUE;
2616
}
2617

    
2618
static void tcp_chr_close(CharDriverState *chr)
2619
{
2620
    TCPCharDriver *s = chr->opaque;
2621
    if (s->fd >= 0) {
2622
        if (s->tag) {
2623
            g_source_remove(s->tag);
2624
        }
2625
        if (s->chan) {
2626
            g_io_channel_unref(s->chan);
2627
        }
2628
        closesocket(s->fd);
2629
    }
2630
    if (s->listen_fd >= 0) {
2631
        if (s->listen_tag) {
2632
            g_source_remove(s->listen_tag);
2633
        }
2634
        if (s->listen_chan) {
2635
            g_io_channel_unref(s->listen_chan);
2636
        }
2637
        closesocket(s->listen_fd);
2638
    }
2639
    g_free(s);
2640
    qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
2641
}
2642

    
2643
static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
2644
                                                bool is_listen, bool is_telnet,
2645
                                                bool is_waitconnect,
2646
                                                Error **errp)
2647
{
2648
    CharDriverState *chr = NULL;
2649
    TCPCharDriver *s = NULL;
2650
    char host[NI_MAXHOST], serv[NI_MAXSERV];
2651
    const char *left = "", *right = "";
2652
    struct sockaddr_storage ss;
2653
    socklen_t ss_len = sizeof(ss);
2654

    
2655
    memset(&ss, 0, ss_len);
2656
    if (getsockname(fd, (struct sockaddr *) &ss, &ss_len) != 0) {
2657
        error_setg(errp, "getsockname: %s", strerror(errno));
2658
        return NULL;
2659
    }
2660

    
2661
    chr = g_malloc0(sizeof(CharDriverState));
2662
    s = g_malloc0(sizeof(TCPCharDriver));
2663

    
2664
    s->connected = 0;
2665
    s->fd = -1;
2666
    s->listen_fd = -1;
2667
    s->msgfd = -1;
2668

    
2669
    chr->filename = g_malloc(256);
2670
    switch (ss.ss_family) {
2671
#ifndef _WIN32
2672
    case AF_UNIX:
2673
        s->is_unix = 1;
2674
        snprintf(chr->filename, 256, "unix:%s%s",
2675
                 ((struct sockaddr_un *)(&ss))->sun_path,
2676
                 is_listen ? ",server" : "");
2677
        break;
2678
#endif
2679
    case AF_INET6:
2680
        left  = "[";
2681
        right = "]";
2682
        /* fall through */
2683
    case AF_INET:
2684
        s->do_nodelay = do_nodelay;
2685
        getnameinfo((struct sockaddr *) &ss, ss_len, host, sizeof(host),
2686
                    serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
2687
        snprintf(chr->filename, 256, "%s:%s:%s%s%s%s",
2688
                 is_telnet ? "telnet" : "tcp",
2689
                 left, host, right, serv,
2690
                 is_listen ? ",server" : "");
2691
        break;
2692
    }
2693

    
2694
    chr->opaque = s;
2695
    chr->chr_write = tcp_chr_write;
2696
    chr->chr_close = tcp_chr_close;
2697
    chr->get_msgfd = tcp_get_msgfd;
2698
    chr->chr_add_client = tcp_chr_add_client;
2699
    chr->chr_add_watch = tcp_chr_add_watch;
2700

    
2701
    if (is_listen) {
2702
        s->listen_fd = fd;
2703
        s->listen_chan = io_channel_from_socket(s->listen_fd);
2704
        s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr);
2705
        if (is_telnet) {
2706
            s->do_telnetopt = 1;
2707
        }
2708
    } else {
2709
        s->connected = 1;
2710
        s->fd = fd;
2711
        socket_set_nodelay(fd);
2712
        s->chan = io_channel_from_socket(s->fd);
2713
        tcp_chr_connect(chr);
2714
    }
2715

    
2716
    if (is_listen && is_waitconnect) {
2717
        printf("QEMU waiting for connection on: %s\n",
2718
               chr->filename);
2719
        tcp_chr_accept(s->listen_chan, G_IO_IN, chr);
2720
        socket_set_nonblock(s->listen_fd);
2721
    }
2722
    return chr;
2723
}
2724

    
2725
static CharDriverState *qemu_chr_open_socket(QemuOpts *opts)
2726
{
2727
    CharDriverState *chr = NULL;
2728
    Error *local_err = NULL;
2729
    int fd = -1;
2730
    int is_listen;
2731
    int is_waitconnect;
2732
    int do_nodelay;
2733
    int is_unix;
2734
    int is_telnet;
2735

    
2736
    is_listen      = qemu_opt_get_bool(opts, "server", 0);
2737
    is_waitconnect = qemu_opt_get_bool(opts, "wait", 1);
2738
    is_telnet      = qemu_opt_get_bool(opts, "telnet", 0);
2739
    do_nodelay     = !qemu_opt_get_bool(opts, "delay", 1);
2740
    is_unix        = qemu_opt_get(opts, "path") != NULL;
2741
    if (!is_listen)
2742
        is_waitconnect = 0;
2743

    
2744
    if (is_unix) {
2745
        if (is_listen) {
2746
            fd = unix_listen_opts(opts, &local_err);
2747
        } else {
2748
            fd = unix_connect_opts(opts, &local_err, NULL, NULL);
2749
        }
2750
    } else {
2751
        if (is_listen) {
2752
            fd = inet_listen_opts(opts, 0, &local_err);
2753
        } else {
2754
            fd = inet_connect_opts(opts, &local_err, NULL, NULL);
2755
        }
2756
    }
2757
    if (fd < 0) {
2758
        goto fail;
2759
    }
2760

    
2761
    if (!is_waitconnect)
2762
        socket_set_nonblock(fd);
2763

    
2764
    chr = qemu_chr_open_socket_fd(fd, do_nodelay, is_listen, is_telnet,
2765
                                  is_waitconnect, &local_err);
2766
    if (error_is_set(&local_err)) {
2767
        goto fail;
2768
    }
2769
    return chr;
2770

    
2771

    
2772
 fail:
2773
    if (local_err) {
2774
        qerror_report_err(local_err);
2775
        error_free(local_err);
2776
    }
2777
    if (fd >= 0) {
2778
        closesocket(fd);
2779
    }
2780
    if (chr) {
2781
        g_free(chr->opaque);
2782
        g_free(chr);
2783
    }
2784
    return NULL;
2785
}
2786

    
2787
/***********************************************************/
2788
/* Memory chardev */
2789
typedef struct {
2790
    size_t outbuf_size;
2791
    size_t outbuf_capacity;
2792
    uint8_t *outbuf;
2793
} MemoryDriver;
2794

    
2795
static int mem_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2796
{
2797
    MemoryDriver *d = chr->opaque;
2798

    
2799
    /* TODO: the QString implementation has the same code, we should
2800
     * introduce a generic way to do this in cutils.c */
2801
    if (d->outbuf_capacity < d->outbuf_size + len) {
2802
        /* grow outbuf */
2803
        d->outbuf_capacity += len;
2804
        d->outbuf_capacity *= 2;
2805
        d->outbuf = g_realloc(d->outbuf, d->outbuf_capacity);
2806
    }
2807

    
2808
    memcpy(d->outbuf + d->outbuf_size, buf, len);
2809
    d->outbuf_size += len;
2810

    
2811
    return len;
2812
}
2813

    
2814
void qemu_chr_init_mem(CharDriverState *chr)
2815
{
2816
    MemoryDriver *d;
2817

    
2818
    d = g_malloc(sizeof(*d));
2819
    d->outbuf_size = 0;
2820
    d->outbuf_capacity = 4096;
2821
    d->outbuf = g_malloc0(d->outbuf_capacity);
2822

    
2823
    memset(chr, 0, sizeof(*chr));
2824
    chr->opaque = d;
2825
    chr->chr_write = mem_chr_write;
2826
}
2827

    
2828
QString *qemu_chr_mem_to_qs(CharDriverState *chr)
2829
{
2830
    MemoryDriver *d = chr->opaque;
2831
    return qstring_from_substr((char *) d->outbuf, 0, d->outbuf_size - 1);
2832
}
2833

    
2834
/* NOTE: this driver can not be closed with qemu_chr_delete()! */
2835
void qemu_chr_close_mem(CharDriverState *chr)
2836
{
2837
    MemoryDriver *d = chr->opaque;
2838

    
2839
    g_free(d->outbuf);
2840
    g_free(chr->opaque);
2841
    chr->opaque = NULL;
2842
    chr->chr_write = NULL;
2843
}
2844

    
2845
size_t qemu_chr_mem_osize(const CharDriverState *chr)
2846
{
2847
    const MemoryDriver *d = chr->opaque;
2848
    return d->outbuf_size;
2849
}
2850

    
2851
/*********************************************************/
2852
/* Ring buffer chardev */
2853

    
2854
typedef struct {
2855
    size_t size;
2856
    size_t prod;
2857
    size_t cons;
2858
    uint8_t *cbuf;
2859
} RingBufCharDriver;
2860

    
2861
static size_t ringbuf_count(const CharDriverState *chr)
2862
{
2863
    const RingBufCharDriver *d = chr->opaque;
2864

    
2865
    return d->prod - d->cons;
2866
}
2867

    
2868
static int ringbuf_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
2869
{
2870
    RingBufCharDriver *d = chr->opaque;
2871
    int i;
2872

    
2873
    if (!buf || (len < 0)) {
2874
        return -1;
2875
    }
2876

    
2877
    for (i = 0; i < len; i++ ) {
2878
        d->cbuf[d->prod++ & (d->size - 1)] = buf[i];
2879
        if (d->prod - d->cons > d->size) {
2880
            d->cons = d->prod - d->size;
2881
        }
2882
    }
2883

    
2884
    return 0;
2885
}
2886

    
2887
static int ringbuf_chr_read(CharDriverState *chr, uint8_t *buf, int len)
2888
{
2889
    RingBufCharDriver *d = chr->opaque;
2890
    int i;
2891

    
2892
    for (i = 0; i < len && d->cons != d->prod; i++) {
2893
        buf[i] = d->cbuf[d->cons++ & (d->size - 1)];
2894
    }
2895

    
2896
    return i;
2897
}
2898

    
2899
static void ringbuf_chr_close(struct CharDriverState *chr)
2900
{
2901
    RingBufCharDriver *d = chr->opaque;
2902

    
2903
    g_free(d->cbuf);
2904
    g_free(d);
2905
    chr->opaque = NULL;
2906
}
2907

    
2908
static CharDriverState *qemu_chr_open_ringbuf(QemuOpts *opts)
2909
{
2910
    CharDriverState *chr;
2911
    RingBufCharDriver *d;
2912

    
2913
    chr = g_malloc0(sizeof(CharDriverState));
2914
    d = g_malloc(sizeof(*d));
2915

    
2916
    d->size = qemu_opt_get_size(opts, "size", 0);
2917
    if (d->size == 0) {
2918
        d->size = 65536;
2919
    }
2920

    
2921
    /* The size must be power of 2 */
2922
    if (d->size & (d->size - 1)) {
2923
        error_report("size of ringbuf device must be power of two");
2924
        goto fail;
2925
    }
2926

    
2927
    d->prod = 0;
2928
    d->cons = 0;
2929
    d->cbuf = g_malloc0(d->size);
2930

    
2931
    chr->opaque = d;
2932
    chr->chr_write = ringbuf_chr_write;
2933
    chr->chr_close = ringbuf_chr_close;
2934

    
2935
    return chr;
2936

    
2937
fail:
2938
    g_free(d);
2939
    g_free(chr);
2940
    return NULL;
2941
}
2942

    
2943
static bool chr_is_ringbuf(const CharDriverState *chr)
2944
{
2945
    return chr->chr_write == ringbuf_chr_write;
2946
}
2947

    
2948
void qmp_ringbuf_write(const char *device, const char *data,
2949
                       bool has_format, enum DataFormat format,
2950
                       Error **errp)
2951
{
2952
    CharDriverState *chr;
2953
    const uint8_t *write_data;
2954
    int ret;
2955
    size_t write_count;
2956

    
2957
    chr = qemu_chr_find(device);
2958
    if (!chr) {
2959
        error_setg(errp, "Device '%s' not found", device);
2960
        return;
2961
    }
2962

    
2963
    if (!chr_is_ringbuf(chr)) {
2964
        error_setg(errp,"%s is not a ringbuf device", device);
2965
        return;
2966
    }
2967

    
2968
    if (has_format && (format == DATA_FORMAT_BASE64)) {
2969
        write_data = g_base64_decode(data, &write_count);
2970
    } else {
2971
        write_data = (uint8_t *)data;
2972
        write_count = strlen(data);
2973
    }
2974

    
2975
    ret = ringbuf_chr_write(chr, write_data, write_count);
2976

    
2977
    if (write_data != (uint8_t *)data) {
2978
        g_free((void *)write_data);
2979
    }
2980

    
2981
    if (ret < 0) {
2982
        error_setg(errp, "Failed to write to device %s", device);
2983
        return;
2984
    }
2985
}
2986

    
2987
char *qmp_ringbuf_read(const char *device, int64_t size,
2988
                       bool has_format, enum DataFormat format,
2989
                       Error **errp)
2990
{
2991
    CharDriverState *chr;
2992
    uint8_t *read_data;
2993
    size_t count;
2994
    char *data;
2995

    
2996
    chr = qemu_chr_find(device);
2997
    if (!chr) {
2998
        error_setg(errp, "Device '%s' not found", device);
2999
        return NULL;
3000
    }
3001

    
3002
    if (!chr_is_ringbuf(chr)) {
3003
        error_setg(errp,"%s is not a ringbuf device", device);
3004
        return NULL;
3005
    }
3006

    
3007
    if (size <= 0) {
3008
        error_setg(errp, "size must be greater than zero");
3009
        return NULL;
3010
    }
3011

    
3012
    count = ringbuf_count(chr);
3013
    size = size > count ? count : size;
3014
    read_data = g_malloc(size + 1);
3015

    
3016
    ringbuf_chr_read(chr, read_data, size);
3017

    
3018
    if (has_format && (format == DATA_FORMAT_BASE64)) {
3019
        data = g_base64_encode(read_data, size);
3020
        g_free(read_data);
3021
    } else {
3022
        /*
3023
         * FIXME should read only complete, valid UTF-8 characters up
3024
         * to @size bytes.  Invalid sequences should be replaced by a
3025
         * suitable replacement character.  Except when (and only
3026
         * when) ring buffer lost characters since last read, initial
3027
         * continuation characters should be dropped.
3028
         */
3029
        read_data[size] = 0;
3030
        data = (char *)read_data;
3031
    }
3032

    
3033
    return data;
3034
}
3035

    
3036
QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
3037
{
3038
    char host[65], port[33], width[8], height[8];
3039
    int pos;
3040
    const char *p;
3041
    QemuOpts *opts;
3042
    Error *local_err = NULL;
3043

    
3044
    opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
3045
    if (error_is_set(&local_err)) {
3046
        qerror_report_err(local_err);
3047
        error_free(local_err);
3048
        return NULL;
3049
    }
3050

    
3051
    if (strstart(filename, "mon:", &p)) {
3052
        filename = p;
3053
        qemu_opt_set(opts, "mux", "on");
3054
    }
3055

    
3056
    if (strcmp(filename, "null")    == 0 ||
3057
        strcmp(filename, "pty")     == 0 ||
3058
        strcmp(filename, "msmouse") == 0 ||
3059
        strcmp(filename, "braille") == 0 ||
3060
        strcmp(filename, "stdio")   == 0) {
3061
        qemu_opt_set(opts, "backend", filename);
3062
        return opts;
3063
    }
3064
    if (strstart(filename, "vc", &p)) {
3065
        qemu_opt_set(opts, "backend", "vc");
3066
        if (*p == ':') {
3067
            if (sscanf(p+1, "%8[0-9]x%8[0-9]", width, height) == 2) {
3068
                /* pixels */
3069
                qemu_opt_set(opts, "width", width);
3070
                qemu_opt_set(opts, "height", height);
3071
            } else if (sscanf(p+1, "%8[0-9]Cx%8[0-9]C", width, height) == 2) {
3072
                /* chars */
3073
                qemu_opt_set(opts, "cols", width);
3074
                qemu_opt_set(opts, "rows", height);
3075
            } else {
3076
                goto fail;
3077
            }
3078
        }
3079
        return opts;
3080
    }
3081
    if (strcmp(filename, "con:") == 0) {
3082
        qemu_opt_set(opts, "backend", "console");
3083
        return opts;
3084
    }
3085
    if (strstart(filename, "COM", NULL)) {
3086
        qemu_opt_set(opts, "backend", "serial");
3087
        qemu_opt_set(opts, "path", filename);
3088
        return opts;
3089
    }
3090
    if (strstart(filename, "file:", &p)) {
3091
        qemu_opt_set(opts, "backend", "file");
3092
        qemu_opt_set(opts, "path", p);
3093
        return opts;
3094
    }
3095
    if (strstart(filename, "pipe:", &p)) {
3096
        qemu_opt_set(opts, "backend", "pipe");
3097
        qemu_opt_set(opts, "path", p);
3098
        return opts;
3099
    }
3100
    if (strstart(filename, "tcp:", &p) ||
3101
        strstart(filename, "telnet:", &p)) {
3102
        if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
3103
            host[0] = 0;
3104
            if (sscanf(p, ":%32[^,]%n", port, &pos) < 1)
3105
                goto fail;
3106
        }
3107
        qemu_opt_set(opts, "backend", "socket");
3108
        qemu_opt_set(opts, "host", host);
3109
        qemu_opt_set(opts, "port", port);
3110
        if (p[pos] == ',') {
3111
            if (qemu_opts_do_parse(opts, p+pos+1, NULL) != 0)
3112
                goto fail;
3113
        }
3114
        if (strstart(filename, "telnet:", &p))
3115
            qemu_opt_set(opts, "telnet", "on");
3116
        return opts;
3117
    }
3118
    if (strstart(filename, "udp:", &p)) {
3119
        qemu_opt_set(opts, "backend", "udp");
3120
        if (sscanf(p, "%64[^:]:%32[^@,]%n", host, port, &pos) < 2) {
3121
            host[0] = 0;
3122
            if (sscanf(p, ":%32[^@,]%n", port, &pos) < 1) {
3123
                goto fail;
3124
            }
3125
        }
3126
        qemu_opt_set(opts, "host", host);
3127
        qemu_opt_set(opts, "port", port);
3128
        if (p[pos] == '@') {
3129
            p += pos + 1;
3130
            if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
3131
                host[0] = 0;
3132
                if (sscanf(p, ":%32[^,]%n", port, &pos) < 1) {
3133
                    goto fail;
3134
                }
3135
            }
3136
            qemu_opt_set(opts, "localaddr", host);
3137
            qemu_opt_set(opts, "localport", port);
3138
        }
3139
        return opts;
3140
    }
3141
    if (strstart(filename, "unix:", &p)) {
3142
        qemu_opt_set(opts, "backend", "socket");
3143
        if (qemu_opts_do_parse(opts, p, "path") != 0)
3144
            goto fail;
3145
        return opts;
3146
    }
3147
    if (strstart(filename, "/dev/parport", NULL) ||
3148
        strstart(filename, "/dev/ppi", NULL)) {
3149
        qemu_opt_set(opts, "backend", "parport");
3150
        qemu_opt_set(opts, "path", filename);
3151
        return opts;
3152
    }
3153
    if (strstart(filename, "/dev/", NULL)) {
3154
        qemu_opt_set(opts, "backend", "tty");
3155
        qemu_opt_set(opts, "path", filename);
3156
        return opts;
3157
    }
3158

    
3159
fail:
3160
    qemu_opts_del(opts);
3161
    return NULL;
3162
}
3163

    
3164
#ifdef HAVE_CHARDEV_PARPORT
3165

    
3166
static CharDriverState *qemu_chr_open_pp(QemuOpts *opts)
3167
{
3168
    const char *filename = qemu_opt_get(opts, "path");
3169
    int fd;
3170

    
3171
    fd = qemu_open(filename, O_RDWR);
3172
    if (fd < 0) {
3173
        return NULL;
3174
    }
3175
    return qemu_chr_open_pp_fd(fd);
3176
}
3177

    
3178
#endif
3179

    
3180
typedef struct CharDriver {
3181
    const char *name;
3182
    CharDriverState *(*open)(QemuOpts *opts);
3183
} CharDriver;
3184

    
3185
static GSList *backends;
3186

    
3187
void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *))
3188
{
3189
    CharDriver *s;
3190

    
3191
    s = g_malloc0(sizeof(*s));
3192
    s->name = g_strdup(name);
3193
    s->open = open;
3194

    
3195
    backends = g_slist_append(backends, s);
3196
}
3197

    
3198
CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts,
3199
                                    void (*init)(struct CharDriverState *s),
3200
                                    Error **errp)
3201
{
3202
    CharDriver *cd;
3203
    CharDriverState *chr;
3204
    GSList *i;
3205

    
3206
    if (qemu_opts_id(opts) == NULL) {
3207
        error_setg(errp, "chardev: no id specified");
3208
        goto err;
3209
    }
3210

    
3211
    if (qemu_opt_get(opts, "backend") == NULL) {
3212
        error_setg(errp, "chardev: \"%s\" missing backend",
3213
                   qemu_opts_id(opts));
3214
        goto err;
3215
    }
3216
    for (i = backends; i; i = i->next) {
3217
        cd = i->data;
3218

    
3219
        if (strcmp(cd->name, qemu_opt_get(opts, "backend")) == 0) {
3220
            break;
3221
        }
3222
    }
3223
    if (i == NULL) {
3224
        error_setg(errp, "chardev: backend \"%s\" not found",
3225
                   qemu_opt_get(opts, "backend"));
3226
        return NULL;
3227
    }
3228

    
3229
    chr = cd->open(opts);
3230
    if (!chr) {
3231
        error_setg(errp, "chardev: opening backend \"%s\" failed",
3232
                   qemu_opt_get(opts, "backend"));
3233
        goto err;
3234
    }
3235

    
3236
    if (!chr->filename)
3237
        chr->filename = g_strdup(qemu_opt_get(opts, "backend"));
3238
    chr->init = init;
3239
    QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3240

    
3241
    if (qemu_opt_get_bool(opts, "mux", 0)) {
3242
        CharDriverState *base = chr;
3243
        int len = strlen(qemu_opts_id(opts)) + 6;
3244
        base->label = g_malloc(len);
3245
        snprintf(base->label, len, "%s-base", qemu_opts_id(opts));
3246
        chr = qemu_chr_open_mux(base);
3247
        chr->filename = base->filename;
3248
        chr->avail_connections = MAX_MUX;
3249
        QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3250
    } else {
3251
        chr->avail_connections = 1;
3252
    }
3253
    chr->label = g_strdup(qemu_opts_id(opts));
3254
    chr->opts = opts;
3255
    return chr;
3256

    
3257
err:
3258
    qemu_opts_del(opts);
3259
    return NULL;
3260
}
3261

    
3262
CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
3263
{
3264
    const char *p;
3265
    CharDriverState *chr;
3266
    QemuOpts *opts;
3267
    Error *err = NULL;
3268

    
3269
    if (strstart(filename, "chardev:", &p)) {
3270
        return qemu_chr_find(p);
3271
    }
3272

    
3273
    opts = qemu_chr_parse_compat(label, filename);
3274
    if (!opts)
3275
        return NULL;
3276

    
3277
    chr = qemu_chr_new_from_opts(opts, init, &err);
3278
    if (error_is_set(&err)) {
3279
        fprintf(stderr, "%s\n", error_get_pretty(err));
3280
        error_free(err);
3281
    }
3282
    if (chr && qemu_opt_get_bool(opts, "mux", 0)) {
3283
        monitor_init(chr, MONITOR_USE_READLINE);
3284
    }
3285
    return chr;
3286
}
3287

    
3288
void qemu_chr_fe_set_echo(struct CharDriverState *chr, bool echo)
3289
{
3290
    if (chr->chr_set_echo) {
3291
        chr->chr_set_echo(chr, echo);
3292
    }
3293
}
3294

    
3295
void qemu_chr_fe_open(struct CharDriverState *chr)
3296
{
3297
    if (chr->chr_guest_open) {
3298
        chr->chr_guest_open(chr);
3299
    }
3300
}
3301

    
3302
void qemu_chr_fe_close(struct CharDriverState *chr)
3303
{
3304
    if (chr->chr_guest_close) {
3305
        chr->chr_guest_close(chr);
3306
    }
3307
}
3308

    
3309
guint qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond,
3310
                            GIOFunc func, void *user_data)
3311
{
3312
    GSource *src;
3313
    guint tag;
3314

    
3315
    if (s->chr_add_watch == NULL) {
3316
        return -ENOSYS;
3317
    }
3318

    
3319
    src = s->chr_add_watch(s, cond);
3320
    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
3321
    tag = g_source_attach(src, NULL);
3322
    g_source_unref(src);
3323

    
3324
    return tag;
3325
}
3326

    
3327
void qemu_chr_delete(CharDriverState *chr)
3328
{
3329
    QTAILQ_REMOVE(&chardevs, chr, next);
3330
    if (chr->chr_close) {
3331
        chr->chr_close(chr);
3332
    }
3333
    g_free(chr->filename);
3334
    g_free(chr->label);
3335
    if (chr->opts) {
3336
        qemu_opts_del(chr->opts);
3337
    }
3338
    g_free(chr);
3339
}
3340

    
3341
ChardevInfoList *qmp_query_chardev(Error **errp)
3342
{
3343
    ChardevInfoList *chr_list = NULL;
3344
    CharDriverState *chr;
3345

    
3346
    QTAILQ_FOREACH(chr, &chardevs, next) {
3347
        ChardevInfoList *info = g_malloc0(sizeof(*info));
3348
        info->value = g_malloc0(sizeof(*info->value));
3349
        info->value->label = g_strdup(chr->label);
3350
        info->value->filename = g_strdup(chr->filename);
3351

    
3352
        info->next = chr_list;
3353
        chr_list = info;
3354
    }
3355

    
3356
    return chr_list;
3357
}
3358

    
3359
CharDriverState *qemu_chr_find(const char *name)
3360
{
3361
    CharDriverState *chr;
3362

    
3363
    QTAILQ_FOREACH(chr, &chardevs, next) {
3364
        if (strcmp(chr->label, name) != 0)
3365
            continue;
3366
        return chr;
3367
    }
3368
    return NULL;
3369
}
3370

    
3371
/* Get a character (serial) device interface.  */
3372
CharDriverState *qemu_char_get_next_serial(void)
3373
{
3374
    static int next_serial;
3375

    
3376
    /* FIXME: This function needs to go away: use chardev properties!  */
3377
    return serial_hds[next_serial++];
3378
}
3379

    
3380
QemuOptsList qemu_chardev_opts = {
3381
    .name = "chardev",
3382
    .implied_opt_name = "backend",
3383
    .head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
3384
    .desc = {
3385
        {
3386
            .name = "backend",
3387
            .type = QEMU_OPT_STRING,
3388
        },{
3389
            .name = "path",
3390
            .type = QEMU_OPT_STRING,
3391
        },{
3392
            .name = "host",
3393
            .type = QEMU_OPT_STRING,
3394
        },{
3395
            .name = "port",
3396
            .type = QEMU_OPT_STRING,
3397
        },{
3398
            .name = "localaddr",
3399
            .type = QEMU_OPT_STRING,
3400
        },{
3401
            .name = "localport",
3402
            .type = QEMU_OPT_STRING,
3403
        },{
3404
            .name = "to",
3405
            .type = QEMU_OPT_NUMBER,
3406
        },{
3407
            .name = "ipv4",
3408
            .type = QEMU_OPT_BOOL,
3409
        },{
3410
            .name = "ipv6",
3411
            .type = QEMU_OPT_BOOL,
3412
        },{
3413
            .name = "wait",
3414
            .type = QEMU_OPT_BOOL,
3415
        },{
3416
            .name = "server",
3417
            .type = QEMU_OPT_BOOL,
3418
        },{
3419
            .name = "delay",
3420
            .type = QEMU_OPT_BOOL,
3421
        },{
3422
            .name = "telnet",
3423
            .type = QEMU_OPT_BOOL,
3424
        },{
3425
            .name = "width",
3426
            .type = QEMU_OPT_NUMBER,
3427
        },{
3428
            .name = "height",
3429
            .type = QEMU_OPT_NUMBER,
3430
        },{
3431
            .name = "cols",
3432
            .type = QEMU_OPT_NUMBER,
3433
        },{
3434
            .name = "rows",
3435
            .type = QEMU_OPT_NUMBER,
3436
        },{
3437
            .name = "mux",
3438
            .type = QEMU_OPT_BOOL,
3439
        },{
3440
            .name = "signal",
3441
            .type = QEMU_OPT_BOOL,
3442
        },{
3443
            .name = "name",
3444
            .type = QEMU_OPT_STRING,
3445
        },{
3446
            .name = "debug",
3447
            .type = QEMU_OPT_NUMBER,
3448
        },{
3449
            .name = "size",
3450
            .type = QEMU_OPT_SIZE,
3451
        },
3452
        { /* end of list */ }
3453
    },
3454
};
3455

    
3456
#ifdef _WIN32
3457

    
3458
static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
3459
{
3460
    HANDLE out;
3461

    
3462
    if (file->in) {
3463
        error_setg(errp, "input file not supported");
3464
        return NULL;
3465
    }
3466

    
3467
    out = CreateFile(file->out, GENERIC_WRITE, FILE_SHARE_READ, NULL,
3468
                     OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
3469
    if (out == INVALID_HANDLE_VALUE) {
3470
        error_setg(errp, "open %s failed", file->out);
3471
        return NULL;
3472
    }
3473
    return qemu_chr_open_win_file(out);
3474
}
3475

    
3476
static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
3477
                                                Error **errp)
3478
{
3479
    return qemu_chr_open_win_path(serial->device);
3480
}
3481

    
3482
static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
3483
                                                  Error **errp)
3484
{
3485
    error_setg(errp, "character device backend type 'parallel' not supported");
3486
    return NULL;
3487
}
3488

    
3489
#else /* WIN32 */
3490

    
3491
static int qmp_chardev_open_file_source(char *src, int flags,
3492
                                        Error **errp)
3493
{
3494
    int fd = -1;
3495

    
3496
    TFR(fd = qemu_open(src, flags, 0666));
3497
    if (fd == -1) {
3498
        error_setg(errp, "open %s: %s", src, strerror(errno));
3499
    }
3500
    return fd;
3501
}
3502

    
3503
static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp)
3504
{
3505
    int flags, in = -1, out = -1;
3506

    
3507
    flags = O_WRONLY | O_TRUNC | O_CREAT | O_BINARY;
3508
    out = qmp_chardev_open_file_source(file->out, flags, errp);
3509
    if (error_is_set(errp)) {
3510
        return NULL;
3511
    }
3512

    
3513
    if (file->in) {
3514
        flags = O_RDONLY;
3515
        in = qmp_chardev_open_file_source(file->in, flags, errp);
3516
        if (error_is_set(errp)) {
3517
            qemu_close(out);
3518
            return NULL;
3519
        }
3520
    }
3521

    
3522
    return qemu_chr_open_fd(in, out);
3523
}
3524

    
3525
static CharDriverState *qmp_chardev_open_serial(ChardevHostdev *serial,
3526
                                                Error **errp)
3527
{
3528
#ifdef HAVE_CHARDEV_TTY
3529
    int fd;
3530

    
3531
    fd = qmp_chardev_open_file_source(serial->device, O_RDWR, errp);
3532
    if (error_is_set(errp)) {
3533
        return NULL;
3534
    }
3535
    socket_set_nonblock(fd);
3536
    return qemu_chr_open_tty_fd(fd);
3537
#else
3538
    error_setg(errp, "character device backend type 'serial' not supported");
3539
    return NULL;
3540
#endif
3541
}
3542

    
3543
static CharDriverState *qmp_chardev_open_parallel(ChardevHostdev *parallel,
3544
                                                  Error **errp)
3545
{
3546
#ifdef HAVE_CHARDEV_PARPORT
3547
    int fd;
3548

    
3549
    fd = qmp_chardev_open_file_source(parallel->device, O_RDWR, errp);
3550
    if (error_is_set(errp)) {
3551
        return NULL;
3552
    }
3553
    return qemu_chr_open_pp_fd(fd);
3554
#else
3555
    error_setg(errp, "character device backend type 'parallel' not supported");
3556
    return NULL;
3557
#endif
3558
}
3559

    
3560
#endif /* WIN32 */
3561

    
3562
static CharDriverState *qmp_chardev_open_socket(ChardevSocket *sock,
3563
                                                Error **errp)
3564
{
3565
    SocketAddress *addr = sock->addr;
3566
    bool do_nodelay     = sock->has_nodelay ? sock->nodelay : false;
3567
    bool is_listen      = sock->has_server  ? sock->server  : true;
3568
    bool is_telnet      = sock->has_telnet  ? sock->telnet  : false;
3569
    bool is_waitconnect = sock->has_wait    ? sock->wait    : false;
3570
    int fd;
3571

    
3572
    if (is_listen) {
3573
        fd = socket_listen(addr, errp);
3574
    } else {
3575
        fd = socket_connect(addr, errp, NULL, NULL);
3576
    }
3577
    if (error_is_set(errp)) {
3578
        return NULL;
3579
    }
3580
    return qemu_chr_open_socket_fd(fd, do_nodelay, is_listen,
3581
                                   is_telnet, is_waitconnect, errp);
3582
}
3583

    
3584
ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
3585
                               Error **errp)
3586
{
3587
    ChardevReturn *ret = g_new0(ChardevReturn, 1);
3588
    CharDriverState *chr = NULL;
3589

    
3590
    chr = qemu_chr_find(id);
3591
    if (chr) {
3592
        error_setg(errp, "Chardev '%s' already exists", id);
3593
        g_free(ret);
3594
        return NULL;
3595
    }
3596

    
3597
    switch (backend->kind) {
3598
    case CHARDEV_BACKEND_KIND_FILE:
3599
        chr = qmp_chardev_open_file(backend->file, errp);
3600
        break;
3601
    case CHARDEV_BACKEND_KIND_SERIAL:
3602
        chr = qmp_chardev_open_serial(backend->serial, errp);
3603
        break;
3604
    case CHARDEV_BACKEND_KIND_PARALLEL:
3605
        chr = qmp_chardev_open_parallel(backend->parallel, errp);
3606
        break;
3607
    case CHARDEV_BACKEND_KIND_SOCKET:
3608
        chr = qmp_chardev_open_socket(backend->socket, errp);
3609
        break;
3610
#ifdef HAVE_CHARDEV_TTY
3611
    case CHARDEV_BACKEND_KIND_PTY:
3612
    {
3613
        /* qemu_chr_open_pty sets "path" in opts */
3614
        QemuOpts *opts;
3615
        opts = qemu_opts_create_nofail(qemu_find_opts("chardev"));
3616
        chr = qemu_chr_open_pty(opts);
3617
        ret->pty = g_strdup(qemu_opt_get(opts, "path"));
3618
        ret->has_pty = true;
3619
        qemu_opts_del(opts);
3620
        break;
3621
    }
3622
#endif
3623
    case CHARDEV_BACKEND_KIND_NULL:
3624
        chr = qemu_chr_open_null(NULL);
3625
        break;
3626
    default:
3627
        error_setg(errp, "unknown chardev backend (%d)", backend->kind);
3628
        break;
3629
    }
3630

    
3631
    if (chr == NULL && !error_is_set(errp)) {
3632
        error_setg(errp, "Failed to create chardev");
3633
    }
3634
    if (chr) {
3635
        chr->label = g_strdup(id);
3636
        chr->avail_connections = 1;
3637
        QTAILQ_INSERT_TAIL(&chardevs, chr, next);
3638
        return ret;
3639
    } else {
3640
        g_free(ret);
3641
        return NULL;
3642
    }
3643
}
3644

    
3645
void qmp_chardev_remove(const char *id, Error **errp)
3646
{
3647
    CharDriverState *chr;
3648

    
3649
    chr = qemu_chr_find(id);
3650
    if (NULL == chr) {
3651
        error_setg(errp, "Chardev '%s' not found", id);
3652
        return;
3653
    }
3654
    if (chr->chr_can_read || chr->chr_read ||
3655
        chr->chr_event || chr->handler_opaque) {
3656
        error_setg(errp, "Chardev '%s' is busy", id);
3657
        return;
3658
    }
3659
    qemu_chr_delete(chr);
3660
}
3661

    
3662
static void register_types(void)
3663
{
3664
    register_char_driver("null", qemu_chr_open_null);
3665
    register_char_driver("socket", qemu_chr_open_socket);
3666
    register_char_driver("udp", qemu_chr_open_udp);
3667
    register_char_driver("msmouse", qemu_chr_open_msmouse);
3668
    register_char_driver("vc", vc_init);
3669
    register_char_driver("memory", qemu_chr_open_ringbuf);
3670
#ifdef _WIN32
3671
    register_char_driver("file", qemu_chr_open_win_file_out);
3672
    register_char_driver("pipe", qemu_chr_open_win_pipe);
3673
    register_char_driver("console", qemu_chr_open_win_con);
3674
    register_char_driver("serial", qemu_chr_open_win);
3675
    register_char_driver("stdio", qemu_chr_open_win_stdio);
3676
#else
3677
    register_char_driver("file", qemu_chr_open_file_out);
3678
    register_char_driver("pipe", qemu_chr_open_pipe);
3679
    register_char_driver("stdio", qemu_chr_open_stdio);
3680
#endif
3681
#ifdef CONFIG_BRLAPI
3682
    register_char_driver("braille", chr_baum_init);
3683
#endif
3684
#ifdef HAVE_CHARDEV_TTY
3685
    register_char_driver("tty", qemu_chr_open_tty);
3686
    register_char_driver("serial", qemu_chr_open_tty);
3687
    register_char_driver("pty", qemu_chr_open_pty);
3688
#endif
3689
#ifdef HAVE_CHARDEV_PARPORT
3690
    register_char_driver("parallel", qemu_chr_open_pp);
3691
    register_char_driver("parport", qemu_chr_open_pp);
3692
#endif
3693
}
3694

    
3695
type_init(register_types);