old_contents: from __future__ import print_function
  import sys, json
  from twisted.python import log
  from twisted.internet import reactor
  from .transcribe import Wormhole
  from .. import public_relay
  
  APPID = "lothar.com/wormhole/text-xfer"
  
  w = Wormhole(APPID, public_relay.RENDEZVOUS_RELAY)
  
  if sys.argv[1] == "send-text":
      message = sys.argv[2]
      data = json.dumps({"message": message}).encode("utf-8")
      d = w.get_code()
      def _got_code(code):
          print("code is:", code)
          return w.send_data(data)
      d.addCallback(_got_code)
      def _sent(_):
          return w.get_data()
      d.addCallback(_sent)
      def _got_data(them_bytes):
          them_d = json.loads(them_bytes.decode("utf-8"))
          if them_d["message"] == "ok":
              print("text sent")
          else:
              print("error sending text: %r" % (them_d,))
      d.addCallback(_got_data)
  elif sys.argv[1] == "receive-text":
      code = sys.argv[2]
      w.set_code(code)
      d = w.get_data()
      def _got_data(them_bytes):
          them_d = json.loads(them_bytes.decode("utf-8"))
          if "error" in them_d:
              print("ERROR: " + them_d["error"], file=sys.stderr)
              return 1
          print(them_d["message"])
          data = json.dumps({"message": "ok"}).encode("utf-8")
          return w.send_data(data)
      d.addCallback(_got_data)
  else:
      raise ValueError("bad command")
  d.addCallback(w.close)
  d.addCallback(lambda _: reactor.stop())
  d.addErrback(log.err)
  reactor.run()
  
new_contents: from __future__ import print_function
  import sys, json
  from twisted.python import log
  from twisted.internet import reactor
  from .transcribe import Wormhole
  from .. import public_relay
  
  APPID = b"lothar.com/wormhole/text-or-file-xfer"
  
  w = Wormhole(APPID, public_relay.RENDEZVOUS_RELAY)
  
  if sys.argv[1] == "send":
      message = sys.argv[2]
      data = json.dumps({"message": message}).encode("utf-8")
      d = w.get_code()
      def _got_code(code):
          print("code is:", code)
          return w.send_data(data)
      d.addCallback(_got_code)
      def _sent(_):
          return w.get_data()
      d.addCallback(_sent)
      def _got_data(them_bytes):
          them_d = json.loads(them_bytes.decode("utf-8"))
          if them_d["message_ack"] == "ok":
              print("text sent")
          else:
              print("error sending text: %r" % (them_d,))
      d.addCallback(_got_data)
  elif sys.argv[1] == "receive":
      code = sys.argv[2]
      w.set_code(code)
      d = w.get_data()
      def _got_data(them_bytes):
          them_d = json.loads(them_bytes.decode("utf-8"))
          if "error" in them_d:
              print("ERROR: " + them_d["error"], file=sys.stderr)
              raise RuntimeError
          if "file" in them_d:
              print("they're trying to send us a file, which I don't handle")
              data = json.dumps({"error": "not capable of receiving files"})
              d1 = w.send_data(data.encode("utf-8"))
              d1.addCallback(lambda _: RuntimeError())
              return d1
          if not "message" in them_d:
              print("I don't know what they're offering\n")
              print(them_d)
              data = json.dumps({"error": "huh?"})
              d1 = w.send_data(data.encode("utf-8"))
              d1.addCallback(lambda _: RuntimeError())
              return d1
          print(them_d["message"])
          data = json.dumps({"message_ack": "ok"})
          d1 = w.send_data(data.encode("utf-8"))
          d1.addCallback(lambda _: 0)
          return d1
      d.addCallback(_got_data)
  else:
      raise ValueError("bad command")
  
  d.addBoth(w.close)
  rc = []
  def _success(res):
      rc.append(res)
  def _fail(f):
      log.err(f)
      rc.append(1)
  d.addCallbacks(_success, _fail)
  d.addCallback(lambda _: reactor.stop())
  reactor.run()
  sys.exit(rc[0])
  
subject: update to match merged file/text commands