Fix for Bug 3671 - QEMU GDB stub listens on IPv6-only port on Windows 7
The connection string used by the GDB stub does not specify which
version of the Internet Protocol should be used by the port on
which it listens. On host platforms with IPv6 support, such as
Windows 7, this means that the stub listens on an IPv6-only port.
Since the GDB client uses IPv4, this means that the client cannot
connect to QEMU.
/*
* GUI Host side interface
*
* Copyright (c) 2009 CodeSourcery
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef GUI_HOST_H
#define GUI_HOST_H
#define SKINNED_VT_PRIORITY_ORDER 10
#define SKINLESS_GRAPHIC_VT_PRIORITY_ORDER 20
#define SKINLESS_TEXT_VT_PRIORITY_ORDER 30
typedef unsigned int DisplayID;
typedef unsigned int VtID;
typedef unsigned int ImageID;
typedef unsigned int AreaID;
/* DFG FIXME: move the DisplayState definition to gui.c (as internal implementation) */
struct DisplayState {
/* FIXME: Move away this from here (now in screen_data_t) */
uint8_t *data;
int linesize;
int depth;
int bgr; /* BGR color order instead of RGB. Only valid for depth == 32 */
/*******************/
int x0;
int y0;
int width;
int height;
VtID vtid;
DisplayID dispid;
void *opaque;
void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
int dst_x, int dst_y, int w, int h);
void (*dpy_fill)(struct DisplayState *s, int x, int y,
int w, int h, uint32_t c);
void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
void (*mouse_set)(int x, int y, int on);
void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
uint8_t *image, uint8_t *mask);
};
/****************************************************/
/* in ms */
#define GUI_REFRESH_INTERVAL 30
/************ HOST SIDE INTERFACE ************/
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
int kbd_mouse_is_absolute(void);
void do_info_mice(void);
void do_mouse_set(int index);
/* to be used by sdl.c or vnc.c */
typedef enum
{
GUI_CURSOR_NORMAL,
GUI_CURSOR_GRABBING,
GUI_CURSOR_GUEST_SPRITE,
GUI_CURSOR_HIDDEN, /* What is this for? */
} gui_cursor_type_t;
typedef struct {
/* this was in DisplayState */
uint8_t *data;
int linesize;
int depth;
int bgr; /* BGR color order instead of RGB. Only valid for depth == 32 */
int height;
int width;
} screen_data_t;
typedef struct
{
void (*turn_cursor_on)(gui_cursor_type_t);
void (*turn_cursor_off)(void);
void (*grab_input_on)(void);
void (*grab_input_off)(void);
void (*mouse_warp)(int x, int y);
void (*set_caption)(const char* title, const char* icon);
int (*is_app_active)(void);
void (*set_screen_size)(int width, int height, int on);
void (*get_screen_data)(screen_data_t *new_screen_data);
void (*init_ds)(struct DisplayState *ds);
void (*process_events)(void);
void (*set_kbd_terminal_mode)(int on);
}gui_host_callbacks_t;
void gui_init(gui_host_callbacks_t* callbacks);
int gui_load(const char *xml_file);
void gui_unload(void);
DisplayState *gui_new_vt(int order_priority);
int gui_needs_timer(void);
void gui_set_timer(struct QEMUTimer *timer);
void gui_refresh_caption(void);
void gui_destroy(void);
void gui_set_paint_callbacks(DisplayState *ds,
vga_hw_update_ptr update,
vga_hw_invalidate_ptr invalidate,
vga_hw_screen_dump_ptr screen_dump,
void *opaque);
void gui_show_image(VtID vtid, ImageID id);
void gui_hide_image(VtID vtid, ImageID id);
/* Queries */
int gui_allows_fullscreen(void); /* returns 0 or 1 */
int gui_is_display_active(DisplayState *ds);
/* Events */
void gui_notify_toggle_fullscreen(void);
void gui_notify_toggle_grabmode(void);
void gui_notify_mouse_motion(int dx, int dy, int dz, int x, int y, int state);
void gui_notify_mouse_button(int dz, int x, int y, int state);
void gui_notify_mouse_warp(int x, int y, int on);
void gui_notify_dev_key(int key);
void gui_notify_term_key(int key);
void gui_notify_console_select(int console); /* console is not the VtID, but the ordinal # */
void gui_notify_activate_display(DisplayState *ds);
void gui_notify_new_guest_cursor(void);
void gui_notify_input_focus_lost(void);
void gui_notify_app_focus(int gain);
void gui_notify_idle(int idle);
void gui_notify_update_tick(int64_t ticks);
void gui_notify_repaint_screen(void);
void gui_notify_screen_dump(const char *filename);
#define DEF_BACKGROUND_IMAGE (ImageID)0 /* Default Background is always 0 */
#endif