Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion homekit/request_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import py25519
import hkdf
import hashlib
import sys

from homekit.tlv import TLV
from homekit.srp import SrpServer
Expand Down Expand Up @@ -197,7 +198,8 @@ def _get_characteristics(self):
ev = params['ev'] == 1

if self.debug_get_characteristics:
self.log_message('query parameters: ids: %s, meta: %s, perms: %s, type: %s, ev: %s', ids, meta, perms, type, ev)
self.log_message('query parameters: ids: %s, meta: %s, perms: %s, type: %s, ev: %s', ids, meta, perms, type,
ev)

result = {
'characteristics': []
Expand Down Expand Up @@ -757,3 +759,19 @@ def do_PUT(self):
return
self.log_error('send error because of unmapped path: %s', self.path)
self.send_error(HttpStatusCodes.NOT_FOUND)

def log_message(self, format, *args):
if self.server.logger is None:
pass
elif self.server.logger == sys.stderr:
BaseHTTPRequestHandler.log_message(self, format, *args)
else:
self.server.logger.info("%s" % (format % args))

def log_error(self, format, *args):
if self.server.logger is None:
pass
elif self.server.logger == sys.stderr:
BaseHTTPRequestHandler.log_error(self, format, *args)
else:
self.server.logger.error("%s" % (format % args))
21 changes: 16 additions & 5 deletions homekit/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,29 @@
from socketserver import ThreadingMixIn
from zeroconf import Zeroconf, ServiceInfo
import socket
import sys
import logging

from homekit.serverdata import HomeKitServerData
from homekit.request_handler import HomeKitRequestHandler
from homekit.model import Accessories, Categories


class HomeKitServer(ThreadingMixIn, HTTPServer):
def __init__(self, data_file):
self.data = HomeKitServerData(data_file)
def __init__(self, config_file, logger=sys.stderr):
"""
Create a new server that acts like a homekit accessory.

:param config_file: the file that contains the configuration data. Must be a string representing an absolute
path to the file
:param logger: this can be None to disable logging, sys.stderr to use the default behaviour of the python
implementation or an instance of logging.Logger to use this.
"""
if logger is None or logger == sys.stderr or isinstance(logger, logging.Logger):
self.logger = logger
else:
raise Exception('Invalid logger given.')
self.data = HomeKitServerData(config_file)
self.data.increase_configuration_number()
self.sessions = {}
self.zeroconf = Zeroconf()
Expand All @@ -19,9 +33,6 @@ def __init__(self, data_file):

self.accessories = Accessories()

# accessory = homekit.model.Accessory(1, 'me')
# accessory.services.append(homekit.model.LightBulbService(2, 'light'))
# self.accessories.add_accessory(accessory)
HTTPServer.__init__(self, (self.data.ip, self.data.port), HomeKitRequestHandler)

def publish_device(self):
Expand Down