Example #1
0
 def show(self):
     pager = os.environ.get('PAGER')
     if not pager: 
         self.glob.logger.log("KEYDB", "PAGER env must be set")
         return
     proc = subprocess.Popen(pager, shell=True, stdin=subprocess.PIPE)
     pipe = proc.stdin
     try: 
         with self.lock:
             for l in sorted(self.lenmap.keys()):
                 for h in self.lenmap[l]:
                     key = self.keys[h]
                     s = "%3d %s:%d\t%s\t%s\t%s\t%s\t%dB\t%s\n" % \
                         (l, o2on_node.ip2e(key.ip),
                          key.port, key.url,
                          key.title.decode('utf-8'),
                          key.note.decode('utf-8'),
                          str(datetime.datetime.fromtimestamp(int(key.published))),
                          key.size,
                          hexlify(key.hash))
                     pipe.write(s.encode('utf-8'))
             pipe.close()
             proc.wait()
     except IOError, inst:
         if inst.errno == errno.EPIPE:pass # Broken pipe
         else: raise inst
Example #2
0
def showmynode(args):
    if glob.prof.mynode.ip:
        glob.logger.log("GLOBAL",
                        "my node is %s%s%s" % (hexlify(glob.prof.mynode.id), 
                                               o2on_node.ip2e(glob.prof.mynode.ip),
                                               o2on_node.port2e(glob.prof.mynode.port)))
    else:
        glob.logger.log("GLOBAL", "Didn't get global IP")
Example #3
0
def showmynode(args):
    if glob.prof.mynode.ip:
        glob.logger.log(
            "GLOBAL", "my node is %s%s%s" %
            (hexlify(glob.prof.mynode.id), o2on_node.ip2e(
                glob.prof.mynode.ip), o2on_node.port2e(glob.prof.mynode.port)))
    else:
        glob.logger.log("GLOBAL", "Didn't get global IP")
Example #4
0
 def im_list(self):
     res = []
     with self.lock:
         for i in self.ims:
             x = (i.mine, str(datetime.datetime.fromtimestamp(int(i.date))),
                  hexlify(i.id), ip2e(i.ip), i.port, i.name.decode('utf-8'),
                  i.msg.decode('utf-8'))
             res.append(x)
     return res
Example #5
0
 def im_list(self):
     res = []
     with self.lock:
         for i in self.ims:
             x = (i.mine, str(datetime.datetime.fromtimestamp(int(i.date))),
                  hexlify(i.id), ip2e(i.ip), i.port, i.name.decode('utf-8'), 
                  i.msg.decode('utf-8'))
             res.append(x)
     return res
Example #6
0
 def do_ping(self, node):
     headers = common_header.copy()
     headers['Content-Type'] = 'text/plain'
     headers['Content-Length'] = "8"
     self.wfile.write("HTTP/1.0 200 OK\r\n")
     for h in headers: self.wfile.write("%s: %s\r\n" % (h,headers[h]))
     self.wfile.write("\r\n")
     self.wfile.write(ip2e(node.ip))
     self.wfile.close()
     self.server.glob.logger.log("P2PSERVER", "respond to ping %s" % hexlify(node.id))
Example #7
0
    def status(self,args):
        self.send_common("status", "Status Summary")
        glob = self.server.glob
        prof = glob.prof
        if prof.mynode.ip:
            ip = "%s (%s)" % (prof.mynode.ip, ip2e(prof.mynode.ip))
        else:
            ip =  "未取得"
        name = prof.mynode.name or "なし"
        if prof.mynode.ip:
            nodehash = hexlify(glob.prof.mynode.id)+ip2e(glob.prof.mynode.ip)+\
                port2e(glob.prof.mynode.port)
        else: nodehash = "IP未取得"
        self.wfile.write("""\
<p class='section'>
 <h2 class='section_title'>自ノード情報</h2>
 <div class='section_body'>
  <table>
   <tr><th>ID</th><th>IP</th><th>ポート</th><th>ノード名</th><th>UA</th><th>ハッシュ</th></tr>
   <tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>
  </table>
 </div>
</p>
""" % (hexlify(prof.mynode.id), ip, prof.mynode.port, name, prof.mynode.ua, nodehash))
        self.wfile.write("""\
<p class='section'>
 <h2 class='section_title'>概要</h2>
 <div class='section_body'>
  <table>
   <tr>
    <th><a href='/nodes'>ノード数</a></th>
    <th><a href='/dats'>dat数</a></th>
    <th><a href='/keys'>datキー数</a></th>
    <th><a href='/datq'>検索中dat数</a></th></tr>
   <tr><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr>
  </table>
 </div>
</p>
""" % (len(glob.nodedb), len(glob.datdb), len(glob.keydb), len(glob.datquery)))
        self.wfile.write(self.html_footer)
Example #8
0
 def key_list(self):
     res = []
     with self.lock:
         for l in sorted(self.lenmap.keys()):
             for h in self.lenmap[l]:
                 key = self.keys[h]
                 x = (l, o2on_node.ip2e(key.ip),
                      key.port, key.url,
                      key.title.decode('utf-8'),
                      key.note.decode('utf-8'),
                      str(datetime.datetime.fromtimestamp(int(key.published))),
                      key.size,
                      hexlify(key.hash))
                 res.append(x)
     return res
Example #9
0
 def xml(self):
     if not self.valid(): return ""
     board_xml =  "<key>\r\n"
     board_xml += "<hash>%s</hash>\r\n" % hexlify(self.hash)
     board_xml += "<nodeid>%s</nodeid>\r\n" % hexlify(self.nodeid)
     board_xml += "<ip>%s</ip>\r\n" % o2on_node.ip2e(self.ip)
     board_xml += "<port>%d</port>\r\n" % (self.port or 0)
     board_xml += "<size>%d</size>\r\n" % self.size
     board_xml += "<url>%s</url>\r\n" % self.url
     title = self.title.decode('utf-8')
     if len(title)>32: title = title[:31]+"…".decode('utf-8')
     board_xml += "<title><![CDATA[%s]]></title>\r\n" % title
     note = self.note.decode('utf-8')
     if len(note)>32: note = note[:31]+"…".decode('utf-8')
     board_xml += "<note><![CDATA[%s]]></note>\r\n" % note
     board_xml += "</key>\r\n"
     return board_xml
Example #10
0
 def do_findvalue(self,node):
     target = self.headers.get('X-O2-Target-Key')
     if not target: return self.response_400("no target key to findvalue")
     self.server.glob.logger.log("P2PSERVER",
                                 "\tfindvalue from %s for %s" % (hexlify(node.id), target))
     target = unhexlify(target)
     xml_data = None
     keys = self.server.glob.keydb.get_bydatkey(target)
     if keys:
         xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
         xml_data += "<keys>\r\n"
         for key in keys: xml_data += key.xml()
         xml_data += "</keys>\r\n"
     else:
         neighbors = self.server.glob.nodedb.neighbors_nodes(target, True)
         if len(neighbors)>0:
             xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
             xml_data += "<nodes>\r\n"
             for node in neighbors:
                 if node.ip and node.port:
                     xml_data += "<node>\r\n"
                     xml_data += "<id>%s</id>\r\n" % hexlify(node.id)
                     xml_data += "<ip>%s</ip>\r\n" % ip2e(node.ip)
                     xml_data += "<port>%s</port>\r\n" % node.port
                     if node.name:
                         xml_data += "<name><![CDATA[%s]]></name>\r\n" % \
                             node.name.decode('utf-8')
                     if node.pubkey:
                         xml_data += "<pubkey>%s</pubkey>\r\n" % hexlify(node.pubkey)
                     xml_data += "</node>\r\n"
             xml_data += "</nodes>\r\n"
     if xml_data:
         xml_data = xml_data.encode('utf-8')
         headers = common_header.copy()
         headers['Content-Type'] = 'text/xml; charset=utf-8'
         headers['Content-Length'] = str(len(xml_data))
         self.wfile.write("HTTP/1.0 200 OK\r\n")
         for h in headers: self.wfile.write("%s: %s\r\n" % (h,headers[h]))
         self.wfile.write("\r\n")
         self.wfile.write(xml_data)
         self.wfile.close()
     else: return self.response_404()