1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6236dae4SAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 3*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker# 10*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker# 12*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker# 16*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker# 20*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker# 23*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker# 25*6236dae4SAndroid Build Coastguard Worker########################################################################### 26*6236dae4SAndroid Build Coastguard Worker# 27*6236dae4SAndroid Build Coastguard Workerimport logging 28*6236dae4SAndroid Build Coastguard Workerimport socket 29*6236dae4SAndroid Build Coastguard Workerfrom typing import Dict 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Workerlog = logging.getLogger(__name__) 32*6236dae4SAndroid Build Coastguard Worker 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Workerdef alloc_ports(port_specs: Dict[str, int]) -> Dict[str, int]: 35*6236dae4SAndroid Build Coastguard Worker ports = {} 36*6236dae4SAndroid Build Coastguard Worker socks = [] 37*6236dae4SAndroid Build Coastguard Worker for name, ptype in port_specs.items(): 38*6236dae4SAndroid Build Coastguard Worker try: 39*6236dae4SAndroid Build Coastguard Worker s = socket.socket(type=ptype) 40*6236dae4SAndroid Build Coastguard Worker s.bind(('', 0)) 41*6236dae4SAndroid Build Coastguard Worker ports[name] = s.getsockname()[1] 42*6236dae4SAndroid Build Coastguard Worker socks.append(s) 43*6236dae4SAndroid Build Coastguard Worker except Exception as e: 44*6236dae4SAndroid Build Coastguard Worker raise e 45*6236dae4SAndroid Build Coastguard Worker for s in socks: 46*6236dae4SAndroid Build Coastguard Worker s.close() 47*6236dae4SAndroid Build Coastguard Worker return ports 48