Чтение из сокета SSL в Twisted

Я пытаюсь реализовать клиент SSL в Twisted, который просто должен подключаться к сокету и читать двоичные данные (в частности, кортежи данных). Я довел код до такой степени, что кажется, что он успешно подключается и отключается, но никакие данные никогда не считываются из сокета.

class FeedbackHandler(LineReceiver):
  MAX_LENGTH = 1024*1024

  def connectionMade(self):
    log.debug('feedbackHandler connectionMade')

  def rawDataReceived(self, data):
    log.debug('feedbackHandler rawDataReceived %s' % binascii.hexlify(data))
    self.io.write(data)

  def lineReceived(self, data):
    log.debug('feedbackHandler lineReceived %s' % binascii.hexlify(data))
    self.io.write(data)

  def connectionLost(self, reason):
    log.debug('feedbackHandler connectionLost %s' % reason)
    self.deferred.callback(self.io.getValue())
    io.close()

И код, который его запускает:

factory = self.clientProtocolFactory() # a ClientFactory instance
context = self.getContextFactory(CERT_FILE) # a ClientContextFactory 
reactor.connectSSL(server, port, factory, context)

Однако при запуске ни один из полученных методов не вызывается, независимо от setRawMode. С сервера просто нечего читать? connectionMade и connectionLost вызываются сразу при подключении и завершаются экземпляром ошибки ConnectionDone.


person samuraisam    schedule 02.01.2010    source источник
comment
Другой конец отправляет что-то после установления соединения?   -  person iny    schedule 03.01.2010
comment
если self.io является экземпляром StringIO, то вы должны вызывать self.io.getvalue() вместо self.io.getValue().   -  person jfs    schedule 09.06.2010


Ответы (1)


Взгляните на ssldump или wireshark. Поскольку вы не видите никаких данных, доставляемых на этом уровне, вам следует перейти на один из этих инструментов. Один из них может показать ошибку согласования SSL, или то, что сервер никогда не отправляет байты, или что-то еще, о чем трудно догадаться, основываясь только на том, что вы уже обнаружили. У вас все еще может не быть полного ответа, но у вас будет больше кусочков головоломки.

person Jean-Paul Calderone    schedule 04.01.2010