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