src/lib/service.c
author Tero Marttila <terom@fixme.fi>
Thu, 28 May 2009 01:17:36 +0300
branchnew-lib-errors
changeset 219 cefec18b8268
parent 185 src/service.c@259b5841a0e6
permissions -rw-r--r--
some of the lib/transport stuff compiles
175
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "service_internal.h"
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
219
cefec18b8268 some of the lib/transport stuff compiles
Tero Marttila <terom@fixme.fi>
parents: 185
diff changeset
     3
#include <stdlib.h>
cefec18b8268 some of the lib/transport stuff compiles
Tero Marttila <terom@fixme.fi>
parents: 185
diff changeset
     4
175
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
const struct object_type service_type_type = {
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
    .parent = NULL,
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
};
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
void service_init (service_t *service, const struct service_type *type, const struct service_info *info)
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
{
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    // init object
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    object_init(&service->base_obj, &type->base_type);
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    // store user info
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    service->info = *info;
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
}
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
void* service_check (service_t *service, const struct service_type *type)
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
{
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    return object_cast(&service->base_obj, &type->base_type);
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
}
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
void service_error (service_t *service, const error_t *err)
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
{
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    // just call the user callback
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    service->info.cb_tbl->on_error(service, err, service->info.cb_arg);
a816950a6548 implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
}
185
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    28
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    29
void service_destroy (service_t *service)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    30
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    31
    const struct service_type *type = object_type(&service->base_obj, &service_type_type);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    32
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    33
    // invoke method
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    34
    type->methods.deinit(service);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    35
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    36
    free(service); 
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents: 175
diff changeset
    37
}