1 from twisted.internet import protocol, reactor |
1 from twisted.internet import protocol, reactor |
2 from twisted.python import log |
2 from twisted.python import log |
3 from datetime import datetime |
3 from datetime import datetime |
|
4 import sys |
4 |
5 |
5 import buffer |
6 import buffer |
6 |
7 |
7 PORT = 34888 |
8 PORT = 34888 |
8 SERVER_HOST = "127.0.0.1" |
9 SERVER_HOST = "127.0.0.1" |
|
10 |
|
11 from api_secret import secret |
9 |
12 |
10 class ModuleInfo (object) : |
13 class ModuleInfo (object) : |
11 """ |
14 """ |
12 Some info about a module |
15 Some info about a module |
13 """ |
16 """ |
94 self.factory.nexus.unregisterModule(self.module, reason.getErrorMessage()) |
97 self.factory.nexus.unregisterModule(self.module, reason.getErrorMessage()) |
95 |
98 |
96 def on_module_init (self, i) : |
99 def on_module_init (self, i) : |
97 self._assert(not self.module, "module_init with non-None self.module") |
100 self._assert(not self.module, "module_init with non-None self.module") |
98 |
101 |
|
102 peer_secret = i.readVarLen('B') |
|
103 |
|
104 self._assert(peer_secret == secret, "Mismatching API secrets!") |
|
105 |
99 m = ModuleInfo() |
106 m = ModuleInfo() |
100 |
107 |
101 m.name = i.readVarLen('B') |
108 m.name = i.readVarLen('B') |
102 m.version = i.readItem('H') |
109 m.version = i.readItem('H') |
103 |
110 |
130 |
137 |
131 def logPrefix (self) : |
138 def logPrefix (self) : |
132 if self.module : |
139 if self.module : |
133 return str(self.module) |
140 return str(self.module) |
134 else : |
141 else : |
135 return super(APIProtocol, self).logPrefix() |
142 return super(ServerProtocol, self).logPrefix() |
136 |
143 |
137 class ClientProtocol (buffer.StreamProtocol, protocol.Protocol) : |
144 class ClientProtocol (buffer.StreamProtocol, protocol.Protocol) : |
138 RECV_COMMANDS = SERVER_COMMANDS |
145 RECV_COMMANDS = SERVER_COMMANDS |
139 SEND_COMMANDS = CLIENT_COMMANDS |
146 SEND_COMMANDS = CLIENT_COMMANDS |
140 |
147 |
141 def connectionMade (self) : |
148 def connectionMade (self) : |
142 log.msg("Connected to API server, sending module init message") |
149 log.msg("Connected to API server, sending module init message") |
143 |
150 |
144 o = self.startCommand('module_init') |
151 o = self.startCommand('module_init') |
|
152 o.writeVarLen('B', secret) |
145 o.writeVarLen('B', self.factory.name) |
153 o.writeVarLen('B', self.factory.name) |
146 o.writeItem("H", self.factory.version) |
154 o.writeItem("H", self.factory.version) |
147 buffer.writeStringStream(o, 'B', self.factory.event_types) |
155 buffer.writeStringStream(o, 'B', self.factory.event_types) |
148 |
156 |
149 self.send(o) |
157 self.send(o) |
169 def __init__ (self) : |
177 def __init__ (self) : |
170 log.msg("Connecting to %s:%d" % (SERVER_HOST, PORT)) |
178 log.msg("Connecting to %s:%d" % (SERVER_HOST, PORT)) |
171 reactor.connectTCP(SERVER_HOST, PORT, self) |
179 reactor.connectTCP(SERVER_HOST, PORT, self) |
172 |
180 |
173 self.connection = None |
181 self.connection = None |
|
182 |
|
183 def run (self) : |
|
184 log.startLogging(sys.stderr) |
|
185 |
|
186 reactor.run() |
174 |
187 |
175 def connected (self, connection) : |
188 def connected (self, connection) : |
176 log.msg("Connected!") |
189 log.msg("Connected!") |
177 self.connection = connection |
190 self.connection = connection |
178 |
191 |