author | Tero Marttila <terom@fixme.fi> |
Thu, 28 May 2009 01:17:36 +0300 | |
branch | new-lib-errors |
changeset 219 | cefec18b8268 |
parent 185 | src/service.c@259b5841a0e6 |
permissions | -rw-r--r-- |
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 |
} |