
    @OOfR%                     b    d dl Z d dlmZ d dlmZ  G d d      Z G d dej                        Zy)    N)base)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     \/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/contentviews/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.pprintV   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_bytess   s\    !\\&6A:>}}T+=>qA"ll6A:
\8QRa!444r0   c                     t        | j                        | j                  z
  }| j                  |      \  }}|| _        | j
                  dv r||z  }| j                  ||dz    | _        y y )Nr   rD   rD   )lenr   r$   rK   r?   r!   packet_identifier)r,   rG   rI   rJ   s       r.   r'   z1MQTTControlPacket._parse_publish_variable_headers{   sj    T\\"T%:%::,0,M,Mf,U))-88|#l"F%)\\&6A:%FD" $r0   c                     t        | j                        | j                  z
  }dt        | j                        z   }| j                  dv r|dz  }||z   }| j                  |d  | _        y )NrD   rM   )rN   r   r$   r?   r!   r+   )r,   fixed_header_lengthvariable_header_lengthrG   s       r.   r(   z(MQTTControlPacket._parse_publish_payload   sd    !$,,/$2G2GG!"S%9!988|#"a'"$'==||FG,r0   c                 $    | j                          y r   )_parse_packet_identifierr,   s    r.   r)   z3MQTTControlPacket._parse_subscribe_variable_headers   s    %%'r0   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 )NrD   r   r   utf-8r!   )rN   r   r$   r>   rK   decode)r,   rG   rI   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,r0   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   rD   CleanSession   Will       
WillRetain@   r8      r7   )rN   r   r$   variable_headersconnect_flagsboolwill_qosr,   rG   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;*
:&r0   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 )Nrb   r   r4   rW   rf   r5   r6   r7   r8   z"Unknown field in CONNECT payload: )	rN   r   r$   rK   appendr+   rX   rm   AssertionError)r,   fieldsrG   rI   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r0   c                 &    | j                   d   dz	  S )Nr   re   )r   rU   s    r.   r   z$MQTTControlPacket._parse_packet_type   s    ||A!##r0   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   rg   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r0   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      rk   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 r0   c                 v    t        | j                        | j                  z
  }| j                  ||dz    | _        y )NrD   )rN   r   r$   rO   rp   s     r.   rT   z*MQTTControlPacket._parse_packet_identifier  s2    T\\"T%:%::!%fvz!Br0   N)!__name__
__module____qualname__ranger
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   PACKETS_WITH_IDENTIFIERr/   rB   rK   r'   r(   r)   r*   r%   r&   r   r   r#   rT    r0   r.   r   r   	   s    " 	aE( 		 6:5G	-(< 
:O>$
 *Cr0   r   c                   6    e Zd ZdZd Zdddededz  defdZy)	ViewMQTTMQTTc                 f    t        |      }|j                         }dt        j                  |      fS )Nr   )r   rB   r   format_text)r,   datametadatamqtt_packettexts        r.   __call__zViewMQTT.__call__  s0    '-!!#t''---r0   N)content_typer   r   returnc                     y)Nr   r   )r,   r   r   r   s       r.   render_priorityzViewMQTT.render_priority  s     r0   )	r   r   r   namer   bytesstrfloatr   r   r0   r.   r   r   
  s2    D. :>,/$J	r0   r   )rE   mitmproxy.contentviewsr   mitmproxy.utilsr   r   Viewr   r   r0   r.   <module>r      s-     ' $
~C ~CBtyy r0   