Home | History | Annotate | Download | only in libloc_api_50001
      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 
     40 void* loc_api_handle = NULL;
     41 
     42 int 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 
    144 int 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