X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=o2ims%2Fservice%2Fcommand%2Fregistration_handler.py;h=aead4cc5a5a306fbbee7e2e07f8762ee42facd71;hb=3f76188e406303fb0892d7599c91ca811774a798;hp=77ab28b9633976899783a8055b6d593082af905e;hpb=562c275195cc03987cbe4bc35fca98364d758c7d;p=pti%2Fo2.git diff --git a/o2ims/service/command/registration_handler.py b/o2ims/service/command/registration_handler.py index 77ab28b..aead4cc 100644 --- a/o2ims/service/command/registration_handler.py +++ b/o2ims/service/command/registration_handler.py @@ -1,4 +1,4 @@ -# Copyright (C) 2021 Wind River Systems, Inc. +# Copyright (C) 2021-2022 Wind River Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,14 +16,17 @@ import json # import asyncio # import requests -import http.client -import ssl + from urllib.parse import urlparse from retry import retry from o2common.service.unit_of_work import AbstractUnitOfWork from o2common.config import config, conf - +from o2common.service.command.handler import get_https_conn_default +from o2common.service.command.handler import get_http_conn +from o2common.service.command.handler import get_https_conn_selfsigned +from o2common.service.command.handler import post_data +import ssl from o2ims.domain import commands from o2ims.domain.subscription_obj import NotificationEventEnum @@ -55,9 +58,11 @@ class RegIMSToSMOExp(Exception): def register_smo(uow, ocloud_data): - call_res = call_smo(ocloud_data) + call_res, status = call_smo(ocloud_data) logger.debug('Call SMO response is {}'.format(call_res)) - if call_res is not True: + if call_res is True: + logger.info('Register to smo success response is {}'.format(status)) + else: raise RegIMSToSMOExp('Register o2ims to SMO failed') # TODO: record the result for the smo register @@ -96,41 +101,24 @@ def call_smo(reg_data: dict): conf.DEFAULT.smo_register_url, callback_data)) o = urlparse(conf.DEFAULT.smo_register_url) if o.scheme == 'https': - sslctx = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH) - sslctx.check_hostname = True - sslctx.verify_mode = ssl.CERT_REQUIRED - sslctx.load_default_certs() - conn = http.client.HTTPSConnection(o.netloc, context=sslctx) + conn = get_https_conn_default(o.netloc) else: - conn = http.client.HTTPConnection(o.netloc) + conn = get_http_conn(o.netloc) try: return post_data(conn, o.path, callback_data) except ssl.SSLCertVerificationError as e: - logger.info('post data except: {}'.format(e)) + logger.info('Register to smo with trusted ca failed: {}'.format(e)) if 'self signed' in str(e): - sslctx = ssl.create_default_context( - purpose=ssl.Purpose.SERVER_AUTH) - smo_ca_path = config.get_smo_ca_config_path() - sslctx.load_verify_locations(smo_ca_path) - sslctx.check_hostname = False - sslctx.verify_mode = ssl.CERT_REQUIRED - conn = http.client.HTTPSConnection(o.netloc, context=sslctx) - return post_data(conn, o.path, callback_data) + conn = get_https_conn_selfsigned(o.netloc) + try: + return post_data(conn, o.path, callback_data) + except Exception as e: + logger.info( + 'Register to smo with self-signed ca failed: {}'.format(e)) + # TODO: write the status to extension db table. + return False, None + return False, None except Exception as e: - logger.info('except: {}'.format(e)) - return False - - -def post_data(conn, path, data): - headers = {'Content-type': 'application/json'} - conn.request('POST', path, data, headers) - resp = conn.getresponse() - data = resp.read().decode('utf-8') - # json_data = json.loads(data) - if resp.status == 202 or resp.status == 200: - logger.info('Registrer to SMO successed, response code {} {}, data {}'. - format(resp.status, resp.reason, data)) - return True - logger.error('Response code is: {}'.format(resp.status)) - return False + logger.critical('Register to smo except: {}'.format(e)) + return False, None