
    hW                        S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
Jr  S SKJr  S SKJr  SS jr " S	 S
5      rg)    )annotationsN)Any)isIPAddressisIPv6Address)Deferredsucceed)MulticastJoinError)IReactorCorec                z    [        U5      (       d  [        U5      (       a  [        U5      $ U R                  U5      $ N)r   r   r   resolve)reactoraddrs     b/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/internet/_multicast.py_maybeResolver      s0    Tk$//t}??4      c                     \ rS rSr% SrS\S'   S\S'   S\S'   SS	 jr\SS
 j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS j5       rSS jrSS jrSS jrSS jrSS jrS S jrS!S jrS"S#S jjrS"S#S jjrSrg)$MulticastMixin   z$
Implement multicast functionality.
zsocket.AddressFamilyaddressFamilyr   r   zsocket.socketsocketc                     [         R                  " U R                  U5      $ ! [         a;    [	        S[         R
                  " U R                  5      R                   SU< 35      ef = f)z[
Pack an IP address literal into bytes, according to the address family
of this transport.
zinvalid address literal for z: )r   	inet_ptonr   OSErrorr	   AddressFamilyname)selfr   s     r   	_addrpackMulticastMixin._addrpack    sg    
	##D$6$6== 	$.v/C/CDDVDV/W/\/\.]]_`d_gh 	s
    # AA(c                ~    U R                   [        R                  :X  a  [        R                  $ [        R                  $ r   )r   r   AF_INET
IPPROTO_IPIPPROTO_IPV6r   s    r   _ipprotoMulticastMixin._ipproto,   s6     !!V^^3 	
 $$	
r   c                ~    U R                   [        R                  :X  a  [        R                  $ [        R                  $ r   )r   r   r!   IP_MULTICAST_LOOPIPV6_MULTICAST_LOOPr$   s    r   
_multiloopMulticastMixin._multiloop4   s6     !!V^^3 $$	
 ++	
r   c                ~    U R                   [        R                  :X  a  [        R                  $ [        R                  $ r   )r   r   r!   IP_MULTICAST_IFIPV6_MULTICAST_IFr$   s    r   _multiifMulticastMixin._multiif<   s6     !!V^^3 ""	
 ))	
r   c                ~    U R                   [        R                  :X  a  [        R                  $ [        R                  $ r   )r   r   r!   IP_ADD_MEMBERSHIPIPV6_JOIN_GROUPr$   s    r   
_joingroupMulticastMixin._joingroupD   s6     !!V^^3 $$	
 ''	
r   c                ~    U R                   [        R                  :X  a  [        R                  $ [        R                  $ r   )r   r   r!   IP_DROP_MEMBERSHIPIPV6_LEAVE_GROUPr$   s    r   _leavegroupMulticastMixin._leavegroupL   s6     !!V^^3 %%	
 ((	
r   c                b   U R                   [        R                  :X  a  SOSnU R                  nU R                  nU R                  R                  X#U5      nSSKJn  U R                   [        R                  :X  a  [        R                  XE5      $ [        R                  " U R                   U5      $ )N      r   )	byteorder)r   r   r!   r%   r/   
getsockoptsysr>   AF_INET6int
from_bytes	inet_ntop)r   blenipprotomultiifir>   s         r   getOutgoingInterface#MulticastMixin.getOutgoingInterfaceT   s    ((FNN:s----KK""7T:!0>>!// 2 2A66r   c                N   ^ ^ SUU 4S jjn[         R                  " U" 5       5      $ )z3
@see: L{IMulticastTransport.setOutgoingInterface}
c                   >#    TR                   [        R                  :X  aJ  [        T[        5      (       d   S5       eTR                  [        TR                  T5      I S h  vN 5      n O[        T[        5      (       d   S5       eTn TR                  R                  TR                  TR                  U 5        g NY7f)Nz*IPv4 interfaces are specified as addressesz)IPv6 interfaces are specified as integers   )r   r   r!   
isinstancestrr   r   r   rB   
setsockoptr%   r/   )rH   r   r   s    r   asynchronously;MulticastMixin.setOutgoingInterface.<locals>.asynchronouslyd   s     !!V^^3!#  @?@  NNt||T)J#JK!#  ?>?  KK""4==$--C $Ks   AB>"B<#AB>returnrB   )r   fromCoroutine)r   r   rQ   s   `` r   setOutgoingInterface#MulticastMixin.setOutgoingInterface_   s#    
	 	 %%n&677r   c                t    [        U R                  R                  U R                  U R                  5      5      $ r   )boolr   r?   r%   r*   r$   s    r   getLoopbackModeMulticastMixin.getLoopbackModeu   s&    DKK**4==$//JKKr   c           	         U R                   nU R                  nU R                  R                  X#[	        [        U5      5      5        g r   )r%   r*   r   rP   rB   rY   )r   modeabs       r   setLoopbackModeMulticastMixin.setLoopbackModex   s0    MMOOqSd_5r   c                r    U R                   R                  [         R                  [         R                  5      $ r   )r   r?   r"   IP_MULTICAST_TTLr$   s    r   getTTLMulticastMixin.getTTL~   s%    {{%%f&7&79P9PQQr   c                    [         R                  " SU5      nU R                  R                  [        R                  [        R
                  U5        g )NB)structpackr   rP   r"   rc   )r   ttlbttls      r   setTTLMulticastMixin.setTTL   s4    {{3$v00&2I2I4Pr   c                   ^ ^^^ U(       a  T R                   OT R                  mT(       d"  T R                  [        R                  :X  a  SOSmSUUUU 4S jjn[
        R                  " U" 5       5      $ )Nz0.0.0.0z::c                 z  >#    [        TR                  T5      I S h  vN n [        TR                  T5      I S h  vN nTR                  U 5      nTR                  U5      n TR                  R	                  TR
                  TX#-   5        g  No NS! [         a  n[        TT/UR                  Q76 UeS nAff = f7fr   )	r   r   r   r   rP   r%   r   r	   args)	resaddrresifpackaddrpackifer   cmd	interfacer   s	        r   impl'MulticastMixin._joinleave.<locals>.impl   s     )$,,==G'i@@E~~g.H^^E*FJ&&t}}c8;LM >@  J(yB166BIJsC   B;BB;B&B;#)B B;B;
B8B33B88B;)rT   None)r4   r9   r   r   r!   r   rU   )r   r   rw   joinrx   rv   s   ```  @r   
_joinleaveMulticastMixin._joinleave   sR    !%doo4+;+;%)%7%76>>%I	tI		J 		J %%df--r   c                &    U R                  XS5      $ )z(
@see: L{IMulticastTransport.joinGroup}
Tr|   r   r   rw   s      r   	joinGroupMulticastMixin.joinGroup   s     t55r   c                &    U R                  XS5      $ )z)
@see: L{IMulticastTransport.leaveGroup}
Fr   r   s      r   
leaveGroupMulticastMixin.leaveGroup   s     t66r    N)r   rO   rT   bytesrS   )rT   	str | int)r   r   rT   zDeferred[int])rT   rY   )r]   rB   rT   rz   )rj   rB   rT   rz   )r   rO   rw   rO   r{   rY   rT   Deferred[None]) )r   rO   rw   rO   rT   r   )__name__
__module____qualname____firstlineno____doc____annotations__r   propertyr%   r*   r/   r4   r9   rI   rV   rZ   r`   rd   rl   r|   r   r   __static_attributes__r   r   r   r   r      s     ('L
 
 
 
 
 
 
 
 
 
 
	78,L6RQ.$67 7r   r   )r   r
   r   rO   rT   zDeferred[str])
__future__r   r   rh   typingr   twisted.internet.abstractr   r   twisted.internet.deferr   r   twisted.internet.errorr	   twisted.internet.interfacesr
   r   r   r   r   r   <module>r      s0   
 #    @ 4 5 4!J7 J7r   