<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.randomness.nu/mediawiki/index.php?action=history&amp;feed=atom&amp;title=bridge.py</id>
	<title>bridge.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.randomness.nu/mediawiki/index.php?action=history&amp;feed=atom&amp;title=bridge.py"/>
	<link rel="alternate" type="text/html" href="https://wiki.randomness.nu/mediawiki/index.php?title=bridge.py&amp;action=history"/>
	<updated>2026-05-24T23:59:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.randomness.nu/mediawiki/index.php?title=bridge.py&amp;diff=67&amp;oldid=prev</id>
		<title>Derg: Derg moved page Bridge.py to bridge.py without leaving a redirect</title>
		<link rel="alternate" type="text/html" href="https://wiki.randomness.nu/mediawiki/index.php?title=bridge.py&amp;diff=67&amp;oldid=prev"/>
		<updated>2024-09-12T12:50:33Z</updated>

		<summary type="html">&lt;p&gt;Derg moved page &lt;a href=&quot;/mediawiki/index.php?title=Bridge.py&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Bridge.py (page does not exist)&quot;&gt;Bridge.py&lt;/a&gt; to &lt;a href=&quot;/bridge.py&quot; title=&quot;bridge.py&quot;&gt;bridge.py&lt;/a&gt; without leaving a redirect&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:50, 12 September 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Derg</name></author>
	</entry>
	<entry>
		<id>https://wiki.randomness.nu/mediawiki/index.php?title=bridge.py&amp;diff=13&amp;oldid=prev</id>
		<title>Derg: Created page with &quot;&lt;syntaxhighlight lang=&quot;python&quot;&gt; #!/usr/bin/python3 from twisted.internet import reactor, protocol import sys  class Client(protocol.Protocol):      def __init__(self, s):         self.server = s         self.connected = 0         self.data = []      def connectionMade(self):         self.connected = 1         for a in self.data:             self.transport.write(a)         self.data = []      def write(self, a):         if self.connected:             self.transport.write(...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.randomness.nu/mediawiki/index.php?title=bridge.py&amp;diff=13&amp;oldid=prev"/>
		<updated>2024-09-09T19:43:40Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; #!/usr/bin/python3 from twisted.internet import reactor, protocol import sys  class Client(protocol.Protocol):      def __init__(self, s):         self.server = s         self.connected = 0         self.data = []      def connectionMade(self):         self.connected = 1         for a in self.data:             self.transport.write(a)         self.data = []      def write(self, a):         if self.connected:             self.transport.write(...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
from twisted.internet import reactor, protocol&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
class Client(protocol.Protocol):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, s):&lt;br /&gt;
        self.server = s&lt;br /&gt;
        self.connected = 0&lt;br /&gt;
        self.data = []&lt;br /&gt;
&lt;br /&gt;
    def connectionMade(self):&lt;br /&gt;
        self.connected = 1&lt;br /&gt;
        for a in self.data:&lt;br /&gt;
            self.transport.write(a)&lt;br /&gt;
        self.data = []&lt;br /&gt;
&lt;br /&gt;
    def write(self, a):&lt;br /&gt;
        if self.connected:&lt;br /&gt;
            self.transport.write(a)&lt;br /&gt;
        else:&lt;br /&gt;
            self.data.append(a)&lt;br /&gt;
&lt;br /&gt;
    def dataReceived(self, a):&lt;br /&gt;
        self.server.write(a)&lt;br /&gt;
        print(self.server.i, &amp;#039;S&amp;#039;, formatbytes(a))&lt;br /&gt;
&lt;br /&gt;
    def connectionLost(self, reason=&amp;#039;&amp;#039;):&lt;br /&gt;
        if self.server.client:&lt;br /&gt;
            print(&amp;#039;Connection&amp;#039;, self.server.i, &amp;#039;lost from server&amp;#039;)&lt;br /&gt;
            self.server.transport.loseConnection()&lt;br /&gt;
        self.server = None&lt;br /&gt;
&lt;br /&gt;
class ClientFactory(protocol.ClientFactory):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, c):&lt;br /&gt;
        self.client = c&lt;br /&gt;
&lt;br /&gt;
    def buildProtocol(self, a):&lt;br /&gt;
        return self.client&lt;br /&gt;
&lt;br /&gt;
class Server(protocol.Protocol):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        global i&lt;br /&gt;
        self.i = i = i + 1&lt;br /&gt;
        self.client = Client(self)&lt;br /&gt;
        print(&amp;#039;Connection&amp;#039;, i, &amp;#039;initialized&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    def connectionMade(self):&lt;br /&gt;
        reactor.connectTCP(sys.argv[1], int(sys.argv[2]), ClientFactory(self.client))&lt;br /&gt;
&lt;br /&gt;
    def dataReceived(self, a):&lt;br /&gt;
        self.client.write(a)&lt;br /&gt;
        print(self.i, &amp;#039;C&amp;#039;, formatbytes(a))&lt;br /&gt;
&lt;br /&gt;
    def write(self, a):&lt;br /&gt;
        self.transport.write(a)&lt;br /&gt;
&lt;br /&gt;
    def connectionLost(self,reason=1):&lt;br /&gt;
        if self.client.server:&lt;br /&gt;
            print(&amp;#039;Connection&amp;#039;, self.i, &amp;#039;lost from client&amp;#039;)&lt;br /&gt;
            self.client.transport.loseConnection()&lt;br /&gt;
        self.client = None&lt;br /&gt;
&lt;br /&gt;
class ServerFactory(protocol.ServerFactory):&lt;br /&gt;
    protocol = Server&lt;br /&gt;
&lt;br /&gt;
def highlight(byt):&lt;br /&gt;
    table = {0:&amp;#039;000&amp;#039;, 1:&amp;#039;001&amp;#039;, 2:&amp;#039;002&amp;#039;, 3:&amp;#039;003&amp;#039;, 4:&amp;#039;004&amp;#039;, 5:&amp;#039;005&amp;#039;, 6:&amp;#039;006&amp;#039;, 7:&amp;#039;a&amp;#039;, 8:&amp;#039;b&amp;#039;, 9:&amp;#039;t&amp;#039;, 10:&amp;#039;n&amp;#039;, 11:&amp;#039;v&amp;#039;, 12:&amp;#039;f&amp;#039;, 13:&amp;#039;r&amp;#039;}&lt;br /&gt;
    i = 0&lt;br /&gt;
    out = &amp;#039;b\&amp;#039;&amp;#039;&lt;br /&gt;
    pb = False&lt;br /&gt;
    for a in byt:&lt;br /&gt;
        if a &amp;gt;= 32 and a &amp;lt;= 126:&lt;br /&gt;
            if pb:&lt;br /&gt;
                out += &amp;#039;\033[39m&amp;#039;&lt;br /&gt;
                pb = False&lt;br /&gt;
            if a == 39: # &amp;#039;&lt;br /&gt;
                out += &amp;#039;\\\&amp;#039;&amp;#039;&lt;br /&gt;
            elif a == 92: # \&lt;br /&gt;
                out += &amp;#039;\\\\&amp;#039;&lt;br /&gt;
            else:&lt;br /&gt;
                out += chr(a)&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
            pb = True&lt;br /&gt;
            out += &amp;#039;\033[9%sm&amp;#039; % ((i % 2) + 1)&lt;br /&gt;
            t = table.get(a)&lt;br /&gt;
            if t:&lt;br /&gt;
                out += &amp;#039;\\%s&amp;#039; % t&lt;br /&gt;
            else:&lt;br /&gt;
                out += &amp;#039;\\x%02x&amp;#039; % a&lt;br /&gt;
&lt;br /&gt;
    if pb:&lt;br /&gt;
        out += &amp;#039;\033[39m&amp;#039;&lt;br /&gt;
    out += &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
def formatbytes(d):&lt;br /&gt;
    if isatty:&lt;br /&gt;
        return (highlight(d))&lt;br /&gt;
    else:&lt;br /&gt;
        return (ascii(d))&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
isatty = sys.stdout.isatty()&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    if len(sys.argv) not in (4, 5):&lt;br /&gt;
        exit(&amp;#039;Usage %s host connectPort listenPort&amp;#039; % sys.argv[0]);&lt;br /&gt;
&lt;br /&gt;
    interface = sys.argv[4] if len(sys.argv) == 5 else &amp;#039;127.0.0.1&amp;#039;&lt;br /&gt;
    reactor.listenTCP(int(sys.argv[3]), ServerFactory(), interface=interface)&lt;br /&gt;
    reactor.run()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Derg</name></author>
	</entry>
</feed>