home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / netbios.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  8.3 KB  |  298 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4. import sys
  5. import win32wnet
  6. import struct
  7. NCBNAMSZ = 16
  8. MAX_LANA = 254
  9. NAME_FLAGS_MASK = 135
  10. GROUP_NAME = 128
  11. UNIQUE_NAME = 0
  12. REGISTERING = 0
  13. REGISTERED = 4
  14. DEREGISTERED = 5
  15. DUPLICATE = 6
  16. DUPLICATE_DEREG = 7
  17. LISTEN_OUTSTANDING = 1
  18. CALL_PENDING = 2
  19. SESSION_ESTABLISHED = 3
  20. HANGUP_PENDING = 4
  21. HANGUP_COMPLETE = 5
  22. SESSION_ABORTED = 6
  23. ALL_TRANSPORTS = 'M\x00\x00\x00'
  24. MS_NBF = 'MNBF'
  25. NCBCALL = 16
  26. NCBLISTEN = 17
  27. NCBHANGUP = 18
  28. NCBSEND = 20
  29. NCBRECV = 21
  30. NCBRECVANY = 22
  31. NCBCHAINSEND = 23
  32. NCBDGSEND = 32
  33. NCBDGRECV = 33
  34. NCBDGSENDBC = 34
  35. NCBDGRECVBC = 35
  36. NCBADDNAME = 48
  37. NCBDELNAME = 49
  38. NCBRESET = 50
  39. NCBASTAT = 51
  40. NCBSSTAT = 52
  41. NCBCANCEL = 53
  42. NCBADDGRNAME = 54
  43. NCBENUM = 55
  44. NCBUNLINK = 112
  45. NCBSENDNA = 113
  46. NCBCHAINSENDNA = 114
  47. NCBLANSTALERT = 115
  48. NCBACTION = 119
  49. NCBFINDNAME = 120
  50. NCBTRACE = 121
  51. ASYNCH = 128
  52. NRC_GOODRET = 0
  53. NRC_BUFLEN = 1
  54. NRC_ILLCMD = 3
  55. NRC_CMDTMO = 5
  56. NRC_INCOMP = 6
  57. NRC_BADDR = 7
  58. NRC_SNUMOUT = 8
  59. NRC_NORES = 9
  60. NRC_SCLOSED = 10
  61. NRC_CMDCAN = 11
  62. NRC_DUPNAME = 13
  63. NRC_NAMTFUL = 14
  64. NRC_ACTSES = 15
  65. NRC_LOCTFUL = 17
  66. NRC_REMTFUL = 18
  67. NRC_ILLNN = 19
  68. NRC_NOCALL = 20
  69. NRC_NOWILD = 21
  70. NRC_INUSE = 22
  71. NRC_NAMERR = 23
  72. NRC_SABORT = 24
  73. NRC_NAMCONF = 25
  74. NRC_IFBUSY = 33
  75. NRC_TOOMANY = 34
  76. NRC_BRIDGE = 35
  77. NRC_CANOCCR = 36
  78. NRC_CANCEL = 38
  79. NRC_DUPENV = 48
  80. NRC_ENVNOTDEF = 52
  81. NRC_OSRESNOTAV = 53
  82. NRC_MAXAPPS = 54
  83. NRC_NOSAPS = 55
  84. NRC_NORESOURCES = 56
  85. NRC_INVADDRESS = 57
  86. NRC_INVDDID = 59
  87. NRC_LOCKFAIL = 60
  88. NRC_OPENERR = 63
  89. NRC_SYSTEM = 64
  90. NRC_PENDING = 255
  91. UCHAR = 'B'
  92. WORD = 'H'
  93. DWORD = 'I'
  94. USHORT = 'H'
  95. ULONG = 'I'
  96. ADAPTER_STATUS_ITEMS = [
  97.     ('6s', 'adapter_address'),
  98.     (UCHAR, 'rev_major'),
  99.     (UCHAR, 'reserved0'),
  100.     (UCHAR, 'adapter_type'),
  101.     (UCHAR, 'rev_minor'),
  102.     (WORD, 'duration'),
  103.     (WORD, 'frmr_recv'),
  104.     (WORD, 'frmr_xmit'),
  105.     (WORD, 'iframe_recv_err'),
  106.     (WORD, 'xmit_aborts'),
  107.     (DWORD, 'xmit_success'),
  108.     (DWORD, 'recv_success'),
  109.     (WORD, 'iframe_xmit_err'),
  110.     (WORD, 'recv_buff_unavail'),
  111.     (WORD, 't1_timeouts'),
  112.     (WORD, 'ti_timeouts'),
  113.     (DWORD, 'reserved1'),
  114.     (WORD, 'free_ncbs'),
  115.     (WORD, 'max_cfg_ncbs'),
  116.     (WORD, 'max_ncbs'),
  117.     (WORD, 'xmit_buf_unavail'),
  118.     (WORD, 'max_dgram_size'),
  119.     (WORD, 'pending_sess'),
  120.     (WORD, 'max_cfg_sess'),
  121.     (WORD, 'max_sess'),
  122.     (WORD, 'max_sess_pkt_size'),
  123.     (WORD, 'name_count')]
  124. NAME_BUFFER_ITEMS = [
  125.     (str(NCBNAMSZ) + 's', 'name'),
  126.     (UCHAR, 'name_num'),
  127.     (UCHAR, 'name_flags')]
  128. SESSION_HEADER_ITEMS = [
  129.     (UCHAR, 'sess_name'),
  130.     (UCHAR, 'num_sess'),
  131.     (UCHAR, 'rcv_dg_outstanding'),
  132.     (UCHAR, 'rcv_any_outstanding')]
  133. SESSION_BUFFER_ITEMS = [
  134.     (UCHAR, 'lsn'),
  135.     (UCHAR, 'state'),
  136.     (str(NCBNAMSZ) + 's', 'local_name'),
  137.     (str(NCBNAMSZ) + 's', 'remote_name'),
  138.     (UCHAR, 'rcvs_outstanding'),
  139.     (UCHAR, 'sends_outstanding')]
  140. LANA_ENUM_ITEMS = [
  141.     ('B', 'length'),
  142.     (str(MAX_LANA + 1) + 's', 'lana')]
  143. FIND_NAME_HEADER_ITEMS = [
  144.     (WORD, 'node_count'),
  145.     (UCHAR, 'reserved'),
  146.     (UCHAR, 'unique_group')]
  147. FIND_NAME_BUFFER_ITEMS = [
  148.     (UCHAR, 'length'),
  149.     (UCHAR, 'access_control'),
  150.     (UCHAR, 'frame_control'),
  151.     ('6s', 'destination_addr'),
  152.     ('6s', 'source_addr'),
  153.     ('18s', 'routing_info')]
  154. ACTION_HEADER_ITEMS = [
  155.     (ULONG, 'transport_id'),
  156.     (USHORT, 'action_code'),
  157.     (USHORT, 'reserved')]
  158. del UCHAR
  159. del WORD
  160. del DWORD
  161. del USHORT
  162. del ULONG
  163. NCB = win32wnet.NCB
  164.  
  165. def Netbios(ncb):
  166.     ob = ncb.Buffer
  167.     is_ours = hasattr(ob, '_pack')
  168.     if is_ours:
  169.         ob._pack()
  170.     
  171.     try:
  172.         return win32wnet.Netbios(ncb)
  173.     finally:
  174.         if is_ours:
  175.             ob._unpack()
  176.  
  177.  
  178.  
  179. class NCBStruct:
  180.     
  181.     def __init__(self, items):
  182.         self._format = ''.join([ item[0] for item in items ])
  183.         self._items = items
  184.         self._buffer_ = win32wnet.NCBBuffer(struct.calcsize(self._format))
  185.         for format, name in self._items:
  186.             if len(format) == 1:
  187.                 if format == 'c':
  188.                     val = '\x00'
  189.                 else:
  190.                     val = 0
  191.             else:
  192.                 l = int(format[:-1])
  193.                 val = '\x00' * l
  194.             self.__dict__[name] = val
  195.         
  196.  
  197.     
  198.     def _pack(self):
  199.         vals = []
  200.         for format, name in self._items:
  201.             
  202.             try:
  203.                 vals.append(self.__dict__[name])
  204.             continue
  205.             except KeyError:
  206.                 vals.append(None)
  207.                 continue
  208.             
  209.  
  210.         
  211.         self._buffer_[:] = struct.pack(*(self._format,) + tuple(vals))
  212.  
  213.     
  214.     def _unpack(self):
  215.         items = struct.unpack(self._format, self._buffer_)
  216.         for format, name in zip(self._items, items):
  217.             val = None
  218.             self.__dict__[name] = val
  219.         
  220.  
  221.     
  222.     def __setattr__(self, attr, val):
  223.         if attr not in self.__dict__ and attr[0] != '_':
  224.             for format, attr_name in self._items:
  225.                 if attr == attr_name:
  226.                     break
  227.                     continue
  228.                 raise AttributeError(attr)
  229.         self.__dict__[attr] = val
  230.  
  231.  
  232.  
  233. def ADAPTER_STATUS():
  234.     return NCBStruct(ADAPTER_STATUS_ITEMS)
  235.  
  236.  
  237. def NAME_BUFFER():
  238.     return NCBStruct(NAME_BUFFER_ITEMS)
  239.  
  240.  
  241. def SESSION_HEADER():
  242.     return NCBStruct(SESSION_HEADER_ITEMS)
  243.  
  244.  
  245. def SESSION_BUFFER():
  246.     return NCBStruct(SESSION_BUFFER_ITEMS)
  247.  
  248.  
  249. def LANA_ENUM():
  250.     return NCBStruct(LANA_ENUM_ITEMS)
  251.  
  252.  
  253. def FIND_NAME_HEADER():
  254.     return NCBStruct(FIND_NAME_HEADER_ITEMS)
  255.  
  256.  
  257. def FIND_NAME_BUFFER():
  258.     return NCBStruct(FIND_NAME_BUFFER_ITEMS)
  259.  
  260.  
  261. def ACTION_HEADER():
  262.     return NCBStruct(ACTION_HEADER_ITEMS)
  263.  
  264.  
  265. def byte_to_int(b):
  266.     if sys.version_info >= (3, 0):
  267.         return b
  268.     return None(b)
  269.  
  270. if __name__ == '__main__':
  271.     ncb = NCB()
  272.     ncb.Command = NCBENUM
  273.     la_enum = LANA_ENUM()
  274.     ncb.Buffer = la_enum
  275.     rc = Netbios(ncb)
  276.     if rc != 0:
  277.         raise RuntimeError('Unexpected result %d' % (rc,))
  278.     for i in range(la_enum.length):
  279.         ncb.Reset()
  280.         ncb.Command = NCBRESET
  281.         ncb.Lana_num = byte_to_int(la_enum.lana[i])
  282.         rc = Netbios(ncb)
  283.         if rc != 0:
  284.             raise RuntimeError('Unexpected result %d' % (rc,))
  285.         ncb.Reset()
  286.         ncb.Command = NCBASTAT
  287.         ncb.Lana_num = byte_to_int(la_enum.lana[i])
  288.         ncb.Callname = '*               '.encode('ascii')
  289.         adapter = ADAPTER_STATUS()
  290.         ncb.Buffer = adapter
  291.         Netbios(ncb)
  292.         print 'Adapter address:',
  293.         for ch in adapter.adapter_address:
  294.             print '%02x' % (byte_to_int(ch),),
  295.         
  296.         print 
  297.     
  298.