Esempio n. 1
0
    def do_GET_PARAMETER(self):
        print("GET_PARAMETER %s" % self.path)
        print(self.headers)
        params_res = {}
        content_len = int(self.headers["Content-Length"])
        if content_len > 0:
            body = self.rfile.read(content_len)

            params = body.splitlines()
            for p in params:
                if p == b"volume":
                    print("GET_PARAMETER: %s" % p)
                    if not DISABLE_VM:
                        params_res[p] = str(get_volume(AUDIO_DEVICE)).encode()
                    else:
                        print("Volume Management is disabled")
                else:
                    print("Ops GET_PARAMETER: %s" % p)
        if DISABLE_VM:
            res = b"volume: 0" + b"\r\n"
        else:
            res = b"\r\n".join(b"%s: %s" % (k, v)
                               for k, v in params_res.items()) + b"\r\n"
        self.send_response(200)
        self.send_header("Content-Length", len(res))
        self.send_header("Content-Type", HTTP_CT_PARAM)
        self.send_header("Server", self.version_string())
        self.send_header("CSeq", self.headers["CSeq"])
        self.end_headers()
        hexdump(res)
        self.wfile.write(res)
Esempio n. 2
0
def setup_global_structs(args):
    global sonos_one_info
    global sonos_one_setup
    global sonos_one_setup_data
    global second_stage_info
    global mdns_props

    sonos_one_info = {
        # 'OSInfo': 'Linux 3.10.53',
        # 'PTPInfo': 'OpenAVNU ArtAndLogic-aPTP-changes a5d7f94-0.0.1',
        'audioLatencies': [{
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'default',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'media',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'media',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 102
        }],
        # 'build': '16.0',
        'deviceID':
        DEVICE_ID,
        'features':
        FEATURES,
        # 'features': 496155769145856, # Sonos One
        # 'firmwareBuildDate': 'Nov  5 2019',
        # 'firmwareRevision': '53.3-71050',
        # 'hardwareRevision': '1.21.1.8-2',
        'keepAliveLowPower':
        True,
        'keepAliveSendStatsAsBody':
        True,
        'manufacturer':
        'Sonos',
        'model':
        'One',
        'name':
        'Camera da letto',
        'nameIsFactoryDefault':
        False,
        'pi':
        'ba5cb8df-7f14-4249-901a-5e748ce57a93',  # UUID generated casually..
        'protocolVersion':
        '1.1',
        'sdk':
        'AirPlay;2.0.2',
        'sourceVersion':
        '366.0',
        'statusFlags':
        4,
        # 'statusFlags': 0x404 # Sonos One
    }

    if DISABLE_VM:
        volume = 0
    else:
        volume = get_volume(AUDIO_DEVICE)
    second_stage_info = {
        "initialVolume": volume,
    }

    sonos_one_setup = {
        'eventPort': 0,  # AP2 receiver event server
        'timingPort': 0,
        'timingPeerInfo': {
            'Addresses': [IPV4, IPV6],
            'ID': IPV4
        }
    }

    sonos_one_setup_data = {
        'streams': [{
            'type': 96,
            'dataPort': 0,  # AP2 receiver data server 
            'controlPort': 0  # AP2 receiver control server
        }]
    }

    mdns_props = {
        "srcvers":
        SERVER_VERSION,
        "deviceid":
        DEVICE_ID,
        "features":
        "%s,%s" %
        (hex(FEATURES & 0xffffffff), hex(FEATURES >> 32 & 0xffffffff)),
        "flags":
        "0x4",
        # "name": "GINO", # random
        "model":
        "Airplay2-Receiver",  # random
        # "manufacturer": "Pino", # random
        # "serialNumber": "01234xX321", # random
        "protovers":
        "1.1",
        "acl":
        "0",
        "rsf":
        "0x0",
        "fv":
        "p20.78000.12",
        "pi":
        "5dccfd20-b166-49cc-a593-6abd5f724ddb",  # UUID generated casually
        "gid":
        "5dccfd20-b166-49cc-a593-6abd5f724ddb",  # UUID generated casually
        "gcgl":
        "0",
        # "vn": "65537",
        "pk":
        "de352b0df39042e201d31564049023af58a106c6d904b74a68aa65012852997f"
    }
Esempio n. 3
0
def setup_global_structs(args):
    global sonos_one_info
    global sonos_one_setup
    global sonos_one_setup_data
    global second_stage_info
    global mdns_props

    sonos_one_info = {
        # 'OSInfo': 'Linux 3.10.53',
        # 'PTPInfo': 'OpenAVNU ArtAndLogic-aPTP-changes a5d7f94-0.0.1',
        'audioLatencies': [{
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'default',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'media',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 100
        }, {
            'audioType': 'media',
            'inputLatencyMicros': 0,
            'outputLatencyMicros': 400000,
            'type': 102
        }],
        # 'build': '16.0',
        'deviceID':
        DEVICE_ID,
        'features':
        FEATURES,
        # 'features': 496155769145856, # Sonos One
        # 'firmwareBuildDate': 'Nov  5 2019',
        # 'firmwareRevision': '53.3-71050',
        # 'hardwareRevision': '1.21.1.8-2',
        'keepAliveLowPower':
        True,
        'keepAliveSendStatsAsBody':
        True,
        'manufacturer':
        'Sonos',
        'model':
        'One',
        'name':
        args.mdns,
        'nameIsFactoryDefault':
        False,
        'pi':
        'ba5cb8df-7f14-4249-901a-5e748ce57a93',  # UUID generated casually..
        'protocolVersion':
        '1.1',
        'sdk':
        'AirPlay;2.0.2',
        'sourceVersion':
        '366.0',
        'statusFlags':
        4,
        # 'statusFlags': 0x404 # Sonos One
    }

    if DISABLE_VM:
        volume = 0
    else:
        volume = get_volume()
    second_stage_info = {
        "initialVolume": volume,
    }

    sonos_one_setup = {
        'eventPort': 0  # AP2 receiver event server
    }
    if not DISABLE_PTP_MASTER:
        sonos_one_setup['timingPort'] = 0
        sonos_one_setup['timingPeerInfo'] = {
            'Addresses': [IPV4, IPV6],
            'ID': IPV4
        }

    sonos_one_setup_data = {
        'streams': [{
            'type': 96,
            'dataPort': 0,  # AP2 receiver data server
            'controlPort': 0  # AP2 receiver control server
        }]
    }

    mdns_props = {
        "srcvers":
        SERVER_VERSION,
        "deviceid":
        DEVICE_ID,  # typically MAC addr
        "features":
        "%s,%s" %
        (hex(FEATURES & 0xffffffff), hex(FEATURES >> 32 & 0xffffffff)),
        "flags":
        "0x4",
        # "name": "GINO", # random
        "model":
        "Airplay2-Receiver",  # random
        # "manufacturer": "Pino", # random
        # "serialNumber": "01234xX321", # random
        "protovers":
        "1.1",
        "acl":
        "0",  # Access ControL. 0,1,2 == anon,users,admin(?)
        # These are found under the <deviceid>@<name> mDNS record.
        # "am": "One",  # Model
        # "cn": "0,1",  # CompressioN. 0,1 == None aka PCM, ALAC
        # "da": "true",  # Digest Auth(?) support
        # "et": "0,1,3,4,5",  # Audio Encryption Types(?).
        # "md": "0,1,2",  # MetaData(?) 0,1,2 == Text, Gfx, Progress
        # "sf":  "0x804",  # Status Flags?
        # "tp": "UDP",  # TransPort for media? csv of transports?
        # "vs": "366",  # Source version?
        "rsf":
        "0x0",  # bitmask: required sender features(?)
        "fv":
        "p20.78000.12",  # Firmware version. p20 == AirPlay Src revision?
        "pi":
        PI,  # Pairing UUID (generated casually)
        "gid":
        "5dccfd20-b166-49cc-a593-6abd5f724ddb",  # Group UUID (generated casually)
        "gcgl":
        "0",  # Group Contains Group Leader.
        # "isGroupLeader": "0"  # See gcgl
        # "vn": "65537",  # (Airplay) version number (supported) 16.16, 65537 == 1.1
        "pk":
        LTPK.get_pub_string()  # Ed25519 PubKey
    }