
=\•jU  ã               @   s£  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z d d l Z y d d l Z Wn e k
 r² Yn Xd d „  Z e j j e j j f Z e ƒ  Z Gd d „  d e j ƒ Z d d	 „  Z Gd
 d „  d ƒ Z Gd d „  d e e j ƒ Z Gd d „  d e ƒ Z d d „  Z e d k rŸy e ƒ  Wn/ e k
 ržZ z e e ƒ WYd d Z [ Xn Xd S)z

é    N)Úurlparsec              C   s-   t  t j d d ƒ }  |  s d S|  j ƒ  Sd  S)NÚencodingÚ zutf-8)ÚgetattrÚsysÚstdinÚlower)r   © r	   úW/tmp/pip-build-jxowagp5/websocket-client/websocket_client-0.59.0.data/scripts/wsdump.pyÚget_encoding.   s    r   c               @   s   e  Z d  Z d d d „ Z d S)ÚVActionNc             C   sa   | d  k r d } y t  | ƒ } Wn% t k
 rI | j d ƒ d } Yn Xt | |  j | ƒ d  S)NÚ1Úvé   )ÚintÚ
ValueErrorÚcountÚsetattrÚdest)ÚselfÚparserÚargsÚvaluesÚoption_stringr	   r	   r
   Ú__call__<   s    zVAction.__call__)Ú__name__Ú
__module__Ú__qualname__r   r	   r	   r	   r
   r   :   s   r   c              C   sD  t  j d d ƒ }  |  j d d d d d ƒ|  j d d	 d d
 ƒ|  j d d d d d d d t d d d d ƒ|  j d d d d d d ƒ|  j d d d d d d ƒ|  j d d d d d d ƒ|  j d  d! d d" ƒ|  j d# d d d$ t d d% ƒ|  j d& d' d d( ƒ|  j d) d d d d* ƒ|  j d+ d d, ƒ|  j ƒ  S)-NÚdescriptionzWebSocket Simple Dump ToolÚurlÚmetavarZws_urlÚhelpz+websocket url. ex. ws://echo.websocket.org/z-pz--proxyz$proxy url. ex. http://127.0.0.1:8080z-vz	--verboseÚdefaultr   Únargsú?Úactionr   ÚverbosezZset verbose mode. If set to 1, show opcode. If set to 2, enable to trace  websocket modulez-nz--nocertÚ
store_truezIgnore invalid SSL certz-rz--rawz
raw outputz-sz--subprotocolsÚ*zSet subprotocolsz-oz--originz
Set originz
--eof-waitÚtypez'wait time(second) after 'EOF' received.z-tz--textzSend initial textz	--timingszPrint timings in secondsz	--headersz(Set custom headers. Use ',' as separator)ÚargparseÚArgumentParserÚadd_argumentr   r   Ú
parse_args)r   r	   r	   r
   r-   F   s2    !r-   c               @   s   e  Z d  Z d d „  Z d S)ÚRawInputc             C   s‰   t  j r t | ƒ } n t | ƒ } t rd t d k rd t | t  j ƒ rd | j t ƒ j d ƒ } n! t | t  j ƒ r… | j d ƒ } | S)Nzutf-8)	ÚsixÚPY3ÚinputÚ	raw_inputÚENCODINGÚ
isinstanceÚ	text_typeÚdecodeÚencode)r   ÚpromptÚliner	   r	   r
   r2   f   s    	%zRawInput.raw_inputN)r   r   r   r2   r	   r	   r	   r
   r.   d   s   r.   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚInteractiveConsolec             C   sI   t  j j d ƒ t  j j d | d ƒ t  j j d ƒ t  j j ƒ  d  S)Nz[2K[Ez[34m< z[39mz
> )r   ÚstdoutÚwriteÚflush)r   Údatar	   r	   r
   r<   v   s    zInteractiveConsole.writec             C   s   |  j  d ƒ S)Nz> )r2   )r   r	   r	   r
   Úread}   s    zInteractiveConsole.readN)r   r   r   r<   r?   r	   r	   r	   r
   r:   t   s   r:   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚNonInteractivec             C   s1   t  j j | ƒ t  j j d ƒ t  j j ƒ  d  S)NÚ
)r   r;   r<   r=   )r   r>   r	   r	   r
   r<   ƒ   s    zNonInteractive.writec             C   s   |  j  d ƒ S)Nr   )r2   )r   r	   r	   r
   r?   ˆ   s    zNonInteractive.readN)r   r   r   r<   r?   r	   r	   r	   r
   r@   �   s   r@   c                 sþ  t  j  ƒ  ‰ t ƒ  ‰  ˆ  j d k r1 t j d ƒ i  }  ˆ  j ri t ˆ  j ƒ } | j |  d <| j |  d <ˆ  j	 r ˆ  j	 |  d <ˆ  j
 r• ˆ  j
 |  d <i  } ˆ  j r¹ d t j d d	 i } ˆ  j rê t t t j ˆ  j j d
 ƒ ƒ ƒ |  d <t j ˆ  j d | |  �‰ ˆ  j rt ƒ  ‰ n t ƒ  ‰ t d ƒ ‡ f d d †  ‰ ‡  ‡ ‡ ‡ f d d †  } t j d | ƒ } d | _ | j ƒ  ˆ  j r˜ˆ j ˆ  j ƒ x_ y ˆ j  ƒ  } ˆ j | ƒ Wq›t! k
 rÐd  SYq›t" k
 rõt  j# ˆ  j$ ƒ d  SYq›Xq›Wd  S)Nr   TZhttp_proxy_hostZhttp_proxy_portÚoriginÚsubprotocolsÚ	cert_reqsÚcheck_hostnameFú,ÚheaderZssloptzPress Ctrl+C to quitc                 sä   y ˆ  j  ƒ  }  Wn% t j k
 r7 t j j d  f SYn X|  sT t j d |  ƒ ‚ n€ |  j t k rs |  j |  j f S|  j t j j k rŸ ˆ  j ƒ  |  j d  f S|  j t j j	 k rÔ ˆ  j
 |  j ƒ |  j |  j f S|  j |  j f S)NzNot a valid frame %s)Z
recv_frameÚ	websocketZWebSocketExceptionÚABNFÚOPCODE_CLOSEÚopcodeÚOPCODE_DATAr>   Z
send_closeZOPCODE_PINGZpong)Úframe)Úwsr	   r
   Úrecv¦   s    
zmain.<locals>.recvc                 s¨  x¡ˆ ƒ  \ }  } d  } t  j rQ |  t j j k rQ t | t ƒ rQ t | d ƒ } t | t ƒ r¶ t | ƒ d k r¶ | d  d … d k r¶ y  d t t	 j
 | ƒ d ƒ } Wq÷ Yq÷ XnA t | t ƒ r÷ y' d t t j
 | t j ƒ d ƒ } Wn Yn Xt | t ƒ rt | ƒ } ˆ  j r=d t j j j |  ƒ | f } n | } | d  k	 r�ˆ  j r€ˆ j t t j ƒ  ˆ ƒ d | ƒ n ˆ j | ƒ |  t j j k r Pq Wd  S)Nzutf-8é   s   ‹z[gzip] z[zlib] z%s: %sz: )r/   r0   rH   rI   ÚOPCODE_TEXTr4   ÚbytesÚstrÚlenÚgzipÚ
decompressÚzlibÚ	MAX_WBITSÚreprr&   Z
OPCODE_MAPÚgetZtimingsr<   ÚtimerJ   )rK   r>   Úmsg)r   ÚconsolerO   Ú
start_timer	   r
   Úrecv_ws¸   s4    *7 '	"	(zmain.<locals>.recv_wsÚtarget)%r[   r-   r&   rH   ZenableTraceÚproxyr   ÚhostnameÚportrB   rC   ZnocertÚsslÚ	CERT_NONEÚheadersÚlistÚmaprS   ÚstripÚsplitÚcreate_connectionr   Úrawr@   r:   ÚprintÚ	threadingÚThreadÚdaemonÚstartÚtextÚsendr?   ÚKeyboardInterruptÚEOFErrorÚsleepZeof_wait)ÚoptionsÚpÚoptsr_   ÚthreadÚmessager	   )r   r]   rO   r^   rN   r
   ÚmainŒ   sN    						(		
"	
	r|   Ú__main__) Ú__doc__r*   Úcoder   rn   r[   rd   rU   rW   r/   Úsix.moves.urllib.parser   rH   ÚreadlineÚImportErrorr   rI   rQ   ZOPCODE_BINARYrL   r3   ÚActionr   r-   r.   r:   r@   r|   r   Ú	ExceptionÚerm   r	   r	   r	   r
   Ú<module>   s:   	`