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)
29 , error(MAPS_ERROR_NONE)
33 session::command::command(const command &src)
38 session::command::~command()
42 session::command &session::command::operator =(const command &src)
46 my_req_id = src.my_req_id;
52 int session::command::run()
54 return MAPS_ERROR_NONE;
57 void session::command::destroy()
59 if (this != empty_ptr())
63 plugin::interface_s *session::command::interface() const
66 return plugin::get_empty_interface_ptr(); /* PROBLEM!!! Why have
67 no maps service!! Returning default empty interface */
69 plugin::plugin_s *p = __extract_plugin(m);
71 return plugin::get_empty_interface_ptr(); /* PROBLEM!!! Why have
72 no plugin!! Returning default empty interface */
77 maps_plugin_h session::command::handle() const
79 return (maps_plugin_h) plugin();
82 plugin::plugin_s *session::command::plugin() const
84 return __extract_plugin(m);
87 /*----------------------------------------------------------------------------*/
89 session::command_handler::command_handler(plugin::plugin_s *p, void *ud,
91 : plg(p), user_data(ud), user_req_id(urid), plg_req_id(-1)
95 session::command_handler::~command_handler()
99 void session::command_handler::destroy(void *p)
103 command_handler *c = (command_handler *) p;
107 /*----------------------------------------------------------------------------*/
109 session::pending_request::pending_request(plugin::plugin_s *p) : plg(p)
113 bool session::pending_request::add(const int user_req_id)
115 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
117 plugin::scope_mutex(&plg->pending_request_mutex);
119 MAPS_LOGD("session::pending_request::add: %d", user_req_id);
121 if (contains(user_req_id))
122 return false; /* Attempt to add another instance of the id */
123 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
128 void session::pending_request::update(int user_req_id,
129 command_handler *handler)
131 if (!plg || !plg->pending_request_maps || (user_req_id < 0) || !handler)
133 plugin::scope_mutex(&plg->pending_request_mutex);
135 MAPS_LOGD("session::pending_request::update: %d, %d", user_req_id,
136 handler->plg_req_id);
138 if (!contains(user_req_id)) { /* Attempt to update not existing id */
139 MAPS_LOGD("\t not updated session::pending_request: %d, %d",
140 user_req_id, handler->plg_req_id);
141 delete handler; /* This handler must be deleted */
145 g_hash_table_insert(plg->pending_request_maps, int_dup(user_req_id),
149 void session::pending_request::remove(int user_req_id)
151 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
153 plugin::scope_mutex(&plg->pending_request_mutex);
155 MAPS_LOGD("session::pending_request::remove: %d", user_req_id);
157 if (!contains(user_req_id))
158 return; /* Attempt to remove not existing id */
159 g_hash_table_remove(plg->pending_request_maps, &user_req_id);
162 session::command_handler *session::pending_request::look_up(const int
165 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
167 plugin::scope_mutex(&plg->pending_request_mutex);
169 MAPS_LOGD("session::pending_request::look_up: %d", user_req_id);
171 if (!contains(user_req_id))
172 return NULL; /* Attempt to query not existing id */
173 return (command_handler*) g_hash_table_lookup(plg->
174 pending_request_maps, &user_req_id);
177 int session::pending_request::extract_plg_id(const int user_req_id)
179 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
181 plugin::scope_mutex(&plg->pending_request_mutex);
183 command_handler* ch = look_up(user_req_id);
186 const int plg_req_id = ch->plg_req_id;
191 bool session::pending_request::contains(const int user_req_id)
193 if (!plg || !plg->pending_request_maps || (user_req_id < 0))
195 plugin::scope_mutex(&plg->pending_request_mutex);
197 return g_hash_table_contains(plg->pending_request_maps, &user_req_id);
200 int *session::pending_request::int_dup(const int n)
202 int *clone = g_new0(int, 1);