コード例 #1
0
    def getEvents(self):
        """
        Get Events off the DXL fabric
        """

        ## Create Web API request queue
        SERVICE_TYPE = "/opendxl/webapi"
        REQUEST_TOPIC = SERVICE_TYPE + "/requests"

        class MyRequestCallback(RequestCallback):
            def on_request(self, request):
                # Extract
                print("Service recieved request payload: " +
                      request.payload.decode())

        # Create the client
        with DxlClient(config) as client:
            # Connect to the fabric
            client.connect()

            ## Register with ePO and add the request topic
            info = ServiceRegistrationInfo(client, SERVICE_TYPE)
            client.register_service_sync(info, 10)
            info.add_topic(REQUEST_TOPIC, MyRequestCallback())

            ## Get list of vendorIDs and subscribe to each topic
            #vendorList = getVendorList()
            #for vendor in vendorList:
            #    client.add_event_callback(vendorsDict[vendor]['topic'], ChgRepCallback())

            client.disconnect()
            ## Listent to Events
            print("Listening for Events")
            while not thread_stop_event.isSet():
                time.sleep(self.delay)
コード例 #2
0
    def __init__(self, client):
        self._client = client

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client, "/opendxl/mocktieserver")
        self._mock_event = None
コード例 #3
0
    def __init__(self, client):
        self._client = client

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            VirusTotalApiClient._SERVICE_TYPE,
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5
コード例 #4
0
    def __init__(self, client, id_number=0):
        self._client = client
        self.id_number = id_number

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            "/mcafee/service/epo/remote",
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5
コード例 #5
0
 def __register_service(self):
     registration = ServiceRegistrationInfo(self.dxl_conn,
                                            self.__config.type)
     for name, constructor in SERVICE_ENDPOINTS:
         topic = '{}/{}'.format(self.__config.type, name)
         registration.add_topic(
             topic,
             constructor(
                 self.__monitoring_ctx.register(
                     ServiceEndpointMonitor('endpoint.' + topic)), self))
     self.dxl_conn.register_service_sync(registration, 2)
コード例 #6
0
    def initialize(self):
        self.dxl.connect()

        service_reg = ServiceRegistrationInfo(self.dxl, self.__config.type)
        # Register the endpoints that the service provides
        for endpoint in self.__config.endpoints:
            topic = '{}/{}'.format(self.__config.type, endpoint.name)
            monitor = self.__monitoring_ctx.register(
                ServiceEndpointMonitor('endpoints.{}'.format(topic)))
            service_reg.add_topic(topic, Dispatcher(endpoint, monitor, self))

        self.dxl.register_service_sync(service_reg, 2)
コード例 #7
0
ファイル: switchboard.py プロジェクト: siim-/roboblue
 def __register_service(self):
     """
     Create dispatchers for each endpoint provided by the GRR API and register the service with the OpenDXL service
     fabric
     :return: None
     """
     svc = ServiceRegistrationInfo(self.dxlc, self.__config.service_type)
     for endpoint in self.__endpoints:
         topic = self.__config.service_type + '/' + endpoint.name
         svc.add_topic(topic,
                       Dispatcher(endpoint, self,
                                  self.__register_monitor(ServiceEndpointMonitor('endpoints.' + topic))))
     self.dxlc.register_service_sync(svc, 5)
コード例 #8
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # Register service
        logger.info("Registering service: %s", "apivoidservice")
        service = ServiceRegistrationInfo(self._dxl_client, self.SERVICE_TYPE)

        for topic_key in self.REQ_TOPICS_DICT:
            topic = topic_key
            # Register request callback for this API call
            logger.info("Registering request callbacks: %s", topic)
            self.add_request_callback(
                service,
                topic,
                ApiVoidCallback(self, self.REQ_TOPICS_DICT[topic_key]),
                False
            )

            topic += "/" + self.REQ_TOPIC_SUFFIX_STATS

            # Register "Stats Remained" for this API call
            logger.info("Registering request callback: %s", topic)
            self.add_request_callback(
                service,
                topic,
                ApiVoidCallback(self),
                False
            )

        self.register_service(service)
 def run_sample_with_service(self, sample_file, sample_args, storage_dir):
     config = DxlClientConfig.create_dxl_config_from_file(
         self._CONFIG_FILE)
     with DxlClient(config) as dxl_client:
         dxl_client.connect()
         info = ServiceRegistrationInfo(
             dxl_client, "test-file-transfer-service")
         info.add_topic(FileTransferClient._DEFAULT_FILE_SEND_TOPIC,
                        TestFileStoreRequestCallback(dxl_client,
                                                     storage_dir))
         dxl_client.register_service_sync(
             info, self._SERVICE_REG_INFO_TIMEOUT)
         mock_print = self.run_sample(sample_file, sample_args)
         dxl_client.unregister_service_sync(
             info, self._SERVICE_REG_INFO_TIMEOUT)
     return mock_print
コード例 #10
0
 def on_register_services(self):
     """
     Invoked when services should be registered with the application
     """
     # Register service 'fake_mcafee_service'
     logger.info("Registering service: {0}".format("fake_mcafee_service"))
     service = ServiceRegistrationInfo(self._dxl_client, "/fake/mcafee/services")
     mar_topic = "/mcafee/mar/service/api/search"
     logger.info("Registering request callback: {0}".format(mar_topic))
     self.add_request_callback(
         service,
         mar_topic,
         FakeMarApiSearchRequestCallback(
             self,
             self._mar_status_checks_until_request_finished),
         True)
     tie_callback = FakeTieCallback(self)
     for tie_topic in [FakeTieCallback.TIE_GET_AGENTS_FOR_FILE_TOPIC,
                       FakeTieCallback.TIE_GET_FILE_REPUTATION_TOPIC,
                       FakeTieCallback.TIE_SET_FILE_REPUTATION_TOPIC,
                       FakeTieCallback.TIE_GET_AGENTS_FOR_CERT_TOPIC,
                       FakeTieCallback.TIE_GET_CERT_REPUTATION_TOPIC,
                       FakeTieCallback.TIE_SET_CERT_REPUTATION_TOPIC]:
         logger.info("Registering request callback: {0}".format(tie_topic))
         self.add_request_callback(service, tie_topic, tie_callback, True)
     self.register_service(service)
コード例 #11
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # Register service
        service = ServiceRegistrationInfo(self.client, self.DXL_SERVICE_TYPE)
        for request_topic in self._epo_by_topic:
            service.add_topic(
                str(request_topic),
                _EpoRequestCallback(self.client, self._epo_by_topic))

        logger.info("Registering service ...")
        self.client.register_service_sync(
            service, self.DXL_SERVICE_REGISTRATION_TIMEOUT)
        logger.info("Service registration succeeded.")

        self._dxl_service = service
コード例 #12
0
    def __init__(self,
                 client,
                 id_number=0,
                 use_commands_service=True,
                 user_authorized=True):
        self._client = client
        self.id_number = id_number
        self.use_commands_service = use_commands_service
        self.user_authorized = user_authorized

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            "/mcafee/service/epo/commands"
            if self.use_commands_service else "/mcafee/service/epo/remote"
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5
        if self.use_commands_service:
            self._service_registration_info.metadata = \
                {"epoGuid": LOCAL_TEST_SERVER_NAME + str(id_number)}
コード例 #13
0
class MockEpoServer(object):
    def __init__(self,
                 client,
                 id_number=0,
                 use_commands_service=True,
                 user_authorized=True):
        self._client = client
        self.id_number = id_number
        self.use_commands_service = use_commands_service
        self.user_authorized = user_authorized

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            "/mcafee/service/epo/commands"
            if self.use_commands_service else "/mcafee/service/epo/remote"
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5
        if self.use_commands_service:
            self._service_registration_info.metadata = \
                {"epoGuid": LOCAL_TEST_SERVER_NAME + str(id_number)}

    def __enter__(self):
        mock_callback = FakeEpoServerCallback(self._client,
                                              self.id_number,
                                              self.use_commands_service,
                                              self.user_authorized)

        self._service_registration_info.add_topic(
            mock_callback.epo_request_topic,
            mock_callback
        )

        self._client.register_service_sync(self._service_registration_info, 10)

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._client.unregister_service_sync(self._service_registration_info,
                                             10)
コード例 #14
0
ファイル: app.py プロジェクト: Homas/ActiveTrustDXL
 def on_register_services(self):
     """
     Invoked when services should be registered with the application
     """
     # Register service 'tide_srv'
     logger.info("Registering service: {0}".format("tide_srv"))
     service = ServiceRegistrationInfo(self._dxl_client,
                                       "/infoblox/activetrust/tide")
     logger.info("Registering request callback: {0}".format("tide_req"))
     self.add_request_callback(service, "/infoblox/activetrust/tide",
                               TIDECallback(self), True)
     self.register_service(service)
     # Register service 'tide_lookup_srv'
     logger.info("Registering service: {0}".format("tide_lookup_srv"))
     service = ServiceRegistrationInfo(self._dxl_client,
                                       "/infoblox/activetrust/tide_lookup")
     logger.info(
         "Registering request callback: {0}".format("tide_lookup_req"))
     self.add_request_callback(service, "/infoblox/activetrust/tide_lookup",
                               TIDELookupCallback(self), True)
     self.register_service(service)
     # Register service 'dossier_srv'
     logger.info("Registering service: {0}".format("dossier_srv"))
     service = ServiceRegistrationInfo(self._dxl_client,
                                       "/infoblox/activetrust/dossier")
     logger.info("Registering request callback: {0}".format("dossier_req"))
     self.add_request_callback(service, "/infoblox/activetrust/dossier",
                               DossierCallback(self), True)
     self.register_service(service)
     # Register service 'dossier_lookup_srv'
     logger.info("Registering service: {0}".format("dossier_lookup_srv"))
     service = ServiceRegistrationInfo(
         self._dxl_client, "/infoblox/activetrust/dossier_lookup")
     logger.info(
         "Registering request callback: {0}".format("dossier_lookup_req"))
     self.add_request_callback(service,
                               "/infoblox/activetrust/dossier_lookup",
                               DossierLookupCallback(self), True)
     self.register_service(service)
コード例 #15
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # Register service 'vtapiservice'
        logger.info("Registering service: {0}".format("vtapiservice"))
        service = ServiceRegistrationInfo(self._dxl_client, self.SERVICE_TYPE)

        logger.info("Registering request callback: {0}".format("file_rescan"))
        self.add_request_callback(
            service, self.REQ_TOPIC_FILE_RESCAN,
            VirusTotalApiRequestCallback(
                self, False, [VirusTotalApiRequestCallback.PARAM_RESOURCE]),
            False)

        logger.info("Registering request callback: {0}".format("file_report"))
        self.add_request_callback(
            service, self.REQ_TOPIC_FILE_REPORT,
            VirusTotalApiRequestCallback(
                self, True, [VirusTotalApiRequestCallback.PARAM_RESOURCE]),
            False)

        logger.info("Registering request callback: {0}".format("url_scan"))
        self.add_request_callback(
            service, self.REQ_TOPIC_URL_SCAN,
            VirusTotalApiRequestCallback(
                self, False, [VirusTotalApiRequestCallback.PARAM_URL]), False)

        logger.info("Registering request callback: {0}".format("url_report"))
        self.add_request_callback(
            service, self.REQ_TOPIC_URL_REPORT,
            VirusTotalApiRequestCallback(
                self, False, [VirusTotalApiRequestCallback.PARAM_RESOURCE]),
            False)

        logger.info(
            "Registering request callback: {0}".format("ipaddress_report"))
        self.add_request_callback(
            service, self.REQ_TOPIC_IP_ADDRESS_REPORT,
            VirusTotalApiRequestCallback(
                self, True, [VirusTotalApiRequestCallback.PARAM_IP]), False)

        logger.info(
            "Registering request callback: {0}".format("domain_report"))
        self.add_request_callback(
            service, self.REQ_TOPIC_DOMAIN_REPORT,
            VirusTotalApiRequestCallback(
                self, True, [VirusTotalApiRequestCallback.PARAM_DOMAIN]),
            False)

        self.register_service(service)
コード例 #16
0
    def _dxl_connect(self):
        """
        Attempts to connect to the DXL fabric and register the ePO DXL service
        """

        # Connect to fabric
        config = DxlClientConfig.create_dxl_config_from_file(
            self._dxlclient_config_path)
        config.incoming_message_thread_pool_size = self._incoming_thread_count
        config.incoming_message_queue_size = self._incoming_queue_size
        logger.info(
            "Incoming message configuration: queueSize={0}, threadCount={1}".
            format(config.incoming_message_queue_size,
                   config.incoming_message_thread_pool_size))

        client = DxlClient(config)
        logger.info("Attempting to connect to DXL fabric ...")
        client.connect()
        logger.info("Connected to DXL fabric.")

        try:
            # Register service
            service = ServiceRegistrationInfo(client, self.DXL_SERVICE_TYPE)
            for request_topic in self._epo_by_topic:
                service.add_topic(
                    str(request_topic),
                    _EpoRequestCallback(client, self._epo_by_topic))

            logger.info("Registering service ...")
            client.register_service_sync(service,
                                         self.DXL_SERVICE_REGISTRATION_TIMEOUT)
            logger.info("Service registration succeeded.")
        except:
            client.destroy()
            raise

        self._dxl_client = client
        self._dxl_service = service
コード例 #17
0
 def on_register_services(self):
     """
     Invoked when services should be registered with the application
     """
     # Register service 'maxmind_geolocation_service'
     logger.info("Registering service: %s", "maxmind_geolocation_service")
     service = ServiceRegistrationInfo(
         self._dxl_client, "/opendxl-maxmind/service/geolocation")
     logger.info("Registering request callback: %s",
                 "maxmind_service_hostlookup")
     self.add_request_callback(
         service, "/opendxl-maxmind/service/geolocation/host_lookup",
         MaxMindHostLookupRequestCallback(self), True)
     self.register_service(service)
コード例 #18
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # Register service 'nmapservice'
        logger.info("Registering service: {0}".format("nmapservice"))
        service = ServiceRegistrationInfo(self._dxl_client, self.SERVICE_TYPE)

        # See callback format
        logger.info("Registering request callback: {0}".format("Scan report"))
        self.add_request_callback(service, self._REQ_SCAN,
                                  NmapServiceRequestCallback(self, dict), True)

        self.register_service(service)
コード例 #19
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        callbacks = {
            "create_case": TheHiveCreateCaseRequestCallback,
            "create_case_task": TheHiveCreateCaseTaskRequestCallback,
            "create_case_observable":
            TheHiveCreateCaseObservableRequestCallback,
            "get_case": TheHiveGetCaseRequestCallback,
            "get_case_task": TheHiveGetCaseTaskRequestCallback,
            "get_case_observable": TheHiveGetCaseObservableRequestCallback,
            "search_case": TheHiveSearchCaseRequestCallback,
            "search_case_task": TheHiveSearchCaseTaskRequestCallback,
            "search_case_observable":
            TheHiveSearchCaseObservableRequestCallback,
            "create_alert": TheHiveCreateAlertRequestCallback,
            "get_alert": TheHiveGetAlertRequestCallback,
            "search_alert": TheHiveSearchAlertRequestCallback
        }

        # Register service 'thehive_service'
        logger.info("Registering service: %s", "thehive_service")
        service = ServiceRegistrationInfo(self._dxl_client, self._SERVICE_TYPE)

        logger.info("Connecting to API URL: %s", self._api_url)
        thehive_client = TheHiveClient(self._dxl_client, self._api_url,
                                       self._api_principal, self._api_password,
                                       self._verify_certificate)

        for api_name in self._api_names:
            api_method = callbacks.get(api_name, None)
            if api_method:
                topic_name_end, _, topic_name_start = api_name.partition("_")
                topic_name = "{}{}/{}/{}".format(
                    self._SERVICE_TYPE,
                    "/{}".format(self._service_unique_id) \
                    if self._service_unique_id else "",
                    topic_name_start.replace("_", "/"),
                    topic_name_end)
                logger.info(
                    "Registering request callback: thehive_%s_requesthandler",
                    api_name)
                self.add_request_callback(
                    service, topic_name,
                    api_method(self._dxl_client, thehive_client), False)
            else:
                logger.warning("API name is invalid: %s", api_name)

        self.register_service(service)
コード例 #20
0
class MockEpoServer(object):
    def __init__(self, client, id_number=0):
        self._client = client
        self.id_number = id_number

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            "/mcafee/service/epo/remote",
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5

    def __enter__(self):
        mock_callback = FakeEpoServerCallback(self._client, self.id_number)

        self._service_registration_info.add_topic(
            mock_callback.epo_request_topic, mock_callback)

        self._client.register_service_sync(self._service_registration_info, 10)

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._client.unregister_service_sync(self._service_registration_info,
                                             10)
コード例 #21
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # Register service 'file_transfer_service'

        logger.info("Registering service: file_transfer_service")
        service = ServiceRegistrationInfo(self._dxl_client, self._SERVICE_TYPE)

        logger.info("Registering request callback: %s. Topic: %s.",
                    "file_transfer_service_file_store", self._store_topic)
        self.add_request_callback(
            service, self._store_topic,
            FileStoreRequestCallback(self.client, self._storage_dir,
                                     self._working_dir), False)

        self.register_service(service)
コード例 #22
0
    def on_register_services(self):
        """
        Invoked when services should be registered with the application
        """
        # For methods where "query" is the only required parameter (the
        # majority)
        query_param = ["query"]

        # List of callbacks to register. Each item's key is the name of the
        # service to register. The associated value for each item is a list
        # of parameters which are required when invoking the service.
        callbacks = OrderedDict(
            (("account_information", None), ("brand_monitor", query_param),
             ("domain_profile", query_param), ("domain_search", query_param),
             ("domain_suggestions", query_param), ("host_domains", ["ip"]),
             ("hosting_history", query_param), ("ip_monitor", query_param),
             ("ip_registrant_monitor",
              query_param), ("iris", None), ("name_server_monitor",
                                             query_param), ("parsed_whois",
                                                            query_param),
             ("phisheye", query_param), ("phisheye_term_list", None),
             ("registrant_monitor",
              query_param), ("reputation", query_param), ("reverse_ip", [
                  "domain"
              ]), ("reverse_ip_whois", None), ("reverse_name_server",
                                               query_param), ("reverse_whois",
                                                              query_param),
             ("whois", query_param), ("whois_history", query_param)))

        # Register service 'domaintools_service'
        logger.info("Registering service: domaintools_service")
        service = ServiceRegistrationInfo(
            self._dxl_client, "/opendxl-domaintools/service/domaintools")

        for service_name, required_params in callbacks.items():
            logger.info(
                "Registering request callback: domaintools_%s_requesthandler",
                service_name)
            self.add_request_callback(
                service, "{}/{}".format(self.SERVICE_TYPE, service_name),
                DomainToolsRequestCallback(self, service_name,
                                           required_params), False)

        self.register_service(service)
コード例 #23
0
# Create DXL configuration from file
config = DxlClientConfig.create_dxl_config_from_file(CONFIG_FILE)

# Create the client
with DxlClient(config) as client:
    # Connect to the fabric
    client.connect()

    class MyRequestCallback(RequestCallback):
        def on_request(self, request):
            # Extract
            print "Service recieved request payload: " + request.payload.decode(
            )
            # Create the response message
            res = Response(request)
            res.payload = "pong".encode()
            # Send the response
            client.send_event_response(res)

    # Create service reg object
    info = ServiceRegistrationInfo(client, "ScottoService")
    # Add topic for the service to repond to
    info.add_topic(SERVICE_TOPIC, MyRequestCallback())
    # Register the service with the fabric ( wait up to 10 seconds for registration to complete)
    client.register_service_sync(info, 10)
    logger.info("Ping Service is running ... ")

    while True:
        time.sleep(60)
コード例 #24
0
class MockTieServer(object):
    def __init__(self, client):
        self._client = client

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client, "/opendxl/mocktieserver")

    def __enter__(self):
        mock_callback = FakeTieServerCallback(self._client)

        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_GET_FILE_REPUTATION_TOPIC, mock_callback)
        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_GET_CERT_REPUTATION_TOPIC, mock_callback)
        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_SET_FILE_REPUTATION_TOPIC, mock_callback)
        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_SET_CERT_REPUTATION_TOPIC, mock_callback)
        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_GET_FILE_FIRST_REFS, mock_callback)
        self._service_registration_info.add_topic(
            dxltieclient.client.TIE_GET_CERT_FIRST_REFS, mock_callback)

        self._client.register_service_sync(self._service_registration_info, 10)

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._client.unregister_service_sync(self._service_registration_info,
                                             10)
コード例 #25
0
class MockVtService(object):

    mockvt_basic_test_topic = FakeVTServiceCallback.vt_basic_test_topic

    def __init__(self, client):
        self._client = client

        # Create DXL Service Registration object
        self._service_registration_info = ServiceRegistrationInfo(
            self._client,
            VirusTotalApiClient._SERVICE_TYPE,
        )
        self._service_registration_info._ttl_lower_limit = 5
        self._service_registration_info.ttl = 5

    def __enter__(self):
        mock_callback = FakeVTServiceCallback(self._client)

        self._service_registration_info.add_topic(
            MockVtService.mockvt_basic_test_topic, mock_callback)

        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_DOMAIN_REPORT, mock_callback)
        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_FILE_REPORT, mock_callback)
        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_FILE_RESCAN, mock_callback)
        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_IP_ADDRESS_REPORT, mock_callback)
        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_URL_REPORT, mock_callback)
        self._service_registration_info.add_topic(
            VirusTotalApiClient._REQ_TOPIC_URL_SCAN, mock_callback)

        self._client.register_service_sync(self._service_registration_info, 10)

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._client.unregister_service_sync(self._service_registration_info,
                                             10)
コード例 #26
0
            message_type = j["message_type"]

            if message_type == MessageType.INITIATE_ASSESSMENT.value:
                iam = InitiateAssessmentMessage()
                iam.parse(event.payload.decode())
                store_request(iam)
            elif message_type == MessageType.REPORT_RESULTS.value:
                rrsm = ReportResultsMessage()
                rrsm.parse(event.payload.decode())
                store_results(rrsm)
            elif message_type == MessageType.REGISTRATION.value:
                rm = RegistrationMessage()
                rm.parse(event.payload.decode())
                store_assets(rm)
            else:
                store_arbitrary_data(event.payload.decode())

    # Prepare service registration information
    info = ServiceRegistrationInfo(client, "/scap/repository")

    # Connect to the message fabric and add listeners for query requests and
    # storage requests
    client.connect()
    client.add_event_callback(EVENT_STORE_DATA_TOPIC, StoreDataEventCallback())
    info.add_topic(SERVICE_REPOSITORY_QUERY_TOPIC, QueryRequestCallback())
    client.register_service_sync(info, 10)

    # Wait forever
    while True:
        time.sleep(1)
コード例 #27
0
ファイル: manager.py プロジェクト: ekmixon/scap-v2-prototype
                assessment_requests.append(cam)
            # Cancel request didn't come from originating application so ignore
            else:
                logger.info("Ignoring cancel request " + cam.transaction_id +
                            " for application " + cam.requestor_id)

            # Send request acknowledgement message with the transaction
            # id that was cancelled
            res = Response(request)
            ram = RequestAcknowledgementMessage()
            ram.transaction_id = cam.transaction_id
            res.payload = (ram.to_json()).encode()
            client.send_response(res)

    # Prepare service registration information
    info = ServiceRegistrationInfo(client, "/scap/manager")

    # Have manager provide assessment request, cancel assessment, and query services
    info.add_topic(SERVICE_INITIATE_ASSESSMENT_TOPIC,
                   InitiateAssessmentCallback())
    info.add_topic(SERVICE_CANCEL_ASSESSMENT_TOPIC, CancelAssessmentCallback())

    # Connect to the message fabric and register the service
    client.connect()
    client.register_service_sync(info, 10)

    # Wait forever
    while True:
        # Process all initiate assessment requests that were received
        while assessment_requests:
            ar = assessment_requests.pop(0)
コード例 #28
0
                # Create the response message
                response = Response(request)
                # Populate the response payload
                response.payload = weather_response.encode(encoding="UTF-8")
                # Send the response
                client.send_response(response)

            except Exception as ex:
                print str(ex)
                # Send error response
                client.send_response(
                    ErrorResponse(
                        request,
                        error_message=str(ex).encode(encoding="UTF-8")))

    # Create service registration object
    info = ServiceRegistrationInfo(client, SERVICE_NAME)

    # Add a topic for the service to respond to
    info.add_topic(SERVICE_CURRENT_WEATHER_TOPIC, CurrentWeatherCallback())

    # Register the service with the fabric (wait up to 10 seconds for registration to complete)
    client.register_service_sync(info, 10)

    logger.info("Weather service is running...")

    # Wait forever
    while True:
        time.sleep(60)
    sys.stdout.write("\rPercent complete: {}%".format(
        int((segment_number / total_segments) *
            100) if total_segments else 100))
    sys.stdout.flush()


# Create the client
with DxlClient(config) as dxl_client:

    # Connect to the fabric
    dxl_client.connect()

    logger.info("Connected to DXL fabric.")

    # Create service registration object
    info = ServiceRegistrationInfo(dxl_client, "myService")

    # Add a topic for the service to respond to
    info.add_topic(SERVICE_TOPIC,
                   FileStoreRequestCallback(dxl_client, STORAGE_DIR))

    # Register the service with the fabric (wait up to 10 seconds for
    # registration to complete)
    dxl_client.register_service_sync(info, 10)

    # Create client wrapper
    file_transfer_client = FileTransferClient(dxl_client, SERVICE_TOPIC)

    start = time.time()

    # Invoke the send file request method to store the file on the server
コード例 #30
0
                logger.info(
                    "Service Provider - Creating Response for Request ID %s on %s",
                    request.message_id, request.destination_topic)
                response = Response(request)

                # Encode string payload as UTF-8
                response.payload = "Sample Response Payload".encode()

                # Send the Response back
                logger.info(
                    "Service Provider - Sending Response to Request ID: %s on %s",
                    response.request_message_id, request.destination_topic)
                client.send_response(response)

        # Create DXL Service Registration object
        service_registration_info = ServiceRegistrationInfo(
            client, "/mycompany/myservice")

        # Add a topic for the service to respond to
        service_registration_info.add_topic(SERVICE_TOPIC, MyRequestCallback())

        # Register the service with the DXL fabric (with a wait up to 10 seconds for registration to complete)
        logger.info("Registering service.")
        client.register_service_sync(service_registration_info, 10)

        # Wait for DXL Requests
        while True:
            print "   Enter 9 to quit"
            input = raw_input("   Enter value: ")

            try:
                option = int(input)