
    kj"%                     h    d dl Z d dlmZ d dlmZ d dlmZ  G d d      Z G d de      Z e       Zy)	    N)Contentview)Metadata)strutilsc                       e Zd Z edd      \  ZZZZZZ	Z
ZZZZZZZg dZeee	e
eeeeg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 y)MQTTControlPacket      )reservedCONNECTCONNACKPUBLISHPUBACKPUBRECPUBRELPUBCOMP	SUBSCRIBESUBACKUNSUBSCRIBEUNSUBACKPINGREQPINGRESP
DISCONNECTr
   c                    || _         | j                         | _        | j                  | j                     | _        | j                         \  | _        | _        | _        | j                         | _
        | j                  | j                  k(  r!| j                          | j                          y | j                  | j                  k(  r!| j                          | j!                          y | j                  | j"                  k(  r!| j%                          | j'                          y | j                  | j(                  k(  ry | j                  | j*                  k(  ry d | _        y N)_packet_parse_packet_typepacket_typeNamespacket_type_human_parse_flagsdupqosretain_parse_remaining_lengthremaining_lengthr   _parse_connect_variable_headers_parse_connect_payloadr   _parse_publish_variable_headers_parse_publish_payloadr   !_parse_subscribe_variable_headers_parse_subscribe_payloadr   r   payload)selfpackets     j/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/contentviews/_view_mqtt.py__init__zMQTTControlPacket.__init__<   s     224!%D,<,<!=*.*;*;*='$(DK $ < < > t||+002'')-002'')/224))+,!1!11DL    c                    d| j                   | j                      d}| j                  | j                  k(  r| j                  sJ |d| j                  d    d| j                  j	                  d       dt        j                  | j                  j	                  dd	             d
| j                  j	                  d       dt        j                  | j                  j	                  dd	             dz  }|S | j                  | j                  k(  r7|dz  }|dj                  | j                  D cg c]  }d| d
 c}      z  }|S | j                  | j                  k(  rZ| j                  sJ t        j                  | j                        }t        j                  | j                        }|d| d| dz  }|S | j                  | j                  | j                  fv r	 |S d| j                   | j                      d}|S c c}w )N[]z

Client Id: ClientIdz
Will Topic: 	WillTopicz
Will Message: WillMessages   Nonez
User Name: UserNamez
Password: Password
z sent topic filters: z, 'z 'z' to topic 'zPacket type z is not supported yet!)r   r   r   r,   getr   bytes_to_escaped_strr   jointopic_filtersr   
topic_namer   r   )r-   stfr@   r,   s        r/   pprintzMQTTControlPacket.pprintW   s   

4++,-Q/t||+<<< LL$% &\\k*+ ,,,T\\-=-=mW-UVW XLLZ() *(()9)9*g)NO
P Q A,  /((A0B0BC"at1ICDDA  -<<<!66tGJ33DLLAG2gYl:,a88A  $,,!>>  tzz$*:*:;<<RSA Ds   -G>
c                     | j                   ||dz    }t        j                  d|      d   }| j                   |dz   |dz   |z    }|dz   |fS )N   z!Hr   )r   structunpack)r-   offsetfield_length_bytesfield_lengthfield_content_bytess        r/   _parse_length_prefixed_bytesz.MQTTControlPacket._parse_length_prefixed_bytest   s\    !\\&6A:>}}T+=>qA"ll6A:
\8QRa!444r1   c                     t        | j                        | j                  z
  }| j                  |      \  }}|| _        | j
                  dv r||z  }| j                  ||dz    | _        y y )Nr   rE   rE   )lenr   r%   rL   r@   r"   packet_identifier)r-   rH   rJ   rK   s       r/   r(   z1MQTTControlPacket._parse_publish_variable_headers|   sj    T\\"T%:%::,0,M,Mf,U))-88|#l"F%)\\&6A:%FD" $r1   c                     t        | j                        | j                  z
  }dt        | j                        z   }| j                  dv r|dz  }||z   }| j                  |d  | _        y )NrE   rN   )rO   r   r%   r@   r"   r,   )r-   fixed_header_lengthvariable_header_lengthrH   s       r/   r)   z(MQTTControlPacket._parse_publish_payload   sd    !$,,/$2G2GG!"S%9!988|#"a'"$'==||FG,r1   c                 $    | j                          y r   )_parse_packet_identifierr-   s    r/   r*   z3MQTTControlPacket._parse_subscribe_variable_headers   s    %%'r1   c                 p   t        | j                        | j                  z
  dz   }i | _        t        | j                        |z
  dkD  ro| j	                  |      \  }}||z  }| j                  ||dz    }|dz  }|j                  d      }d|i| j                  |<   t        | j                        |z
  dkD  rny y )NrE   r   r   utf-8r"   )rO   r   r%   r?   rL   decode)r-   rH   rJ   topic_filter_bytesr"   topic_filters         r/   r+   z*MQTTControlPacket._parse_subscribe_payload   s    T\\"T%:%::Q>$,,&(1,/3/P/PQW/X,L,l"F,,v
3CaKF-44W=L05s|D|, $,,&(1,r1   c                 V   t        | j                        | j                  z
  }i | _        i | _        | j                  ||dz    | j                  d<   | j                  |dz   |dz    | j                  d<   | j                  |dz   |dz    | j                  d<   | j                  |dz   |dz    | j                  d<   t        | j                  d   d	   d
z        | j                  d<   t        | j                  d   d	   dz        | j                  d<   | j                  d   d	   dz	  dz  | _        t        | j                  d   d	   dz        | j                  d<   t        | j                  d   d	   dz        | j                  d<   t        | j                  d   d	   dz        | j                  d<   y )N   ProtocolName   ProtocolLevel   ConnectFlags
   	KeepAliver   rE   CleanSession   Will       
WillRetain@   r9      r8   )rO   r   r%   variable_headersconnect_flagsboolwill_qosr-   rH   s     r/   r&   z1MQTTControlPacket._parse_connect_variable_headers   s   T\\"T%:%:: "04Vfqj0Qn-15fqj6TU:1Vo.04VaZ&ST*0Un--1\\&1*vPR{-Sk*-1!!.1!4t;.
>* &*!!.1!4t;&
6" ..~>qAQF$N+/!!.1!4t;,
<( *.!!.1!4t;*
:& *.!!.1!4t;*
:&r1   c                 L   g }t        | j                        | j                  z
  dz   }t        | j                        |z
  dkD  rF| j                  |      \  }}|j	                  |       ||z  }t        | j                        |z
  dkD  rFi | _        |D ]  }d| j
                  vr|j                  d      | j
                  d<   1| j                  d   r-d| j
                  vr|j                  d      | j
                  d<   m| j                  d   rd| j
                  vr|| j
                  d<   | j                  d   r-d| j
                  vr|j                  d      | j
                  d<   | j                  d	   rd	| j
                  vr|| j
                  d	<   t        d
|        y )Nrc   r   r5   rX   rg   r6   r7   r8   r9   z"Unknown field in CONNECT payload: )	rO   r   r%   rL   appendr,   rY   rn   AssertionError)r-   fieldsrH   rJ   field_contentfs         r/   r'   z(MQTTControlPacket._parse_connect_payload   s|   T\\"T%:%::R?$,,&(1,*.*K*KF*S'L-MM-(l"F $,,&(1,
  	OA-+,88G+<Z(##F+4<<0O,-HHW,=[)##F+T\\0Q./]+"":.:T\\3Q+,88G+<Z("":.:T\\3Q+,Z($'I!%MNN%	Or1   c                 &    | j                   d   dz	  S )Nr   rf   )r   rV   s    r/   r   z$MQTTControlPacket._parse_packet_type   s    ||A!##r1   c                     d }d }d }| j                   | j                  k(  r<| j                  d   dz	  dz  }| j                  d   dz	  dz  }| j                  d   dz  }|||fS )Nr   rh   r   )r   r   r   )r-   r!   r"   r#   s       r/   r    zMQTTControlPacket._parse_flags   sp    t||+<<?a'4/C<<?a'4/C\\!_t+FCr1   c                     d}d}d}	 | j                   |   }||dz  |z  z  }|dz  }|dkD  rt        d      |dz  dk(  r	 |S |dz  }@)Nr   r      rl   i    zMalformed Remaining Length)r   
ValueError)r-   
multipliervalueiencodedBytes        r/   r$   z)MQTTControlPacket._parse_remaining_length   sz    
,,q/KkC':55E#JO+ !=>>S A%  FA r1   c                 v    t        | j                        | j                  z
  }| j                  ||dz    | _        y )NrE   )rO   r   r%   rP   rq   s     r/   rU   z*MQTTControlPacket._parse_packet_identifier  s2    T\\"T%:%::!%fvz!Br1   N)!__name__
__module____qualname__ranger   r   r   r   r   r   r   r   r   r   r   r   r   r   r   PACKETS_WITH_IDENTIFIERr0   rC   rL   r(   r)   r*   r+   r&   r'   r   r    r$   rU    r1   r/   r   r   
   s    " 	aE( 		 6:5G	-(< 
:O>$
 *Cr1   r   c                        e Zd ZdededefdZy)MQTTContentviewdatametadatareturnc                 8    t        |      }|j                         S r   )r   rC   )r-   r   r   mqtt_packets       r/   prettifyzMQTTContentview.prettify  s    
 (-!!##r1   N)r   r   r   bytesr   strr   r   r1   r/   r   r     s#    $$ $ 
	$r1   r   )	rF   mitmproxy.contentviews._apir   r   mitmproxy.utilsr   r   r   mqttr   r1   r/   <module>r      s6     3 0 $
~C ~CB$k $ r1   