Tizen 2.0 release
[profile/ivi/obexd.git] / client / transport.c
1 /*
2  *
3  *  OBEX Server
4  *
5  *  Copyright (C) 2012 Intel Corporation
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  */
23
24 #ifdef HAVE_CONFIG_H
25 #include <config.h>
26 #endif
27
28 #include <string.h>
29 #include <errno.h>
30 #include <glib.h>
31 #include <inttypes.h>
32
33 #include "transport.h"
34 #include "log.h"
35
36 static GSList *transports = NULL;
37
38 struct obc_transport *obc_transport_find(const char *name)
39 {
40         GSList *l;
41
42         for (l = transports; l; l = l->next) {
43                 struct obc_transport *transport = l->data;
44
45                 if (strcasecmp(name, transport->name) == 0)
46                         return transport;
47         }
48
49         return NULL;
50 }
51
52 int obc_transport_register(struct obc_transport *transport)
53 {
54         if (!transport) {
55                 error("Invalid transport");
56                 return -EINVAL;
57         }
58
59         if (obc_transport_find(transport->name)) {
60                 error("Permission denied: transport %s already registered",
61                                                         transport->name);
62                 return -EPERM;
63         }
64
65         DBG("transport %p name %s registered", transport, transport->name);
66
67         transports = g_slist_append(transports, transport);
68
69         return 0;
70 }
71
72 void obc_transport_unregister(struct obc_transport *transport)
73 {
74         if (!g_slist_find(transports, transport)) {
75                 error("Unable to unregister: No such transport %p", transport);
76                 return;
77         }
78
79         DBG("transport %p name %s unregistered", transport, transport->name);
80
81         transports = g_slist_remove(transports, transport);
82 }