author | Tero Marttila <terom@fixme.fi> |
Thu, 21 May 2009 16:57:56 +0300 | |
changeset 213 | f0e52e026197 |
parent 185 | 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 |
|
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
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
|
4 |
.parent = NULL, |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
}; |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
|
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
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
|
8 |
{ |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
// init object |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
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
|
11 |
|
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
// store user info |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
service->info = *info; |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
} |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
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
|
17 |
{ |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
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
|
19 |
} |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
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
|
22 |
{ |
a816950a6548
implement a new 'service' interface that's similar to the transport interface
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
// 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
|
24 |
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
|
25 |
} |
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
|
26 |
|
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
|
27 |
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
|
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 |
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
|
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 |
// 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
|
32 |
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
|
33 |
|
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 |
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
|
35 |
} |