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) : m(ms), my_req_id(0)
30 session::command::command(const command &src)
35 session::command::~command()
39 session::command &session::command::operator =(const command &src)
43 my_req_id = src.my_req_id;
48 int session::command::run()
50 return MAPS_ERROR_NONE;
53 void session::command::destroy()
55 if (this != empty_ptr())
59 plugin::interface_s *session::command::interface() const
62 return plugin::get_empty_interface_ptr(); /* PROBLEM!!! Why have
63 no maps service!! Returning default empty interface */
65 plugin::plugin_s *p = __extract_plugin(m);
67 return plugin::get_empty_interface_ptr(); /* PROBLEM!!! Why have
68 no plugin!! Returning default empty interface */
73 maps_plugin_h session::command::handle() const
75 return (maps_plugin_h) plugin();
78 plugin::plugin_s *session::command::plugin() const
80 return __extract_plugin(m);
83 /*----------------------------------------------------------------------------*/
85 session::command_handler::command_handler(plugin::plugin_s *p, void *ud,
87 : plg(p), user_data(ud), user_req_id(urid), plg_req_id(-1)
91 session::command_handler::~command_handler()
95 void session::command_handler::destroy(void *p)
99 command_handler *c = (command_handler *) p;
103 /*----------------------------------------------------------------------------*/
105 session::pending_request::pending_request(plugin::plugin_s *p) : plg(p)
109 bool session::pending_request::add(const int user_req_id)
111 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
113 plugin::scope_mutex(&plg->pending_request_mutex);
115 MAPS_LOGD("session::pending_request::add: %d", user_req_id);
117 if (contains(user_req_id))
118 return false; /* Attempt to add another instance of the id */
119 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
124 void session::pending_request::update(int user_req_id,
125 command_handler *handler)
127 if (!plg || !plg->pending_request_maps || (user_req_id < 0) || !handler)
129 plugin::scope_mutex(&plg->pending_request_mutex);
131 MAPS_LOGD("session::pending_request::update: %d, %d", user_req_id,
132 handler->plg_req_id);
134 if (!contains(user_req_id)) { /* Attempt to update not existing id */
135 MAPS_LOGD("\t not updated session::pending_request: %d, %d",
136 user_req_id, handler->plg_req_id);
137 delete handler; /* This handler must be deleted */
141 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
145 void session::pending_request::remove(int user_req_id)
147 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
149 plugin::scope_mutex(&plg->pending_request_mutex);
151 MAPS_LOGD("session::pending_request::remove: %d", user_req_id);
153 if (!contains(user_req_id))
154 return; /* Attempt to remove not existing id */
155 g_hash_table_remove(plg->pending_request_maps, &user_req_id);
158 session::command_handler *session::pending_request::look_up(const int
161 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
163 plugin::scope_mutex(&plg->pending_request_mutex);
165 MAPS_LOGD("session::pending_request::look_up: %d", user_req_id);
167 if (!contains(user_req_id))
168 return NULL; /* Attempt to query not existing id */
169 return (command_handler*) g_hash_table_lookup(plg->
170 pending_request_maps, &user_req_id);
173 int session::pending_request::extract_plg_id(const int user_req_id)
175 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
177 plugin::scope_mutex(&plg->pending_request_mutex);
179 command_handler* ch = look_up(user_req_id);
182 const int plg_req_id = ch->plg_req_id;
187 bool session::pending_request::contains(const int user_req_id)
189 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
191 plugin::scope_mutex(&plg->pending_request_mutex);
193 return g_hash_table_contains(plg->pending_request_maps, &user_req_id);
196 int *session::pending_request::int_dup(const int n)
198 int *clone = g_new0(int, 1);