Add kml location handler to webRtc library

Test: m
Change-Id: I946e6fda92f59c92f4c17b0b21f888d4d2c9a8ea
diff --git a/host/frontend/webrtc/Android.bp b/host/frontend/webrtc/Android.bp
index 89a5cbb..f85a496 100644
--- a/host/frontend/webrtc/Android.bp
+++ b/host/frontend/webrtc/Android.bp
@@ -87,6 +87,7 @@
         "bluetooth_handler.cpp",
         "location_handler.cpp",
         "gpx_locations_handler.cpp",
+        "kml_locations_handler.cpp",
         "client_server.cpp",
         "connection_observer.cpp",
         "cvd_video_frame_buffer.cpp",
diff --git a/host/frontend/webrtc/kml_locations_handler.cpp b/host/frontend/webrtc/kml_locations_handler.cpp
new file mode 100644
index 0000000..a181b84
--- /dev/null
+++ b/host/frontend/webrtc/kml_locations_handler.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "host/frontend/webrtc/kml_locations_handler.h"
+#include <android-base/logging.h>
+#include <unistd.h>
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/location/GnssClient.h"
+#include "host/libs/location/KmlParser.h"
+#include "string.h"
+
+#include <chrono>
+#include <iostream>
+#include <sstream>
+#include <thread>
+#include <vector>
+
+namespace cuttlefish {
+namespace webrtc_streaming {
+
+KmlLocationsHandler::KmlLocationsHandler(
+    std::function<void(const uint8_t *, size_t)> send_to_client) {}
+
+KmlLocationsHandler::~KmlLocationsHandler() {}
+
+void KmlLocationsHandler::HandleMessage(const uint8_t *msg, size_t len) {
+  LOG(DEBUG) << "ENTER KmlLocationsHandler handleMessage , size: " << len;
+  std::string error;
+  GpsFixArray coordinates;
+  if (!KmlParser::parseString((const char *)&msg[0], len, &coordinates,
+                              &error)) {
+    LOG(ERROR) << " Parsing Error: " << error << std::endl;
+    return;
+  }
+
+  LOG(DEBUG) << "Number of parsed points: " << coordinates.size() << std::endl;
+  auto config = CuttlefishConfig::Get();
+  if (!config) {
+    LOG(ERROR) << "Failed to obtain config object";
+    return;
+  }
+  auto instance = config->ForDefaultInstance();
+  auto server_port = instance.gnss_grpc_proxy_server_port();
+  std::string socket_name =
+      std::string("localhost:") + std::to_string(server_port);
+  LOG(DEBUG) << "Server port: " << server_port << " socket: " << socket_name
+             << std::endl;
+
+
+  GnssClient gpsclient(
+      grpc::CreateChannel(socket_name, grpc::InsecureChannelCredentials()));
+
+
+  auto reply = gpsclient.SendGpsLocations(1000,coordinates);
+}
+
+}  // namespace webrtc_streaming
+}  // namespace cuttlefish
diff --git a/host/frontend/webrtc/kml_locations_handler.h b/host/frontend/webrtc/kml_locations_handler.h
new file mode 100644
index 0000000..d8b2ffc
--- /dev/null
+++ b/host/frontend/webrtc/kml_locations_handler.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "common/libs/fs/shared_select.h"
+
+namespace cuttlefish {
+namespace webrtc_streaming {
+
+struct KmlLocationsHandler {
+  explicit KmlLocationsHandler(
+      std::function<void(const uint8_t *, size_t)> send_to_client);
+
+  ~KmlLocationsHandler();
+
+  void HandleMessage(const uint8_t *msg, size_t len);
+};
+}  // namespace webrtc_streaming
+}  // namespace cuttlefish