1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * 3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without 4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are 5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met: 6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Redistributions of source code must retain the above copyright 7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * notice, this list of conditions and the following disclaimer. 8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Redistributions in binary form must reproduce the above 9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * copyright notice, this list of conditions and the following 10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * disclaimer in the documentation and/or other materials provided 11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * with the distribution. 12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Neither the name of The Linux Foundation, nor the names of its 13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * contributors may be used to endorse or promote products derived 14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * from this software without specific prior written permission. 15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * 16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * 28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */ 29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdio.h> 31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdlib.h> 32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <linux/stat.h> 33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <fcntl.h> 34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <linux/types.h> 35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <unistd.h> 36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <errno.h> 37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <grp.h> 38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/stat.h> 39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "log_util.h" 41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "platform_lib_includes.h" 42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "loc_eng_dmn_conn_glue_msg.h" 43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "loc_eng_dmn_conn_handler.h" 44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "loc_eng_dmn_conn.h" 45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "loc_eng_msg.h" 46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_server_msgqid; 48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_resp_msgqid; 49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int quipc_msgqid; 50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int msapm_msgqid; 51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int msapu_msgqid; 52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const char * global_loc_api_q_path = GPSONE_LOC_API_Q_PATH; 54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const char * global_loc_api_resp_q_path = GPSONE_LOC_API_RESP_Q_PATH; 55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const char * global_quipc_ctrl_q_path = QUIPC_CTRL_Q_PATH; 56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const char * global_msapm_ctrl_q_path = MSAPM_CTRL_Q_PATH; 57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const char * global_msapu_ctrl_q_path = MSAPU_CTRL_Q_PATH; 58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_server_proc_init(void *context) 60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_server_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_q_path, O_RDWR); 62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti //change mode/group for the global_loc_api_q_path pipe 63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int result = chmod (global_loc_api_q_path, 0660); 64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (result != 0) 65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("failed to change mode for %s, error = %s\n", global_loc_api_q_path, strerror(errno)); 67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct group * gps_group = getgrnam("gps"); 70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (gps_group != NULL) 71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = chown (global_loc_api_q_path, -1, gps_group->gr_gid); 73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (result != 0) 74e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 75e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("chown for pipe failed, pipe %s, gid = %d, result = %d, error = %s\n", 76e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti global_loc_api_q_path, gps_group->gr_gid, result, strerror(errno)); 77e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 78e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 79e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti else 80e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 81e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("getgrnam for gps failed, error code = %d\n", errno); 82e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 83e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 84e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_resp_msgqid = loc_eng_dmn_conn_glue_msgget(global_loc_api_resp_q_path, O_RDWR); 85e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 86e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti //change mode/group for the global_loc_api_resp_q_path pipe 87e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = chmod (global_loc_api_resp_q_path, 0660); 88e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (result != 0) 89e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 90e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("failed to change mode for %s, error = %s\n", global_loc_api_resp_q_path, strerror(errno)); 91e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 92e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 93e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (gps_group != NULL) 94e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 95e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = chown (global_loc_api_resp_q_path, -1, gps_group->gr_gid); 96e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (result != 0) 97e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 98e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("chown for pipe failed, pipe %s, gid = %d, result = %d, error = %s\n", 99e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti global_loc_api_resp_q_path, 100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti gps_group->gr_gid, result, strerror(errno)); 101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti quipc_msgqid = loc_eng_dmn_conn_glue_msgget(global_quipc_ctrl_q_path, O_RDWR); 105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti msapm_msgqid = loc_eng_dmn_conn_glue_msgget(global_msapm_ctrl_q_path , O_RDWR); 106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti msapu_msgqid = loc_eng_dmn_conn_glue_msgget(global_msapu_ctrl_q_path , O_RDWR); 107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] loc_api_server_msgqid = %d\n", __func__, __LINE__, loc_api_server_msgqid); 109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_server_proc_pre(void *context) 113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_server_proc(void *context) 118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int length, sz; 120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int result = 0; 121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti static int cnt = 0; 122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct ctrl_msgbuf * p_cmsgbuf; 123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct ctrl_msgbuf cmsg_resp; 124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti sz = sizeof(struct ctrl_msgbuf) + 256; 126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti p_cmsgbuf = (struct ctrl_msgbuf *) malloc(sz); 127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (!p_cmsgbuf) { 129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("%s:%d] Out of memory\n", __func__, __LINE__); 130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti cnt ++; 134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] %d listening on %s...\n", __func__, __LINE__, cnt, (char *) context); 135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti length = loc_eng_dmn_conn_glue_msgrcv(loc_api_server_msgqid, p_cmsgbuf, sz); 136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (length <= 0) { 137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti free(p_cmsgbuf); 138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("%s:%d] fail receiving msg from gpsone_daemon, retry later\n", __func__, __LINE__); 139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti usleep(1000); 140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] received ctrl_type = %d\n", __func__, __LINE__, p_cmsgbuf->ctrl_type); 144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti switch(p_cmsgbuf->ctrl_type) { 145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case GPSONE_LOC_API_IF_REQUEST: 146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = loc_eng_dmn_conn_loc_api_server_if_request_handler(p_cmsgbuf, length); 147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case GPSONE_LOC_API_IF_RELEASE: 150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = loc_eng_dmn_conn_loc_api_server_if_release_handler(p_cmsgbuf, length); 151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case GPSONE_UNBLOCK: 154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] GPSONE_UNBLOCK\n", __func__, __LINE__); 155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti default: 158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("%s:%d] unsupported ctrl_type = %d\n", 159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti __func__, __LINE__, p_cmsgbuf->ctrl_type); 160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti free(p_cmsgbuf); 164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_api_server_proc_post(void *context) 168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d]\n", __func__, __LINE__); 170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgremove( global_loc_api_q_path, loc_api_server_msgqid); 171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgremove( global_loc_api_resp_q_path, loc_api_resp_msgqid); 172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgremove( global_quipc_ctrl_q_path, quipc_msgqid); 173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgremove( global_msapm_ctrl_q_path, msapm_msgqid); 174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgremove( global_msapu_ctrl_q_path, msapu_msgqid); 175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int loc_eng_dmn_conn_unblock_proc(void) 179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct ctrl_msgbuf cmsgbuf; 181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti cmsgbuf.ctrl_type = GPSONE_UNBLOCK; 182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d]\n", __func__, __LINE__); 183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_glue_msgsnd(loc_api_server_msgqid, & cmsgbuf, sizeof(cmsgbuf)); 184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic struct loc_eng_dmn_conn_thelper thelper; 188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_eng_dmn_conn_loc_api_server_launch(thelper_create_thread create_thread_cb, 190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti const char * loc_api_q_path, const char * resp_q_path, void *agps_handle) 191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int result; 193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_handle = agps_handle; 195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_api_q_path) global_loc_api_q_path = loc_api_q_path; 197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (resp_q_path) global_loc_api_resp_q_path = resp_q_path; 198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti result = loc_eng_dmn_conn_launch_thelper( &thelper, 200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_server_proc_init, 201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_server_proc_pre, 202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_server_proc, 203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_server_proc_post, 204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti create_thread_cb, 205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (char *) global_loc_api_q_path); 206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (result != 0) { 207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("%s:%d]\n", __func__, __LINE__); 208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_eng_dmn_conn_loc_api_server_unblock(void) 214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_unblock_thelper(&thelper); 216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_unblock_proc(); 217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_eng_dmn_conn_loc_api_server_join(void) 221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_eng_dmn_conn_join_thelper(&thelper); 223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_eng_dmn_conn_loc_api_server_data_conn(int sender_id, int status) { 227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct ctrl_msgbuf cmsgbuf; 228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] quipc_msgqid = %d\n", __func__, __LINE__, quipc_msgqid); 229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti cmsgbuf.ctrl_type = GPSONE_LOC_API_RESPONSE; 230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti cmsgbuf.cmsg.cmsg_response.result = status; 231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti switch (sender_id) { 232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC: { 233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC", __func__, __LINE__); 234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_eng_dmn_conn_glue_msgsnd(quipc_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { 235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); 236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM: { 241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM", __func__, __LINE__); 242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_eng_dmn_conn_glue_msgsnd(msapm_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { 243e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); 244e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 245e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 246e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 247e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 248e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU: { 249e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU", __func__, __LINE__); 250e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_eng_dmn_conn_glue_msgsnd(msapu_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { 251e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); 252e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 253e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 254e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 255e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 256e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON: { 257e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] sender_id = LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON", __func__, __LINE__); 258e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_eng_dmn_conn_glue_msgsnd(loc_api_resp_msgqid, & cmsgbuf, sizeof(struct ctrl_msgbuf)) < 0) { 259e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] error! conn_glue_msgsnd failed\n", __func__, __LINE__); 260e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return -1; 261e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 262e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 263e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 264e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti default: { 265e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("%s:%d] invalid sender ID!", __func__, __LINE__); 266e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 267e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 268e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 269e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 270e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 271