terom@175: #include "service_internal.h" terom@175: terom@175: const struct object_type service_type_type = { terom@175: .parent = NULL, terom@175: }; terom@175: terom@175: void service_init (service_t *service, const struct service_type *type, const struct service_info *info) terom@175: { terom@175: // init object terom@175: object_init(&service->base_obj, &type->base_type); terom@175: terom@175: // store user info terom@175: service->info = *info; terom@175: } terom@175: terom@175: void* service_check (service_t *service, const struct service_type *type) terom@175: { terom@175: return object_cast(&service->base_obj, &type->base_type); terom@175: } terom@175: terom@175: void service_error (service_t *service, const error_t *err) terom@175: { terom@175: // just call the user callback terom@175: service->info.cb_tbl->on_error(service, err, service->info.cb_arg); terom@175: } terom@185: terom@185: void service_destroy (service_t *service) terom@185: { terom@185: const struct service_type *type = object_type(&service->base_obj, &service_type_type); terom@185: terom@185: // invoke method terom@185: type->methods.deinit(service); terom@185: terom@185: free(service); terom@185: }