Return error code
[platform/core/connectivity/smartcard-service.git] / server / ClientInstance.cpp
1 /*
2  * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /* standard library header */
18 #include <pthread.h>
19
20 /* SLP library header */
21
22 /* local header */
23 #include "Debug.h"
24 #include "ClientInstance.h"
25 #include "ServerResource.h"
26 #include "SignatureHelper.h"
27
28 namespace smartcard_service_api
29 {
30 #if 1
31         gboolean ClientInstance::_getCertificationHashes(gpointer user_data)
32         {
33                 gboolean result = false;
34                 ClientInstance *instance = (ClientInstance *)user_data;
35
36                 SignatureHelper::getCertificationHashes(instance->getPID(), instance->certHashes);
37
38                 return result;
39         }
40 #endif
41
42         void ClientInstance::setPID(int pid)
43         {
44                 this->pid = pid;
45
46 #if 0
47                 if (pid > 0)
48                 {
49                         certHash = SignatureHelper::getCertificationHash(pid);
50                 }
51 #endif
52         }
53
54         ServiceInstance *ClientInstance::createService(unsigned int context)
55         {
56                 ServiceInstance *result = NULL;
57
58                 if ((result = getService(context)) == NULL)
59                 {
60                         result = new ServiceInstance(this, context);
61                         if (result != NULL)
62                         {
63                                 mapServices.insert(make_pair(context, result));
64                         }
65                         else
66                         {
67                                 SCARD_DEBUG_ERR("alloc failed");
68                         }
69                 }
70                 else
71                 {
72                         SCARD_DEBUG_ERR("service already exist [%d]", context);
73                 }
74
75                 return result;
76         }
77
78         ServiceInstance *ClientInstance::getService(unsigned int context)
79         {
80                 ServiceInstance *result = NULL;
81                 map<unsigned int, ServiceInstance *>::iterator item;
82
83                 if ((item = mapServices.find(context)) != mapServices.end())
84                 {
85                         result = item->second;
86                 }
87
88                 return result;
89         }
90
91         void ClientInstance::removeService(unsigned int context)
92         {
93                 map<unsigned int, ServiceInstance *>::iterator item;
94
95                 if ((item = mapServices.find(context)) != mapServices.end())
96                 {
97                         delete item->second;
98                         mapServices.erase(item);
99                 }
100         }
101
102         void ClientInstance::removeServices()
103         {
104                 map<unsigned int, ServiceInstance *>::iterator item;
105
106                 for (item = mapServices.begin(); item != mapServices.end(); item++)
107                 {
108                         delete item->second;
109                 }
110
111                 mapServices.clear();
112         }
113
114         bool ClientInstance::sendMessageToAllServices(int socket, Message &msg)
115         {
116                 bool result = true;
117                 map<unsigned int, ServiceInstance *>::iterator item;
118
119                 for (item = mapServices.begin(); item != mapServices.end(); item++)
120                 {
121                         if (ServerIPC::getInstance()->sendMessage(socket, &msg) == false)
122                                 result = false;
123                 }
124
125                 return result;
126         }
127
128         void ClientInstance::generateCertificationHashes()
129         {
130 #if 1
131                 g_idle_add(_getCertificationHashes, (gpointer)this);
132 #else
133                 SignatureHelper::getCertificationHashes(getPID(), certHashes);
134 #endif
135         }
136 } /* namespace smartcard_service_api */