o
    b'                     @   s`   d dl Z ddlmZ ddlmZ ddlmZmZmZ dd Z	G d	d
 d
eZ
G dd deZdS )    N   )Device   )log)
XMLBuilderXMLChildPropertyXMLPropertyc                 C   s8   |d u r|S t |}|dk r|dkrttd|  |S )Ni  z0%s must be above 5900, or -1 for auto allocation)int
ValueError_)nameval r   4/usr/share/virt-manager/virtinst/devices/graphics.py_validate_port   s   r   c                   @   s0   e Zd ZdZedZedZedZedZdS )_GraphicsListenlisten./@typez
./@addressz
./@network	./@socketN)	__name__
__module____qualname__XML_NAMEr   typeaddressnetworksocketr   r   r   r   r      s    r   c                   @   s  e Zd ZdZdZdZdZdZg dZe	dZ
dd	 Zd
d Ze	dddZeeeZdd Zdd Ze	dddZeeeZe	dddZe	dddZe	dZe	dZdd Zdd Ze	dZeeeZe	dZe	dZe	d Ze	d!Ze	d"Z e	d#Z!e"e#Z$d$d% Z%d&d' Z&d(d) Z'e	d*Z(e	d+Z)e	d,ddZ*e	d-Z+e	d.ddZ,e	d/ddZ-e	d0Z.e	d1Z/d2d3 Z0d4d5 Z1d6d7 Z2d8d9 Z3d:d; Z4d<d= Z5d>d? Z6d@dA Z7dBS )CDeviceGraphicsgraphicssdlvncrdpspice)r   gl_port_tlsPortautoport	websocketkeymap_listenpasswddisplayxauthz	./@keymapc                 C      t d|}|  | _|| _d S )NPort)r   _get_default_autoportr'   r%   selfr   r   r   r   	_set_port0      


zDeviceGraphics._set_portc                 C      | j S N)r%   r2   r   r   r   	_get_port4      zDeviceGraphics._get_portz./@portT)is_intc                 C   r.   )NzTLS Port)r   r0   r'   r&   r1   r   r   r   _set_tlsport9   r4   zDeviceGraphics._set_tlsportc                 C   r5   r6   )r&   r7   r   r   r   _get_tlsport=   r9   zDeviceGraphics._get_tlsportz
./@tlsPortz./@autoport)is_yesnoz./@websocketz./@xauthz
./@displayc                 C   sJ   |dkr
|    d S |dkr|   | j }d|_d S |   || _d S )Nnoner   )_set_listen_none_remove_all_listenslistensadd_newr   r*   )r2   r   objr   r   r   _set_listenI   s   


zDeviceGraphics._set_listenc                 C   r5   r6   )r*   r7   r   r   r   _get_listenS   r9   zDeviceGraphics._get_listenz	./@listenr   z	./@passwdz./@passwdValidTor   z./@connectedz./@defaultModec                 C   s   | j D ]}| | qd S r6   )rA   remove_childr2   r   r   r   r   r@   `   s   
z"DeviceGraphics._remove_all_listensc                 C   s   t | jdkr| jd jS d S )Nr   )lenrA   r   r7   r   r   r   get_first_listen_typed   s   z$DeviceGraphics.get_first_listen_typec                 C   sJ   |    d | _d | _d | _d | _d | _| jj r#| j	
 }d|_d S d S )Nr>   )r@   r   porttlsPortr'   r   connsupportconn_graphics_listen_nonerA   rB   r   )r2   rC   r   r   r   r?   i   s   

zDeviceGraphics._set_listen_nonez./image/@compressionz./streaming/@modez./clipboard/@copypastez./mouse/@modez./filetransfer/@enablez./gl/@enablez./gl/@rendernodez./zlib/@compressionc                 C   s   |   }| p
|dv S )N)r   r   )rI   rG   r   r   r   _listen_need_port   s   z DeviceGraphics._listen_need_portc                 C   s   | j dv r|  rdS d S )N)r!   r#   r	   r   rO   r7   r   r   r   _get_default_port      z DeviceGraphics._get_default_portc                 C   s   | j dkr|  rdS d S )Nr#   r	   rP   r7   r   r   r   _get_default_tlsport   rR   z#DeviceGraphics._get_default_tlsportc                 C   s*   | j dkrd S | jdkr| jdkrdS d S )Nr#   r	   T)r   rJ   rK   r7   r   r   r   r0      s
   
z$DeviceGraphics._get_default_autoportc                 C   sP   |j }td| | j rtd d}|dkr&|  s&td d}|S )Nz*App is configured with default_graphics=%sz2Not defaulting to spice for xen driver. Using vnc.r!   r#   z5spice requested but HV doesn't support it. Using vnc.)default_graphics_typer   debugrL   is_xenlookup_domcapssupports_graphics_spice)r2   guestgtyper   r   r   _default_type   s   



zDeviceGraphics._default_typec                 C   s*   | j dkrd S | j std dS d S )Nr#   z4Local connection, disabling spice image compression.off)r   rL   	is_remoter   rU   )r2   _guestr   r   r   _default_image_compression   s   


z)DeviceGraphics._default_image_compressionc                 C   s8   | j s| j D ]}| sq| j| _  d S d S d S r6   )
rendernoderL   fetch_all_nodedevsis_drm_renderget_devnodepath)r2   r^   nodedevr   r   r   _default_spice_gl   s   z DeviceGraphics._default_spice_glc                 C   s   | j s	| || _ | j dkr"| jstjd| _| js"tjd| _| j	d u r,| 
 | _	| jd u r6|  | _| jd u r@|  | _| jsI| || _| j dkrX| jrZ| | d S d S d S )Nr    z~/.XauthorityDISPLAYr#   )r   r[   r-   osrd   
expanduserr,   environgetrJ   rQ   rK   rS   r'   r0   image_compressionr_   r$   rf   )r2   rY   r   r   r   set_defaults   s$   






zDeviceGraphics.set_defaultsN)8r   r   r   r   TYPE_SDLTYPE_VNCTYPE_RDP
TYPE_SPICE_XML_PROP_ORDERr   r)   r3   r8   r%   propertyrJ   r;   r<   r&   rK   r'   r(   r-   r,   rD   rE   r*   r   r   r+   passwdValidTor   	connecteddefaultModer   r   rA   r@   rI   r?   rl   streaming_modeclipboard_copypaste
mouse_modefiletransfer_enabler$   r`   zlib_compressionrO   rQ   rS   r0   r[   r_   rf   rm   r   r   r   r   r   "   sd    



		
r   )rh   devicer   loggerr   
xmlbuilderr   r   r   r   r   r   r   r   r   r   <module>   s   	