code: def getProtocolClasses(superclass=message.Message):
      
      # We keep a manual list of the superclasses that we define here
      # so we can filter them out when we're getting the protocol
      # classes.
      superclasses = set([message.Message])
      thisModule = sys.modules[__name__]
      subclasses = []
      for name, class_ in inspect.getmembers(thisModule):
          if ((inspect.isclass(class_) and
                  issubclass(class_, superclass) and
                  class_ not in superclasses)):
              subclasses.append(class_)
      return subclasses
docs: Returns all the protocol classes that are subclasses of the
      specified superclass. Only 'leaf' classes are returned,
      corresponding directly to the classes defined in the protocol.