1/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation, nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29#include <stdio.h> 30#include <stdlib.h> 31#include <string.h> 32#include <unistd.h> 33 34#include "log_util.h" 35#include "platform_lib_includes.h" 36#include "loc_eng_msg.h" 37#include "loc_eng_dmn_conn.h" 38#include "loc_eng_dmn_conn_handler.h" 39 40void* loc_api_handle = NULL; 41 42int loc_eng_dmn_conn_loc_api_server_if_request_handler(struct ctrl_msgbuf *pmsg, int len) 43{ 44 LOC_LOGD("%s:%d]\n", __func__, __LINE__); 45#ifndef DEBUG_DMN_LOC_API 46 if (NULL == loc_api_handle) { 47 LOC_LOGE("%s:%d] NO agps data handle\n", __func__, __LINE__); 48 return 1; 49 } 50 51 if (NULL != loc_api_handle) { 52 AGpsExtType type; 53 switch (pmsg->cmsg.cmsg_if_request.type) { 54 case IF_REQUEST_TYPE_SUPL: 55 { 56 LOC_LOGD("IF_REQUEST_TYPE_SUPL"); 57 type = AGPS_TYPE_SUPL; 58 break; 59 } 60 case IF_REQUEST_TYPE_WIFI: 61 { 62 LOC_LOGD("IF_REQUEST_TYPE_WIFI"); 63 type = AGPS_TYPE_WIFI; 64 break; 65 } 66 case IF_REQUEST_TYPE_ANY: 67 { 68 LOC_LOGD("IF_REQUEST_TYPE_ANY"); 69 type = AGPS_TYPE_ANY; 70 break; 71 } 72 default: 73 { 74 LOC_LOGD("invalid IF_REQUEST_TYPE!"); 75 return -1; 76 } 77 } 78 switch (pmsg->cmsg.cmsg_if_request.sender_id) { 79 case IF_REQUEST_SENDER_ID_QUIPC: 80 { 81 LOC_LOGD("IF_REQUEST_SENDER_ID_QUIPC"); 82 LocEngReqRelWifi* msg = 83 new LocEngReqRelWifi(loc_api_handle, 84 type, 85 LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC, 86 (char*)pmsg->cmsg.cmsg_if_request.ssid, 87 (char*)pmsg->cmsg.cmsg_if_request.password, 88 true); 89 msg->send(); 90 break; 91 } 92 case IF_REQUEST_SENDER_ID_MSAPM: 93 { 94 LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPM"); 95 LocEngReqRelWifi* msg = 96 new LocEngReqRelWifi(loc_api_handle, 97 type, 98 LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, 99 (char*)pmsg->cmsg.cmsg_if_request.ssid, 100 (char*)pmsg->cmsg.cmsg_if_request.password, 101 true); 102 msg->send(); 103 break; 104 } 105 case IF_REQUEST_SENDER_ID_MSAPU: 106 { 107 LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPU"); 108 LocEngReqRelWifi* msg = 109 new LocEngReqRelWifi(loc_api_handle, 110 type, 111 LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, 112 (char*)pmsg->cmsg.cmsg_if_request.ssid, 113 (char*)pmsg->cmsg.cmsg_if_request.password, 114 true); 115 msg->send(); 116 break; 117 } 118 case IF_REQUEST_SENDER_ID_GPSONE_DAEMON: 119 { 120 LOC_LOGD("IF_REQUEST_SENDER_ID_GPSONE_DAEMON"); 121 LocEngReqRelBIT* msg = 122 new LocEngReqRelBIT(loc_api_handle, 123 type, 124 pmsg->cmsg.cmsg_if_request.ipv4_addr, 125 (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr, 126 true); 127 msg->send(); 128 break; 129 } 130 default: 131 { 132 LOC_LOGD("invalid IF_REQUEST_SENDER_ID!"); 133 return -1; 134 } 135 } 136 } 137 138#else 139 loc_eng_dmn_conn_loc_api_server_data_conn(LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_REQUEST_SUCCESS); 140#endif 141 return 0; 142} 143 144int loc_eng_dmn_conn_loc_api_server_if_release_handler(struct ctrl_msgbuf *pmsg, int len) 145{ 146 LOC_LOGD("%s:%d]\n", __func__, __LINE__); 147#ifndef DEBUG_DMN_LOC_API 148 AGpsExtType type; 149 switch (pmsg->cmsg.cmsg_if_request.type) { 150 case IF_REQUEST_TYPE_SUPL: 151 { 152 LOC_LOGD("IF_REQUEST_TYPE_SUPL"); 153 type = AGPS_TYPE_SUPL; 154 break; 155 } 156 case IF_REQUEST_TYPE_WIFI: 157 { 158 LOC_LOGD("IF_REQUEST_TYPE_WIFI"); 159 type = AGPS_TYPE_WIFI; 160 break; 161 } 162 case IF_REQUEST_TYPE_ANY: 163 { 164 LOC_LOGD("IF_REQUEST_TYPE_ANY"); 165 type = AGPS_TYPE_ANY; 166 break; 167 } 168 default: 169 { 170 LOC_LOGD("invalid IF_REQUEST_TYPE!"); 171 return -1; 172 } 173 } 174 switch (pmsg->cmsg.cmsg_if_request.sender_id) { 175 case IF_REQUEST_SENDER_ID_QUIPC: 176 { 177 LOC_LOGD("IF_REQUEST_SENDER_ID_QUIPC"); 178 LocEngReqRelWifi* msg = 179 new LocEngReqRelWifi(loc_api_handle, 180 type, 181 LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC, 182 (char*)pmsg->cmsg.cmsg_if_request.ssid, 183 (char*)pmsg->cmsg.cmsg_if_request.password, 184 false); 185 msg->send(); 186 break; 187 } 188 case IF_REQUEST_SENDER_ID_MSAPM: 189 { 190 LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPM"); 191 LocEngReqRelWifi* msg = 192 new LocEngReqRelWifi(loc_api_handle, 193 type, 194 LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM, 195 (char*)pmsg->cmsg.cmsg_if_request.ssid, 196 (char*)pmsg->cmsg.cmsg_if_request.password, 197 false); 198 msg->send(); 199 break; 200 } 201 case IF_REQUEST_SENDER_ID_MSAPU: 202 { 203 LOC_LOGD("IF_REQUEST_SENDER_ID_MSAPU"); 204 LocEngReqRelWifi* msg = 205 new LocEngReqRelWifi(loc_api_handle, 206 type, 207 LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU, 208 (char*)pmsg->cmsg.cmsg_if_request.ssid, 209 (char*)pmsg->cmsg.cmsg_if_request.password, 210 false); 211 msg->send(); 212 break; 213 } 214 case IF_REQUEST_SENDER_ID_GPSONE_DAEMON: 215 { 216 LOC_LOGD("IF_REQUEST_SENDER_ID_GPSONE_DAEMON"); 217 LocEngReqRelBIT* msg = 218 new LocEngReqRelBIT(loc_api_handle, 219 type, 220 pmsg->cmsg.cmsg_if_request.ipv4_addr, 221 (char*)pmsg->cmsg.cmsg_if_request.ipv6_addr, 222 false); 223 msg->send(); 224 break; 225 } 226 default: 227 { 228 LOC_LOGD("invalid IF_REQUEST_SENDER_ID!"); 229 return -1; 230 } 231 } 232#else 233 loc_eng_dmn_conn_loc_api_server_data_conn(LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON, GPSONE_LOC_API_IF_RELEASE_SUCCESS); 234#endif 235 return 0; 236} 237 238