/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ #ifndef GUAC_KUBERNETES_URL_H #define GUAC_KUBERNETES_URL_H /** * The maximum number of characters allowed in the full path for any Kubernetes * endpoint. */ #define GUAC_KUBERNETES_MAX_ENDPOINT_LENGTH 1024 /** * Escapes the given string such that it can be included safely within a URL. * This function duplicates the behavior of JavaScript's encodeURIComponent(), * escaping all but the following characters: A-Z a-z 0-9 - _ . ! ~ * ' ( ) * * @param output * The buffer which should receive the escaped string. This buffer may be * touched even if escaping is unsuccessful. * * @param length * The number of bytes available in the given output buffer. * * @param str * The string to escape. * * @return * Zero if the string was successfully escaped and written into the * provided output buffer without being truncated, including null * terminator, non-zero otherwise. */ int guac_kubernetes_escape_url_component(char* output, int length, const char* str); /** * Generates the full path to the Kubernetes API endpoint which handles * attaching to running containers within specific pods. Values within the path * will be URL-escaped as necessary. * * @param buffer * The buffer which should receive the endpoint path. This buffer may be * touched even if the endpoint path could not be generated. * * @param length * The number of bytes available in the given buffer. * * @param kubernetes_namespace * The name of the Kubernetes namespace of the pod containing the container * being attached to. * * @param kubernetes_pod * The name of the Kubernetes pod containing with the container being * attached to. * * @param kubernetes_container * The name of the container to attach to, or NULL to arbitrarily attach * to the first container in the pod. * * @return * Zero if the endpoint path was successfully written to the provided * buffer, non-zero if insufficient space exists within the buffer. */ int guac_kubernetes_endpoint_attach(char* buffer, int length, const char* kubernetes_namespace, const char* kubernetes_pod, const char* kubernetes_container); #endif