o
    `                     @   s   d dl mZmZ ddlmZmZmZ ddlmZ dd Z	G dd deZ
G d	d
 d
eZG dd deZG dd deZG dd deZG dd deZdS )   )DeviceDeviceSeclabel   )
XMLBuilderXMLChildPropertyXMLProperty)xmlutilc                 C   sH   dd }||\}}|r|sd}t | || |r"t | || d S d S )Nc                 S   s$   | pd d\}}}|pd |pd fS )N :)	partition)valhostignoreport r   0/usr/share/virt-manager/virtinst/devices/char.py
parse_host   s   z$_set_host_helper.<locals>.parse_hostz	127.0.0.1)r   set_prop_path)obj	hostparam	portparamr   r   r   r   r   r   r   _set_host_helper   s   r   c                   @   s   e Zd ZdZg dZdd Zdd Zdd Zee	Z
ed	Zed
ddZedZedZedZedZedZedZedZedddZedZedddZedZedddZdS )
CharSourcesource)	bind_hostbind_servicemodeconnect_hostconnect_servicepathchannelc                 C      t | dd| d S )Nr   r   r   selfr   r   r   r   set_friendly_connect      zCharSource.set_friendly_connectc                 C   r!   )Nr   r   r"   r#   r   r   r   set_friendly_bind!   r&   zCharSource.set_friendly_bindc                 C   r!   )Nr   servicer"   r#   r   r   r   set_friendly_host#   r&   zCharSource.set_friendly_hostz./@hostz
./@serviceTis_intz./@pathz
./@channelz	./@masterz./@slavez./@modez./../protocol/@typez./../log/@filez./../log/@append)is_onoffz"./../source[@mode='connect']/@hostz%./../source[@mode='connect']/@servicez./../source[@mode='bind']/@hostz"./../source[@mode='bind']/@serviceN)__name__
__module____qualname__XML_NAME_XML_PROP_ORDERr%   r'   r)   r   r   	seclabelsr   r   r(   r   r    masterslaver   protocollog_file
log_appendr   r   r   r   r   r   r   r   r      s.    r   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZeeeegZdd Zg dZedZeeddZedZedddZedZedZ edZ!edZ"d d! Z#d"S )#_DeviceCharzW
    Base class for all character devices. Shouldn't be instantiated
    directly.
    ptydevstdiopipefilevcnulltcpudpunixspicevmc	spiceportnmdmzcom.redhat.spice.0zorg.qemu.guest_agent.0zorg.libguestfs.channel.0zorg.spice-space.webdav.0c                 C   r!   )Ntarget_addresstarget_portr"   r#   r   r   r   set_friendly_target]   r&   z_DeviceChar.set_friendly_target)typer   target_typetarget_nametarget_statez./@typeT)	is_singlez./target/@addressz./target/@portr*   z./target/@typez./target/@namez./target/@statez./target/model/@namec                 C   s^   | j js| j| j| jfv rd| j _| js| jdkrd| _| js+| j| jkr-| j	| _d S d S d S )Nbindr    virtio)
r   r   rI   	TYPE_UNIXTYPE_TCPrJ   DEVICE_TYPErK   TYPE_SPICEVMCCHANNEL_NAME_SPICE)r$   _guestr   r   r   set_defaultsr   s   z_DeviceChar.set_defaultsN)$r-   r.   r/   __doc__TYPE_PTYTYPE_DEV
TYPE_STDIO	TYPE_PIPE	TYPE_FILETYPE_VC	TYPE_NULLrQ   TYPE_UDPrP   rS   TYPE_SPICEPORT	TYPE_NMDMrT   CHANNEL_NAME_QEMUGACHANNEL_NAME_LIBGUESTFSCHANNEL_NAME_SPICE_WEBDAVCHANNEL_NAMESrH   r1   r   rI   r   r   r   rF   rG   rJ   rK   rL   target_model_namerV   r   r   r   r   r8   @   sF    r8   c                   @   s   e Zd Zedd ZdZdS )DeviceConsolec                 C   sR   |j dkrdS | jj}|sdS |d }|j|jkr%|jdu s#|jdkr'|S dS dS )zt
        Determine if the passed serial device has a duplicate
        <console> device in the passed Guest
        serialN    )rR   devicesconsolerI   rJ   )guestrh   consolesrk   r   r   r   get_console_duplicate~   s   
z#DeviceConsole.get_console_duplicaterk   N)r-   r.   r/   staticmethodrn   r0   r   r   r   r   rg   }   s    
rg   c                   @      e Zd ZdZdS )DeviceSerialrh   Nr-   r.   r/   r0   r   r   r   r   rq          rq   c                   @   rp   )DeviceParallelparallelNrr   r   r   r   r   rt      rs   rt   c                   @   rp   )DeviceChannelr    Nrr   r   r   r   r   rv      rs   rv   N)devicer   r   
xmlbuilderr   r   r   r	   r   r   r   r8   rg   rq   rt   rv   r   r   r   r   <module>   s   '=