Ë
    oò˜hö*  ã                   óÜ   — d Z ddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZ dgZ ej*                  dd	«        ej*                  d
d«        G d„ de«      Zy)z4
IS class is used for connection to APRS-IS network
é    N)Ú__version__Ústring_typeÚis_py3)Úparse)Ú
APRSPacket)ÚGenericErrorÚConnectionDropÚConnectionErrorÚ
LoginErrorÚ
ParseErrorÚUnknownFormatÚISé   r   é	   r   c                   óh   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd„ Zdd„Z	d„ Z
d	„ Zdd
„Zd„ Zd„ Zd„ Zdd„Zy)r   zã
    The IS class is used to connect to aprs-is network and listen to the stream
    of packets. You can either run them through aprs.parse() or get them in raw
    form.

    Note: sending of packets is not supported yet

    c                 ó
  — t        j                  t        ›d| j                  j                  ›�«      | _        t
        | _        | j                  ||«       | j                  |||«       d| _	        d| _
        d| _        d| _        y)z¥
        callsign        - used when login in
        passwd          - for verification, or "-1" if only listening
        Host & port     - aprs-is server
        ú.NÚ Fó    )ÚloggingÚ	getLoggerÚ__name__Ú	__class__Úloggerr   Ú_parseÚ
set_serverÚ	set_loginÚsockÚfilterÚ
_connectedÚbuf)ÚselfÚcallsignÚpasswdÚhostÚportÚ
skip_logins         úN/root/html/w1hd9_aprs_logger/venv/lib/python3.12/site-packages/aprslib/inet.pyÚ__init__zIS.__init__5   sf   € ô ×'Ñ'¶8¸T¿^¹^×=TÒ=TÐ(UÓVˆŒÜˆŒà�‰˜˜dÔ#Ø�‰�x ¨Ô4àˆŒ	ØˆŒàˆŒØˆ�r   c                 óh   — t         r|j                  d«      }| j                  j                  |«       y )Nzutf-8)r   Úencoder   Úsendall)r"   Útexts     r(   Ú_sendallzIS._sendallH   s%   € ÝØ—;‘;˜wÓ'ˆDØ�	‰	×Ñ˜$Õr   c                 ó´   — || _         | j                  j                  d| j                   «       | j                  r| j	                  d| j                   z  «       yy)zD
        Set a specified aprs-is filter for this connection
        zSetting filter to: %sz#filter %s
N)r   r   Úinfor    r.   )r"   Úfilter_texts     r(   Ú
set_filterzIS.set_filterM   sF   € ð "ˆŒà�‰×ÑÐ0°$·+±+Ô>à�?Š?Ø�M‰MÐ*¨T¯[©[Ñ8Õ9ð r   c                 óJ   — | j                   j                  t        «       «       y)z+
        Set callsign and password
        N)Ú__dict__ÚupdateÚlocals)r"   r#   r$   r'   s       r(   r   zIS.set_loginX   s   € ð 	�‰×ÑœV›XÕ&r   c                 ó   — ||f| _         y)z4
        Set server ip/host and port to use
        N)Úserver)r"   r%   r&   s      r(   r   zIS.set_server^   s   € ð ˜T�lˆ�r   c                 ó  — | j                   ry	 	 | j                  «        | j                  s| j                  «        y# t        t
        f$ r |s‚ Y nw xY w| j                  j                  d|z  «       t        j                  |«       Œz)zÐ
        Initiate connection to APRS server and attempt to login

        blocking = False     - Should we block until connected and logged-in
        retry = 30           - Retry interval in seconds
        Nz"Retrying connection is %d seconds.)
r    Ú_connectr'   Ú_send_loginr   r
   r   r0   ÚtimeÚsleep)r"   ÚblockingÚretrys      r(   Úconnectz
IS.connectd   s   € ð �?Š?ØàðØ—‘”Ø—’Ø×$Ñ$Ô&ØøÜ¤Ð0ò ÙØñ  ðúð �K‰K×ÑÐAÀEÑIÔJÜ�J‰J�uÔð s   �,= ½AÁAc                 ón   — d| _         d| _        | j                  �| j                  j                  «        yy)zX
        Closes the socket
        Called internally when Exceptions are raised
        Fr   N)r    r!   r   Úclose©r"   s    r(   rB   zIS.close|   s/   € ð  ˆŒØˆŒà�9‰9Ð Ø�I‰I�O‰OÕð !r   c                 óö  — t        |t        «      rt        |«      }n%t        |t        «      st	        dt        |«      «      ‚| j                  st        d«      ‚|dk(  ry|j                  d«      dz   }	 | j                  j                  d«       | j                  j                  d«       | j                  |«       y# t        j                  $ r)}| j                  «        t        t        |«      «      ‚d}~ww xY w)zD
        Send a line, or multiple lines sperapted by '\r\n'
        z-Expected line to be str or APRSPacket, got %sznot connectedr   Nz
é   é   )Ú
isinstancer   Ústrr   Ú	TypeErrorÚtyper    r
   Úrstripr   ÚsetblockingÚ
settimeoutr.   ÚsocketÚerrorrB   )r"   ÚlineÚexps      r(   r,   z
IS.sendallˆ   sÄ   € ô �dœJÔ'Ü�t“9‰DÜ˜D¤+Ô.ÜÐKÌTÐRVËZÓXÐXØ�ŠÜ! /Ó2Ð2à�2Š:Øà�{‰{˜6Ó" VÑ+ˆð	,Ø�I‰I×!Ñ! !Ô$Ø�I‰I× Ñ  Ô#Ø�M‰M˜$ÕøÜ�|‰|ò 	,Ø�J‰JŒLÜ!¤# c£(Ó+Ð+ûð	,ús   Á4AB< Â<C8Ã$C3Ã3C8c                 ó¶  — | j                   st        d«      ‚d}	 	 | j                  |«      D ]X  }|dd dk7  r#|r	 ||«       Œ || j                  |«      «       Œ.| j                  j                  d|j                  d«      «       ŒZ 	 |sy
Œr# t        $ r<}| j                  j                  dd	|j                  |j                  «       Y d
}~ŒDd
}~wt        $ r<}| j                  j                  dd	|j                  |j                  «       Y d
}~Œ‡d
}~wt        $ rE}| j                  j                  d|j                  j                  |j                  «       Y d
}~ŒÓd
}~wt         t"        f$ r ‚ t$        t        f$ r) | j'                  «        |s‚ | j)                  |¬«       Y �Œ‹t*        $ r Y �Œ't,        $ r Y y
 | j                  j                  d|«       ‚ xY w)a#  
        When a position sentence is received, it will be passed to the callback function

        blocking: if true (default), runs forever, otherwise will return after one sentence
                  You can still exit the loop, by raising StopIteration in the callback function

        immortal: When true, consumer will try to reconnect and stop propagation of Parse exceptions
                  if false (default), consumer will return

        raw: when true, raw packet is passed to callback, otherwise the result from aprs.parse()
        znot connected to a serverr   r   rE   ó   #ú
Server: %sÚutf8r   z%s
    Packet: %sNr   z%s: %s)r>   zAPRS Packet: %s)r    r
   Ú_socket_readlinesr   r   ÚdebugÚdecoder   ÚlogÚmessageÚpacketr   r   rO   r   r   ÚKeyboardInterruptÚ
SystemExitr	   rB   r@   r   ÚStopIteration)r"   Úcallbackr>   ÚimmortalÚrawrP   rQ   s          r(   ÚconsumerzIS.consumer    s’  € ð �ŠÜ!Ð"=Ó>Ð>àˆàðØ ×2Ñ2°8Ó<ò M�DØ˜A˜a�y DÒ(ÙÙ$ T�Ná$ T§[¡[°Ó%6Õ7àŸ™×)Ñ)¨,¸¿¹ÀFÓ8KÕLñMñ@ ØðG øô ò SØ—‘—‘ Ð$8¸#¿+¹+ÀsÇzÁz×RÑRûÜ ò RØ—‘—‘ Ð#7¸¿¹ÀcÇjÁj×QÑQûÜò QØ—‘×!Ñ! (¨C¯M©M×,BÑ,BÀCÇKÁK×PÑPûÜ%¤zÐ2ò ØÜ"¤OÐ4ò Ø—
‘
”áØà—L‘L¨(�LÔ3ÚÜò ÚÜ ò ÙðØ—‘×!Ñ!Ð"3°TÔ:ØúsC   œA,B Â	GÂ2CÃGÃ2DÄGÄ;EÅAGÆ%GÆ0GÆ:Gc                 óN   — t        j                  | j                  d«      | _        y)z"
        Creates a socket
        é   N)rN   Úcreate_connectionr8   r   rC   s    r(   Ú_open_socketzIS._open_socket×   s   € ô ×,Ñ,¨T¯[©[¸"Ó=ˆ�	r   c                 ón  — | j                   j                  d| j                  d   | j                  d   «       	 | j                  «        | j                  j                  «       }| j                   j                  dt        |«      «       | j                  j                  d«       | j                  j                  d«       | j                  j                  t        j                  t        j                  d«       | j                  j                  d«      }t        r|j                  d«      }|d   dk(  r+| j                   j!                  d	|j#                  «       «       nt%        d
«      ‚	 d| _        y# t$        $ r:}| j                   j'                  t        |«      «       | j)                  «        ‚ d}~wt        j&                  t        j*                  f$ r`}| j)                  «        | j                   j'                  dt        |«      z  «       t        |«      dk(  rt%        d«      ‚t%        |«      ‚d}~ww xY w)z2
        Attemps connection to the server
        zAttempting connection to %s:%sr   rE   zConnected to %srF   i   úlatin-1ú#z
Banner: %szinvalid banner from serverNzSocket error: %sz	timed outzno banner from serverT)r   r0   r8   rf   r   ÚgetpeernamerH   rL   rM   Ú
setsockoptrN   Ú
SOL_SOCKETÚSO_KEEPALIVEÚrecvr   rX   rW   rK   r
   rO   rB   Útimeoutr    )r"   ÚpeerÚbannerÚes       r(   r:   zIS._connectÝ   s¦  € ð
 	�‰×ÑÐ9¸4¿;¹;Àq¹>È4Ï;É;ÐWXÉ>ÔZð!	)Ø×ÑÔà—9‘9×(Ñ(Ó*ˆDà�K‰K×ÑÐ.´°D³	Ô:ð �I‰I×!Ñ! !Ô$Ø�I‰I× Ñ  Ô#à�I‰I× Ñ ¤×!2Ñ!2´F×4GÑ4GÈÔKà—Y‘Y—^‘^ CÓ(ˆFÝØŸ™ yÓ1�à�a‰y˜CÒØ—‘×!Ñ! ,°·±³Õ@ä%Ð&BÓCÐCð Að" ˆ�øô ò 	Ø�K‰K×Ñœc !›fÔ%Ø�J‰JŒLØûÜ—‘œfŸn™nÐ-ò 	)Ø�J‰JŒLà�K‰K×ÑÐ0´3°q³6Ñ9Ô:Ü�1‹v˜Ò$Ü%Ð&=Ó>Ð>ä% aÓ(Ð(ûð	)ús%   ¹D.E0 Å0	H4Å95F.Æ.&H4ÇAH/È/H4c                 óL  — d}|j                  | j                  | j                  | j                  dk7  rd| j                  z   ndt        «      }| j
                  j                  d«       	 | j                  |«       | j                  j                  d«       | j                  j                  t        |«      dz   «      }t        r|j                  d«      }|j                  «       }| j
                  j                  d|«       |j!                  d	d
«      \  }}}}}|dk(  rt#        d«      ‚|| j                  k7  rt#        d|z  «      ‚|dk7  r| j                  dk7  rt#        d«      ‚| j                  dk(  r| j
                  j                  d«       y| j
                  j                  d«       y# t"        $ r:}| j
                  j%                  t'        |«      «       | j)                  «        ‚ d}~w | j)                  «        | j
                  j%                  d«       t#        d«      ‚xY w)z.
        Sends login string to server
        z'user {0} pass {1} vers aprslib {3}{2}
r   z filter zSending login informationrF   éd   rh   rT   ú é   z'Server responded with empty callsign???z	verified,ú-1zPassword is incorrectzLogin successful (receive only)zLogin successfulNzFailed to login)Úformatr#   r$   r   r   r   r0   r.   r   rM   rn   Úlenr   rX   rK   rW   Úsplitr   rO   rH   rB   )r"   Ú	login_strÚtestÚ_r#   Ústatusrr   s          r(   r;   zIS._send_login	  s¼  € ð @ˆ	Ø×$Ñ$Ø�M‰MØ�K‰KØ*.¯+©+¸Ò*;ˆZ˜$Ÿ+™+Ò%ÀÜó	ˆ	ð 	�‰×ÑÐ4Ô5ð	0Ø�M‰M˜)Ô$Ø�I‰I× Ñ  Ô#Ø—9‘9—>‘>¤# i£.°3Ñ"6Ó7ˆDÝØ—{‘{ 9Ó-�Ø—;‘;“=ˆDà�K‰K×Ñ˜l¨DÔ1à(,¯
©
°3¸Ó(:Ñ%ˆAˆq�(˜F Aà˜2Š~Ü Ð!JÓKÐKØ˜4Ÿ=™=Ò(Ü  °Ñ!4Ó5Ð5Ø˜Ò$¨¯©¸Ò)<Ü Ð!8Ó9Ð9à�{‰{˜dÒ"Ø—‘× Ñ Ð!BÕCà—‘× Ñ Ð!3Õ4øäò 	Ø�K‰K×Ñœc !›fÔ%Ø�J‰JŒLØûð	0Ø�J‰JŒLØ�K‰K×ÑÐ/Ô0ÜÐ.Ó/Ð/ús   Á)D$F* ÆF* Æ*	H#Æ35G(Ç(;H#c              #   ó\  K  — 	 | j                   j                  d«       	 d}d}t        j                  | j                   gg g |rdnd«       	 | j                   j                  d«      }|s&| j                  j                  d«       t        d«      ‚	 | xj                  |z  c_
        || j                  v r7| j                  j                  |d«      \  }| _
        |–— || j                  v rŒ7ŒË# t        j                  $ r7}| j                  j                  dt        |«      z  «       t        d«      ‚d}~ww xY w# t        j                  $ r^}d	t        |«      v r|st        | j                  «      dk(  rY d}~y| j                  j                  d
t        |«      z  «       Y d}~�Œd}~ww xY w­w)zH
        Generator for complete lines, received from the server
        r   z$socket error when setblocking(0): %szconnection droppedNr   s   
i   zsocket.recv(): returned emptyz Resource temporarily unavailablezsocket error on recv(): %srE   )r   rL   rN   rO   r   rH   r	   Úselectrn   ry   r!   rz   )r"   r>   rr   Ú	short_bufÚnewlinerP   s         r(   rV   zIS._socket_readlines8  sl  è ø€ ð	7Ø�I‰I×!Ñ! !Ô$ð
 ØˆIØˆGä�M‰M˜4Ÿ9™9˜+ r¨2±x©tÀQÔGðMØ ŸI™IŸN™N¨4Ó0�	ñ !Ø—K‘K×%Ñ%Ð&EÔFÜ(Ð)=Ó>Ð>ð !ð �HŠH˜	Ñ!�Hà˜TŸX™XÑ%Ø!%§¡§¡°¸Ó!;‘��d”hà’
ð ˜TŸX™XÒ%ð1 øô	 �|‰|ò 	7Ø�K‰K×ÑÐDÄsÈ1ÃvÑMÔNÜ Ð!5Ó6Ð6ûð	7ûô" —<‘<ò Mà6¼#¸a»&Ñ@Ù#Ü˜4Ÿ8™8“}¨Ò)Üà—K‘K×%Ñ%Ð&BÄSÈÃVÑ&K×LÒLûðMüse   ‚F,„C+ Ÿ,F,ÁAD8 ÂAF,Ã*F,Ã+D5Ã>2D0Ä0D5Ä5F,Ä8F)Å'F$Å2F,Å7'F$ÆF,Æ$F)Æ)F,N)rw   zrotate.aprs.neti¨'  F)rw   F)Fé   )TFF)F)r   Ú
__module__Ú__qualname__Ú__doc__r)   r.   r2   r   r   r@   rB   r,   rb   rf   r:   r;   rV   © r   r(   r   r   ,   sK   „ ñóò& ò
	:ó'ò#óò0
ò,ó05òn>ò*òX-0ô^%r   )r†   rN   r€   r<   r   Úaprslibr   r   r   Úaprslib.parsingr   Úaprslib.packets.baser   Úaprslib.exceptionsr   r	   r
   r   r   r   Ú__all__ÚaddLevelNameÚobjectr   r‡   r   r(   ú<module>r�      si   ðñ$ó Û Û Û ç 4Ñ 4Ý !Ý +÷÷ ð ˆ&€à €× Ñ �R˜Ô &Ø €× Ñ �Q˜Ô (ôqˆõ qr   