1 /* Copyright (c) 2010-2014 Samsung Electronics Co., Ltd. All rights reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "empty_module.h"
19 #include "maps_util.h"
21 extern plugin::plugin_s *__extract_plugin(maps_service_h maps);
23 volatile int session::command::command_request_id = 1;
24 session::command session::command::empty_instance;
26 session::command::command(maps_service_h ms)
27 : m(ms), my_req_id(0), error(MAPS_ERROR_NONE), is_merged(false)
31 session::command::command(const command &src)
36 session::command::~command()
40 session::command &session::command::operator =(const command &src)
44 my_req_id = src.my_req_id;
46 is_merged = src.is_merged;
51 int session::command::run()
53 return MAPS_ERROR_NONE;
56 void session::command::destroy()
58 if (this != empty_ptr())
62 plugin::interface_s *session::command::interface() const
65 return plugin::get_empty_interface_ptr();
67 plugin::plugin_s *p = __extract_plugin(m);
69 return plugin::get_empty_interface_ptr();
74 maps_plugin_h session::command::handle() const
76 return (maps_plugin_h) plugin();
79 plugin::plugin_s *session::command::plugin() const
81 return __extract_plugin(m);
84 session::command_type_e session::command::get_type() const
86 /* Default command type */
87 return MAPS_DATA_COMMAND;
90 int session::command::get_priority() const
92 /* Default command priority */
96 void session::command::merge(const command *c)
101 bool session::command::merged() const
107 void session::command::set_merged()
111 /*----------------------------------------------------------------------------*/
113 session::command_handler::command_handler(plugin::plugin_s *p, void *ud,
115 : plg(p), user_data(ud), user_req_id(urid), plg_req_id(-1)
119 session::command_handler::~command_handler()
123 void session::command_handler::destroy(void *p)
127 command_handler *c = (command_handler *) p;
131 /*----------------------------------------------------------------------------*/
133 session::pending_request::pending_request(plugin::plugin_s *p) : plg(p)
137 bool session::pending_request::add(const int user_req_id)
139 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
141 plugin::scope_mutex(&plg->pending_request_mutex);
143 MAPS_LOGD("session::pending_request::add: %d", user_req_id);
145 if (contains(user_req_id))
146 return false; /* Attempt to add another instance of the id */
147 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
152 void session::pending_request::update(int user_req_id,
153 command_handler *handler)
155 if (!plg || !plg->pending_request_maps || (user_req_id < 0) || !handler)
157 plugin::scope_mutex(&plg->pending_request_mutex);
159 MAPS_LOGD("session::pending_request::update: %d, %d", user_req_id,
160 handler->plg_req_id);
162 if (!contains(user_req_id)) { /* Attempt to update not existing id */
163 MAPS_LOGD("\t not updated session::pending_request: %d, %d",
164 user_req_id, handler->plg_req_id);
165 delete handler; /* This handler must be deleted */
169 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
173 void session::pending_request::remove(int user_req_id)
175 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
177 plugin::scope_mutex(&plg->pending_request_mutex);
179 MAPS_LOGD("session::pending_request::remove: %d", user_req_id);
181 if (!contains(user_req_id))
182 return; /* Attempt to remove not existing id */
183 g_hash_table_remove(plg->pending_request_maps, &user_req_id);
186 session::command_handler *session::pending_request::look_up(const int
189 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
191 plugin::scope_mutex(&plg->pending_request_mutex);
193 MAPS_LOGD("session::pending_request::look_up: %d", user_req_id);
195 if (!contains(user_req_id))
196 return NULL; /* Attempt to query not existing id */
197 return (command_handler*) g_hash_table_lookup(plg->
198 pending_request_maps, &user_req_id);
201 int session::pending_request::extract_plg_id(const int user_req_id)
203 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
205 plugin::scope_mutex(&plg->pending_request_mutex);
207 command_handler* ch = look_up(user_req_id);
210 const int plg_req_id = ch->plg_req_id;
215 bool session::pending_request::contains(const int user_req_id)
217 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
219 plugin::scope_mutex(&plg->pending_request_mutex);
221 return g_hash_table_contains(plg->pending_request_maps, &user_req_id);
224 int *session::pending_request::int_dup(const int n)
226 int *clone = g_new0(int, 1);